Class.newInstance()学习

Class类简介——详述创建对象的两种方式之newInstance()方法 1、Class类简介:  Java程序... 阅读详情
在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?
  用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。
  Java中工厂模式经常使用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就可以。
   从jvm的角度看,我们使用new的时候,这个要new的类可以没有加载;
  但是使用newInstance时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是class的静态方法forName()方法,这个静态方法调用了启动类加载器(就是加载java API的那个加载器)。
  有了上面jvm上的理解,那么我们可以这样说,newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。
  这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。

       newInstance: 弱类型。低效率。只能调用无参构造。
       new: 强类型。相对高效。能调用任何public构造。
class.newInstance()方法被弃用 java1.9版本中,newInstance()已经被弃用,取而代之的是 class.getDeclaredConstructor().newInstance() class.newInstance() 会直接调用该类的无参构造函数进行实例化 class.getDeclaredConstructor().newInstance() getDeclaredConstructor()方法会根据他的... 阅读详情

相关推荐

newInstance()和new()

Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对

hippoppower的专栏 1万+

Class.newInstance与同new的到对象的区别

先说一下区别 1、使用newInstance可以解耦。使用newInstance的前提是,类已加载并且这个类已连接,这是正是class的静态方法  forName()完成的工作。newInstance实际上是把new         这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。 2、newInstance: 弱类型。低效率。只能调用无参构造。 ne

qq_29631069的博客 1万+

newInstance参数详解以及反射的应用

通过反射创建新的类示例,有两种方式: Class.newInstance() Constructor.newInstance() 以下对两种调用方式给以比较说明: Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数; Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。 Class.newInstance() 抛出所有由被调...

csdn_duanjiao2016的博客 2843

Java中创建对象共有几种方式?

Java中创建对象共有几种方式? 5种创建对象的方法: 1.通过new申请对象空间(堆空间) 2.通过Class类中的newInstance()方法 3.通过Constructor类中的newInstance()方法 4.通过Object类中的clone()方法 5.通过对象的反序列化......

识时务者的个人博客 14万+

java 对象创建过程_Java中创建对象的5种方法

将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例。作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖管理系统去创建这些对象,例如 Spring 。然而,我们可以有更多的方式去创建对象,让我们一起在文章中去学习这些方法吧。这里列举在 Java 中创建对象的五种方式,下面将介绍它们的示例,以及创建对象的行...

weixin_39933336的博客 74

创建对象的几种方式

创建对象的几种方式

134

Java基础复习(DaySeven):自动装箱与拆箱、反射、异常

对象包装器与自动装箱所有的基本类型都有一个与之对应的类。这些类一般被称为包装器(wrapper)byte对应Byteshort对应Shortint对应Integerlong对应Longdouble对应Doublefloat对应Floatchar对应Characterboolean对应Boolean而且与整形和浮点型相关的都会继承公共父类Number(即Byte、Short、Integer、Long、Double、Float)还要注意的是包装类都是不可继承的(都被final关键字修饰)

2401_84046876的博客 1005

Java基础-class 类的基础方法

Class里的方法getDeclaredClasses 获取到类里所有的的class ,interface 包括了private ,protected,default,public例子:定义一个Payment的基本类如下public class Payment { }测试public class PaymentReflectTest { }打印出来的结果如下class rechard.learn.reflect.Payment$InnerAccount2class rechard.learn.reflect

783

Java反射之创建对象

目录一、调用构造方法二、案例:依赖注入实现 Java反射机制提供了另外一种创建对象方法,Class类提供了一个实例方法newInstance(),通过该方法 可以创建对象,使用起来比较简单,下面两条语句实现了创建字符串String对象。 Class clz = Class.forName("java.lang.String"); String str = (String) clz.newInst...

蔡政洁的博客 1002

Java反射

一、概念 运行状态中知道类所有的属性和方法。 在Java中的反射机制是指在运行状态中,对于任意一个类都能知道这个类的所有属性和方法,并且对于任意一个对象,都能调用它的任意一个方法。这种能够获取信息以及动态调用对象方法的功能称为JAVA语言的反射机制。 二、class文件包含的内容 三、使用场所 Java程序运行时,许多对象会出现两种类型:编译时类型,运行时类型。 编译时类型:由声明对象时实用的类型来决定。 运行时类型:由实际赋值给对象的类型决定。 例: Person p = new Student();

shayukaifa的博客 271

java面试题整理《基础篇》六

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。强引用(StrongReference)最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“objectobj=newObject()”这种引用关系。使用对象的clone()方法返回对象Useruser2=user.clone();不调用任何的构造器,直接复制已有的数据,来初始化新建的对象。new一个对象最常见的方式Useruser=newUser();实例化对象有哪几种方式?...

hutubiancheng的博客 151

Javaclass newInstance()方法及示例

class newInstance()方法 (Class class newInstance() method) newInstance() method is available in java.lang package. newInstance()方法在java.lang包中可用。 newInstance() method is used to create a new instance ...

cumtv80668的专栏 8117

Class.newInstance()和Constructor.newInstance() 的区别,详细!!!

通过反射创建新的类示例,有两种方式:Class.newInstance() Constructor.newInstance() 以下对两种调用方式给以比较说明:Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数; Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。 Class.newInstance() 抛出所...

爱的叹息的专栏 1499

Java笔记(7)】反射实例化对象clazz.getDeclaredConstructor().newInstance()class.newInstance()

目录一、Class类的实例化方式二、反射实例化对象三、关键字总结 一、Class类的实例化方式 package reflect; import java.util.Date; /** * Class类对象的三种形式,三种形式都很重要 * * @ClassName: ClassObjectThreeDome * @Author: Xlu103 * @Date: 2020-06-07 19:14 **/ public class ClassObjectThreeDome { //注意会抛出

weixin_43493559的博客 4370
上一篇: java栈和堆
下一篇: Java开源框架学习初体验
myjava_024
博客等级 码龄20年 59粉丝 45原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值