Java开发---反射

反射机制

在反射的世界里面,看重的不再是一个对象,而是对象身后的组成(类、构造、普通、成员等) 

Class类三种实例化对象

  1. 任何类的实例化对象可以通过Object类中的getClass()方法获取Class类的对象
  2. “类.class”之间根据某个具体类来取得Class类的实例化对象
  3. 使用Class类提供的方法:public static Class<?> forName(String classname) throws ClassNotFoundException

反射与类操作

取得父类信息

  1. 取得父类的Class对象: public native Class<? super T> getSuperclass()
  2. 取得实现的父接口:public Class<?>[] getInterfaces()
  3. 取得类的包名称: public Package getPackage()

反射调用构造

  1. 取得指定参数类型的构造:public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
  2. 取得类中的所有构造:public Constructor<?>[] getConstructors() throws SecurityException
  3. 实例化对象:public T newInstance(Object ... initargs)   throws InstantiationException, IllegalAccessException,               IllegalArgumentException, InvocationTargetException

Class类通过反射实例化类对象的时候,只能够调用类中的无参构造。如果现在类中没有无参构造则无法使用Class 类调用,只能够通过明确的构造调用实例化处理

        // 取得指定参数类型的构造方法对象 
       Constructor<?> cons = cls.getConstructor(String.class,int.class) ; 
       cons.newInsttance("feval",18);

Constructor类中的toString()方法取得了构造方法的完整信息(包含方法权限,参数列表),getName()方法,只会返回构造方法的包名.类名

反射调用普通方法

  1. 取得全部普通方法:public Method[] getMethods() throws SecurityException
  2. 取得指定普通方法:public Method getMethod(String name,Class<?> ... parameterTypes)
  3. 调用:public Object invoke(Object obj,Object... args) throws  IllegalAccessException,IllegalArgumentException,InvocationTargetException       (Method类中的方法)

反射调用属性

  1. 父类中)-取得类中全部属性: public Field[] getFields() throws SecurityException
  2. (父类中)-取得类中指定名称属性: public Field getField(String name) throws NoSuchFieldException, SecurityException  
  3. (本类中)-取得类中全部属性: public Field[] getDeclaredFields() throws SecurityException
  4.  (本类中)-取得类中指定名称属性 : public Method getDeclaredMethod(String name, Class<? >... parameterTypes) throws NoSuchMethodException, SecurityException

Field类中的重要方法

设置属性内容 : public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException

取得属性内容 : public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException

动态设置封装:public void setAccessible(boolean flag) throws SecurityException

取得属性类型:public Class<?> getType();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值