ly3227116 2015-01-16 10:59 采纳率: 0%
浏览 12050

java Class.newInstance()方法的作用

我在项目里面看到有这样一段代码:
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
第一句我在百度搜到答案懂了,但第二句的newInstance方法的作用我没找到答案,有哪位大神能教下吗?谢谢。

  • 写回答

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(); 
    }
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况