反射 reflection
在运行时加载一个指定名称的class文件 并且产生Class对象
通过Class对象 获取类的信息 (方法 属性 构造方法等)并且使用
class String{} --Class对象
class Person{ --Class对象
public String name;
int age;
public void a(){}
public void a(int a,String name){}
}
抽象类的类
public class Class{
int modifer;//修饰符
Field[] fields;//属性
Method[] methods;//方法
Constructor[] constructors;//构造方法
String name;//类名
Class superClass;//父类
Package package;//当前类所在的包
Class[] interface;//当前类实现的接口
//获取所有属性
Field[] getFields(){}
//根据属性名称 获取某个属性
Field getField(String name){}
//获取所有方法
Method[] getMethods(){}
//获取某个方法
Method getMethod(String name,Class...parameterType){}
//获取构造方法
Constructor[] getConstructors(){}
//获取某个构造方法
Constructor getConstructor(Class... parameterType){}
//获取类名
String getName(){}
//获取父类
Class getSuperClass(){}.......
}
class Field{
int modifier;//修饰符
String name;//属性名
Class returnType;//返回值类型
//获取obj这个对象的属性值
Object get(Object obj){}
//为obj对象的属性 设置值 为value
set(Object obj,Object value){}
}
class Method{
int modifier;//修饰符
String name;//方法名
Class returnType;//返回值类型
Class[] parameterTypes;//参数列表
Class[] exceptionTypes;//异常类型
//执行obj对象的方法
Object invoke(Object obj,Object... parameters){}
}
-------------------------------------------------
***获取Class对象:
方法一:Class.forName("包名.类名") 有异常要处理ClassNotFoundException
方法二:类名.class
方法三:对象.getClass()
static final修饰的东西 反射 不能修改
掌握:
如何获取Class对象
如何利用反射创建对象
如何访问属性 给属性赋值 获取属性值
如何访问方法 执行方法
如何利用反射创建数组
--------------------------------------------------
工厂模式 本质是利用工厂创建对象
将一个类的创建 交给 另一个类来做
A类 中 要创建 B类的对象
A类自己不创建B类的对象
而是将创建的过程 交给C类(B类的工厂类)去实现
----------------------------------------------------
作业:
1.ObjectFactory代码
2.定义一个方法,实现对任意一个对象的任意属性赋值
obj:任意对象
name:属性名
value: 属性值
public static void setValue(Object obj,String name,Object value){}
3.定义一个方法 利用反射打印出某个对象中所有以get开头的public修饰的方法名
public print(Object obj){}
----------------------------------------------------
注解
线程
讲师笔记,Java基础学习之路之day24——反射
猜你喜欢
转载自blog.csdn.net/u011189148/article/details/81417218
今日推荐
周排行