Java中的反射
本文是针对对于Java反射机制不甚了解的初学者所作。
在谈反射之前,首先了解下反射的作用,这样可以提高我们学习他的主动性。
大家都在说反射多么多么重要,多么好用,那么究竟体现在哪里呢,我就从最基本的方面谈谈。
一、反射的作用
设想在工作中,两个程序员分开工作,其中一个程序员需要使用另一个程序员所写的类,但是并不知道那个类是否已经开发好,也不知道那个类里的属性和方法,但是项目的需求,必须调用那个类。这时,就可以使用java的反射机制。
通俗的说,java的反射机制可以在运行状态中对于任何一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种对于java类结构探知的能力,我们叫做java的“自审”,也即java的反射机制。
(注意:“运行状态中”是前提,如无此前提,反射就毫无意义了。)
知道反射的作用后,我们来探究下java反射的实质。
二、反射的实质
反射的所有功能都是基于一个Class类,让我们先了解下Class类。
万物皆对象,我们把具有共性的对象抽象成类。
每个类又有属性和方法,不管是已知的类,还是未知的类,那么对于类而言,它也有共性,所以java中把这个共性抽象化,新构建出一个Class类(大家可以在JDK java.lang包下找到这个类),因此,Class类并不是一个简单的类,而是一个类的模型,更贴切的说是类的抽象。
我想这应该是反射初学者最不易理解的地方,打个比方解释一下:男人和女人都是人,人是男人和女人的抽象,是一个类;金丝猴和猕猴都是猴,猴也是一个类。但人和猴都是动物,Class类就相当于动物类。如果知道某个X属于动物类,那我们就知道X有眼睛有嘴;同样,我们通过Class类也可以知道任何一个类的属性和方法。
Class<T> 可以是任何类的类型,如:String.class 的类型是 Class<String>,如果构建的类未知,也可以用Class<?>表示。
Class类没有公共的构造方法。Class对象是在加载类时由Java虚拟机以及通过类加载器自动构造的。
获取Class类的对象的过程其实就是反射。
三、反射的应用
列举三个我们常用的方法:
(1)、类名.class
(2)、Class.forName(“包名.类名”)
(3)、通过对象名.getClass()
在得到Class类的对象(我们常定义为clazz)后,就可以获取该类相应的方法和属性了。
这个在JDK的API中都有,我列举几个常用的方法如下:
(1)、getConstructor() 获取构造函数
(2)、getMethod() 获取成员方法
(3)、getField() 获取成员变量
(4)、getDeclaredConstructor() 获取私有的构造函数
(5)、getDeclaredMethod() 获取私有的成员方法(即不包括继承的方法)
(6)、getDeclaredField() 获取私有的成员变量(即不包括继承的属性)
注:以上方法名加s后获取的是相应的数组对象,如Method[]。
(7)、isArray() 判断此class对象是否表示一个数组类,返回boolean
(8)、isAnnotation() 判断是否表示一个注解,返回boolean
其实,java中反射无处不在,常用的框架如spring、struts、hibernate等在底层都用到了反射,感兴趣的朋友可以研究一下。万变不离其宗,要想用好反射,就是抓住反射的本质,加深对Class类的理解,在业务需求中果断灵活的运用。
相关推荐
这份"java大学教程——课件"集合提供了一套系统性的学习资源,专为初学者设计,旨在帮助他们掌握Java编程基础。 首先,Java的核心概念包括面向对象编程(OOP)原则。Java是一种强类型、静态类型的编程语言,它的类...
【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...
这份资源包含了一系列精心挑选的JAVA题目,覆盖了从基础语法到高级特性的广泛内容,是JAVA初学者与进阶者提升技能的宝贵资料。 在JAVA编程中,例子是学习过程中的关键部分,因为它们能直观地展示理论知识如何应用于...
本资源“Java葵花宝典”旨在为初学者和经验丰富的开发者提供一系列关于Java的常见问题解答,以及深入理解Java各种核心概念的解析,帮助读者在Java学习之路上披荆斩棘,稳步前行。 1. **Java基础知识** - **Java...
总之,《精通JAVA——JDK》不仅涵盖了Java语言的基础和高级特性,还关注了JDK的实用工具和开发技巧,是Java初学者和有经验开发者提升技术的宝贵资源。通过深入阅读和实践,你将能够更好地掌握Java编程,为你的职业...
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至...对于初学者而言,了解并掌握Java反射机制的基本原理和应用场景是非常有益的。
10. **反射(Reflection)**:Java反射机制允许程序在运行时动态访问和修改类的信息,增强了代码的灵活性和可扩展性。 11. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方法来标记代码,供...
"Thinking in Java——自己手写的代码"这个压缩包很可能是作者在阅读这本书的过程中,为了加深理解和实践,自己编写的代码实现。 在压缩包"Think in Java 4 code"中,我们可以预期找到与《Thinking in Java》第四版...
Java软件开发是一项涵盖广泛的技术...总的来说,这份PDF文档很可能包含了从基础到进阶的Java编程知识,以及实习过程中的实践经验和感悟,对于Java初学者和希望深入了解软件开发流程的人来说,是非常有价值的参考资料。
"黑马程序员入学Java知识——精华总结"这份文档很可能包含了Java编程的基础到进阶的知识点,旨在帮助初学者快速掌握Java的核心概念和技能。 1. **Java基础知识**:Java是一种面向对象的语言,它的基础包括语法、...
8. **反射**:Java反射机制允许程序在运行时动态访问类的信息,如创建对象、调用方法和访问字段。这是一种强大的工具,但使用时需谨慎。 9. **设计模式**:设计模式是解决常见编程问题的最佳实践。源码可能包含单例...
Java3D探奇——IBM中国教程是一份专为初学者设计的在线教程,旨在帮助那些没有3D编程经验的程序员快速入门Java 3D技术。Java 3D是Oracle公司开发的一个开源API,它提供了丰富的功能,使得开发者可以构建复杂的三维...
Java初学者入门基础文档是一份全面的教程,旨在帮助新手快速掌握Java编程语言的基本概念和技能。这份资料共分为15个章节,每个章节都深入浅出地讲解了Java编程的关键知识点,并通过实例来加深理解。 第1章:Java...
本文档旨在帮助Java初学者理解和掌握反射机制的基本原理及应用场景。 #### 二、反射机制概述 反射的核心概念是在程序运行过程中,能够获取到已知类的信息并对其进行操作。具体来说,就是能够在运行时获得一个类的...
《由浅入深——Java 2自学教程》是一本旨在帮助初学者逐步掌握Java编程语言的书籍。配书光盘中的“由浅入深——Java 2自学教程 配书光盘.rar”压缩包文件,包含了书中所有工程素材和源码,这对于读者实践和理解Java...
9. **反射**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,动态创建对象和调用方法,增强了程序的灵活性。 10. **泛型**:泛型是Java SE 5.0引入的新特性,用于增强类型安全,减少强制类型转换,并...
Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...
Java初学者的学习课件是为那些刚刚接触编程或者对Java编程感兴趣的学员准备的宝贵资源。这个压缩包包含了一系列的课件,旨在帮助初学者建立起对Java语言的基本认识,并引导他们逐步掌握编程技能。 首先,Java是一种...
对于初学者,可以通过阅读API文档、实践项目和参考书籍来逐步掌握这些知识。同时,不断更新的Java版本会引入新的类库和改进,如Java 8的Lambda表达式、Java 9的模块系统等,持续学习和跟进是保持专业素养的关键。
Java JDK 6学习笔记是Java初学者入门的重要参考资料,它以PPT的形式提供了一种直观易懂的学习途径。这份笔记涵盖了Java编程语言的...因此,这份"Java JDK 6学习笔记——ppt简体版"对于Java初学者来说是一份宝贵的资源。