1. 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类:
  2. newInstance创建类是这个类必须已经加载过且已经连接(Class.forName(“A”)这个过程),new创建类是则不需要这个类加载过
  3. newInstance 是弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new是强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被移除,经常会出现内存溢出)
  4. newInstance实例化对象只能调用无参构造方法(如果重写了一个带参构造方法,想要使用newInstance,则必须指定一个无参构造方法,否则会报初始化错误)
Class c = Class.forName(“A”);
factory = (AInterface)c.newInstance();
其中AInterface是A的接口,如果下面这样写,你可能会理解:
String className = “A”;
Class c = Class.forName(className);
factory = (AInterface)c.newInstance();
//进一步,如果写成下面这样,更好理解:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串
Class c = Class.forName(className);factory = (AInterface)c.newInstance();

上面代码就消灭了A类名称,优点:无论A类怎么变化,上述代码不变,甚至可以更换A的兄弟类B , C , D….等,只要他们继承Ainterface就可以。

newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。

这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。


Java中newInstance()和new()区别相关推荐

  1. JAVA 中equals()与==的区别

    原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...

  2. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  3. 面试必问一:Java 中 == 和 equals 的区别你知道吗

    面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...

  4. java new newinstance_Java中newInstance()和new()区别

    一.newInstance()和new()区别: 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类: newInstance创建类是这个类必须已经加载过且已经连接,new创建类是 ...

  5. java中Array和ArrayList区别

    2019独角兽企业重金招聘Python工程师标准>>> 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([] ...

  6. Java中“==”和equals()的区别

    有人经常弄不清楚"=="和equals()的区别在哪里,可以认真看下这篇文章,然后你亲自敲下代码,试试.  java中的数据类型,可分为两类:  1.基本数据类型,也称原始数据类型 ...

  7. Java中string与String区别_JAVA中String与StringBuffer的区别

    JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...

  8. java中_null和“”的区别详解

    null和""的区别 问题一: null和""的区别 String s=null; string.trim()就会抛出为空的exception String s ...

  9. JAVA中extends 与implements区别

    JAVA中extends 与implements有啥区别? 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. exte ...

最新文章

  1. 普平数据招聘:数据中心建设项目经理(工程部 )2人
  2. 近期有哪些值得读的推荐系统论文?来看看这份私人阅读清单
  3. 马斯克又要搞事情,不锈钢材质的Space X“星际飞船”正式亮相
  4. AngularJS 的常用特性(二)
  5. 内存spd规范_C语言内存泄露很严重,如何应对?
  6. 阿里数据库内核月报:2015年06月
  7. “哎哟,真的很快哦” 闪送宣布签约周杰伦为其品牌代言人
  8. 第四次作业:个人项目-小学四则运算 “软件”之初版
  9. ❤️开发项目必备技能《Git用法集合》建议收藏❤️
  10. python制作一个桌面小工具
  11. android手机冻屏问题,android 模拟冻屏 代码实现
  12. 《华为时间管理培训》笔记
  13. 基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
  14. VC无进程木马下载器源码
  15. (求助)idea 编译了spring源码,每次执行debug都要执行很多task,需要时间有点久,请问怎么解决?
  16. 电商直播的直播类型有哪些?
  17. 什么是工业大数据?工业大数据的价值体现在哪些方面?
  18. 第一集 斗罗世界 引子 穿越的唐家三少
  19. 如何实现在线视频播放?
  20. 2021年中国油菜籽发展现状及进出口状况分析:加拿大仍为我国进口油菜籽主要来源国 [图]

热门文章

  1. 数据库事务、隔离级别及其应用
  2. 赤峰公交出行-方便快捷
  3. 图解cross attention
  4. 按揭房贷款需要注意哪些事项
  5. AI,关闭“透视网格工具”
  6. react native 开发APP(六)网络请求,列表的使用
  7. touch事件中的touches、targetTouches和changedTouches(详解)
  8. 三极管开关和机械开关区别
  9. 【Linux】十问 Linux 虚拟内存管理
  10. 剥析surging的架构思想