Java基础——反射
来源:互联网 发布:手机网络爸爸 编辑:程序博客网 时间:2024/04/30 03:50
1. Class类:专门装载类的信息
类加载:由类加载器完成,类的Class文件读入内存后,就会创建一个Java.lang.Class对象,一旦某个类被载入JVM中同一个类就不会再次被载入
连接:把类的二进制数据合并到JRE中
初始化:JVM负责对类进行初始化,也就是对静态属性进行初始化。在JAVA类中对静态属性指定初始值的方式有两种
(1)声明静态属性时指定初始值
(2)使用静态初始化块为静态属性指定初始值
2.反射就是运行时探究和使用编译时未知的类
使用步骤:(1)获得你想操作的类的Java.lang.Class对象
(2)调用诸如getDeclaredMethods方法
(3)使用reflection API来操作
具体:
1、反射第一步:获取Class对象
(1)调用实例对象继承于Object的getClass方法
特点:A. 可以得到所有类和数组的Class对象
B. 没有编译时未知,运行时探究的动态效果
(2)利用语法类型名.class的方式获取到Class对象
特点:A. 所有类型(不管是基本数据类型还是引用数据类型,甚至是返回类型void)都可以得到相应的Class对象
B. 没有编译时未知,运行时探究的动态效果
(3)利用Class.forName("字符串形式的类型名")获取Class对象
特点:A. 不支持基本数据类型、返回类型和数组获取相应Class对象
B. 拥有编译时未知,运行时探究的动态效果
2. 探究类的信息
(1)探究类的基本声明部分
.getPackage().getName() //探究包名
.getName(); //探究类全名、类的限定名
.getModifiers(); //得到修饰符--访问修饰符和可选修饰符的组合
Modifier.toString(a); //使用工具类把整型的修饰符表示转换为字符串的修饰符表示
.getSuperclass().getName(); //得到父类
.getInterfaces(); //得到接口
(2)探究属性—Field
.getFields();//得到所有的公共属性(包括父类继承而来的公共属性)
.getDeclaredFields();//得到所有申明的属性(不包括来自父类的)
.getField("name");//得到指定的公共属性(包括父类继承而来的);
.getDeclaredField("age");//得到指定的申明属性(不包括来自父类的)
(3)探究构造---Constructor
.getConstructors();//得到所有公共的构造方法
.getDeclaredConstructors();//得到所有申明的构造
.getConstructor();//得到指定公共构造
.getDeclaredConstructor(String.class,int.class,boolean.class);//得到指定申明构造
Modifier.toString(con.getModifiers());//构造方法修饰符
.getParameterTypes();//得到形参列表
(4)探究方法---Method
基本如同构造,只是Constructors换成Method
3. 使用探究到的类的信息
(1)使用反射创建对象----Java中第三种创建对象的方法---newInstance()
A. 根据探究到的Constructor对象,产生类的实例对象
好处:可以调用类中任意构造方法
坏处:实现过于麻烦
setAccessible(true);//设置访问权限为可访---不到万不得已不准用
newInstance();//这个方法在反射中用来产生实例对象的
(2)直接利用Class对象产生实例对象
好处:代码简洁
坏处:只能调用公共无参构造
(3)操作属性---get/set
theField.set(dog1,"小白");//给Field对象赋值,第一个参代表给哪个狗对象的name属性赋值
theField.get(dog0));//给Field对象取值
(4)调用探究到的方法---invoke()
.getDeclaredMethod("方法名",参数class对象);
.invoke(对象,参数);//调用方法
- Java基础—反射
- java基础——反射
- java基础——反射
- java基础——反射
- java基础——反射
- Java基础——反射
- Java基础——反射
- java基础——反射
- java反射——基础
- java基础——反射
- Java基础——反射
- Java——反射基础
- Java基础—反射机制
- Java反射—基础篇
- java基础——反射基础
- Java基础日记———反射
- java基础——反射的应用
- Java基础——反射、枚举
- bash: /bin/rm: 参数列表过长
- Tomcat配置及使用
- Android 中 activity 的生命周期和数据储存
- HTTP 状态吗详解
- 指针
- Java基础——反射
- Hive连接与编程
- 第十二周项目四汉诺塔
- contab执行java程序
- 唯爱小粽子:mac远程连接redis集群
- 【JQuery】——级联下拉框效果
- Java递归思想分析
- java设计模式(8)--代理模式
- POJ 2891 Strange Way to Express Integers