您的位置:首页 > 编程语言 > Java开发

张孝祥 java基础加强版--透彻分析反射的基础

2012-09-19 09:50 253 查看
反射由jdk1.2发展过来,不是jdk1.5新特性

反射的基石--Class(C是大写)一个类

1.java类用于描述一类事物的共性

2.java程序中的各个Java类,属于同一类事物(都是java中的类),可以用一个类来

描述这个事物,这个类就是Class,要注意与小写class关键字的区别

对比提问:一.众多人--->Person; 众多java类--->Class(得到类的名称.类的访问权限等)

二.Person类代表人,他的实例对象就是张三,李四这样一个个具体的人

Class类代表java类,他的各个类:

1.对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码

等等.

2.一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是

类的字节码,不同的类的字节码是不不同的,所以他们在在内存中的内容是不同的,这一个个的空间可分别用

一个个对象来表示

知识点:数据在硬盘上的保存形式是而二机制代码

字节码:原程序中将数据转化成字节码

persion p1=new Person()k;

Class cls1=Date.calss//字节码1;

Class cls2=Person.class//字节码2;

Class.for("java.lang.string");

得到字节码的三种方式:

1.类名.class,例如,System.class

2.对象.getClass() 例如,new Date().getClass()

3.Class.forName("类名"),例如,Class.forName("java.util.Date");

八种基本对象的字节码(byte,short,int,long,float,double,char,boolean)和void.class字节码共计

九种预定义字节码

实例:public class ReflectTest {
/**

* @param args

* @throws ClassNotFoundException

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

String s="abc";

Class cls1=s.getClass();

Class cls2=String.class;

Class cls3=Class.forName("java.lang.String");

System.out.println(cls1==cls2);

System.out.println(cls1==cls3);

}

}

判断是否是基本类型字节码:isPrimitive();

System.out.println(int.class==Integer.TYPE);TYPE代表包装类型所代表的基本类型字节码,所以为true

数组类型的Class实例对象

Class.isArray();

总之,只要在源程序中出现的类型,都有各自的Class实例对象

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