java中的Class.forName()、newInstance()、new对比小结

(一)首先要明白在java中任何class都要装载在虚拟机上才能运行

1、Class.forName()就是装载类用的(new是根据加载到内存中的类创建一个实例),如果给你一个包名和类名,可以通过Class.forName("package.A").newInstance()来实例化它,其效果和new A()是一样的。

2、JVM在装载类的时候会执行类的静态代码段,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码,而以后就不会再执行这段静态代码了。Class.forName()的作用就是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码块。

3、可以使用Class.forName()来实现动态加载和创建Class对象,比如想要根据用户输入的字符串来创建对象。

(二)在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要的区别是?

1、它们的区别在于创建对象的方式不一样,newInstance()是使用类加载机制,后者是创建一个新类。

2、存在这两种创建方式,主要考虑到软件的可伸缩性、可扩展性和可重用性等软件涉及思想,java中工厂模式经常使用newInstance()方法来创建对象,可以实现从配置文件中读取配置字符串,根据字符串来生成相对于的类并且实例化。

3、从JVM的角度看,使用new创建类的时候,这个类可能没有被加载,但使用newInstance()方法的时候,就必须保证这个类已经加载了,就是由Class.forName()来完成的,这个静态方法调用了启动加载器。

(三)new和newInstance()的区别

1、newInstance():弱类型、低效率,只能调用无参构造。

2、new:强类型、相对高效,能调用任何public构造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值