精华内容
下载资源
问答
  • Java反射创建对象效率高还是通过new创建对象的效率高? 通过new创建对象的效率比较高。 通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

    Java反射创建对象效率高还是通过new创建对象的效率高?

    通过new创建对象的效率比较高。
    通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

    展开全文
  • Javanew创建对象 图来自知乎 如果我们在代码中如果写了一段 A a = new A(); 在JVM中会帮你做的事情有以下: JVM把类的.java文件编译为一个.class的字节码文件 类加载器把.class文件加载进jvm的内存中,一个Class...

    2020.11.17
    查阅了很多资料,依然有些懵懂的地方,有错之处,还请大家多多指教。

    Java中new创建对象

    图来自知乎图来自知乎

    如果我们在代码中如果写了一段

    A a = new A();
    

    在JVM中会帮你做的事情有以下:

    1. JVM把类的.java文件编译为一个.class的字节码文件
    2. 类加载器把.class文件加载进jvm的内存中,一个Class对象生成,并放入方法区中,这Class对象对于任何类都是唯一一个。

    做完这些之后,才是new字段的工作:

    1. 判断内存中是否已经有那个唯一的Class对象
    2. 如果没有,则进行上述操作。
    3. 如果有,则在内存中申请空间开辟,即根据Class对象获取有关的构造器进行实例化,在这里我们假设是一个无参数构造,那么只需要newInstance()。

    Java中使用反射创建对象

    依然是上面这一幅图,但是我们这次的代码是我们最常见的反射代码

    Class c = Class.forName("A的全类名");
    

    当JVM编译到这段代码的时候,他的步骤是:
    1、使用类加载,将对应.class加载入内存的方法区中,并返回Class对象。
    这时候,我们可以查看这个类对象里面的构造器方法,并使用无参数构造器进行构造实例,即如下代码

    Constructor constructor = c.getConstructor();
    Object obj = constructor.newInstance();
    

    用同样的图,我们可以画出来。
    在这里插入图片描述到这里,我们几乎可以知道无论是反射,还是New,其实都是通过类加载器对.class文件加载进内存中,创建了Class对象。‘’

    那么,在其他博客中提到的动态编译和静态编译就好理解了。
    Java中反射属于动态编译,而new属于静态编译。

    粗俗解释:

    1、静态编译相当于把所有需要的东西都在初始化的时候加载了,如果程序一大,就很有可能会跑得慢。

    2、动态编译,在编译的时候,需要的模块都没有编译进去,启动程序的时候,模块不会被加载而是在运行的时候,需要哪个模块就调用哪个模块。

    上面的过程告诉我们,我们如果用new,那么我们要创建的类都是已经“写死”在.class文件里面了,我们无法控制JVM帮我们加载类的这一项工作。

    但是如果我们用反射创建类对象,我们是相当于亲自“指导”JVM,我们“按需加载”.class文件,如果内存里面没有这个类的.class文件,那么我们用Class.forName()去叫类加载器帮忙加载就行了,而不是把程序停下来,再打一段代码,再让类加载器进行加载,从而体现出了Java的“动态性”。

    参考资料有:
    知乎

    展开全文
  • 一、****************************...b1:反射属于动态编译,意思就说只有到运行时才会去获得该对象的实例,大多框架都是使用反射获取对象实例,如Spring 二、*****************************************************...

    一、**********************************************************************

    a1:new属于静态编译

    b1:反射属于动态编译,意思就说只有到运行时才会去获得该对象的实例,大多框架都是使用反射获取对象实例,如Spring

    二、**********************************************************************

    a2:静态编译类似于在编译的时候把你所有的模块都编译进exe里去,编译后就存在。

    b2:动态编译则相反,编译的时候那些些模块都没有编译进去,类似于把那些模块都编译成dll,这样启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到哪个模块就会利用反射去取模块

    三、**********************************************************************

    a3:反射对象是直到程序运行期间才知道类的名字的实例,这时才获取对象的成员,并设置属性。此时要用到类的全限定名才能加载出该类的实例,并返回该类的对象。然后就可以遍历类中的各个方法,各个属性。

    b3:new是给类直接在内存中创建一个实例,并且可以直接初始化等。不需要类的全路径。

    展开全文
  • javanew和反射的区别

    千次阅读 2019-02-03 23:33:30
    2:在使用new创建一个对象实例的时候必须知道类名,但是通过反射创建对象有时候不需要知道类名也可以(网上其他帖子也有相似观点但是都没有说明其原因,下面我就分析分析。 首先要使用反射创建对象必须要得到类的...

    区别如下:
    1:首先new出来的对象我们无法访问其中的私有属性,但是通过反射出来的对象我们可以通过setAccessible()方法来访问其中的私有属性。
    2:在使用new创建一个对象实例的时候必须知道类名,但是通过反射创建对象有时候不需要知道类名也可以(网上其他帖子也有相似观点但是都没有说明其原因,下面我就分析分析。
    首先要使用反射创建对象必须要得到类的Class对象,至于怎么得到这个Class对象,有很多方法例如对于类A及其实例str_a来说可以使用A.class(),str_a.getClass()或者Class.forName(“A”)。这几种方法无一例外都需要使用到类名来获取类Class对象,但是有一种方式是不需要类名的,那就是jdk的动态代理。动态代理是一种在运行期动态生成字节码并转换成代理类Class对象的一种方法,AOP连同IOC一起是spring的核心。我们下面就来看看源码:
    首先jvm在其内部通过函数ProxyGenerator.generateProxyClass()方法来生成代理对象的字节码文件(其实就没有具体文件,一切都是在内存中,暂时就这么叫吧),然后defineClass0()函数利用之前生成的二进制字节码文件来创建类Class对象,并顺便为代理类命名(proxyName是在字节码文件生成之前自己命名的),经过这个过程我们就可以在不知道类名的情况下得到了类Class对象了,然后就可以使用反射来获取对象实例了(这其中牵扯到类加载的加载过程,具体内容请详看有关资料) (其实上面所说的几种利用类名获取类Class对象的方法也是利用了类加载机制,也是使用了defineClass()函数,但是不同的是他们的字节码文件不是动态生成的而是利javac生成或者从网络,jar包上获取到的,接着使用类名找到相应的二进制字节码文件,然后利用defineclass()函数生成Class对象,所以类名在这几种方法中起的作用就是定位字节码文件的位置从而找到它,而动态代理是动态生成字节码文件,是一种典型的随用随生成的机制,也就不存在定位二进制字节码文件位置这个问题了)。排版真实难用,凑合看吧
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    原文:https://blog.csdn.net/jarvan_song/article/details/52044692

    展开全文
  • java通过反射创建对象的两种方式与区别 1.使用Class对象的newInstance()方法来创建对象: 具体步骤是: 1、获取类的Class对象(有三种方式可以获取,可以自行百度一下) 2、通过调用所获取到的Class对象的newInstance...
  • Java反射和new效率对比

    2021-01-23 14:35:21
    ​ 可是,你有没有想一下,什么时候我们改用new创建对象,什么时候我们改用反射创建对象呢? ​ 两者创建对象的效率又是如何呢? //new 方式创建对象 ReflectDemo reflectDemo = new ReflectDemo(); //反射创建对象 ...
  • java通过反射创建对象的两种方式

    千次阅读 2019-03-07 15:44:05
    java中,通过反射创建对象有两种方式 使用Class对象的newInstance()方法来创建对象; 具体步骤是 1、获取类的Class对象(有三种方式可以获取,可以自行百度一下) 2、通过调用所获取到的Class对象的newInstance...
  • java基础-反射3(反射,反射创建对象,操作对象属性,调用对象方法)前面通过学习,我们了解的运行时类型信息的基本原理,以及通过Class对象反射来获取运行时类型信息。下面来了解通过反射来创建对象,以及操作...
  • java使用反射创建对象

    千次阅读 2018-11-06 19:53:44
    Class对象中包括构造器(Constructor)、属性(Field)、方法(Method)。下面要讲的是通过反射来构造对应类的实例。...1、通过Class对象newInstance()方法来创建Class对象对应类的实例。这个方法是...
  • java 中通过反射创建对象
  • JAVA反射机制创建对象

    千次阅读 2017-12-15 16:04:49
    在实际开发过程中,JAVA反射技术应用广泛,尤其是在一些广泛使用的框架中,如Spring、mybatis中更是大量使用。java语言并不是一种动态语言,也就是说在运行时不能改变程序结构或者变量类型,但是JAVA提供了反射...
  • Java通过反射创建对象

    千次阅读 2016-11-13 23:28:35
    通过反射创建对象 创建对象之前,我们必须先知道要为哪个类创建对象。我们需要拿到这个类的全路径名。类似java.lang.String,除此之外我们还需要知道这个类的构造函数,是否有参数,参数的类型各是什么。下面分两种...
  • class Demo { public static void main(String[] args) { ... //根据类名获取Class对象 Class c = Class.forName("Test"); //参数类型数组 Class[] parameterTypes={int.class,int.class}; /
  • java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性方法。 反射可以创建类的对象. newInstance()方法可以创建类的实例.那么拥有该方法除了Class类之外,还有Constructor类. 可是,Class类中的...
  • 这里演示,通过反射创建默认构造方法的实例对象带参数的构造方法的实例对象。 案例实战 1. 反射访问默认构造方法,创建类实例对象 大概思路如下: 先在类中构建一个默认的构造方法 然后获取到Cl...
  • 在学习Java反射的过程中,遇到了一点疑惑的地方 //1.获取Class对象 Class clazz = Class.forName("com.atguigu.java.fanshe.Person"); //2. 利用Class对象newInstance方法创建一个类的实例 Object obj ...
  • * 反射:是在运行期间动态的加载一个类进来,动态的new 一个对象出来,动态去了解这个对象内部的结构,动态的去调用这个对象的某一个方法 好处是,配置文件里别的不用写,就写类的名字,就可以动态的把这个类加载...
  • java反射class的三种方式,反射创建对象的两种方式

    万次阅读 多人点赞 2018-08-15 11:46:21
    反射中,欲获取一个类或者调用某个类的方法,首先要获取到该类的 Class 对象。 1、获取Class对象Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法。 前提:已明确类...
  • 有人知道反射也能创建对象,这里我分为四种方式 new 关键字创建 Class 反射方式创建 已有对象创建 序列化创建 我先创建一个类,方便说明下面的代码 public class Student implements Serializable,Cloneable{ ...
  • Java反射机制创建对象

    万次阅读 多人点赞 2014-04-08 18:48:46
    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; class Person { private String name; private int age; public Person(String name
  • 反射得到的对象和new对象区别

    千次阅读 2018-08-15 08:49:27
    1. 在使用反射的时候,必须确保这个类已经加载并已经连接了。使用new的时候,这个类可以... new关键字可以调用任何public的构造方法,而反射只能调用无参构造方法。 3. new关键字是强类型的,效率较高。反射是弱...
  • java反射机制是在运行状态中,对于任意一个类, 能够知道这个类的所有属性方法;对于任意一个对象,都能够调用他的任意一个方法属性。这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。 ...
  • 总结一下今天所学,我们在学习java的时候,总会多多少少的听到过反射机制,但是我们好像听过之后就过去了,从来没去了解过它,然后平时做东西,也没有用到过。久而久之就慢慢给淡忘了。有时候面试的时候会被问道,你...
  • 通过对象获取创建对象的类型信息。 对类型(类)的一个抽象,就是JDK中的Class类; Class也是一个类,用来描述其他类的信息。 (二)Class对象的三种获取方式 序号 方式 1 通过对象的getClass()方法获取...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JREJDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序小程序的...
  • java 反射和new的区别

    千次阅读 多人点赞 2016-11-15 20:48:08
    关于java 反射和new的区别,在这里我不做多讲,因为网上有大把资料,描述得很详细。今天我只讲一点,为什么要用反射?直接用new不行么?干嘛弄得那么麻烦!1.基本上效果差不多,但是new对象,无法调用该类里面私有的...
  • 概念:动态获取或者动态调用对象的方法 的功能我们称之为java语言的反射机制. 为什么要用.class ? 举例:比如一只野外大象死亡。我们想要解剖它,查看大象的死因,以及其它属性(年龄、性别、心、肺、肝脏.........
  • Java - 如何通过反射创建对象

    万次阅读 2019-03-16 23:46:32
    分享一个大牛的人工智能教程。...- 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance() - 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Cons...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 182,705
精华内容 73,082
关键字:

java反射创建对象和new

java 订阅