粗略讲反射
来源:互联网 发布:广州网站搜索优化 编辑:程序博客网 时间:2024/06/06 14:26
反射
l Java灵魂,默默工作,为web学习和EE框架学习打基础
1. c
l 类加载:由类加载器完成,类的class文件读入内存后,就会创建一个java.lang.Class对象,一旦某个类被载入JVM中,同一个类就不会再次被载入,类模板信息,只有一个。 new出来的StudentBean为实例对象,可有多个
l String str = new String(“hello”); 产生三个对象:堆,常量池,类模板信息
l 连接:把类的二进制数据合并到JRE中
l 初始化:JVM负责对类进行初始化,也就是对静态属性进行初始化,在Java类中,对静态属性指定初始值的方式有两种
1.声明静态属性时指定初始值 2.使用静态初始化块为静态属性指定初始值。
l 简单来说反射就是让你可以通过名称来得到对象(类,属性, 方法)的技术,一句话:运行时探究和使用编译时未知的类,真正的动态动态
2. 反射做什么
l 1.获得你想操作的类的java.lang.Class对象
n 调用实例对象继承于Object的getClass方法,不能得到基本数据类型的Class对象
u 可以得到所有类和数组的Class对象
u 没有编译时未知,运行时探究的动态效果
n 利语法类型名.class的方式获取到class对象,只能在JDK1.5以后使用
u 一个类只会有一个Class对象
u 所有类型;不管是基本数据类型还是引用数据类型,甚至是返回值类型void都可以得到class对象
u 包装类只能用类型名.TYPE//JDK1.5之前回去Class对象
u 没有编译时未知,运行时探究的动态效果
n 利用Class.forName(“字符串形式的类型名”)获取class对象
u 不支持数据类型。返回类型和数组获取相应Class对象
u 唯一有编译时未知,运行时探究的动态效果
l 2.调用诸如getDeclaredMethods3.使用reflection API来操作这些信息
n Class对象.getPackage().getName();//探究包名,返回String类型
n Class对象.getName();//探究类全名、类的限定名
n Class对象.getSimpleName();//探究类的简单名,去除包的部分
n Class对象.getModifiers();//得到修饰符—访问修饰符和可选修饰符的组合—返回int类型
Modifier。toString(Class对象.getModifiers.)//使用工具类把整形的修饰符表示装换为字符串的修饰符表示
n Class对象.getSuperclass().getName();//得到父类
n Class对象.getInterfaces();//得到接口,返回calss数组
l 探究属性
n Field[] allpublicFields = class对象.getFields();//得到所有的公共属性(包括父类继承而来的公共属性)
n Class对象.getDeclaredFields();//得到所有的声明属性不包括父类的声明
n class对象.getField();//得到指定的公共属性(包括父类继承而来的公共属性)
n Class对象.getDeclaredField();//得到指定的声明属性不包括父类的声明
n 属性 field 构造constructor 方法 method declared 指定的
l 探究构造方法
n Con.getParamenterType();//得到形参列表,返回class数组
l 使用探究到的类的信息
n 根据探究到的Constructor对象,产生类的实例对象。好处可以调用类中任意构造方法,坏处实现过于麻烦
u Dog = Class对象.getDeclaredConstructor(传参).newInstance;//用这个方法在反射中用来实例化对象,需要强转,为constructor的newInstance
u theCon.setAccessible(true);//设置theCon的访问权限为可访---不到万不得已不准用
n 直接利用class对象产生实例对象
u DogBean dog = null; dog = (DogBean)dogClass.newInstance();//只能调用公共无参构造,为class的newInstance
l 操作属性
n Field thePublicField =dogClass.getField(“name”); thePublicField.set(dog1, “值”);//给Field对象赋值,第一个参是代表给那个狗对象的name属性赋值
n ThePublicField.get(那个狗对象);
l 调用探究到的方法---invoke()
n Method thePublicMethod =dogClass.getMethod(“方法名”, 传参.class); thePublicMethod.invoke(对象, 值);
n 当数组做形参时,尽量使用…的方式做形参(int… array)会自动罗列出来做形参
- 粗略讲反射
- 粗略讲线程
- 反射机制—粗略理解
- java关于反射的粗略小结
- 关于java反射机制的粗略理解
- map实现c++中的反射(粗略)
- Android高级开发第八讲--粗略讲述Java之软引用、弱引用和虚引用
- 举例或浅讲反射(System.Reflection)
- 三个例子讲清楚Java反射
- 讲反射的 和 Hibernate SQL
- PHP反射Reflection实例精讲
- 粗略估算
- 粗略估算
- 白话讲反射技术 --- 适合初学者入门引导
- 白话讲反射技术 --- 适合初学者入门引导
- JavaSE第六十一讲:Java反射机制深度剖析
- 粗略學習flash
- Pcode粗略分析(1)
- HDU2043_密码
- PB 随笔1
- 数据库使用
- nginx 正向代理
- MYSQL——DDL : 数据定义语句 (create alter drop)
- 粗略讲反射
- dd和cp命令差异
- handler内存泄露问题
- 常见对象_JDK5的新特性自动装箱和拆箱
- leetcode(39).155. Min Stack
- 粗略讲线程
- Spark RDD操作函数说明
- MYSQL——DML : 数据操作语句 (insert update delete)
- yii 2.0 配置数据库(三)