反射机制

java反射

青春壹個敷衍的年華 提交于 2019-12-11 23:11:33
一、概念:java反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。反射就是把java类中的各种成分映射成一个个的java对象。【通俗点:正常的:知道这个类->就可以通过创建对象来调用类中的方法和属性。反射:通过已知对象,获取到相应的类,进而调用该类的其它:方法和成员。】 二、反射机制获取类的三种方法:   1)直接通过类名.class的方式得到:clazz = person.class;#clazz其实就是我们所获得的类,只是为了与java的class不冲突而叫这个而已。   2)通过对象的getClass()方法获取,这个使用的少(一般是不知道什么类型的时候才用):Object obj = new Person();clazz = obj.getClass();   3)通过全类名获取,用的比较多,但可能抛出classNotFoundExcetion异常:clazz = Class.forName("com.java.reflection.person"); 备注:

反射

泄露秘密 提交于 2019-12-11 10:41:00
一、反射 1.类型信息 Java让我们在运行时识别类和对象的信息,主要有两种方式:一种是传统的RTTI(Run-Time Type Identification),它假定我们在编译期已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息,使用的前提条件是:必须先得到类的字节码的Class,Class类用于表示.class文件,也就是字节码文件 2.反射概述 Java反射机制是指,在运行状态中,能够知道这个类所有的属性和方法。对于任意一个对象,都能够调用它的任意一个属性和方法, 这种动态获取的信息以及动态调用对象的方法的功能叫做Java的反射机制 反射就是把类中的各个成分映射成一个个的对象 3. .class文件的唯一性 拿Student类举例 当我们第一次创建Student类的对象时,JVM会将Student类的字节码文件(Student.class)加载进内存,然后在堆内存开辟空间。 当我们想再次创建Student对象时,JVM会先去内存中寻找是否有Student类的字节码文件(Student.class),如果有,就不会再去加载Student类的字节码文件(Student.class),直接使用。这说明,每个类的字节码文件(.class)再内存的存在都是唯一的。 在一个万物皆对象的Java世界中,我们同样也可以获得类的.class文件的对象

Java基础之泛型&反射

落爺英雄遲暮 提交于 2019-12-11 05:45:46
a.泛型 含义: 是JDK1.5的新特性,本质是 参数化类型 ,即所操作的数据类型被指定为一个参数,使用时通过传参来指定具体的类型。 好处:安全简单 。具体体现在提供编译时的强类型检查,而不用等到运行;可避免类类型强制转换;增强代码可读性。 //不使用泛型需要强制转换 List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0) //使用泛型可避免强制转换 List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); 以上例子也能看到在 集合类 使用泛型的情况很普遍,而且相比于数组具有动态的特点。 类型 :通过创建位置的不同,分可为 泛型类 :public class 类名<泛型类型1,…> 泛型方法 :public <泛型类型1,…> 返回类型 方法名(泛型类型1 参数名1,…) 泛型接口 :public interface 接口名<泛型类型1,…> 下面分别举例说明。 //泛型类:把泛型定义在类上 public class ObjectTool<T> { private T obj; public T getObj() { return obj; } public

【JavaSE】反射

天涯浪子 提交于 2019-12-11 04:38:56
1.、概述 Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。 Java的反射机制允许编程人员在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制 好处: 可以在程序运行过程中,操作这些对象。 可以解耦,提高程序的可扩展性。 2、功能 在运行时判断任意的一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 优点: 可以实现动态创建对象和编译,体现出很大的灵活性 Public final Class getClass(); 以上的方法返回值 获取Class对象的多种方式 //对象.getClass():getClass()方法在Object类中定义着。 //多用于对象的获取字节码的方式 person . getClass ( ) ; //Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 //多用于配置文件,将类名定义在配置文件中。读取文件,加载类 Class . forName ( ) ; /

反射及反射的应用

房东的猫 提交于 2019-12-11 04:28:10
1、概念: JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 2、应用: 获取类的的属性对象、构造器对象、方法对象、注解信息 3、动态获取类模板的三种方式: //1、Class.forName(类的路径和类名,最常用) Class < ? > c = Class . forName ( "java.lang.String" ) ; //2、使用对象的getClass方法(运用不广泛) String str = "" ; Class < ? > cStr = str . getClass ( ) ; //从对象上面获取模板 //3、使用类型的 class 属性,可以用任意一种数据类型 Class < Integer > cint = int . class ; Class < ? > cString = String . class ; //注 :多个同类型的对象,获取到的信息是同一个类对象 String str1 = new String ( "123" ) ; String str2 = new String ( "456" ) ; System . out . println ( str1 . getClass ( ) ==

