反射:
通过对象找到对象的原始数据;
Class类是所有反射类的源头;
Java里对于Class类有三种实例化模式:
1,getClass(),所有的实例化对象都具备此操作,必须要实例化对象才可以或得Class累的对象;
2,类.class:取得类对象;不需要对象实例化;
3,public static Class<?>forName(String className)方法获取该Class类
Class类里的方法:
代替new实例化对象
1、public T newInstance() throws InstantiationException,IllegalAccessException.
两种实例化方式:
1、Class<?> cls = Class.forName("包.类");
2、Class<Phone> cls = Phone.class;
实例化:
Phone p = (Phone)cls.newInstance();//第一种方式对象需要强转型但是可以操作properties文件.
Phone p = cls.newInstance(); //第二种方式实例化对象不需要转型;
当一个类的非反射Class类对象之后就可以取得类的所有信息,在Class类中的方法:
1、取得完整类名称:public String getName();
2、取得类名称:public String getSimpleName();
3、取得父类Class对象:public Class<? super T>getSuperclass();
4、取得所有实现的接口信息:public Class<?>[]getInstances();
反射操作构造方法:
Class类中提供了与构造方法有关的方法:
取得全部构造:public Constructor<?>[] getConstructors()
取得指定构造,并且设置参数类型:public Constructor<T> getConstructor(Class<?>...parameterTypes)
两个方法都会返回有一个Java.lang.Constructor类的实例化对象;
反射调用普通方法:
第一组操作:取得所有的方法,包括继承来的方法;
取得所有方法:public Method[]getMethods
取得第一个方法:public Method getMethod(String name,Class<?> ...parameterTypes)
第二组操作:取得本类定义的方法,不关心继承方法;
取得所有方法:public MEthod[] getDelaredMethods()
取得第一个方法:public Method get DeclareMethod(String name,Class<?>...parameterTypes)
在Method类中有一个重要的方法,此方法指的是放射调用类方法;
·执行方法体:public Object invoke(Objkect obj,Object ...args)
在此方法之中需要传入一个要调用此方法的实例化对象,调用时传入所需要的参数;
成员:Field,反射调用成员变量
第一组:取得继承来的成员:
取得全部成员:public Field[] getFields();
取得一个成员:public Field[] getFields(String name);
第二组:取得本类成员:
取得全部成员:public Field getDeclaredFields();
取得单个成员:public Field getDeclaredFiled(String name);
设置成员内容:public void set(Objecy obj,Object value)
取得成员内容:public void setAccessible(Object obj)
设置封装:public void setAccessible(boolean flag)
设置成员之前要先取消封装:setAccessible(true);
类加载器classLoader:
取得类加载器:public ClassLoader getClassLoader();
JAVA基础笔记(十五)反射
最新推荐文章于 2024-05-27 20:55:58 发布