反射机制

java反射机制!

假如想象 提交于 2020-01-10 18:11:27
Java反射 在 Java 中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为 RTTI,即运行时类型识别,运行时类型识别主要由Class类实现。 1、 Class类 在Java中,我们常用“class”(首字母为小写的c)关键字来定义一个类,说这个类是对某一类对象的抽象。你比如说王二是一个网络知名作者,我们可以这样简单地定义作者类: package com.cmower.java_demo.fifteen; class Author { private String pen_name; private String real_name;} 现在,我们想知道Writer这个类本身的一些信息(比如说类名),该怎么办呢?这时候就需要用到“Class”(首字母为大写的C)类,该类包含了与类有关的信息。请看以下代码: public class Test { public static void main (String [] args) { Author wanger = new Author(); Class c1 = wanger.getClass(); System.out.println(c1.getName()); //输出 com.cmower.java_demo.fifteen.Author }} 当我们创建了作者对象wanger后

反射机制

瘦欲@ 提交于 2020-01-10 14:59:33
1 反射的概述 1.1 什么是反射 每个.class文件被加载到内存后都是一个Class类的对象!例如Demo.class加载到内存后它是Class<Demo>类型的一个对象。 反射就是通过Class对象获取类型相关的信息。一个Class对象就表示一个.class文件,可以通过Class对象获取这个类的构造器、方法,以及成员变量等。 反射是Java的高级特性,在框架中大量被使用!我们必须要了解反射,不然无法学好JavaWeb相关的知识! 1.2 反射相关类 与反射相关的类: l Class:表示类; l Field:表示成员变量; l Method:表示方法; l Constructor:表示构造器。 2 Class类 2.1 获取Class类 获取Class类的三种基本方式: l 通过类名称.class,对基本类型也支持; Class c = int.class; Class c = int[].class; Class c = String.class l 通过对象.getClass()方法 Class c = obj.getClass(); l Class.forName()通过类名称加载类,这种方法只要有类名称就可以得到Class; Class c = Class.forName(“cn.itcast.Demo”); 2.2 Class类的常用方法 l String

三十二、JavaSE之反射(这个部分很重要)

北城余情 提交于 2020-01-10 03:27:45
1.类加载器 1.1类加载【理解】 类加载的描述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化 类的加载 就是指将class文件读入内存,并为之创建一个 java.lang.Class 对象 任何类被使用时,系统都会为之建立一个 java.lang.Class 对象 类的连接 验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致 准备阶段:负责为类的类变量分配内存,并设置默认初始化值 解析阶段:将类的二进制数据中的符号引用替换为直接引用 类的初始化 在该阶段,主要就是对类变量进行初始化 类的初始化步骤 假如类还未被加载和连接,则程序先加载并连接该类 假如该类的直接父类还未被初始化,则先初始化其直接父类 假如类中有初始化语句,则系统依次执行这些初始化语句 注意:在执行第2个步骤的时候,系统对直接父类的初始化步骤也遵循初始化步骤1-3 类的初始化时机 创建类的实例 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe命令来运行某个主类 1.2类加载器【理解】 1.2

Java反射机制介绍

♀尐吖头ヾ 提交于 2020-01-10 01:54:14
1. 文档概述 Java反射是Java被视为动态(或准动态)语言的一个关键性质,Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的classes。换言之,Java可以加载一个运行时才得知名称的class,获得其完整结构。 在工作过程中,常会听到反射这个概念,在平常的代码开发中也有看到和使用到,只是对它没有一个较深入的了解,这次重新理解学习了一下反射机制,结合公司产品中的Hotweb框架,加深理解,本文为学习过程中的总结。 2. 目标读者 数通畅联内部员工 广大计算机爱好者 3. 术语解释 静态加载类 (编译时加载类):大多数情况下都是使用这种形式。比如我们定义了一个类A,实例化采用A a = new A()接着就可以通过a对象调用相关方法或属性,这就是静态加载类的过程。 动态加载类 (运行时加载类):所谓动态加载类,只需要通过Class c = Class.forName("类的全名")即可获得类类型,然后通过调用A a = c.newInstance()方法即可实例化这个类。 本质的区别在于静态加载的类的源程序在编译时期加载(必须存在),而动态加载的类在编译时期可以缺席(源程序不必存在)。 反射机制 :在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

【软帝学院】Java反射机制!

丶灬走出姿态 提交于 2020-01-09 16:40:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java反射 在 Java 中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为 RTTI,即运行时类型识别,运行时类型识别主要由Class类实现。 1、 Class类 在Java中,我们常用“class”(首字母为小写的c)关键字来定义一个类,说这个类是对某一类对象的抽象。你比如说王二是一个网络知名作者,我们可以这样简单地定义作者类: package com.cmower.java_demo.fifteen; class Author { private String pen_name; private String real_name;} 现在,我们想知道Writer这个类本身的一些信息(比如说类名),该怎么办呢?这时候就需要用到“Class”(首字母为大写的C)类,该类包含了与类有关的信息。请看以下代码: public class Test { public static void main (String [] args) { Author wanger = new Author(); Class c1 = wanger.getClass(); System.out.println(c1.getName()); //输出 com.cmower.java_demo

Java反射机制

☆樱花仙子☆ 提交于 2020-01-08 18:33:45
所谓反射,就是能够让运行于JVM中的程序检测和修改运行时的行为。 而Class反射对象描述类语义结构,可以从Class对象中获取构造函数、成员变量、方法类等类元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射对象类在java.reflect包中定义。 主要的反射类 Constructor 类的构造函数反射类,会通过Class#getConstructor()方法获取类的构造函数反射对象;Constructor类的主要方法是newInstance(Object[] initargs),通过这个方法可以创建一个类的实例。 Method 类方法的反射类,通过Class#getDeclaredMethods()方法获取类的所有方法反射类对象的数组,或者是通过getDeclaredMethods(String name)来获取特定方法的反射类对象。Method类的一个主要方法是invoke(Object obj,Object[] args),其中obj是操作的目标对象,args是方法的入参,通过这个方法可以获取到具体实例对象的具体方法。 Filed 类的成员变量的反射类,通过Class#getDeclaredFieldsO方法可以获取类的成员变量反射对象数组,通过Class#getDeclaredField(String name

Java 高级开发必修知识---反射

痞子三分冷 提交于 2020-01-08 08:04:26
程序猿们经常说的一句话:反射反射。。。程序员的快乐 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 文章开始之前 提一下: java反射操作其实就是主要围绕Class,Field,Methon,Constructor等几个类来操作其中的方法 Class类的使用 1) 在面向对象的世界里,万事万物皆对象 A. Java语言中,普通数据类型,静态成员不是对象,其他皆对象 B. 每一个类也是对象 C. 类是java.lang.Class类的实例对象 There is a class named Class 对象的表示: 普通类对象表示: Foo foo = new Foo(); Class类实例对象表示: //Foo也是一个实例对象,是Class类的实例对象 任何一个类都是Class的实例对象,这个实例对象有三种表达方式 1. 任何一个类都有一个隐含的静态成员变量class: Class c1 = Foo.class; 2. 已经指定该类的对象通过getClass方法 Foo foo = new Foo(); Class c2 = foo.getClass(); 官网:c1/c2 表示了Foo类的类类型(class type)

Java 高级开发必修知识---反射

巧了我就是萌 提交于 2020-01-08 05:28:23
z摘自: http://www.cnblogs.com/lsy131479/p/8798217.html 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 文章开始之前 提一下: java反射操作其实就是主要围绕Class,Field,Methon,Constructor等几个类来操作其中的方法 万物皆对象。但基本数据类型 和 使用static修饰的成员不是对象 但基本数据类型的封装类是对象 Class类的使用 1) 在面向对象的世界里,万事万物皆对象 A. Java语言中,普通数据类型,静态成员不是对象,其他皆对象 B. 每一个类也是对象 C. 类是java.lang.Class类的实例对象 There is a class named Class 对象的表示: 普通类对象表示: Foo foo = new Foo(); Class类实例对象表示: //Foo也是一个实例对象,是Class类的实例对象 任何一个类都是Class的实例对象,这个实例对象有三种表达方式 1. 任何一个类都有一个隐含的静态成员变量class: Class c1 = Foo.class; 2. 已经指定该类的对象通过getClass方法 Foo foo

Java反射基础

*爱你&永不变心* 提交于 2020-01-08 04:21:29
Java反射机制定义   Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法。 反射机制的优点与缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 优点 可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。 缺点 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

【java提高】---java反射机制

拟墨画扇 提交于 2020-01-08 02:11:37
java反射机制 一、概述 1、什么是反射机制 反射机制是 在运行状态 中 ,对于任意一个类,都能够知道这个类的所有属性和方法 ; 对于任意一个对象,都能够调用它的任意一个方法和属性 ;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2、反射机制能做什么 反射机制主要提供了以下功能: 1) 在运行时判断任意一个对象所属的类; 2) 在运行时构造任意一个类的对象; 3) 在运行时判断任意一个类所具有的成员变量和方法; 4) 在运行时调用任意一个对象的方法; 5) 生成动态代理。 3、反射的优点和缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念: 静态编译 :在编译时确定类型,绑定对象,即通过。 动态编译 :运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 一句话, 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性 ,特别是在J2EE的开发中它的灵活性就表现的十分明显。 比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如 这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新, 而采用反射机制的话