反射

获取一个类的class文件对象的3种方法:

比如一个Person类:

1.对象获取方法:

Person p = new Person();

Class c = p.getClass();

2.类名获取方法:

Class c =Person.class;

3.Class类的静态方法获取forName:

Class c = Class.forName("cn.demo.Person")

//注:该方法的Person类一定要写全,连同包名。



反射获取Class文件对象中的构造方法:
1.获取所有的公共的构造方法:

public class reflectDemo{

public static void main(String[] args) throws ClassNotFoundException{

Class c = Class.forName("cn.demo.Person")

Constructor[ ] cons =c.getConstructors();

 for(Constructor con :cons){

system.out.println(con);

}

}

}

//只想获取空参的,可以这样写:

Constructor [ ] con =c.getConstructor();

//运行空参数的构造方法,可以这样写:

Object obj = con.newInstance();

system.out.println(obj.toString());

//得到结果如下:

Person[name=null, age=0]

//如果想要调用Person类中的eat()方法,可以这样写:

Person p = (person)obj;

p.eat();


 2.获取有参的构造方法:

public class reflectDemo{

public static void main(String[] args) throws ClassNotFoundException{

Class c = Class.forName("cn.demo.Person")

Constructor con = c.getConstructor(String.class,int.class);

Object obj = con.newInstance("张三",20);

system.out.println(obj);

//输出结果为:Person[name=张三,age=20]

}


反射泛性擦除
//假如在String类型的集合中插入int类型的数据:

ArrayList<String> array = new ArrayList<String>();

array.add("a");

//反射的方式,获取集合ArrayList类的Class文件对象

Class c = array.getClass();

//获取ArrayList.class文件中的方法add();

Method method = c.getMethod("add",Object.class);

method.invoke(array,150);

system.out.println(array);

//输出结果:[a,150]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值