JAVA-Constructor类用于创建对象的方法

2.3.2Constructor类用于创建对象的方法


JAVA-Constructor类用于创建对象的方法

// Student类同上一个示例,这里就不在重复提供了
public class ReflectDemo2 {
    public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, IllegalAccessException, InvocationTargetException,
InstantiationException {
        //T newInstance(Object... initargs):根据指定的构造方法创建对象
        //method1();
        //method2();
        //method3();
        //method4();
    }
    private static void method4() throws ClassNotFoundException, NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
        //获取一个私有的构造方法并创建对象
        //1.获取class对象
        Class clazz = Class.forName("com.itheima.myreflect3.Student");
        //2.获取一个私有化的构造方法.
        Constructor constructor = clazz.getDeclaredConstructor(String.class);
        //被private修饰的成员,不能直接使用的
        //如果用反射强行获取并使用,需要临时取消访问检查
        constructor.setAccessible(true);
        //3.直接创建对象
        Student student = (Student) constructor.newInstance("zhangsan");
        System.out.println(student);
    }
    private static void method3() throws ClassNotFoundException, InstantiationException,
IllegalAccessException {
        //简写格式
        //1.获取class对象
        Class clazz = Class.forName("com.itheima.myreflect3.Student");
   //2.在Class类中,有一个newInstance方法,可以利用空参直接创建一个对象
        Student student = (Student) clazz.newInstance();//这个方法现在已经过时了,了解一下
        System.out.println(student);
    }
    private static void method2() throws ClassNotFoundException, NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
        //1.获取class对象
        Class clazz = Class.forName("com.itheima.myreflect3.Student");
        //2.获取构造方法对象
        Constructor constructor = clazz.getConstructor();
        //3.利用空参来创建Student的对象
        Student student = (Student) constructor.newInstance();
        System.out.println(student);
    }
    private static void method1() throws ClassNotFoundException, NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
        //1.获取class对象
        Class clazz = Class.forName("com.itheima.myreflect3.Student");
        //2.获取构造方法对象
        Constructor constructor = clazz.getConstructor(String.class, int.class);
        //3.利用newInstance创建Student的对象
        Student student = (Student) constructor.newInstance("zhangsan", 23);
        System.out.println(student);
    }
}

2.3.3小结

获取class对象

三种方式: Class.forName(“全类名”), 类名.class, 对象名.getClass()

获取里面的构造方法对象

getConstructor (Class<?>... parameterTypes) getDeclaredConstructor (Class<?>... parameterTypes)

如果是public的,直接创建对象

newInstance(Object... initargs)

如果是非public的,需要临时取消检查,然后再创建对象

setAccessible(boolean) 暴力反射

展开阅读全文

页面更新:2024-06-19

标签:对象   方法   类同   简写   示例   小结   反射   是非   暴力   成员

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top