new与newInstance()的区别

来源:互联网 发布:批处理 软件 编辑:程序博客网 时间:2024/05/16 12:01
String st = (String)Class.forName("java.lang.String").newInstance();
String st1=new String();
boolean bl=st.getClass()==st1.getClass();

System.out.println(bl);

返回为ture

这两种方法得到的结果是一样的

分析下原因,第一种方法是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化

可以分解开

Class cla=Class.forName("java.lang.String");//初始化

Object obj=cla.newInstance();//实例化为object类

String str=(String)obj;//向下转换回子类



Class.forName()有它自己的用法

通过

String str ="";
Class c = Class.forName(str);
c.newInstance();

可以动态的创建对象


Object st = (String)Class.forName("java.lang.String").newInstance();

这个方法返回的是一个类,可以强制转换成各种子类

因此可以改变强制转换的类型与forName()的参数来创建不同类型的对象,只要他们是Object的子类


在连接数据库时,发现还可以这样用

Class.forName(driver);

查找资料了解到,这个方法在使用时,JVM会查找并加载指定的类,也就是说JVM会执行该类的静态代码段

而使用new时,这个类可以没有被加载(是可以不是一定)

测试使用Driver dri=new Driver();一样加载了类



然后测试了下构造方法的调用

class ceshi{
    int a=0;
    public ceshi(){
        System.out.println(a);
    }
}

      Class aaa=Class.forName("ceshi");//没有调用构造方法
      aaa.newInstance();//调用
      new ceshi();//调用

如果想要调用构造方法,需要调用newInstance


forname()会导致类被初始化,newInstance()才会实例化,而new()初始化+实例化

初始化和实例化的区别,另开一篇再做研究

相比较,new的语句简单,可以在创建时加入参数调用构造函数,而newInstance()把创建对象步骤分开,使得更灵活

0 0
原创粉丝点击