欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java語言中的自定義類加載器實例解析

 更新時間:2018年02月05日 09:37:14   作者:szu_lg  
這篇文章主要介紹了Java語言中的自定義類加載器實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是Java語言中的自定義類加載器實例解析的相關(guān)內(nèi)容,具體如下。

自己寫的類加載器

需要注意的是:如果想要對這個實例進行測試的話,首先需要在c盤建立一個c://myjava的目錄。然后將相應(yīng)的java文件放在這個目錄中。并將產(chǎn)生的.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 {
		//首先檢查是否已經(jīng)被加載了。
		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 {
				/*如果再不行的話,就再進行加載。因為字節(jié)碼的本質(zhì)就是一個字節(jié)數(shù)組*/
				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();
		}
	}
}

最后運行的結(jié)果為:

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

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

可以將rootDie的值變?yōu)閏om.bjsxt.cn. 然后利用Url.openStream()就可以了。

總結(jié)

以上就是本文關(guān)于Java語言中的自定義類加載器實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 一文精通Java 多線程之全方位解讀

    一文精通Java 多線程之全方位解讀

    Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù),多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷
    2021-10-10
  • 設(shè)計模式之模版方法模式_動力節(jié)點Java學(xué)院整理

    設(shè)計模式之模版方法模式_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了設(shè)計模式之模版方法模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • springboot的http.server.requests服務(wù)請求流程源碼

    springboot的http.server.requests服務(wù)請求流程源碼

    這篇文章主要為大家介紹了springboot的http.server.requests服務(wù)請求流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例

    SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例

    這篇文章主要介紹了SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Eclipse中導(dǎo)入Maven Web項目并配置其在Tomcat中運行圖文詳解

    Eclipse中導(dǎo)入Maven Web項目并配置其在Tomcat中運行圖文詳解

    這篇文章主要介紹了Eclipse中導(dǎo)入Maven Web項目并配置其在Tomcat中運行圖文詳解,需要的朋友可以參考下
    2017-12-12
  • SVN報錯:Error Updating changes:svn:E155037的解決方案

    SVN報錯:Error Updating changes:svn:E155037的解決方案

    今天小編就為大家分享一篇關(guān)于SVN報錯:Error Updating changes:svn:E155037的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java中的ArrayList類常用方法和遍歷

    Java中的ArrayList類常用方法和遍歷

    這篇文章主要介紹了Java中的ArrayList類常用方法和遍歷,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • JVM 命令行工具的使用

    JVM 命令行工具的使用

    造成Java應(yīng)用出現(xiàn)性能問題的因素非常多,想要定位這些問題,一款優(yōu)秀的性能診斷工具必不可少,本文主要介紹了JVM 命令行工具的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • 一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認證(springsecurity整合mybatis)

    一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認證(springsecurity整合mybatis)

    這篇文章主要介紹了一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認證(springsecurity整合mybatis),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺談Java中ArrayList的擴容機制

    淺談Java中ArrayList的擴容機制

    本文主要介紹了淺談Java中ArrayList的擴容機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評論