Java关键字new和newInstance的区别
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java关键字new和newInstance的区别,更多Java专业知识,广州疯狂java培训为你讲解;
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。
Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:
class c = Class.forName(“Example”);
factory = (ExampleInterface)c.newInstance();
其中ExampleInterface是Example的接口,可以写成如下形式:
String className = "Example";
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
进一步可以写成如下形式:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。
疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。没有工作经验的学员,在疯狂java,通过大量全真经典企业级项目进行集中培训,课上讲师讲解和课下项目练习课上课下双管齐下,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!
转载于:https://www.cnblogs.com/gojava/p/3284499.html
Java关键字new和newInstance的区别相关推荐
- Java 关键字super和this的使用及区别
"this",作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递.this(a,b)表示调用另外一个构造函数.这里面的this就是一个特殊语法,不是变量,没有什么类型. ...
- java protostuff 好处,java序列化Protostuff和Serializable的区别
java序列化Protostuff和Serializable的区别 关注:146 答案:1 mip版 解决时间 2021-01-25 06:11 提问者你若离去丶巴掌扇去 2021-01-24 0 ...
- Java关键字(53个关键字)
Java关键字(53个关键字) abstract default goto* null switch boolean do if package nchronzed break ...
- Java关键字与保留字说明及使用
Java关键字与保留字说明及使用 abstract boolean break byte case catch char class continue default do double else e ...
- JAVA抽象类和接口类的区别
JAVA抽象类和接口类的区别 1.声明方式不同.抽象类为abstract class,接口类为interface. 2.继承抽象类关键字为extends,实现接口关键字为implements. 3.继 ...
- Java implement意思_详解JAVA中implement和extends的区别
详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...
- 【JAVA】JAVA关键字
java关键字 关键字即java中有特殊意义的单词 用于定义数据类型的关键字:class.interface.enum.byte.short.int.long.float.double.char.bo ...
- JAVA中堆和栈的区别和联系
一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于储存实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...
- 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等
1.Java中Thread和Runnable的区别??? 区别: 在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: 避免点 ...
最新文章
- 【Java并发编程】一、为什么需要学习并发编程?
- linux centos git 自动更新,centos 升级git到高级版本
- [WebKit] JavaScriptCore解析
- ORACLE PL/SQL编程之八: 把触发器说透
- [C# 基础知识系列]专题十五:全面解析扩展方法
- 设计师社区网站-交流、学习、展示
- MyEclipse + Tomcat + Eclipse 开发调试WEB应用
- python open写入_Python open读写文件实现脚本
- 人工智能这把双刃剑的利指的是什么?
- 听说C站还有人缺图片素材?一篇跟UI设计师要来的——图片网址整理大全 让你从此远离素材荒!(强烈建议收藏)
- 使用iWebOffice实现电子签章
- 014游移方位惯导系统力学编排公式推导
- STM8L IAP升级过程记录
- 2020考研数学一大纲之完全解析(一)
- 牛逼!你竟然把VSCode玩成了IDEA的效果,有点哇塞。。。
- LeetCode--476. 数字的补数
- web 计算器_计算器中的奢侈品——CASIO S200
- vue项目中画出优雅的线条(虚线、直线、折线、带箭头、流动效果等)
- 公众号文章中怎样图文排版可以实现逐行显示?
- 如何看linux版本
热门文章
- “内存不足”的九大原因及解决方法
- android设计安全性,Android操作系统安全性增强方案的设计与实现
- JAVA连接solr报404,java-Solr管理员给出404错误
- no such file or directory什么意思_为什么这次 MySQL 崩溃恢复要这么久-爱可生
- Grafana WebHook 报警通知踩坑系列,支持报警截图发钉钉卡片报警!!!
- Java虚拟机(三)——类加载子系统概述
- 计算机字符代码表,计算机ASCII码对照表
- zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习
- Imgproc.findContours函数
- uniapp 获取图片的高度_uniapp自定义切图