Java中newInstance()和new()区别
- 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类:
newInstance
创建类是这个类必须已经加载过且已经连接(Class.forName(“A”)
这个过程),new
创建类是则不需要这个类加载过newInstance
是弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new
是强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被移除,经常会出现内存溢出)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()区别相关推荐
- JAVA 中equals()与==的区别
原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...
- java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array
java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...
- 面试必问一:Java 中 == 和 equals 的区别你知道吗
面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...
- java new newinstance_Java中newInstance()和new()区别
一.newInstance()和new()区别: 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类: newInstance创建类是这个类必须已经加载过且已经连接,new创建类是 ...
- java中Array和ArrayList区别
2019独角兽企业重金招聘Python工程师标准>>> 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([] ...
- Java中“==”和equals()的区别
有人经常弄不清楚"=="和equals()的区别在哪里,可以认真看下这篇文章,然后你亲自敲下代码,试试. java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型 ...
- Java中string与String区别_JAVA中String与StringBuffer的区别
JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...
- java中_null和“”的区别详解
null和""的区别 问题一: null和""的区别 String s=null; string.trim()就会抛出为空的exception String s ...
- JAVA中extends 与implements区别
JAVA中extends 与implements有啥区别? 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. exte ...
最新文章
- 普平数据招聘:数据中心建设项目经理(工程部 )2人
- 近期有哪些值得读的推荐系统论文?来看看这份私人阅读清单
- 马斯克又要搞事情,不锈钢材质的Space X“星际飞船”正式亮相
- AngularJS 的常用特性(二)
- 内存spd规范_C语言内存泄露很严重,如何应对?
- 阿里数据库内核月报:2015年06月
- “哎哟,真的很快哦” 闪送宣布签约周杰伦为其品牌代言人
- 第四次作业:个人项目-小学四则运算 “软件”之初版
- ❤️开发项目必备技能《Git用法集合》建议收藏❤️
- python制作一个桌面小工具
- android手机冻屏问题,android 模拟冻屏 代码实现
- 《华为时间管理培训》笔记
- 基于Python+MySQL的图书销售管理系统 课程论文+项目源码及数据库文件
- VC无进程木马下载器源码
- (求助)idea 编译了spring源码,每次执行debug都要执行很多task,需要时间有点久,请问怎么解决?
- 电商直播的直播类型有哪些?
- 什么是工业大数据?工业大数据的价值体现在哪些方面?
- 第一集 斗罗世界 引子 穿越的唐家三少
- 如何实现在线视频播放?
- 2021年中国油菜籽发展现状及进出口状况分析:加拿大仍为我国进口油菜籽主要来源国 [图]