我在项目里面看到有这样一段代码:
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
第一句我在百度搜到答案懂了,但第二句的newInstance方法的作用我没找到答案,有哪位大神能教下吗?谢谢。
java Class.newInstance()方法的作用
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- Coursera 2015-01-16 19:18关注
首先我要叨叨一句为什么不去查javadoc而去查百度,javadoc里有非常准确的定义
Creates a new instance of the class represented by this Class object. The class is instantiated as if by a new expression with an empty argument list. The class is initialized if it has not already been initialized.
简单说就是实例化这个类,她实际上是使用了没有参数的构造函数,而且他会初始化这个对象如果这个还没有初始化过。(有些静态变量在类初始化的时候要进行初始化)另外再叨叨一句,这个api只会调用缺省的构造函数,如果你需要使用带参数的构造函数,你应该使用clazz.getConstructor().newInstance(...).
还有caozhy说new要知道类型,其实在做newInstance的时候,类型是知道的。当然这里还和普通的new有区别的是,但构造函数是private的时候,你没有在其他类直接调用这个构造函数,因为编译不会通过。但是假设没有securitymanager,clazz.newInstance可以调用成功。但是clazz.getConstructor().newInstance()会检查这个编译异常,public class NewMain {
private NewMain() {
}public static void main(String[] args) throws Exception { Class<NewMain> c = NewMain.class; NewMain nm = c.newInstance(); NewMain nm1 = c.getConstructor().newInstance(); }
}
解决 6无用
悬赏问题
- ¥15 jupyterthemes 设置完毕后没有效果
- ¥15 matlab图像高斯低通滤波
- ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
- ¥15 钢筋实图交点识别,机器视觉代码
- ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
- ¥50 400g qsfp 光模块iphy方案
- ¥15 两块ADC0804用proteus仿真时,出现异常
- ¥15 关于风控系统,如何去选择
- ¥15 这款软件是什么?需要能满足我的需求
- ¥15 SpringSecurityOauth2登陆前后request不一致