java clazz_Java基础回顾 —反射机制

无论生成某个类的多少对象,这些对象都会对应于同于个class。

tips1: 反射的一切操作都是由Object完成,类、数组的引用都可以用Object进行接收。

要想使用反射,首先需要获得待处理类货对象所对应的Class对象。

tips2: 所有类的对象实际上都是Class类的实例。

获取某个类或某个对象对应的Class对象的3种方式:

使用Class类的静态方法:forName

使用类的.class语法: String.class

使用对象的getClass()方法:String s = “aa”, Class> clazz = s.getClass();

若想通过类的不带参数的构造方法来生成对象,我们有两种方式:

先获得Class对象,然后通过Class的newInstance()方法直接生成即可:Class> clazz = String.class, Object obj = clazz.newInstance();

tips: 这个方式必须保证类中存在无参构造方法。

先获得Class对象,然后通过该对象获得对应的Constructor对象,在通过该Constructor对象的newInstance()生成:

Class> clazz = String.class,

Construcor cons = clazz.getCostructor(new Class[]{}),

Object obj = cons.newInstance(new Object[]{});

若想通过带参数的构造方法生成对象,只能通过下面一种方式:

Class> clazz = String.class,

Construcor cons = clazz.getCostructor(new Class[]{int.class}),

Object obj = cons.newInstance(new Object[]{1});

Class> clazz = Invoker.class;

Constructorcons = clazz.getConstructor(new Class[]{String.class,int.class});

Object obj = cons.newInstance(new Object[]{"GuangPing",27});

Field field = clazz.getDeclaredField("name");

field.setAccessible(true); //压制java对访问修饰符的检查

field.set(obj, "LiPing");

Invoker invoker = (Invoker)obj;

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

Method method = clazz.getDeclaredMethod("prints", new Class[]{});

method.setAccessible(true);

method.invoke(obj, new Object[]{});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值