黑马程序员_java基础加强之(反射)
来源:互联网 发布:淘宝买家恶意大量退货 编辑:程序博客网 时间:2024/06/06 03:26
---------------------- android培训、java培训、期待与您交流! ----------------------
一、反射的基石——Class类
获得Class对象的方法:
Person.class:类名.class
new Person.getClass():对象.getClass()
Class.forName("java.lang.String"):Class.forName(完整类名)。
作用:获得类的字节码。有两种情况:如果这个类在内存中,这直接返回;如果内存中没有则通过类加载器加载到虚拟机内存中。以后要得到这个字节码就不用再加载了。在反射中主要使用这种方法,因为在写源程序的时候还不知道类的名字,也就是说我们可以使用一个变量来代替。)
一个字节码可以创建出多个实例对象来。
只要是类型就对应一个Class实例对象。有九个预定义的Class对象:八个基本类型加一个void。
Primitive Data Type:原生数据类型。
int.class.isPrimitive():isPrimitive(原始的)是否是基本数据类型。
Integer.TYPE:代表他所包装的那个基本数据类型的那份字节码,也就是基本数据类型的 Class对象(int.class)
数组不是基本数据类型(Primitive Data Type),是引用类型,判断是否是数组可以使用:isArray();
总之,只要是在源程序中出现的类型,都有各自的一份Class实例对象,例如:int[],void,String,int ……
二、反射:
java的反射定义:java程序在运行时动态对正在执行的类的自身进行检查,审查。
java的反射能做:通过java的反射我们可以在类的外部得到类中定义的私有方法和属性,并且可以看到类本身的属性、方法、返回值的类型、方法的参数类型、方法返回值的类型、属性的类型。
反射:就是把java类中的各种成分映射成相应的java类。
例如:一个java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类,表示java类的Class类显然要提供依系列的方法,来获得其中的变量。
通过反射,我们可以得到各个类中相应成分的Class对象。
编译时与运行时的区别:
编译时,检查代码的语法错误。不能检查逻辑错误!
运行时,如果代码存在逻辑错误,那么就会报错。
Constructor:
我们可以通过反射创建对象。
String str = new String("abc");
String str = (String) String.class.getConstructor(StringBuffer.class).newInstance(new StringBuffer("abcde"));
如果通过空参数的构造方法创建一个对象,还可以通过Class.newInstance()方法。
例如:
String str = (String)Class.forName("java.lang.Stirng").newInstance();
---------------------- android培训、java培训、期待与您交流! ----------------------
- 黑马程序员_Java基础加强之反射
- 黑马程序员_java基础加强之反射
- 黑马程序员_java基础加强之(反射)
- 黑马程序员_Java基础加强_反射
- 黑马程序员_Java基础加强反射
- 黑马程序员_Java基础加强_反射
- 黑马程序员_java基础加强之JavaBean
- 黑马程序员_java基础加强之枚举
- 黑马程序员_java基础加强之(内省)
- 黑马程序员_java基础加强(一)
- 黑马程序员_java基础加强-枚举和反射
- 黑马程序员_张孝祥_Java基础加强_反射
- 黑马程序员_JAVA基础加强——反射
- 黑马程序员之基础加强之反射
- 黑马程序员_java基础加强
- 黑马程序员_JAVA基础加强
- 黑马程序员_Java基础加强
- 黑马程序员_Java基础加强
- linux gdb命令
- 基于Android opengles的魔方开发总结(一)
- 我的职业规划
- android status bar 之 status bar notifications
- 最长非上升子序列
- 黑马程序员_java基础加强之(反射)
- 3种方法求解斐波那契数列
- 有了HTML5,Flash还能走多远?
- 加号要换成 %2B
- LPC1768 IAP(一)
- 关于Struts2中Action从表单取值并且存到Web元素中(session)
- 程序员的自我修养---C/C++运行库
- HTML5&Flash之粗知浅见
- eclipse安装ADT缺少org.eclipse.wst.sse.core错误的解决办法