博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射(1)
阅读量:2182 次
发布时间:2019-05-01

本文共 1688 字,大约阅读时间需要 5 分钟。

反射反射,程序员的快乐.

         第一次了解反射这个概念是从<<大话设计>>中所了解到的.当时只是对概念的模糊了解,具体对它的机制并不清楚.最近在学习并实践SSH框架,其中Spring框架中核心的内容是IOCInversion of Control)控制反转,如果我们对java的反射机制有了一定的了解会对我们学习Spring框架有很大的帮助.接下来我们开始说说Java的反射机制.

         什么是java反射?

         JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

         上面是官方的说法,理解上稍微有点困难.接下来跟着笔者的思路来.

          若想要理解java的反射,首先需要了解内容是Class.我们都知道.java的世界中一组对象可以抽象成为一个类,但是Java中的各种类应该用什么来表示呢?这就是Class类的作用.需要注意的是此Class非定义class类的小写class.Class类是对java各个类的抽象.

          类一般都是有对象的,Class类的对象具体是什么呢?

           Class类的具体对象是各个类在内存中的字节码.每一个类被类加载器加载到内存中都会占据一定的空间,而这个空间里的内容就是字节码,不同的字节码类是不同的,而这些空间都可以用对象来表示.也就是Class上类的对象.

           例如: ClassclsDate=Date.class   其中clsDate就是表示Date类在内存中的字节码.clsDate的类型是Class类型.上面是一种获取字节码对应的实例对象的一种方式,还有另外两种方式:

            1  对象.getClass()    例如:new Date().getClass()

            2  Class.forName("类名") 例如:Class.forName("java.util.Date")

        Class对象==类在内存中的空间的内容即字节码

        通过Class类来获取Class对象

       获取Class对象的三种方式:   

    1、   Class对象=对象.getClass()      

  2、 Class对象=Class.forName("类名")  

  3、 Class对象=类名.class    

            Class对象.newInstace() 可以获取该类的对象,但是是Object类型的,要强制类型转换

           

           到此为止,我假定读者已经快要理解了Class类的概念,它跟反射有什么关系呢?

           我们知道,一个java类中用一个Class类的对象来表示,一个类中的具体组成部分,例如成员变量,方法……等信息也可以用一个个的java类来表示.而作为java类的Class类理所应当的提供获取这些组成部分的方法,而这些信息就是需要用相应类的实例对象来表示,例如:Field,Method等等类的对象.这些内容官方称之为:Java反射API.

          

java.lang包下

         Class<T>:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源

java.lang.reflect包下

Field 类:代表类的成员变量(也称类的属性)

Method类:代表类的方法

Constructor 类:代表类的构造方法

Array类:提供了动态创建数组,以及访问数组的元素的静态方法

 

           例如:我们熟知的Date,它有Date.getDate()方法,也有Date.getHours()方法,而每一个方法都是Method类的一个对象,如下:

           Method   medDay=Date.getDate();

Method   medHour=Date.getHours();

           通过上述方式我们获得了一个Method类的对象,这个对象表示的是一个java(Date)的一个方法.

           至此我们可以总结出,通过Class类我们可以操控java各种类的属性和方法,也就是说Class是反射的根基或起源.理解Class类是理解反射的第一步,在接下来的文章中我会通过一个实例来继续介绍java的反射机制.

转载地址:http://kuxkb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>
【LEETCODE】125-Valid Palindrome
查看>>
【LEETCODE】28-Implement strStr()
查看>>
【LEETCODE】6-ZigZag Conversion
查看>>
【LEETCODE】8-String to Integer (atoi)
查看>>
【LEETCODE】14-Longest Common Prefix
查看>>
【LEETCODE】38-Count and Say
查看>>
【LEETCODE】278-First Bad Version
查看>>
【LEETCODE】303-Range Sum Query - Immutable
查看>>
【LEETCODE】21-Merge Two Sorted Lists
查看>>
【LEETCODE】231-Power of Two
查看>>
【LEETCODE】172-Factorial Trailing Zeroes
查看>>