反射机制(一)

反射机制

1、反射的基本概念

如果在正常的情况下,如果要使用一个类,则必须按照如下的步骤操作:

  • 使用import导入类所在的包(类:java.lang.Class) ;
  • 明确的使用类名称或接口名称定义对象 ;
  • 通过关键字new进行类对象实例化(构造方法:java.lang.reflect.Constructor);
  • 产生对象可以使用“对象.属性”进行类中属性的调用(属性:java.lang.reflect.Field) ;”
  • 通过”对象.方法()“调用类中方法(方法:java.lang.reflect.Method) ;

而反射的过程呢?不需要有明确类型的对象,所有的对象使用Object表示:

  • 可以直接利用Object与反射机制的混合调用类中的方法

1.1、Class类

Class类是整个反射操作源头,而这个类的定义如下:

public final class Class<T>   //反射的泛型几乎无用,使用的时候就用“?”
extends Object
implements Serializable,GenericDeclaration,Type,AnnotatedElement 

但是如果要想使用Class类进行操作,那么就必须首先产生实例化对象,而有如下三种方式可以取得Class类的实例化对象:

  • Object类提供了一个返回Class类对象的方法:public Class

1.2、利用发射实例化对象

Class类如果使用了forName()方法之后,就可以使用Class类定义的newInstance()方法默认去调用类之中的无参构造方法进行操作:public T newInstance() throws InstantiantionException,IllegalAccessException .

package cn.jack.demo ;
class Student {
    public Student () {
        System.out.println("Student类构造方法。") ;
    }
    @Override
    public String toString() {
        return "Student类的toString()方法" ;
    }
}
public class ReflectDemo {
    public static void main(String args[]) throws Exception {
        Class<?> cls = Class.forName("cn.jack.demo.Student") ;
        //相当于关键字new实例化对象,等价:Object obj = new Student()
        Object obj = cls.newInstance() ;
        System.out.println(obj) ;
    }
}

可以清楚的发现,在整个程序编写之中,即使完全不知道类的结构,即使不导入包.类,也可以进行类对象实例化操作 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值