JAVA基础加强_高新技术_收获三
java 高级视频教程_网络编程 15.avi-25.avi
实现带有构造方法的枚举:
1、必须是私有的
2、在枚举元素后面跟()表示指向对应的构造方法
实现带有抽象方法的枚举:
1、定义元素{}例如 RED{} 表示这个元素还是该枚举下抽象方法的子类。
2、内部类
3、类的方法返回类型可以是自己这个类型
4、类的里面可以定义静态常量,常量指向的结果是自己这个类型的实例对象。
5、如果枚举只有一个成员,就可以作为一种单例的实现方式。
透彻分析反射的基础_Class类
Class cls1 = 字节码;
什么是字节码:一个类被类加载器加载到内存中,占用一篇存储空间,这个空间里面的内容就是类的字节码。
如何得到各个字节码对应的实例对象(CLass类型)
类名.class,例如,System.class
对象.getClass(),例如,new Date().getClass()
Class.forName("类名"),例如,Class.forName("java.util.date")
九个预定义Class实例对象如下:
八个基本数据类型:
boolean,byte,char,short,int,long,float,double
和void
数组类型的Class实例对象
Class.isArray()
总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如int[],void
理解反射的概念:
什么叫反射?
反射就是把java类型中的各种成为映射成相应的java类。
————————
反射就是把java中的各种成分映射成相应的java类。
例如,一个java类中用一个Class类对象表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发送机,变速箱等等都是一个个的类。
表示java类的Class类鲜艳要提供一系列的方法来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,他们是Filed、Method、Contructor(构造方法)、Package等等。
构造方法(Constructor)的反射应用:
获得方法是要用到类型
调用获得方法时要用到上面相同类型的实例对象
反射会导致整体性能下降。
成员变量的反射:
File类
Field类代表某个类中的成员变量。
暴力反射:对象.setAccessible(true);
成员变量的反射综合案例:
反射作用的总结(引用网络):
第一 反射可以操作某个类的私有变量和方法
第二 反射操作对象更加灵活 如 struts的form 只要有了form对象和 property名字就可以利用反射给property赋值和取值 对这类操作 一个方法就可以搞定。
如果hibernate不用字段进行反射映射 那么每个HQL的编译和结果处理 将无法进行。
第三 反射方式调用方法 动态代理 扩展API 。sping ioc,aop也都是用的反射
第四 运行过程中对未知类进行初始化等
我都是用反射在窃取和扩展一些收费的无法反编译的API
成员方法的反射:
Method类
如果传递给Method对象的invoke()方法的第一个参数为null,则说明该Method对象对应的是一个静态方法。
JKD1.4和JDK1.5的invoke区别。
JDK1.5 public Object invoke(Object obj,object... args)
JKD1.6 public Object invoke(Object obj,object[] args)
对接收数组参数成员方法进行反射:
mainMethod.invoke(null,new Object[]{new String{"xxx"}})——先装箱,收到后再拆箱。
mainMethod.invoke(null,(Object)new String{"xxx"})——编译器会做处理,不把参数当做数组看待,即告诉编译器传进去的是一个对象,就不会将参数看作为若干个参数。
数组与Object的关系及反射类型:
所有数组的维数相同且类型相同得到的字节码都是同一份。
具有相同维数和元素类型的数组术语同一个类型,即具有相同的Class实例对象。
代表数据的Class实例对象的getSuperClass()方法返回的父类为Object类型对应的Class。
基本类型的一位数组可以被当做Object类型使用,不能当做Object[]类型使用,非基本类型的一维数组,既可以当做Object类型使用又可以当做Object[]类型使用。
Arrays.asList()方法处理int[]和String[]时的差异。
asList()接受的Object数组
在处理int[]的基本数据类型的不符合Object,以一个Object来识别。
在处理String[]按照JDK1.4的这个数组为多个元素识别。
数组反射的应用:
怎么得到数组中元素的类型?
无法得到整个数组中元素的类型。但是可以得到数组中某个元素中的类型a[0].getClass().getName();
--------------------------------------
反射需要再次总结,还是比较生疏。
--------------------------------------
JAVA基础加强_高新技术_收获三
最新推荐文章于 2024-09-07 12:59:11 发布