获取Class对象有三种方式
1. 类名.Class();
2. 对象.getClass();
3. Class.forName("类全名");
看下例子:
package com.action; public class TestClass { public static void main(String[] args) throws ClassNotFoundException { // 类加载的三种方式 // 1. 类名加载 Class<Student> st1 = com.action.Student.class; // 2. 对象加载 Class<? extends Student> st2 = new Student().getClass(); // 3. Class.forName()加载 Class<?> st3 = Class.forName("com.action.Student"); System.out.println(st1); System.out.println(st2); System.out.println(st3); } } 运行结果: class com.action.Student class com.action.Student class com.action.Student
为了区分类三种类加载方式的不同,用下面的例子看看
1.类名.Class();
package com.action; public class TestClass { public static <T> void main(String[] args) throws ClassNotFoundException { // 类加载的三种方式 // 1. 类名加载 Class<Studen> st1 = Studen.class; System.out.println(st1); } } class Studen{ { System.out.println("我是动态代码块----!"); } static { System.out.println("我是静态代码块----!"); } } 输出结果:class com.action.Studen
说明,通过类名.Class();不执行 静态代码块和动态代码块
2.对象.getClass();
package com.action; public class TestClass { public static <T> void main(String[] args) throws ClassNotFoundException { // 2. 对象.getClass(); Class st2 = new Studen().getClass(); } } class Studen{ { System.out.println("我是动态代码块----!"); } static { System.out.println("我是静态代码块----!"); } } 结果:我是动态代码块----! 我是静态代码块----!
通过对象.getClass(); 执行 静态代码块和动态代码块
3.Class.forName("类全名");
package com.action; public class TestClass { public static <T> void main(String[] args) throws ClassNotFoundException { // 2.Class.forName("类全名"); Class st3 = Class.forName("com.action.Studen"); } } class Studen{ { System.out.println("我是动态代码块----!"); } static { System.out.println("我是静态代码块----!"); } } 结果:我是静态代码块----!
说明:Class.forName("类全名") 执行静态代码块,不执行动态代码块。
不足之处,多多指导!
时间: 2024-10-29 03:09:40