类的加载和初始化

作者:陆金龙    发表时间: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 成功。