Java反射

 

Java反射


 

反射指的是程序在运行时可以获取类的信息、创建对象、调用方法的一种机制。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的字段、方法,并访问这些信息。

Java中,所有类的元信息通过Class实例来表示,任何类都有一个Class类型的对象,表示这个类的信息,这些信息存储在jvm的方法区内。Class对象可以动态加载类,获取类的字段,方法,构造该类的对象,调用类的方法等。具体看看怎样使用吧。

声明一个类

public class Increment {

        public String b;

        private String a;

        public void run(String s){

            System.out.println(s);

        }

        private void r2(String s){

            System.out.println(s);

        }

}

通过反射使用这个类

public class Test {

 

    public static void main(String[] ar) throws Exception {

        Class obj = Increment.class;

        System.out.println("父类:" + obj.getSuperclass());

        Object instance=obj.getDeclaredConstructor().newInstance();//获取构造函数实例化对象

        Field[] fields = obj.getDeclaredFields();//获取声明的字段

        for (Field field : fields) {

            System.out.println("字段名:"+field.getName());

            field.setAccessible(true);//运行访问private字段

            field.set(instance,"test");//将字段的值设为test

            System.out.println(field.get(instance));//获取字段的值

        }

        System.out.println("==================");

        Method[] methods = obj.getDeclaredMethods();  //获取声明的方法

        for (Method method : methods) {

            System.out.println("方法名:"+method.getName());

            method.setAccessible(true);

            method.invoke(instance,"testinvoke"); //调用方法

        }

    }

}

运行结果:

父类:class java.lang.Object

字段名:b

test

字段名:a

test

==================

方法名:run

testinvoke

方法名:r2

testinvoke



反射由于其非常灵活,使得类与对象的产生不必事先创建,而是通过程序在运行时创建,使得它在各类框架中非常有用。后续的spring,struts2等框架中正是通过反射机制得以实现高度灵活的定制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值