java反射理解

###反射

1.是JAVA API,是Java提供的现成的类!
  - 接受API提供的功能!
2.是Java提供的动态执行机制,动态加载类,动态创建对象
,动态访问属性,动态调用方法。

##静态与动态

静态:事先约定的规则,执行期间按照固定规则执行。

动态:事先没有约定,在执行期间动态确定执行规则。

JAVA中的静态执行:编译已经就确定执行规则(执行次序),
在运行期间按照编译结果顺序执行。

JAVA中的动态执行:运行期间才能确定加载那些类,创建哪
些对象,执行哪些方法...

###动态加载类
Java提供动态加载类的API
    Class cls = Class.forName(类名);

###动态创建对象
语法:
    Object obj = cls.newInstance();
执行cls引用的类信息中的无参数构造器,动态创建实例。如果
类没有无参数构造器,则抛出异常!

提示:反射可以调用有参数构造器.

###动态获取类的方法信息
    Method[] methods = class.getDeclaredMethods();
###动态执行方法
语法:
    method.invoke(执行方法的对象,传递的参数)

>必须在对象上执行一个非静态方法,调用方法时必须有对象。
>在invoke方法执行时候,必须传递包含当前方法的对象!!
        Scanner in = new Scanner(System.in);
        System.out.println("输入类名:");
        String className = in.nextLine();

        //动态加载类
        Class  cls = Class.forName(className);
        Object obj =  cls.newInstance();
        //动态获取全部方法
        Method[] methods = cls.getDeclaredMethods();
        //迭代方法查找以test开头的方法
        for (Method method: methods) {
            if (method.getName().startsWith("test")){
                method.invoke(obj);
            }
        }###使用invoke
    Object obj = 
        method.invoke(对象,参数1,参数2...)
invoke 可以调用私有方法

    //案例:
    Class cls = Class.forName(new Scanner(System.in).nextLine());

        //1.找到demo方法
        //Class提供了根据方法签名找到指定的方法信息的AP[
        String name = "demo";//方法名
        //类型列表Class[]
        //String.class表示字符串类型
        //int.class表示int类型
        Class[] types={String.class,int.class};
        Class[] types1={String.class};
        //根据方法签名在cls查找方法信息
        Method method =
                cls.getDeclaredMethod(name,types);
        System.out.println(method);
        method.setAccessible(true);

        Object obj = cls.newInstance();
        Object v = method.invoke(obj,"rr",11);
        System.out.println(v);


###反射用途
IDEA
junit
spring

注解
@Retention(RetentionPolicy.RUNTIME/CLASS/SOURCE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值