菜鸟学Java(十四)——Java反射机制(一)
说到反射,相信有过编程经验的人都不会陌生。反射机制让Java变得更加的灵活。反射机制在Java的众多特性中是非常重要的一个。下面就让我们一点一点了解它是怎么一回事。
什么是反射
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射有什么用
1,在运行时判断任意一个对象所属的类;
2,在运行时构造任意一个类的对象;
3,在运行时判断任意一个类所具有的成员变量和方法;
4,在运行时调用任意一个对象的方法;
5,生成动态代理。
反射的API
学习一门语言,一种比较好的方式就是看它的API文档,因为它的API是最权威的,最准确的。下面我们一起看看JDK的API对于反射是如何描述的吧!
与反射有关的所有接口以及类都在java.lang.reflect包里。
接口
接口摘要 |
|
表示目前正在此 VM 中运行的程序的一个已注释元素。 |
|
GenericArrayType 表示一种数组类型,其组件类型为参数化类型或类型变量。 |
|
声明类型变量的所有实体的公共接口。 |
|
InvocationHandler 是代理实例的调用处理程序 实现的接口。 |
|
成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息。 |
|
ParameterizedType 表示参数化类型,如 Collection<String>。 |
|
Type 是 Java 编程语言中所有类型的公共高级接口。 |
|
TypeVariable 是各种类型变量的公共高级接口。 |
|
WildcardType 表示一个通配符类型表达式,如 ?、? extends Number 或 ? super Integer。 |
类
类摘要 |
|
AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。 |
|
Array 类提供了动态创建和访问 Java 数组的方法。 |
|
Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。 |
|
Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。 |
|
Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。 |
|
Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。 |
|
Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。 |
|
反射操作的 Permission 类。 |
下面给大家写了一个小实例:
- package reflection;
- public class UserInfo {
- private Integer id;
- private String userName;
- private String password;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Override
- public String toString(){
- return this.getClass().getName();
- }
- }
- package reflection;
- public class GetClass {
- public boolean ClassCheck(){
- try {
- System.out.println("第一种,通过类本身获得对象");
- Class UserClass = this.getClass();
- System.out.println("第一种方式成功!类名:"+UserClass.toString()+"\n");
- System.out.println("第二种,通过子类实例获取父类");
- UserInfo ui = new UserInfo();
- UserClass = ui.getClass();
- Class SubUserClass = UserClass.getSuperclass();
- System.out.println("第二种方式成功!类名:"+SubUserClass.toString()+"\n");
- System.out.println("第三种,通过类名加.class获得对象");
- Class ForClass = reflection.UserInfo.class;
- System.out.println("第三种方式成功!类名:"+ForClass.toString()+"\n");
- System.out.println("第四种,通过类名的字符串获得对象");
- Class ForName = Class.forName("reflection.UserInfo");
- System.out.println("第四种方式成功!类名:"+ForName.toString()+"\n");
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- @Override
- public String toString(){
- return this.getClass().getName();
- }
- public static void main(String[] args) {
- GetClass gc = new GetClass();
- gc.ClassCheck();
- if (gc.ClassCheck()) {
- System.out.println("所有反射全部成功!");
- }
- else {
- System.out.println("反射有问题,请检查!");
- }
- }
- }
上面四种方法里面,我用的最多的是第四种,这种一般都是配合配置文件一起用的。反射与配置文件的结合让我们的代码变得非常的灵活,易扩展、以维护。可谓是好处多多呀,所以才有那句”反射反射,程序员的快乐!“一起尽情的快乐吧!
PS:下一篇将结合实例更加详细的讲解!《菜鸟学编程(十)——Java反射机制(二)》
菜鸟学Java(十四)——Java反射机制(一)的更多相关文章
- JAVA学习第六十四课 — 反射机制
Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...
- Java 核心类库之反射机制
1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...
- HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others) M ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470 Count Time Limit: 6000/3000 MS (Java/Others) ...
- HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
简单数学题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 从零开始学java (四)反射
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. ...
- 在JAVA中,关于反射机制的讨论
一.什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...
随机推荐
- update pm storage
BEGIN #Routine body goes here... INSERT INTO EMS_PM_STORAGE ( AMOID, GP_BEGIN_TIME, EMS_RECORD_TIME, ...
- A. Kyoya and Photobooks(Codeforces Round #309 (Div. 2))
A. Kyoya and Photobooks Kyoya Ootori is selling photobooks of the Ouran High School Host Club. He ...
- MATLAB 的循环语句
1.MATLAB while循环语法 在MATLAB 中 while循环的语法如下: while <expression> <statements> end while 循环反 ...
- 是否只查看安全传送的网页内容? 去掉 IE弹出窗口
选择IE工具intemt选项,在选项卡里选择安全,然后在安全选项卡里点自定义级别,在设置里找到‘其他’这个分类,在次分类下找到‘显示混合内容’选择‘启用’然后保存退出就OK了,当然楼上几位说安全问题, ...
- iOS 性能调优
1.内存空间的划分: 我们知道,一个进程占用的内存空间,包含5种不同的数据区:(1)BSS段:通常是存放未初始化的全局变量:(2)数据段:通常是存放已初始化的全局变量.(3)代码段:通常是存放程序执行 ...
- ubuntu下安装配置minicom(解决默认的端口/dev/tty8,改不过来的问题)
Minicom是linux下串口通信的软件,下面讲下ubuntu Minicom的安装和配置. 安装: sudo apt-get install minicom 或在新立得软件包管理器中搜索“mini ...
- 如何使用SetTimer
1.SetTimer定义在那里? SetTimer表示的是定义个定时器.根据定义指定的窗口,在指定的窗口(CWnd)中实现OnTimer事件,这样,就可以相应事件了. SetTimer有两个函数.一个 ...
- HDU 2227 Find the nondecreasing subsequences (数状数组)
Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/3 ...
- 【Oracle】详解Oracle中NLS_LANG变量的使用
目录结构: contents structure [+] 关于NLS_LANG参数 NSL_LANG常用的值 在MS-DOS模式和Batch模式中设置NLS_LANG 注册表中NLS_LANG和系统环 ...
- spring-data-redis读写分离
在对Redis进行性能优化时,一直想对Redis进行读写分离.但由于项目底层采用spring-data-redis对redis进行操作,参考spring官网却发现spring-data-redis目前 ...