Java Reflection
Java语言的反射机制
1. Java反射的含义:获取应用中正在运行的Java对象。
2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性、方法以及构造函数,对于任意对象都可以调用它的方法。这种在运行时动态获取和修改类的信息的能力称为Java反射机制。
3. Java反射的功能:
1) 在运行时判断任意一个对象所属的类
2) 在运行时创建任意一个类的对象
3) 在运行时获取任意一个类的所有成员变量、方法以及构造函数
4) 在运行时调用任意一个对象的方法
5) 作为动态代理的基础,生成代理类
4. Java反射的实现类
1) Class : Class类表示Java应用运行时的类或接口
2) Field : 提供有关类或接口的属性信息的对象
3) Method : 提供有关类或接口方法信息的对象
4) Constructor : 提供有关类构造函数的信息
注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/ 属性/构造方法/访问权限)都需要它来实现。
5. 编写Java反射程序的步骤:
1) 首先获取一个类或对象的Class对象,方法如下:
Class clazz1 = ClassName.class;
Class clazz2 = Class.forName("com.znker.reflection.ClassName");
Class clazz3 = Object.getClass();
2) 调用Class对象中的方法来获取一个类的的属性、方法以及构造函数的对象
6. Java反射的使用案例
1) 获取一个对象的包名和类名
package com.znker.reflection;
public class ReflectionDemo {
// other codes
}
/**
* Java 反射案例:获取一个对象的完整包名和类名
*
*/
public class ReflectionTest {
public static void main(String[] args) {
ReflectionDemo demo = new ReflectionDemo();
System.out.println(demo.getClass().getName());
}
}
2) 实例化Class对象
package com.znker.reflection;
/**
* 三种实例化Class对象的方式
*
* */
public class ReflectionTest {
@SuppressWarnings({ "unused", "rawtypes" })
public static void main(String[] args) {
// 最常用的形式
try {
// @param 类的全路径名
Class<?> clazz1 = Class.forName("com.znker.reflection.Reflection");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class clazz2 = ReflectionDemo.class;
Class clazz3 = new ReflectionDemo().getClass();
}
}
3) 利用无参构造函数创建对象
package com.znker.reflection;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "[" + this.name + " , " + this.age + "]";
}
}
package com.znker.reflection;
public class Refdemo {
public static void main(String[] args) {
Class<?> demo = null;
try {
demo = Class.forName("com.znker.reflection.Person");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Person person = null;
try {
// 通过无参构造函数实例化对象, 构造一个与Class有关的对象
person = (Person) demo.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
person.setName("John");
person.setAge(18);
System.out.println(person);
}
}
Java Reflection的更多相关文章
- Java Reflection(getXXX和getDeclaredXXX)
package com.sunchao.reflection; public class Person { private int age ; private String name; public ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- Java Reflection 反射基础
反射基础: package reflection; /** * Created by : Infaraway * DATE : 2017/3/2 * Time : 23:06 * Funtion : ...
- Some Link: Java Reflection
http://docs.oracle.com/javase/tutorial/reflect/index.html https://bugs.openjdk.java.net/browse/JDK-4 ...
- java reflection总结
一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高. Class class2 = s ...
- Java Reflection - Getters and Setters
原文链接:http://tutorials.jenkov.com/java-reflection/getters-setters.html 通过使用 Java 反射,我们能够在程序执行时观察 clas ...
- Java Reflection (JAVA反射) --转载
对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的一些非 ...
- Java Annotations, Java Reflection, and Java Test Runner
www.vogella.com/tutorials/JavaAnnotations/article.html
- Java反射(Reflection)
基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于J ...
随机推荐
- 整理一下自己用到的SVN几个命令
第一步 svn co 代码分支(http://yyyyyyyyyyyyyyyy) 将开发给的代码分支地址中的代码拉到测试机中 第二步 cd /目录 进入需要拉代码的目录 然后 ll 查看目录下的 ...
- Sql获取数据集中各类型中的最大值(最新值)
select * from ( SELECT t.*,ROW_NUMBER() over (partition by t.pid order by t.op_time desc) num ...
- Thinkphp源码分析系列(九)–视图view类
视图类view主要用于页面内容的输出,模板调用等,用在控制器类中,可以使得控制器类把表现和数据结合起来.下面我们来看一下执行流程. 首先,在控制器类中保持着一个view类的对象实例,只要继承自控制器父 ...
- leetcode 190
190. Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 4326159 ...
- 采用TCP协议实现PIC18F97J60 ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). TCP/IP Stac ...
- arcgis对谷歌遥感影像拼接
对于遥感影像的研究多种多样,有小尺度的也有大尺度的还有多尺度的.可以研究一个城市里的一个区,也可以研究一个省甚至全国范围.当研究的区域比较大的时候,在一幅影像上无法包括研究区的所有范围,那么就需要下载 ...
- Js根据Ip地址自动判断是哪个城市
var province = '' ;var city = '' ;jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iploo ...
- C语言字符输出格式化
转自http://blog.csdn.net/pbymw8iwm/article/details/8153226 符号属性 长度属性 基本型 所占 位数 取值范围 输入符举例 输出符举例 -- -- ...
- 柯朗数(Courant number)研究
在数值计算过程中,对于计算结果的准确性和效率有很高的要求,但是这两者之间往往互相矛盾:而使用柯朗数可用于平衡两者. 1.柯朗数的定义: C = sqrt(gh)*t/s 其中,t是时间步长,s是网格在 ...
- 账号控管:NIS服务器
NIS服务器 sun最开始命名为 Yellow pages ,黄页, NIS = YP; 14.1 NIS的由来与功能 NIS--Network information services( ...