设为首页 加入收藏

TOP

Java中class.forName和classLoader加载类的区分
2014-11-24 01:43:13 来源: 作者: 【 】 浏览:2
Tags:Java class.forName classLoader 加载 区分

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.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于Java中的main方法的几种写法 下一篇Go语言的国际化支持(基于gettext-..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: