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

来源:互联网 发布:网络游戏知乎 编辑:程序博客网 时间:2024/05/16 06:01
反射由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实例对象