反射/jvm:newInstance 和 new
来源:互联网 发布:怎么把域名和空间绑定 编辑:程序博客网 时间:2024/05/29 16:21
class SamClass{private String name = " name_ Field SamClass";public SamClass(){}public SamClass(String str){this.name = str;}public String pnt(String str){return str;}}public class ClassTest {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class clz = Class.forName("test.j2se.Reflect.SamClass");// newInstance: 弱类型。低效率。只能调用无参构造。 SamClass sample3 = (SamClass)clz.newInstance();System.out.println(sample3.pnt("反射调用的方法")); }}
从JVM的角度看,new创建一个类的时候,这个类可以没有被加载。
但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。 即使有做强制转换
new: 强类型。相对高效。能调用任何public构造。
阅读全文
0 0
- 反射/jvm:newInstance 和 new
- 反射1 new关键字和newInstance() 的区分
- 反射机制知识点(new和newInstance之区别)
- new和newInstance
- newInstance() 和 new()
- newInstance()和new()
- newInstance()和new()
- new和newInstance区别
- newInstance()和new
- newInstance()和new()
- newInstance()和new()
- new 和 newInstance()
- newInstance()和new()
- newInstance()和new()
- newInstance()和new()
- newInstance()和new()
- newInstance()和new()
- newInstance()和new()
- spring AspectJ的Execution表达式
- 黄成佳|企业家精神到底为何物?
- 社交复兴! 社交附能的知识付费平台更值得加码
- 执行分布式检索过程
- Nginx干货(二)配置详解
- 反射/jvm:newInstance 和 new
- Manipulator Jacobian
- Cognos BI
- 微服务架构初识
- 141. Linked List Cycle
- wxWidgets学习
- Android studio登录注册图形随机验证码
- CentOS 7 安装 LNMP 环境(PHP7 + MySQL5.7 + Nginx1.10)
- Spring框架反射构建对象的代码原理(一)