1,Java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,,至于这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值,Java程序中的各个Java类用一个类来描述,这个类就是Class,Class类描述类的名字,类的访问属性,类所属于的包名,字段名称的列表,方法名称的列表,等等。
2,得到各个实例对象对应的字节码有三种方法:(1),类名.class,例如,System.class (2),对象.getClass(),例如,new Date().getClass (3),Class.forName("类名"),例如,Class.forName("java.util.Date")
3,Class.forName()的作用是返回字节码,返回的方式有两种,第一种字节码已经被加载过, 由java虚拟机直接返回,第二种是java虚拟机还没有字节码,则又类加载器加载,然后返回字节码。
4,有九个预定义的Class实例对象:八个基本数据类型各自对应一个Class实例对象,加上一个void对应的CLass实例对象。 int.class==integer.TYPE,数组类型的Class实例对象用的方法是Class.isArray()。
5,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void……
6,反射就是把Java类中的各种成分映射成相应的java类。
7,一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象
8,Constructor类代表某个类中的一个构造方法,得到某个类所有的构造方法。
得到某个类所有的构造方法:
Constructor []constructors=Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
9,创建实例对象,
通常方式:
String str=new String(new StringBuffer("abc"));
反射方式:
String str=(String)constructor.newInstance(new StringBuffer("abc"));
10,Class.newInstance()方法:
String obj=(String)Class.forName("java.lang.String").newInstance();
该方法可得到类内部默认的构造方法。
11,Field类代表某个类中的一个成员变量,得到的Field对象是对应到类上面的成员变量。
12,Methode类代表某个类中的一个成员方法,得到类中的的某一个方法,例子:
Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);
通常调用方式:
System.out.println(str.charAt(1));
反射调用方式:
System.out.println(charAt.invoke(str,1));
13,如果传递给Method对象的invoke()方法的一个参数为null,说明该Method对象对应的是一个静态方法。
14,具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
15,代表数组的Class实例对象的getSuperClass()方法返回的父类为Objec类对应的Class。
16,基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当作Object类型使用,又可以当作Object[]类型使用。