反射机制-new Instance()

反射机制获取到Class,作用:

  • 通过Class的newInstance()方法来实例化对象。
  • 注意:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以
public class ReflectTest02 {
    public static void main(String[] args) {

        // 以反射机制的方式创建对象。
        try {
            // 通过反射机制,获取Class,通过Class来实例化对象
            Class c = Class.forName("com.java.bean.User"); // c代表User类型。

            // newInstance() 这个方法会调用User这个类的无参数构造方法,完成对象的创建。
            // 重点是:newInstance()调用的是无参构造,必须保证无参构造是存在的!
            Object obj = c.newInstance();

            System.out.println(obj); // com.bjpowernode.java.bean.User@10f87f48
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }
}

 user实例化对象

  • 必须提供无参构造:否则反射calss会出现异常
public class User {
    public User(){
        System.out.println("无参数构造方法!");
    }

    // 定义了有参数的构造方法,无参数构造方法就没了。
    public User(String s){

    }
}

Class.forName() :

  • 如果希望一个类的静态代码块执行,其它代码一律不执行;
  • 使用:Class.forName("完整类名");  这个方法的执行会进行类加载,类加载时,静态代码块执行。

 

public class MyClass {

    // 静态代码块在类加载时执行,并且只执行一次。
    static {
        System.out.println("MyClass类的静态代码块执行了!");
    }
}

public class ReflectTest04 {
    public static void main(String[] args) {
        try {
            // Class.forName()这个方法的执行会进行:类加载。
            Class.forName("com.java.reflect.MyClass");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

 

posted @ 2022-04-27 16:27  280887072  阅读(191)  评论(0编辑  收藏  举报