亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中自定義類加載器的示例分析

發布時間:2021-07-27 15:02:23 來源:億速云 閱讀:82 作者:小新 欄目:編程語言

這篇文章主要介紹Java中自定義類加載器的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體如下。

自己寫的類加載器

Java中自定義類加載器的示例分析

需要注意的是:如果想要對這個實例進行測試的話,首先需要在c盤建立一個c://myjava的目錄。然后將相應的java文件放在這個目錄中。并將產生的.clas文件放在c://myjava/com/lg.test目錄下,否則是找不到的。這是要注意的。。

class FileClassLoader :

package com.lg.test;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * Created by 鏉庢灉 on 2016/8/6.
 */
public class FileClassLoader extends ClassLoader {
	String rootDir=null;
	public FileClassLoader(String rootDir) {
		this.rootDir = rootDir;
	}
	@Override
	  protected Class<?> findClass(String className) throws ClassNotFoundException {
		//首先檢查是否已經被加載了。
		Class<?> c = findLoadedClass(className);
		String path = rootDir + "/" + className.replace('.', '/') + ".class";
		if (c != null) {
			return c;
		} else {
			/*雙親委托模式*/
			ClassLoader loaderParent = this.getParent();
			c = loaderParent.loadClass(className);
			if (c != null) {
				return c;
			} else {
				/*如果再不行的話,就再進行加載。因為字節碼的本質就是一個字節數組*/
				InputStream is = null;
				ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
				try {
					is = new FileInputStream(path);
					byte[] buffer = new byte[1024];
					int len = 0;
					while ((len = is.read(buffer)) != -1) {
						outputStream.write(buffer, 0, len);
					}
					c = defineClass(className, buffer, 0, buffer.length);
				}
				catch (Exception e) {
					e.printStackTrace();
				}
				finally {
					if (is != null) {
						try {
							is.close();
						}
						catch (IOException e) {
							e.printStackTrace();
						}
					}
				}
			}
			return c;
		}
	}
}

class Demo :

package com.lg.test;
/**
 * Created by 鏉庢灉 on 2016/8/6.
 */
/*相同的類加載器對同一個類進行加載,得到的hascode是相同的
 * 不同的類加載器對同一類進行加載,得到的hascode是不一樣的*/
public class Demo {
	public static void main(String[] args) {
		FileClassLoader loader = new FileClassLoader("c://myjava");
		FileClassLoader loader2=new FileClassLoader("c://myjava");
		try {
			Class<?> c = loader.findClass("com.lg.test.HelloWorld");
			Class<?> c0=loader.findClass("com.lg.test.HelloWorld");
			Class<?> c1=loader2.findClass("com.lg.test.HelloWorld");
			Class<?> c2=loader.findClass("com.lg.test.Demo01");
			Class<?> c3=loader.findClass("java.lang.String");
			System.out.println(c.hashCode());
			System.out.println(c.getClassLoader());
			System.out.println(c0.hashCode());
			System.out.println(c0.getClassLoader());
			System.out.println(c1.hashCode());
			System.out.println(c1.getClassLoader());
			System.out.println(c2.hashCode());
			System.out.println(c2.getClassLoader());
			System.out.println(c3.hashCode());
			System.out.println(c3.getClassLoader());
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

最后運行的結果為:

366712642
sun.misc.Launcher$AppClassLoader@4e0e2f2a
366712642
sun.misc.Launcher$AppClassLoader@4e0e2f2a
366712642
sun.misc.Launcher$AppClassLoader@4e0e2f2a
1829164700
sun.misc.Launcher$AppClassLoader@4e0e2f2a
2018699554
null

如果是定義網絡類加載器的話,那么就需要使用URL來進行了。這是要注意的。

可以將rootDie的值變為com.bjsxt.cn. 然后利用Url.openStream()就可以了。

以上是“Java中自定義類加載器的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

封丘县| 睢宁县| 庆安县| 随州市| 肇东市| 安平县| 朔州市| 安多县| 清远市| 梧州市| 阜阳市| 汉阴县| 三门县| 焉耆| 和硕县| 东阿县| 临漳县| 尖扎县| 金寨县| 安仁县| 梓潼县| 皮山县| 乌拉特前旗| 廊坊市| 涿州市| 绥芬河市| 姜堰市| 淮阳县| 西林县| 安陆市| 分宜县| 德安县| 嵊州市| 兴和县| 吴忠市| 措勤县| 开平市| 文成县| 乌什县| 青州市| 河北区|