`
汾水边的意气少年
  • 浏览: 7964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中的反射——写给初学者

 
阅读更多

     

                 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)后,就可以获取该类相应的方法和属性了。

 

这个在JDKAPI中都有,我列举几个常用的方法如下:

 

    1)、getConstructor() 获取构造函数

    (2)、getMethod()  获取成员方法

    (3)、getField() 获取成员变量

   

    (4)、getDeclaredConstructor() 获取私有的构造函数

    (5)、getDeclaredMethod()  获取私有的成员方法(即不包括继承的方法)

    (6)、getDeclaredField() 获取私有的成员变量(即不包括继承的属性)

 注:以上方法名加s后获取的是相应的数组对象,如Method[]。

 

(7)isArray()  判断此class对象是否表示一个数组类,返回boolean

(8)isAnnotation() 判断是否表示一个注解,返回boolean

 

 

其实,java中反射无处不在,常用的框架如springstrutshibernate等在底层都用到了反射,感兴趣的朋友可以研究一下。万变不离其宗,要想用好反射,就是抓住反射的本质,加深对Class类的理解,在业务需求中果断灵活的运用。

 

 

 

分享到:
评论

相关推荐

    java大学教程——课件

    这份"java大学教程——课件"集合提供了一套系统性的学习资源,专为初学者设计,旨在帮助他们掌握Java编程基础。 首先,Java的核心概念包括面向对象编程(OOP)原则。Java是一种强类型、静态类型的编程语言,它的类...

    Java学习笔记——良葛格

    【Java学习笔记——良葛格】是一份由爱好者良葛格整理的Java学习资料,主要以PDF格式呈现,虽然可能不完整,但包含了丰富的Java编程基础知识和实践技巧,旨在为初学者提供一个学习和参考的平台。以下是笔记中可能...

    JAVA经典例题——超赞版

    这份资源包含了一系列精心挑选的JAVA题目,覆盖了从基础语法到高级特性的广泛内容,是JAVA初学者与进阶者提升技能的宝贵资料。 在JAVA编程中,例子是学习过程中的关键部分,因为它们能直观地展示理论知识如何应用于...

    java葵花宝典——各种问题详细解答

    本资源“Java葵花宝典”旨在为初学者和经验丰富的开发者提供一系列关于Java的常见问题解答,以及深入理解Java各种核心概念的解析,帮助读者在Java学习之路上披荆斩棘,稳步前行。 1. **Java基础知识** - **Java...

    精通JAVA——JDK(高清PDF文件)

    总之,《精通JAVA——JDK》不仅涵盖了Java语言的基础和高级特性,还关注了JDK的实用工具和开发技巧,是Java初学者和有经验开发者提升技术的宝贵资源。通过深入阅读和实践,你将能够更好地掌握Java编程,为你的职业...

    java 反射机制例子

    ### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至...对于初学者而言,了解并掌握Java反射机制的基本原理和应用场景是非常有益的。

    JAVA源代码——张其跃著

    10. **反射(Reflection)**:Java反射机制允许程序在运行时动态访问和修改类的信息,增强了代码的灵活性和可扩展性。 11. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方法来标记代码,供...

    Thinking in Java——自己手写的代码

    "Thinking in Java——自己手写的代码"这个压缩包很可能是作者在阅读这本书的过程中,为了加深理解和实践,自己编写的代码实现。 在压缩包"Think in Java 4 code"中,我们可以预期找到与《Thinking in Java》第四版...

    java软件开发——顶岗实习周记25篇.rar

    Java软件开发是一项涵盖广泛的技术...总的来说,这份PDF文档很可能包含了从基础到进阶的Java编程知识,以及实习过程中的实践经验和感悟,对于Java初学者和希望深入了解软件开发流程的人来说,是非常有价值的参考资料。

    黑马程序员入学Java知识——精华总结

    "黑马程序员入学Java知识——精华总结"这份文档很可能包含了Java编程的基础到进阶的知识点,旨在帮助初学者快速掌握Java的核心概念和技能。 1. **Java基础知识**:Java是一种面向对象的语言,它的基础包括语法、...

    Java实用编程源码50例-迅速提高编程技巧-供初学者学习——供高手参考

    8. **反射**:Java反射机制允许程序在运行时动态访问类的信息,如创建对象、调用方法和访问字段。这是一种强大的工具,但使用时需谨慎。 9. **设计模式**:设计模式是解决常见编程问题的最佳实践。源码可能包含单例...

    Java3D探奇——IBM中国教程

    Java3D探奇——IBM中国教程是一份专为初学者设计的在线教程,旨在帮助那些没有3D编程经验的程序员快速入门Java 3D技术。Java 3D是Oracle公司开发的一个开源API,它提供了丰富的功能,使得开发者可以构建复杂的三维...

    JAVA初学者入门基础文档

    Java初学者入门基础文档是一份全面的教程,旨在帮助新手快速掌握Java编程语言的基本概念和技能。这份资料共分为15个章节,每个章节都深入浅出地讲解了Java编程的关键知识点,并通过实例来加深理解。 第1章:Java...

    java中的反射机制

    本文档旨在帮助Java初学者理解和掌握反射机制的基本原理及应用场景。 #### 二、反射机制概述 反射的核心概念是在程序运行过程中,能够获取到已知类的信息并对其进行操作。具体来说,就是能够在运行时获得一个类的...

    由浅入深——Java 2自学教程 配书光盘.rar

    《由浅入深——Java 2自学教程》是一本旨在帮助初学者逐步掌握Java编程语言的书籍。配书光盘中的“由浅入深——Java 2自学教程 配书光盘.rar”压缩包文件,包含了书中所有工程素材和源码,这对于读者实践和理解Java...

    个人学习的java笔记——思维导图

    9. **反射**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,动态创建对象和调用方法,增强了程序的灵活性。 10. **泛型**:泛型是Java SE 5.0引入的新特性,用于增强类型安全,减少强制类型转换,并...

    Java JDK 6学习笔记——ppt

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...

    java初学者的学习课件

    Java初学者的学习课件是为那些刚刚接触编程或者对Java编程感兴趣的学员准备的宝贵资源。这个压缩包包含了一系列的课件,旨在帮助初学者建立起对Java语言的基本认识,并引导他们逐步掌握编程技能。 首先,Java是一种...

    java爱好者的好帮手——java类库

    对于初学者,可以通过阅读API文档、实践项目和参考书籍来逐步掌握这些知识。同时,不断更新的Java版本会引入新的类库和改进,如Java 8的Lambda表达式、Java 9的模块系统等,持续学习和跟进是保持专业素养的关键。

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是Java初学者入门的重要参考资料,它以PPT的形式提供了一种直观易懂的学习途径。这份笔记涵盖了Java编程语言的...因此,这份"Java JDK 6学习笔记——ppt简体版"对于Java初学者来说是一份宝贵的资源。

Global site tag (gtag.js) - Google Analytics