入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

反射类加载和垃圾回收

创建时间:2016-12-01 投稿人: 浏览次数:154
反射类加载和垃圾回收
反射
1底层运行的根本 目的 2反射是什么 3反射是做什么的 4反射与动态多态的关系 String str=new String ("xx"); 产生了 两个字符串对象 new出来的 和xx 变量字符串 产生了 三个对象 类某模板对象string 和 两个字符串对象! 类的加载机制 连接 加载 →验证→准备→解析 →初始化
类的加载机制: 由类加载器完成,类的class文件读入内存后,就会创建一个java.lang.Class对象,一旦那某个类被载入到jvm中,同一个类就不会被再次加载 连接:把类的二进制数据合并到 JRE中 初始化:jvm负责对类进行初始话,也就是对静态属性进行初始话,在java中,对静态属性制定初始值的方式有两种 1 声明静态属性时指定初始值;2使用静态初始化快大队今天太属性指定初始值


反射:java的反射技术是java程序的特征之一, 它允许运行中的java程序对自身进行检查,并能直接操作程序的内部属性 使用反射可以获得java类中的各个成员的名称并显示出来,简单的说,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术
一句话 运行时探究和使用编译时未知的类!! xx类的类模板对象只有一个 而xx类的实例对象却有很多个!
class类 :专门装载类的属性 在编译好一个类时 它会以很多个对象的形式将这个类存储,只有注释才不会被储存! 也被叫做类模板对象!
反射的三个步骤 1获得想操作的java.lang.class对象 三种方式获取对象 1-A 调用示例对象的继承于Object的getclass方法 特点 1-A-1 可以得到所有类和数组的class对象 1-A-2 没有编译时未知,运行时探究的动态效果
1-B 利用语法 类型名点class的方式获取到class对象 证明 一个类只会有一个class对象 class cc=int.class; 只有这种方法可以得到基本数据类型的 基本数据类型的class对象 只能在jdk1.5之后使用! jdk1.5之前 获得基本数据类型的class对象对象的方法 class cc=integer.TYPE; 特例 void 也有class对象 也能通过 void.class的方法 获得classd对象
特点 1--B-1 所有的类型 (不管是基本数据类型还是引用数据类型,甚至是无返回类型void)都可以得到相应的class对象 1-B-2 比第 1 -A 探究的更多 但是还是没有编译时未知,运行时探究的动态效果!
1-C 利用class.forName(“字符串形式的类型名”)获取class对象 class cc= class.forname("com.love.bean.xxbean"); 特点 1-C-1 不支持基本数据类型,返回类型和数组获取相应的class对象 1-C-2 拥有编译时未知,运行时探究的动态效果!
2-0探究类的信息 2-A 探究类的基本声明部分 String packagename =xxclass.getpackage().getName(); 探究包名 String classname=xxcclass.getName() ;探究类全名,类的限定名 String classsimplename =xxclass.getSimpleName();探究类的简单名 int aa=xxclass。getModifiers() 得到修饰符的Int值----访问修饰符和可选修饰符的组合 string classMoster=Modifier.tostring(aa);使用工具类把整形的修饰符表示转换为在字符串的修饰符表示 String superclassname=xxclass.getSuperclass().getName() ;得到父类 class[] allinterlasses=xxclass.getInterfacees(); 得到接口 2-B 探究属性 --Field 2-b-1探究所有属性 Filed [ ] allPublicFields = xxclass.getFields() 得到所有的公共属性包括父类继承而来的公共属性 Filed [ ] allFields=xxclass.getDeclaredFields(); 得到所有对的申明的属性 不包括来自父类的! 2-b-2探究指定属性 Filed filed =xx.class.getField("属性名"); 得到指定的公共的指定属性,包括父类继承过来的! Filed thefiled=xx.class.getDeclaredField("属性名")//得到指定的申明属性(不包括来自父类的); 12种探究方法 属性 Filed 构造 Constructor 方法 methord 所有的公共的 所有申明的 指定公共的 指定申明的 2-C探究构造 Constructor Constructor [ ] allpubliccons=xxclass.getConstructors() 得到所有的公共的构造方法 Constructor [ ] allpublicconss=xxclass.getDeclaredConstructors(数据类型.(点)class 那个构造方法里面有几个就写几个,并且按照顺序写) //得到指定申明的构造 2-D探究方法 ---method Method [ ] ss=xx.class.getMethods(); Method [ ] sss=xx.class.getDeclaredMethods()
3-0 使用探究到类的信息 3-1使用反射创建对象 ----java中第三种创建对象的方法 3-1-1根据探究道德constructor对象 ,产生类的实例对象 好处:可以调用类任意构造方法 坏处;实现过于麻烦 xxBean xx=null constructor thecon=dogClass.getDeclaredConstructor(构造器的形参列表); thecon.setAccessible(true);//设置thecon的访问权限为可访----不到万不得已不准用 xx=(xxBean)thecon.newInstance(实参); 3-1-2直接利用class对象产生实例对象 好处: 代码简洁 坏处:只能调用公共无参构造 xxBean xx=null xx=(xxBean) xxclass.newInstance(); 3-2 操作属性 get--set方法 受访问修饰符限制 xxBean xx=new xxBean xx(); xxBean xx1=new xxBean xx1(); xx.name="大黄"; Filed thes=xxClass.getFiled("name"); 访问公共的name属性 thes.set(xx1,"小白") 给 Filed对象赋值,第一个参是代表给哪个独享的name属性赋值 thse.get(xx1) 给 Filed对象取值 3-3 调用探究到的方法 Method the=xxClass.getMethod("bark"); 访问 公共的 bark方法 the.invoke(方法名);
当数组做形参时 用 int...数组名的方式 可以省去写很多重载的方法






阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像