一、几种方式:
**1.类名.class方式方式 :**
**2.Class.forName()方式:**
**3.Demo1.class.getClass()**
**4.类名.class**
二、区别:
**总结:**
**类名.class方式方式 :** 只会加载类,不会执行静态代码块,不会实例化对象)-
**Class.forName()方式:**会加载类,会执行静态代码块, 不会实例化对象
**Demo1.class.getClass()得到的Class对象和类名.class得到的Class对象有点儿区别**
(泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)
package reflect;
class Demo1{
public final static String s="demo1";//static和final顺序可以调换
static {
System.out.println("静态块");
}
Demo1(){
System.out.println("用构造Demo1()方法, 实例化了Demo1类型对象");
}
}
public class ClassDemo {
public static void main(String[] args) throws Exception {
//1.
//System.out.println(Demo1.s);//访问final static 修饰的变量不会实例化对象
//System.out.println("2.---类名.class方式
// (只会加载类,不会执行静态代码块,不会实例化对象)----");
// Class<Demo1> cls1=Demo1.class;
//System.out.println("3.---new 类名()方式:
// (会加载类,会执行静态代码块,也会实例化对象)----");
// Demo1 d1=new Demo1();
//System.out.println("4.---Class.forName()方式:
// (会加载类,会执行静态代码块,不会实例化对象)");
// Class.forName("reflect.Demo1");
//类名.class.getClass()和类名.class得到的Class对象有点儿区别
// (泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)
Class<? extends Class> aClass = Demo1.class.getClass();
Class<Demo1> demo1Class = Demo1.class;
//总结:
// 类名.class方式方式 : 只会加载类,不会执行静态代码块,不会实例化对象)-
// Class.forName()方式:会加载类,会执行静态代码块, 不会实例化对象
//Demo1.class.getClass()得到的Class对象和类名.class得到的Class对象有点儿区别
// (泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)
}
}