Java反射机制(一)

    Java的反射机制是构建框架技术的基础,功能强大且复杂。使用其可以编写能够动态操纵Java代码的程序。在Java中,反射机制是指在运行状态,对于任意一个类,都可以知道该类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取信息以及动态调用对象方法的功能称为反射机制。

注意:Java不是动态语言。动态语言是能在程序运行时允许改变程序结构或变量类型的语言。

Java反射可以实现的功能:

    在程序运行时判断任意一个对象所属的类、调用任意一个对象的方法、构造任意一个类的对象、判断任意一个类所具有的方法和属性、生成动态代理。

Java反射应用场合:

    Java程序中许多对象在运行时都会出现两种类型,即编译时类型和运行时类型,编译的类型由声明该对象时所使用的类型决定,运行时的类型由实际赋给该对象的类型决定。

如    Person stu = new Student();

因为对象stu是引用类型,在编译时其类型由Person来确定。而在程序运行后发现stu引用的其实是Student。因为只有在程序运行的时候才能知道stu引用的内容改为了sStudent,故称为运行时类型。

    此外,程序在运行时还可能接收到外部传入的一个对象,该对象的编译时类型是Object,但程序又需要调用该对象的运行时类型的方法。为解决这种问题,程序需要在运行时发现对象和类的真是信息。这时就可使用反射。

Java反射API中重要的类:

java.lang.Class:反射的核心类,可以获取类的属性、方法等信息。Java反射机制所有的操作都是围绕该类来展开的。

java.lang.reflect.Field:表示类的属性,可以获取、设置类中属性的值;

java.lang.reflect.Method:表示类的方法,可以用来获取类中方法的信息,或者执行方法;

java.lang.reflect.Constructor:表示类的构造方法。

反射机制的使用步骤:

1.获取想要操作的类的Class对象;

2.调用CLass对象的方法;

3.使用反射API来操作这些信息。

Java程序中,每个类被加载后,系统就会为该类生成一个对应的CLass对象,通过该Class对象就可以访问到虚拟机中的这个类。

获取Class对象通常有三种方式:

1.调用Object类的getClass()方法(这种方法需要在编译器就知道类的名字)

                                             Employee emp = new Employee();
        emp.getClass();

2.调用某个类的class属性

Employee.class

3.使用Class类的forName(String className)静态方法,该方法需要类的完全限定名作参数,需要捕捉ClassNotFoundException异常

try {
    Class.forName("com.umbrella.java8.Employee");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

使用第二种方式较为妥当。因为程序性能更好,无须调用方法,而是获取属性。且代码更安全,程序在编译阶段就可以检查需要访问的Class对象是否存在。

Class类实际上是一个泛型类,它将已经抽象的概念变得更加复杂。故而在大多数实际问题中,可以忽略类型参数,使用原始的Class类。

一个Class对象实际上表示的是一个类型,而这个类型未必一定是一种类。如,long不是类,但long.class是一个Class类型的对象。


    



b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值