〖反射机制〗获取Class类对象的三种方式
同一个字节码文件(.class)在一次程序运行过程中,只会被加载一次,所以无论使用哪种方式,获取的Class类对象都是同一个
Class.forName(“全类名”)(多用于配置文件,将类名定义在配置文件中,读取文件加载类)
package test;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class cls1 = Class.forName("test.Test");
System.out.println(cls1);
}
}
类名.class(多用于参数的传递)
package test;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class cls2 = Test.class;
System.out.println(cls2);
}
}
对象.getClass()(多用于对象获取字节码)
package test;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class cls3 = new Test().getClass();
System.out.println(cls3);
}
}
[案例]
package test;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class cls1 = Class.forName("test.Test");
System.out.println(cls1);
Class cls2 = Test.class;
System.out.println(cls2);
Class cls3 = new Test().getClass();
System.out.println(cls3);
System.out.println(cls1 == cls2);
System.out.println(cls1 == cls3);
}
}
运行结果:
我寻见一片海 碧蓝且耀着光
大片船只航行其上 都向着远方
Shared by Foriver_江河