A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Class<?> classType = 类.class;

Object x= classType.newInstance();

System.out.println(x);
还有一个
Class<?> classType = 类.class;

Constructor<?> constructor1 = classType.getConstructor();

Object x = constructor1.newInstance();

System.out.println(x);
谁能给我讲讲啊



评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
Class<?> classType = 类.class;

Object x= classType.newInstance(); //该方法是Class中的方法,无参数

创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。


Class<?> classType = 类.class;

Constructor<?> constructor1 = classType.getConstructor(); //该方法是Constructor类中的方法,原型是public T newInstance(Object... initargs),无参数是特殊情况。
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。个别参数会自动解包,以匹配基本形参,必要时,基本参数和引用参数都要进行方法调用转换。


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Class<?> classType = 类.class;
这句是一个范例,意思是向内存中加载类的字节码(每一个类在内存中只加载一次字节码,其对象都是通过字节码来创建)更详细见张老师高薪技术视频中反射基础——Class类

Object x= classType.newInstance();
通过该类的字节码创建这个类的一个实例

System.out.println(x);
调用对象x的toString()方法,打印输出显示

同理
Constructor<?> constructor1 = classType.getConstructor();
通过类的字节码返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法

Object x = constructor1.newInstance();
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

System.out.println(x);
调用对象x的toString()方法,打印输出显示

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Object x= classType.newInstance();//实际上是调用类的无参构造函数实例化一个对象,如果该类没有无参构造函数则这句话会发生异常也就是不能用。
Constructor<?> constructor1 = classType.getConstructor(); //通过反射出构造函数后,再调用指定的构造函数实例化对象,无参有参都可以都必须是已有的构造函数。



评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马