1、什么是发射?
反射机制指的是 程序运行时能够获取自身的信息,在java中,只要给定类的名字,就可以通过反射机制来获得类的所有属性和方法。
2、在JVM运行时期可以做什么?
⑴判断任意一个对象所属的类。
⑵判断任意一个类所有的成员变量和方法。
⑶任意调用一个对象的方法。
⑷构造任意一个类的对象。
3、反射创建类对象的两种方式
⑴通过类的newInstance()方法,该方法是通过调用类中定义的无参构造函数来创建对象的。
Class<Longdi> clazz = (Class<Longdi>) Class.forName("Longdi"); Longdi longdi = clazz.newInstance(); longdi.setName("龙帝"); System.out.println(longdi.getName());
⑵ 利用 java.lang.reflect.Constructor类中的newInstance方法,
// 通过有参构造
Constructor<Longdi> constructor = Longdi.class.getConstructor(String.class,String.class);
constructor.setAccessible(true);
Longdi longdi = constructor.newInstance("龙帝","155xxx");
System.out.println(longdi.getName());
//通过私有构造函数
Constructor<Longdi> constructor = Longdi.class.getDeclaredConstructor(String.class,String.class); constructor.setAccessible(true); Longdi longdi = constructor.newInstance("龙帝","155xxx"); System.out.println(longdi.getName());
4、 反射是如何破坏单例模式的
因为反射都是通过构造函数中来创建 类对象的,所以只需要在类构造函数中判断该类是否被创建过。
private static volatile Longdi longdi;
public static Longdi getSingleton(){ if(longdi == null){ synchronized (Longdi.class){ if(longdi == null){ longdi = new Longdi(); } } } return longdi; } private Longdi() { if(longdi != null) throw new Error("单例对象只能创建一次"); }
标签:Longdi,java,反射,newInstance,longdi,constructor,class,构造函数 From: https://www.cnblogs.com/longdi666/p/17092422.html