反射Reflection

有些话、适合烂在心里 提交于 2019-12-10 23:11:38
反射Reflection 一、静态语言和动态语言 动态语言 是一类在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python等。 静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言 :如Java、C、C++。 Java不是动态语言,但Java可以称之为“准动态语言” 。即Java有一定的动态性,我们可以 利用反射机制获得类似动态语言 的特性。Java的动态性让编程的时候更加灵活! 二、反射概述 1.Reflection(反射): 是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并 能直接操作任意对象的内部属性及方法 。 Class c = Class.forName(“java.lang.String”) 加载完类之后,在堆内存的方法区中就产生了一个 Class类型的对象(一个类只有一个Class对象) ,这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射 2.Java反射机制提供的功能 A

Java中的反射机制

时光怂恿深爱的人放手 提交于 2019-12-10 20:24:20
在学习反射机制之前我们先学习一下 什么是动态语言和静态语言? (1)动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被 引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代 码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python等。 (2)静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。 Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性, 我们可以利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更 加灵活! 1.反射的基本概念 (1)什么是反射? 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。 (2)反射机制提供的功能? 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法 在运行时处理注解 生成动态代理 (3)Java反射的优缺点 优点: 可以实现动态创建对象和编译,体现出很大的灵活性 缺点: 对性能有影响。

反射

末鹿安然 提交于 2019-12-10 19:54:28
反射 Java代码在计算机中经历的三个阶段 1.source源代码阶段 2.类对象阶段 3.RunTime运行时阶段 将类的各个组成部分封装为其他对象,这就是反射机制。 优点: 1.程序运行中可以获取这些对象; 2.可以解耦,提高可扩展性; 获取Class类的方式 1.Class.forName(“全类名”) 将字节码文件加载进内存,通过类名获取(静态方法)(多用于配置) 异常ClassNotFoundException:类名或者包名写错。 2.类名.class 类名属性(用于传参) 3.对象.getClass() 类的方法(对象获取字节码文件) 用= =比较这三个获取的类,= =比较内存地址,这三个引用指向堆内存中的同一个对象 同一个字节码文件在一次程序运行过程中,只会被加载一次,通过任意方式获取的Class对象都是同一个 Class对象功能 获取成员变量们 * Field[] getFields() :获取所有public修饰的成员变量 * Field getField(String name) 获取指定名称的 public修饰的成员变量 * Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符 * Field getDeclaredField(String name) 获取构造方法们 * Constructor<?>[]

Java-反射简介及例子

无人久伴 提交于 2019-12-10 18:43:26
定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种 动态获取信息以及动态调用对象方法 的功能称为java语言的反射机制。 实例 接下来呢通过一个实际的例子进行反射的解释,更加高级的解释和属性请看: https://www.jianshu.com/p/9be58ee20dee package test; //工厂类 public class Factory { public static CaluTemplate createOperator(String operate){ CaluTemplate calu=null; try{ // 通过读取配置文件的工具类,从配置文件中寻找用户输入的运算符,并返回运算符所对应的运算类名称 String value= Read.readPro(operate); // 利用反射实例化对应的运算类 calu=(CaluTemplate)Class.forName("test."+value).newInstance(); }catch(Exception e){ e.printStackTrace(); } return calu; } } package test; import java.io.IOException; import java.io

JavaSE基础——反射

纵饮孤独 提交于 2019-12-10 14:58:12
  1、反射概述   Java反射机制是在 运行状态下 ,对于任意一个类,都能够知道这个类所有的属性和方法;对于 任意一个对象 ,都能够调用它的任意一个方法和属性;这种动态获取的信息以及 动态调用对象的方法的功能 称为Java的反射机制。   加载完类之后, 在堆内存中的方法区就会产生了一个 Class 类型的对象 (一个类只有一个Class对象) ,这个对象就包含了完整的类的信息结构。我们可以 通过这个对象看到类的结构 。这个对象就像一面镜子,通过镜子可以看到类的结构,所以我们称之为反射。   2、反射的优缺点    优点: 可以实现动态的创建对象和编译,体现出很大的灵活性。    缺点: 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。   3、获取一个类的Class对象的三种方式: /** * 获取一个类的Class对象的三种方式 */ public class Test2 { public static void main ( String [ ] args ) throws ClassNotFoundException { //方式1:通过类的实例对象和Object类的getClass()方法获取 String s = new String ( "hello" ) ; Class