日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

初探Java類加載機制

2020-03-24 18:32:47
字體:
來源:轉載
供稿:網友
一、在jdk1.2以后,類加載是通過委托來完成的,這意味著如果 ClassLoader 不能找到類,它會請求父代 ClassLoader 來執行此項任務,所有 ClassLoaders 的根是系統 ClassLoader,它會以缺省方式裝入類 -- 即,從本地文件系統。今天我們就來探討一下在jvm中這些機制是怎樣運行的。讓我們假設有一個html' target='_blank'>class字節碼文件(比如Hello.class文件),那么在應用程序中,他是如何被加載進來,并形成一個類對象的呢?我們這篇文章的目的就是為了解釋這個問題。

在java.lang包里有個ClassLoader類,ClassLoader 的基本目標是對類的請求提供服務。當 JVM 需要使用類時,它根據名稱向 ClassLoader 請求這個類,然后 ClassLoader 試圖返回一個表示這個類的 Class 對象。通過覆蓋對應于這個過程不同階段的方法,可以創建定制的 ClassLoader。其中有個loadClass(String name, boolean resolve)方法,該方法為ClassLoader的入口點,在jdk1.2以后,loadClass方法將缺省調用findClass方法,詳細內容可以參考API文檔,我們編寫的ClassLoader主要就是為了覆蓋以上兩個方法。回到我們剛才的問題,怎樣讀進字節碼文件,并把它構成一個類對象呢?在ClassLoader里有個方法,Class defineClass(String name, byte[] b, int off, int len),答案就在這里了,我們根據把class字節碼文件(如Hello.class)讀進一個字節數組里,byte[] b,并把它轉化為Class對象,而這些數據可以來源于文件,網絡等,神奇吧:)

defineClass管理 JVM 的許多復雜、神秘和倚賴于實現的方面 -- 它把字節碼分析成運行時數據結構、校驗有效性等等。不必擔心,您無需親自編寫它。事實上,即使您想要這么做也不能覆蓋它,因為它已被標記成最終的。

其他一些方法:

findSystemClass方法:從本地文件系統裝入文件。它在本地文件系統中尋找類文件,如果存在,就使用 defineClass 將原始字節轉換成 Class 對象,以將該文件轉換成類。

findClass方法:jdk1.2以后loadClass 的缺省實現調用這個新方法。findClass 的用途包含您的 ClassLoader 的所有特殊代碼,而無需要復制其它代碼(例如,當專門的方法失敗時,調用系統 ClassLoader)。

getSystemClassLoader: 如果覆蓋 findClass 或 loadClass,getSystemClassLoader 使您能以實際 ClassLoader 對象來訪問系統 ClassLoader(而不是固定的從 findSystemClass 調用它)。

getParent:為了將類請求委托給父代 ClassLoader,這個新方法允許 ClassLoader 獲取它的父代 ClassLoader。當使用特殊方法,定制的 ClassLoader 不能找到類時,可以使用這種方法。

resolveClass: 可以不完全地(不帶解析)裝入類,也可以完全地(帶解析)裝入類。當編寫我們自己的 loadClass 時,可以調用 resolveClass,這取決于 loadClass 的 resolve 參數的值。
findLoadedClass:充當一個緩存,當請求 loadClass 裝入類時,它調用該方法來查看 ClassLoader 是否已裝入這個類,這樣可以避免重新裝入已存在類所造成的麻煩。應首先調用該方法。

二、工作流程:

1)調用 findLoadedClass(String) 來查看是否存在已裝入的類,如果沒有,那么采用那種特殊的神奇方式來獲取原始字節。

2)通過父類ClassLoader調用loadClass方法,如果父類ClassLoader是null,那么按缺省方式裝入類,即系統ClassLoader。

3)調用findClass(String)去查找類并獲取類;

4)如果loadClass 的 resolve 參數的值為true,那么調用 resolveClass 解析 Class 對象.

