java中反射技术

万物皆对象,类也是对象,java中将类也封装成了类

class Class{
    Field field; // 字段,将字段封装成对象
    Constructor constructor; // 将构造函数封装成对象
    Method method; //方法类型
    // 将类中的成员均封装为对象
    // 对成员的操作和普通类一模一样
}

加载类前必须先获取字节码文件,获取的方法如下:

通过Object中getClass()获取

Person p1=new Person();
Person p2=new Person();

c1=p1.getClass();
c2=p2.getClass();

c1与c2相同,地址相同,因为Person.class字节码文件只有一份

通过class属性获取

类名.class

Class类中的forName()方法通过给定类名获取对应字节码啊文件对象

Class clazz=Class.forName("全限定名");
// 自动找类并加载到内存中
// 可能引发ClassNotFoundException

 

通过获取的字节码创建相应的对象

// 利用空参构造函数创建对象
Object obj=App.class.newInstance();
// 利用自定义的构造函数创建对象
Constructor constructor=App.class.getConstructor(String.class,Integer.class);
constructor.newInstance("",12);

// 可引发的异常
// java.lang.InstantiationException  初始化异常(所需的构造函数没有)
// java.lang.IllegalAccessException  构造函数权限不够(可能私有)
// java.lang.reflect.InvocationTargetException 当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值