在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述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的区别相关推荐

  1. Java 关键字super和this的使用及区别

    "this",作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递.this(a,b)表示调用另外一个构造函数.这里面的this就是一个特殊语法,不是变量,没有什么类型. ...

  2. java protostuff 好处,java序列化Protostuff和Serializable的区别

    java序列化Protostuff和Serializable的区别 关注:146  答案:1  mip版 解决时间 2021-01-25 06:11 提问者你若离去丶巴掌扇去 2021-01-24 0 ...

  3. Java关键字(53个关键字)

    Java关键字(53个关键字) abstract  default  goto*  null  switch  boolean  do  if  package  nchronzed  break  ...

  4. Java关键字与保留字说明及使用

    Java关键字与保留字说明及使用 abstract boolean break byte case catch char class continue default do double else e ...

  5. JAVA抽象类和接口类的区别

    JAVA抽象类和接口类的区别 1.声明方式不同.抽象类为abstract class,接口类为interface. 2.继承抽象类关键字为extends,实现接口关键字为implements. 3.继 ...

  6. Java implement意思_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...

  7. 【JAVA】JAVA关键字

    java关键字 关键字即java中有特殊意义的单词 用于定义数据类型的关键字:class.interface.enum.byte.short.int.long.float.double.char.bo ...

  8. JAVA中堆和栈的区别和联系

    一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于储存实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...

  9. 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等

    1.Java中Thread和Runnable的区别??? 区别: 在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: 避免点 ...

最新文章

  1. 【Java并发编程】一、为什么需要学习并发编程?
  2. linux centos git 自动更新,centos 升级git到高级版本
  3. [WebKit] JavaScriptCore解析
  4. ORACLE PL/SQL编程之八: 把触发器说透
  5. [C# 基础知识系列]专题十五:全面解析扩展方法
  6. 设计师社区网站-交流、学习、展示
  7. MyEclipse + Tomcat + Eclipse 开发调试WEB应用
  8. python open写入_Python open读写文件实现脚本
  9. 人工智能这把双刃剑的利指的是什么?
  10. 听说C站还有人缺图片素材?一篇跟UI设计师要来的——图片网址整理大全 让你从此远离素材荒!(强烈建议收藏)
  11. 使用iWebOffice实现电子签章
  12. 014游移方位惯导系统力学编排公式推导
  13. STM8L IAP升级过程记录
  14. 2020考研数学一大纲之完全解析(一)
  15. 牛逼!你竟然把VSCode玩成了IDEA的效果,有点哇塞。。。
  16. LeetCode--476. 数字的补数
  17. web 计算器_计算器中的奢侈品——CASIO S200
  18. vue项目中画出优雅的线条(虚线、直线、折线、带箭头、流动效果等)
  19. 公众号文章中怎样图文排版可以实现逐行显示?
  20. 如何看linux版本

热门文章

  1. “内存不足”的九大原因及解决方法
  2. android设计安全性,Android操作系统安全性增强方案的设计与实现
  3. JAVA连接solr报404,java-Solr管理员给出404错误
  4. no such file or directory什么意思_为什么这次 MySQL 崩溃恢复要这么久-爱可生
  5. Grafana WebHook 报警通知踩坑系列,支持报警截图发钉钉卡片报警!!!
  6. Java虚拟机(三)——类加载子系统概述
  7. 计算机字符代码表,计算机ASCII码对照表
  8. zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习
  9. Imgproc.findContours函数
  10. uniapp 获取图片的高度_uniapp自定义切图