本篇內容主要講解“怎么查看jar包下java類”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么查看jar包下java類”吧!
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設計、成都網(wǎng)站制作、思南網(wǎng)絡推廣、微信小程序開發(fā)、思南網(wǎng)絡營銷、思南企業(yè)策劃、思南品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供思南建站搭建服務,24小時服務熱線:028-86922220,官方網(wǎng)址:muchs.cn
linux示例:添加 -classpath xxx/xxx.jar:xxx/xxx.jar 如果是windows用;分割,如果是mac和linux用:分割
javac -d . xxx.java 點代表當前目錄如果沒報名可以不加-d . 示例 javac -d . Test.java
java com.dxz.chama.javaagent.asm.Test 如果添加class資源運行 java -classpath xxx/xxx.jar:xxx/xxx.jar com.dxz.chama.javaagent.asm.Test
package com.dxz.chama.javaagent.asm; import java.net.URL; /** * description: 查找某個類在那個jar包下 * * @author: he QQ: 905845006 * @email: 905845006@qq.com * @date: 2020/8/15 5:39 PM */ public class Test { public static void main(String args[]) { Class targetclass = String.class; String className = targetclass.getName(); className= "sun.net.www.protocol.http.HttpURLConnection"; className = className.replace('.', '/'); String resource = "/" + className + ".class"; URL url = targetclass.getResource(resource); System.out.println(url.getFile()); // 輸出結果: // file:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/jre/lib/rt.jar!/sun/net/www/protocol/http/HttpURLConnection.class } }
package com.dxz.chama.javaagent.asm; /** * description: * * @author: he QQ: 905845006 * @email: 905845006@qq.com * @date: 2020/8/15 3:11 PM */ import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class jarTest { public static void getJarName(String jarFile) throws Exception { getJarName(jarFile,null); } public static void getJarName(String jarFile, String clazz) throws Exception { try { //通過將給定路徑名字符串轉換為抽象路徑名來創(chuàng)建一個新File實例 File f = new File(jarFile); URL url1 = f.toURI().toURL(); URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url1}, Thread.currentThread().getContextClassLoader()); //通過jarFile和JarEntry得到所有的類 JarFile jar = new JarFile(jarFile); //返回zip文件條目的枚舉 Enumeration<JarEntry> enumFiles = jar.entries(); JarEntry entry; System.out.println(enumFiles); //測試此枚舉是否包含更多的元素 while (enumFiles.hasMoreElements()) { entry = (JarEntry) enumFiles.nextElement(); if (entry.getName().indexOf("META-INF") < 0) { String classFullName = entry.getName(); if (!classFullName.endsWith(".class")) { classFullName = classFullName.substring(0, classFullName.length() - 1); } else { //去掉后綴.class String className = classFullName.substring(0, classFullName.length() - 6).replace("/", "."); if (className.equals("module-info")) { System.out.println("is jdk9 continue"); continue; } //如果傳入指定類 只查看指定類 if (clazz != null && !className.equals(clazz)) { continue; } System.out.println("className:"+className); Class<?> myclass = myClassLoader.loadClass(className); //打印類名 System.out.println("*****************************"); System.out.println("全類名:" + className); //得到類中包含的屬性 Method[] methods = myclass.getMethods(); for (Method method : methods) { String methodName = method.getName(); System.out.println("方法名稱:" + methodName); Class<?>[] parameterTypes = method.getParameterTypes(); for (Class<?> clas : parameterTypes) { // String parameterName = clas.getName(); String parameterName = clas.getSimpleName(); System.out.println("參數(shù)類型:" + parameterName); } System.out.println("=========================="); } } } } } catch (IOException e) { e.printStackTrace(); } } /** * 這些默認方法不打印 */ private static String DEFAULT_METHOD = "waitequalsnotifynotifyAlltoStringhashCodegetClass"; //必須傳1個參數(shù),指定的jar包,如果傳2個參數(shù),第一個為jar包,第二個為需要找的類 public static void main(String[] args) throws Exception { //jar包所在路徑 /*getJarName("F:\\user.jar"); getJarName("F:\\role1.jar"); getJarName("F:\\role2.jar"); */ //getJarName("F:\\UserInfo.jar"); String jarz = null; String clazz = null; if(args.length>1){ jarz = args[0]; clazz = args[1]; }else{ jarz = args[0]; } if (jarz != null) { getJarName(jarz); } //org.apache.tools.ant.util.ResourceUtils$ResourceSelectorProvider if (jarz != null && clazz != null) { System.out.println("示例類格式:org.apache.tools.ant.util.ResourceUtils$ResourceSelectorProvider"); getJarName(jarz, clazz); } //測試 // getJarName("/Users/heliming/IdeaProjects/bugokhttp/asm6/target/asm6-1.0-SNAPSHOT.jar"); } }
補充:
ClassNotFoundException解釋:
當應用程序運行的過程中嘗試使用類加載器去加載Class文件的時候,如果沒有在classpath中查找到指定的類,就會拋出ClassNotFoundException。一般情況下,當我們使用Class.forName()或者ClassLoader.loadClass以及使用ClassLoader.findSystemClass()在運行時加載類的時候,如果類沒有被找到,那么就會導致JVM拋出ClassNotFoundException。
NoClassDefFoundError解釋:
當JVM在加載一個類的時候,如果這個類在編譯時是可用的,但是在運行時找不到這個類的定義的時候,JVM就會拋出一個NoClassDefFoundError錯誤。比如當我們在new一個類的實例的時候,如果在運行是類找不到,則會拋出一個NoClassDefFoundError的錯誤。
到此,相信大家對“怎么查看jar包下java類”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
文章標題:怎么查看jar包下java類
文章源于:http://muchs.cn/article32/jpispc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、微信公眾號、搜索引擎優(yōu)化、網(wǎng)站排名、App設計、網(wǎng)站內鏈
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)