Java反射讲解

反射讲解

Java 中的反射首先是能够获取到 Java 中要反射类的字节码,获取字节码有三种方法:

  • 1.Class.forName(className)
  • 2.类名.class
  • 3.this.getClass()。

然后将字节码中的方法,变量,构造函数等映射成 相应的 Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。

/**
 * 取得全部普通方法:
 *public Method[] getMethods() throws SecurityException
 * 取得指定普通方法:
 *public Method getMethod(String name, Class<?>... parameterTypes)
 * 以上两个方法范辉的类型是java.lang.reflect.Method类的对象,在此类中提供有一个调用方法的支持:
 * 调用:
 *public Object invoke(Object obj, Object... args)throws
 * IllegalAccessException, IllegalArgumentException,InvocationTargetException
 */

import java.lang.reflect.Method;
class Person
{
    private String name;
    private int age;
    public Person(){}
    public Person(String name,int age)
    {
        this.age = age;
        this.name = name;
    }
    @Override
    public String toString()
    {
        return "name is:"+this.name+" "+"age is:"+this.age;
    }
    public String getName() 
    {
        return name;
    }

    public void setName(String name) 
    {
        this.name = name;
    }

    public int getAge() 
    {
        return age;
    }

    public void setAge(int age) 
    {
        this.age = age;
    }

}

public class ClassTest 
{
    public static void main(String[] args) throws Exception 
    {
        Class<?> classes = Person.class;// 任何时候调用类中的普通方法都必须有实例化对象
        Method[] GetMethods = classes.getMethods();

        Object object = classes.newInstance(); // 取得setName这个方法的实例化对象,设置方法名称与参数类型
        // 随后需要通过Method类对象调用指定的方法,调用方法需要有实例化对象
        // 同时传入参数
        Method method = classes.getMethod("setName", String.class);
        method.invoke(object,"Regina Spektor");// 相当于Person对象.setName("Regina Spektor") ;
        Method method1 = classes.getMethod("getName");
        Object result = method1.invoke(object);//相当于Person对象.getName()
        System.out.println("My favourite singer is "+result);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值