Java基础反射简单运用

Java 基础之反射简单运用

反射概念:反射即对象中域,方法,构造器等权限的转移,转移给相应的反射类来处理。

一.Class类

Java中的程序运行时,是要从含有main方法的类开始编译,由于可能该主类中还依赖了其它类,就必须先加载其它依赖的类,所有编译过的类生成的class字节码文件都是Class类的一个具体实例。

1.获取类Class对象
 Class<classname> c=classname.class;
 Class<?> c1=Class.forName("类路径名");
 Class<? extends classname> c2=new classname().getclass();
    //其中一种无参构造
 classname o=c.newInstance();
 

二.Constructor类

实体类:

public class Person {
   private String name;
   private Integer age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
1.方法:
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)//获取构造器管理对象
    
2.示例:
@Test
    public void test2() throws Exception {

        //获取class对象
        Class<Person> c1=Person.class;
        //托管无参构造
        Person ps=c1.newInstance();
        //托管有参构造
        Constructor<Person> cs=c1.getDeclaredConstructor(String.class,Integer.class);
        Person ps1=cs.newInstance("小明",18);
        System.out.println(ps1.getName()+"\n"+ps1.getAge());

    }

三.Field类

1.方法
public Field getDeclaredField(String name);//获取域或者叫属性管理对象
public void setAccessible(boolean flag);  //设置私有属性的访问权限
public void set(Object obj, Object value); //设置属性值
2.示例
@Test
    public void test3() throws Exception {
        Class<?> p=Class.forName("huang.Person");//同一包类也要加包名
       Field name= p.getDeclaredField("name");
       Field age=p.getDeclaredField("age");
       Person p1= (Person) p.newInstance();

       //开启私有属性权限操作
        name.setAccessible(true);
        age.setAccessible(true);
        //设置属性
        name.set(p1,"小明");
        age.set(p1,19);
        System.out.println(p1.getName()+p1.getAge());

    }

四.Method类

1.方法
public Method getDeclaredMethod(String name, Class<?>... parameterTypes);//获取方法管理对象
 public Object invoke(Object obj, Object... args);//执行方法
2.示例
@Test
    public void test4() throws Exception {
        Class<? extends Person> c3= Person.class;
        Method setName=c3.getDeclaredMethod("setName", String.class);
        Person p3=c3.newInstance();

        //执行实例化对象方法
        setName.invoke(p3,"黄小明");
        System.out.println(p3.getName());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值