Java反射笔记1
来源:互联网 发布:黑客特效js 编辑:程序博客网 时间:2024/06/08 02:45
【作者:孟祥月 博客:http://blog.csdn.net/mengxiangyue】
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
我们刚刚接触反射的时候,可能就在想,这个在我们编写程序的时候,很少用到,到底有什么用呢?没错,对于普通编程根本就用不到反射,但是有时候我们在网络上传给我一个类,这个类我们事先是不知道的,这个需要动态的加载,这时候就需要了,在比如我们都知道spring struts hibernate ibatis这些框架,他们存在的基础就是:反射。
我也用过反射,最近在学Java的时候,学到了,就写个笔记记录下来。
首先说Class类,这里的C是大写的,这个是一个类名叫Class的class,这个类也是从Object class继承来的。这个类的实例表示的是Java中的一份字节码文件。这里有一点需要注意,这里的一份说的是如果这个类有字节码那么只有一份。既然Class是一个类,那么我们就可以实例化,我们很自然的就想到了new Class(),但是这个在Java中是没有的。但是在Java的每个类中都提供了一个getClass方法,这个方法的返回值就是一个Class实例。我们还可以使用“类名.class”得到这个对象的字节码。
这里还有一点注意,在Java中八个基本数据类型也对应的有字节码,我们也可以使用int.class类似的方法,得到基本数据类型的字节码。还有一个有意思的事就是,我们经常使用的void也有一份字节码。
既然八个基本数据类型都有对应的字节码,我们知道在Java中对于基本数据类型都提供了对应的封装类,那么这两个的字节码是同一个吗?答案是不是,一个基本数据类型,一个是对象。
这里说句题外话,Java号称是完全面向对象的,但是还是提供了基本数据类型,它们不是对象,但是在Java1.4以后,我可以把它当成对应的封装类对象,因为Java提供了对于基本数据类型的自动拆箱和装箱。但是在Ruby中所有的都是对象包括基本数据类型。
下面我们举一个例子,验证上面说的:
import java.lang.reflect.Constructor;public class ReflectTest{public static void main(String[] args) throws Exception{//在内存中只有一份字节码,我们可以使用同一份字节码创建不同的对象String str = "abc";Class cla1 = str.getClass();Class cla2 = String.class;Class cla3 = Class.forName("java.lang.String");System.out.println(cla1 == cla2);System.out.println(cla2 == cla3);System.out.println(cla1.isPrimitive());//判断是否是基本数据类型System.out.println(int.class.isPrimitive());System.out.println(int.class == Integer.class);System.out.println(int.class == Integer.TYPE);//TYPE代表对应的基本类型的字节码System.out.println(int[].class.isPrimitive());//数组不是原始类型System.out.println(int[].class.isArray());//检测一份字节码是否是数组}}
truetruefalsetruefalsetruefalsetrue
- Java反射笔记1
- java反射笔记1
- java反射复习笔记1
- Java笔记----java反射
- java基础巩固笔记(1)-反射
- java 反射机制-学习笔记(1)
- Java笔记---反射
- Java反射笔记一
- java反射笔记二
- java反射笔记三
- java反射笔记四
- java反射笔记五
- java笔记(5)--反射
- Java反射机制 笔记
- java反射机制笔记
- Java 反射学习笔记
- java笔记-高新技术-反射
- Java反射学习笔记
- windows xp 使用bat文件DOS批处理文件设置网络地址为固定或者动态获取
- JAVA排序汇总 .
- Android之Activity组件
- android 的skia 图形引擎库
- ACM学习计划
- Java反射笔记1
- smarty函数
- u-boot中typedef应用解析___init_fnc_t *init_sequence[]
- 很美的句子
- 《分页》分析及 源代码分析
- java.sql.SQLException: ORA-00911: invalid character
- MySQL变量使用及数据库存储过程实现分页
- smarty自定义函数
- zeroDateTimeBehavior=convertToNull