5)如果還沒有類,返回 ClassNotFoundException。

6)否則,將類返回給調用程序。

三、一個實現了ClassLoader的例子:

/**
*CompilingClassLoader.java
*Copyright 2005-2-12
*/
import java.io.*;

public class CompilingClassLoader extends ClassLoader{
//讀取一個文件的內容
private byte[] getBytes(String filename) throws IOException{
File file=new File(filename);
long len=file.length();
byte[] raw=new byte[(int)len];

FileInputStream fin=new FileInputStream(file);

int r=fin.read(raw);
if(r!=len) throw new IOException("Can't read all,"+r+"!="+len);

fin.close();

return raw;
}

private boolean compile(String javaFile) throws IOException{
System.out.println("CCL:Compiling "+javaFile+"...");
//調用系統的javac命令
Process p=Runtime.getRuntime().exec("javac "+javaFile);
try{
//其他線程都等待這個線程完成
p.waitFor();
}catch(InterruptedException ie){
System.out.println(ie);
}
int ret=p.exitValue();

return ret==0;
}

public Class loadClass(String name,boolean resovle) throws ClassNotFoundException{
Class clas=null;

clas=findLoadedClass(name);

//這里說明了包的表示
String fileStub=name.replace('.','/');

String javaFilename=fileStub+".java";
String classFilename=fileStub+".class";

File javaFile=new File(javaFilename);
File classFile=new File(classFilename);

//如果存在class文件就不編譯
if(javaFile.exists()&&(!classFile.exists()||javaFile.lastModified() classFile.lastModified())){
try{
if(!compile(javaFilename)||!classFile.exists()){
throw new ClassNotFoundException("ClassNotFoundExcetpion:"+javaFilename);
}
}catch(IOException ie){
throw new ClassNotFoundException(ie.toString());
}
}

try{
byte[] raw=getBytes(classFilename);

//通過讀入數據來構造一個類結構,這是核心
clas=defineClass(name,raw,0,raw.length);
}catch(IOException ie){
//
}

if(clas==null){
clas=findSystemClass(name);
}

System.out.println("findSystemClass:"+clas);

if(resovle && clas!=null){
resolveClass(clas);
}

if(clas==null){
throw new ClassNotFoundException(name);
}

return clas;
}
}
測試該loader:
/**
*TestRun.java
*Copyright 2005-2-11
*/
import java.lang.reflect.*;

public class TestRun{
public static void main(String[] args) throws Exception{
String prog >
String progArgs[]=new String[args.length-1];
System.arraycopy(args,1,progArgs,0,progArgs.length);

CompilingClassLoader ccl=new CompilingClassLoader();

Class clas=ccl.loadClass(progClass);

//返回一個class的type
Class[] mainArgType={(new String[0]).getClass()};
Method main=clas.getMethod("main",mainArgType);

Object argsArray[]={progArgs};

main.invoke(null,argsArray);

}
}

以上的核心內容已經編寫完了,編譯后,我們得到兩個文件:

CompilingClassLoader.class,TestRun.class

四、編寫一個例子,然后運行我們的ClassLoader

/**
*Hello.java
*/
public class Hello{
public static void main(String[] args){
if(args.length!=1){
System.err.println("Error,exit!");
System.exit(1);
}
String name=args[0];
System.out.println("Hello,"+name);
}
}

好了,運行java TestRun Hello 阿飛

