歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java中class.forName和classLoader加載類的區分

Java中class.forName和classLoader加載類的區分

日期:2017/3/1 9:49:18   编辑:Linux編程

Java中class.forName和classLoader都可用來對類進行加載。前者除了將類的.class文件加載到jvm中之外,還會對類進行解釋,執行類中的static塊。而classLoader只干一件事情,就是將.class文件加載到jvm中,不會執行static中的內容,只有在newInstance才會去執行static塊。Class.forName(name, initialize, loader)帶參函數也可控制是否加載static塊。並且只有調用了newInstance()方法采用調用構造函數,創建類的對象 示例代碼如下:

package com.blueray.java.test;

public class ClassLoaderTest {

/**
* @param args
*/
public static void main(String[] args) {
ClassLoader classLoader=StaticSample.class.getClassLoader();
try {
System.out.println("Before load class");
Class clazz=classLoader.loadClass(StaticSample.class.getName());
System.out.println("After load class.");
System.out.println("executing newInstance");
clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

StaticSample:

package com.blueray.java.test;

public class StaticSample {
static{
System.out.println(StaticSample.class.getName()+" is loading the static block");
}
public StaticSample(){
System.out.println("StaticSample Constructor is executing.");
}


}

運行結果如下:

Before load class
After load class.
executing newInstance
com.blueray.java.test.StaticSample is loading the static block
StaticSample Constructor is executing.

Copyright © Linux教程網 All Rights Reserved