java 反射

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("单例对象只能创建一次");
    }

 

posted @ 2023-02-04 21:17  珍&惜  阅读(50)  评论(0)    收藏  举报