....
....
....
Hello,阿飛html教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产黄色小视频| 深夜福利亚洲| 欧美婷婷久久| xxxcom在线观看| 国产福利在线看| 亚洲高清在线免费| 日本视频久久久| 欧美日韩免费视频| 久久久精品99| 日韩欧美在线看| 欧美 亚洲 精品 三区| 不卡在线视频| 综合激情国产一区| 一区二区三区在线|网站| 欧美天堂一区二区| 91精品国产自产在线丝袜啪| 国产欧美中文字幕| 国产久卡久卡久卡久卡视频精品| www.老鸭窝.com| 久久久91精品国产| 日韩wumaV| 国产日韩中文字幕在线| 中文在线不卡| 国产欧美日韩精品高清二区综合区| 不卡专区在线| 亚洲一区中文在线| 日韩中文字幕第一页| www.狠狠| 国产一区在线观看视频| 欧美三级在线看| 国产激情在线视频| 午夜高潮免费视频| 日韩av一区二区在线| 日韩中文字幕在线播放| 国产在线拍揄自揄拍| 国产黄色一区| 欧美日韩精品在线观看| 欧美日韩国产专区| 欧美大片在线观看一区 | 91麻豆精品在线| 国产一级片在线| 欧美日韩一二三| 偷窥国产亚洲免费视频| 视频在线一区二区| 99视频在线看| 欧洲精品在线视频| 久久久精品免费免费| 久久69成人| 欧美日韩国产123区| 精品熟女一区二区三区| 日韩欧美在线网站| 国产三级免费观看| 国产福利不卡| 91精品国产日韩91久久久久久| 日韩a一区二区| 欧美人妻一区二区三区| 中文字幕精品亚洲| 国产农村妇女精品一二区| 国产 日韩 欧美 综合 一区| 日韩欧美不卡视频| 日韩欧美国产成人一区二区| 午夜一区二区视频| 欧美日韩精品欧美日韩精品一| 阿v免费在线观看| 日韩福利视频导航| 亚洲欧美中文字幕在线一区| 日韩国产欧美亚洲| 日韩欧美一二三| 国产一区久久久| 免费在线视频一区二区| 欧美日韩高清| 区日韩二区欧美三区| 日韩国产成人精品| 天堂在线一区二区三区| 中文字幕亚洲字幕| 高清不卡一区二区| 日韩精品久久久| 国产欧美日韩在线| 欧美一级在线观看| 亚洲第一视频在线观看| 中文字幕日韩欧美在线视频| aaa免费看大片| 97久久精品| 久久蜜桃精品| 91精品国产自产在线丝袜啪| 久久香蕉精品| 欧美一级二级三级区| 国产在线不卡一区| 亚洲福利精品| 日韩精品福利视频| 日韩a一区二区| av免费在线网站| 91精品国产91久久久久青草| 午夜私人影院在线观看| 国产三级做爰在线观看| 欧美日韩在线精品成人综合网 | av免费不卡国产观看| 欧美 日韩 国产 高清| 91精品国产自产观看在线| 久久99久久久久久久噜噜| 亚洲日本精品视频| 天天综合日日夜夜精品| 国产欧美日韩亚洲| 在线国产1区| 久久精品在线免费观看| 中文天堂在线一区| av一区在线| 久久久久久欧美| 福利一区二区| 国产对白在线| 国产导航在线| 欧美日韩综合在线观看| 国产福利免费在线观看| 中文字幕国产日韩| 亚洲免费观看视频| 国产高清精品二区| 91精选在线| 一级免费a一片| 视频一区二区精品的福利| 欧美日韩亚州综合| 日本va欧美va精品发布| 精品成a人在线观看| 中文字幕国产欧美| 91精品在线看V| 日韩欧美一二三四区| 日韩欧美国产一二三区| 热久久精品国产| 国产精品福利视频一区二区三区| av中文在线资源| 日韩在线 中文字幕| 91精品国产高清| 日本a级黄色| 中文官网资源新版中文第二页在线观看| 婷婷中文字幕一区三区| 欧美日韩国产一区| 亚洲第一网中文字幕| 国产欧美日韩成人| 欧美中文字幕| 久久网站免费观看| 欧美日韩三级在线| 久久久综合av| 日韩欧美中文在线| 国产字幕在线看| 91精品国产91久久久久久青草| 91久久精品国产91性色69| 国产欧美日韩不卡| 精品一二线国产| www中文字幕| 欧美一级一级性生活免费录像| 国产不卡视频在线| 国产欧美日韩中文久久| 日韩美女中文字幕| 日本黄色一区二区| 日韩中文字幕观看| 国内国产区免费视频| 国产婷婷色一区二区三区在线| 亚洲一级影院| 91欧美在线视频| 欧美三级免费观看| 在线观看国产一级片| 精品一二三区视频| 午夜成人鲁丝片午夜精品| 成年人黄国产| 伊人中文字幕在线观看| 国产欧美日韩在线| 亚洲国产www| 国产偷国产偷亚洲清高网站 | 一区二区三区鲁丝不卡| 日韩欧美在线精品| 国产欧美日韩综合| 亚洲乱码在线观看| 欧美日韩亚洲不卡| 欧美日韩国产首页在线观看| 亚洲一区在线观看免费| 欧美一级搡bbbb搡bbbb| 亚洲欧洲日韩在线| 日韩午夜高潮| 亚洲欧美999| 国产精品福利视频一区二区三区| 午夜精品一区二区三区免费视频| 蜜臀91精品国产高清在线观看| 久久久精品日韩欧美| 日韩欧美久久| 国产xxx在线| 欧美另类久久久品| 日韩在线高清视频| 国产香蕉精品视频| 欧美三级精品| 欧美色欧美亚洲高清在线视频| 欧美日韩在线第一页| 欧美1234区| 国产日韩精品在线| 欧美日韩国产一中文字不卡| 天天综合天天综合| 精品中文在线| 91精品999| 久久蜜桃精品| 日韩欧美一级二级三级久久久 | 精品成a人在线观看| 国产不卡在线观看视频| 国产欧美日韩亚州综合| 91精品网站| 欧美日韩中文字幕在线| 国产69精品久久久久孕妇国产69久久 | 91欧美日韩| 欧美日韩在线三级| 精品国产欧美成人夜夜嗨| 亚洲免费观看视频| 欧美日韩中文精品| 国产啊啊啊视频在线观看| 国产一区在线精品| 国产三级精品在线观看| wwww亚洲| 国产中文在线观看| 精品国产欧美| 国产欧美日韩最新| 欧美不卡一二三| 日韩欧美亚洲国产一区| aaa大片在线观看| 99pao成人国产永久免费视频| 婷婷综合福利| 国产视频一二区| 深夜福利一区| 亚洲一区日韩精品中文字幕| 九一精品国产| 日韩精品中文字幕第1页| 中文字幕日韩欧美| 日韩av不卡在线观看| 日韩福利视频导航| 欧美日韩精品在线观看| 欧美日韩高清在线一区| www.久久草| 中文字幕在线看视频国产欧美| 午夜福利一区二区三区| 国产欧美日韩高清| 欧美国产亚洲一区| 中文字幕在线导航| 精品人妻二区中文字幕| 99国内精品| 91最新在线| 欧美 中文字幕| 国产欧美日韩91| 91精品国产综合久久久久久漫画| 久久婷婷亚洲| 国产欧美综合在线观看第十页 | 日本亚洲欧美| 91色在线看| 在线视频第一页| 日韩色在线观看| 日韩精品在线看| 欧美xxxx中国| 亚洲免费婷婷| 国产v日产∨综合v精品视频| 精品成人久久av| 日韩在线视频一区二区三区| 欧美亚洲视频在线看网址| 精品在线一区二区三区| 中文字幕在线观看精品| 亚洲午夜av| 欧美日韩成人一区| 欧美日韩国产大片| 在线欧美日韩国产| 久久精品日韩欧美| 在线视频你懂得一区| 欧美精品一区二区三区在线播放| 樱花草www在线| 欧美日韩日本视频| 在线不卡一区二区| 日韩精品视频在线播放| 国产视频2区| 天天摸日日摸狠狠添| 高清中文字幕在线| 欧美日韩亚洲一| 久久99精品久久久| 中文av字幕一区| 国产一级片在线播放| 中文字幕精品一区二| 欧美日韩国产一级片| 亚洲第一页中文字幕| 国产不卡一区二区在线观看| 国产香蕉精品视频| 亚洲一区视频在线观看视频| 亚洲热在线观看| 日韩视频中文字幕| 91精品国产调教在线观看| 国产91大片| a视频在线播放| 国产99对白在线播放| 中文字幕日韩高清| 一区视频在线播放| www日韩欧美| 亚洲欧洲日韩精品在线| 日韩久久不卡| 二区三区不卡不卡视频| 欧美久久久精品| 国产婷婷精品| 日韩视频在线一区二区| 国产九九在线| 91精品国产自产在线观看永久∴| 国产伦精品免费视频| 国产欧美日韩第一页| 国产日产一区二区| 久久久久久久久99精品| 在线观看精品国产| 国产激情在线视频| 亚洲狠狠婷婷综合久久久久图片| 你懂的亚洲视频| 日韩精品在线免费看| www.久久久精品| 日本视频久久久| 亚洲黄色一区二区| 午夜伦欧美伦电影理论片| 不卡视频一区二区| 99热最新网址| 欧美日韩亚洲国内综合网| 精品国产乱码久久久久久蜜臀 | 日韩精品三级| aaa大片在线观看| 欧美 日韩 国产在线观看| 日韩欧美一级视频| 久久精品在线观看| 偷窥国产亚洲免费视频| 日韩欧美国产1| 国产最顶级的黄色片在线免费观看| 热久久精品国产| 91久久精品视频| 91精品视频播放| 精品欧美日韩| 国产91久久久久蜜臀青青天草二| 日韩视频中文字幕| 欧美日韩免费不卡视频一区二区三区| 精品在线一区二区三区| 92久久精品| 日韩国产一区久久| 欧美国产一区视频在线观看| 中文字幕国产视频| 91吃瓜在线观看| 欧美日韩国产在线| 天堂精品高清1区2区3区| 国产激情在线播放| 日韩三级精品| 精品在线91| 日韩av一区二区在线观看| 国产黄色一级片| 亚洲乱码中文字幕| 日韩欧美中文视频| www.三级.com| 亚洲视频电影在线| 一级一片免费视频| 亚洲大胆人体av| 欧美日韩亚洲国产综合| 国产区视频在线观看| 不卡av免费在线| 久久99精品国产| 中文字幕精品一区二| 欧美.日韩.国产.一区.二区| 一区二区高清在线| 中文字幕乱码在线| 国产黄色网页| 91精品视频在线| 日韩精品不卡一区二区| 日韩在线视频观看正片免费网站| 国产欧美综合在线观看第十页| 激情久久99| 日韩专区视频网站| 亚洲一区日韩在线| 国产黄在线看| 亚洲乱码中文字幕综合| 在线观看国产一级片| 国内不卡的二区三区中文字幕| 日韩精品在线观看网站| 欧美午夜精品在线| 国产日产一区二区| 亚洲福利在线视频| 日韩 国产 一区| 国产激情在线观看| 国产不卡在线观看视频| 亚洲第一精品在线| 91xxx在线观看| 91极品视频在线观看| 午夜伊人狠狠久久| 亚洲黄页一区| 久久99久久99精品中文字幕| 中文字幕亚洲高清| 国产欧美中文在线| 久久精品国产2020观看福利| 国产在线拍揄自揄拍| 日韩不卡一二区| 欧美日韩一二三| 精品欧美日韩精品| 欧美三级中文字幕在线观看| 欧美日韩在线不卡视频| 日韩欧美一二三| 一区二区视频国产| 快she精品国产999| 黄色视屏免费在线观看| 欧美日韩高清一区二区| 欧美日韩在线视频首页| 久久久精品99| 日韩一级在线免费观看|