java反射

                       Java反射

      try {

//返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

//创建此 Class 对象所表示的类的一个新实例。

Object ob= cl.newInstance();

System.out.println(ob);

catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

1.getDeclaredConstructor()方法(得到实例指定的构造)

       // 返回与带有给定字符串名的类或接口相关联的 Class 对象。

  Class cl = Class.forName("cfl.test.entity.Student");

        /该对象反映此 Class 对象所表示的类或接口的指定构造方法。

Constructor cs = cl.getDeclaredConstructor(String.class,

Integer.class);

System.out.println(cs.getName());

// 创建此 Class 对象所表示的类的一个新实例。

Student ob = (Student) cs.newInstance("曹飞龙", 5);

System.out.println(ob.getName() + "  " + ob.getName());

2.getDeclaredConstructors()方法(得到实例的所有构造)

  // 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

            //该对象反映此 Class 对象所表示的类或接口的指定构造方法。

Constructor [] cs = cl.getDeclaredConstructors();

for(Constructor c : cs ){

System.out.println(c.getName());

}

3.getDeclaredFields()(得到实例的所有的字段)

  // 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

//创建此 Class 对象所表示的类的一个新实例

Student obj = (Student)cl.newInstance();

// 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。

Field[] fls = cl.getDeclaredFields();

for (Field fl : fls) {

//判断实例的属性是否为私有的(private)

if (!fl.isAccessible()){

//将实例的属性的访问权限设置为可访问的

fl.setAccessible(true);

}

if(fl.getName().equals("name")){

//给实例的属性赋值

fl.set(obj, "cfl");

}

System.out.println(fl.getName());

}

System.out.println(obj.getName())

4.getDeclaredField()得到实例指定的属性

// 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

//创建此 Class 对象所表示的类的一个新实例

Student obj = (Student)cl.newInstance();

//返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。

Field fl = cl.getDeclaredField("name");

if (!fl.isAccessible()){

fl.setAccessible(true);

}

fl.set(obj, "曹飞龙");

System.out.println(obj.getName());

5.getDeclaredMethod()得到实例的指定的方法

  实例1(不带参数)

// 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

// 创建此 Class 对象所表示的类的一个新实例

Student obj = (Student) cl.newInstance();

//返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。

Method md = cl.getDeclaredMethod("play");

//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

md.invoke(obj);

实例2(带参数)

// 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

// 创建此 Class 对象所表示的类的一个新实例

Student obj = (Student) cl.newInstance();

//返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。

Method md = cl.getDeclaredMethod("play",String.class);

//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

md.invoke(obj,"曹飞龙");

6.getDeclaredMethods()得到实例的所有的方法

// 返回与带有给定字符串名的类或接口相关联的 Class 对象。

Class cl = Class.forName("cfl.test.entity.Student");

// 创建此 Class 对象所表示的类的一个新实例

Student obj = (Student) cl.newInstance();

//返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

Method [] mds = cl.getDeclaredMethods();

for(Method  md :mds){

System.out.println(md.getName());

}

-------student类代码----------------------

public class Student {

private String name;

private Integer age;

public Student(String name, Integer age) {

super();

this.name = name;

this.age = age;

}

public Student() {

super();

}

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;

}

@Override

public String toString() {

return super.toString();

}

   public  void  play(){

    System.out.println("同学们在play");

   }

   

    public  void  play(String name ){

      System.out.println(name+"在play");

    }

  

}

//本人对反射的理解只有这么多了希望同志们多提宝贵意见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值