类的加载和初始化
作者:陆金龙
发表时间:2018-03-30 09:17
类的加载和初始化
class Tester
{
static
{
System.out.println("Tester类的静态初始化块...");
}
}
public class ClassLoaderTest
{
public static void main(String[] args)
throws ClassNotFoundException{
ClassLoader cl = ClassLoader.getSystemClassLoader();
Class clazz =cl.loadClass("Tester"); // 加载类 不执行初始化,与Class.forName("Tester", false, cl)执行过程是一致(只是ClassLoader.loadClass()更底层)
System.out.println("加载Tester类...");
Class clazz2 = Class.forName("Tester"); //加载类 并执行类的静态初始化 调用Class.forName(name, initialize, loader), 等同于Class.forName("Tester", true, cl);
//只有执行clazz.newInstance();时才能够初始化类
}
}
测试:
E:\>javac ClassLoaderTest.java
E:\>java ClassLoaderTest
加载Tester类...
Tester类的静态初始化块...
在cmd窗口用javac编译时提示“错误: 编码GBK的不可映射字符”
修改命令:
javac -encoding utf-8 ClassLoaderTest.java
java ClassLoaderTest
使用java -cp %classpath; ClassLoaderTest执行,结果正确。
解决方案:将系统变量中的classpath值添加到用户变量中,然后执行java ClassLoaderTest 成功。