---------------------- android培训、java培训、期待与您交流! ----------------------
Class 类
Java程序中各个java类属于同一类事物;描述这类事物的java类名就是Class。
Class类代表java类,它的各个实例对象代表类在内存中的字节码;一个类被类加载器加载到内存中,占用一段内存空间,这个空间里面的内容就是字节码;不同的类字节码也不同;
如何得到各个字节码对应的实例对象 (Class 类型 )
1、类名 .class 如 System.class;
2、对象 .getClass() 如 new person().getClass();
3、Class.forName(“ 类名 ”) 如 Class.forName("java.util.String");
9 个预定义Class实例对象:8个基本数据类型和void;
反射
反射 : 就是把 Java 类中的各种成分映射成相应的 java 类 .
一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个java的类来表示;
1、Constructor类代表某个类中的一个构造方法
2、Field类,成员变量的反射
3、Method类,成员方法的反射
得到类中的某一个方法 :
Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
下面是对Constructor类的一个反射实例
package cn.it.cast;
import java.lang.reflect.Constructor;
public class ReflectTest {
public static void main(String[] args) throws Exception {
//下面这行有处理异常ClassNotFoundException 谁知道有没有这个类
//这是得到所有的构造方法
Constructor[] constructors = Class.forName("java.lang.String").getConstructors();
//得到某一个特定的构造方法有处理异常NoSuchMethodException谁知道有没有这个构造方法
//注意,一个类的构造方法N 多,不可能用123去指定某一个特定的构造方法,只可以指定 参数
//这里getConstructor(StringBuffer.class);是1.5新的可变参数以前是数组类型参数
//现在是Class<?>... parameterTypes
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
//我现在要做一件事情newString(new StringBuffer("abc"));
//我想用反射做
//上面已经得到了那个构造函数,而且参数也是 StringBuffer的
//Constructor类有一个重要的方法newInstance(arg0); 每call一次就弄一个新的
//当然,参数不是StringBuffer也可以编译过,
//编译器只管你这个是构造方法么就好了,管你是什么参数
//编译器还不知道这个constructor是对应参数为StringBuffer的构造函数呢!!
//甚至编译器连这个constructor 是哪个类的都不管
// 编译器只知道这个是 Constructor的实例,这个实例有个方法叫newInstance,参数可变
//编译器其他什么都不管
//所以我们还要自己把结果 强制 转化为自己需要的类型(String)
//但是到了runtime,JVM就清楚的知道了,
//所以有运行时错误和编译时错误之分
//就是说你现在传一个String类型,compiler不会说你错,但是你一运行,JVM就说不对了
String myString = (String)constructor.newInstance(new StringBuffer("abc"));
//test
System.out.println(myString.charAt(2));
//out c OK!S
//上面的方式有三步,中间需要 constructor
//因为很多类都有规定必须要有无参构造函数,所以有个方法
//Class.newInstance()直接call无参构造函数
String s1 = (String)Class.forName("java.lang.String").newInstance();
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima