理解Class类
Java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class,
例如:Person类代表人,它的实例对象是张三,李四这样一个一个的人,Class类代表java类,它的各个实例对象对应于各个类在内存中的字节码,例如Person类的字节码等。
一个类被雷加载器加载到内存中,占用一片内存空间,这个空间里面的内容就是类的字节码,
不同的类字节码是不同的,所以他们在内存中的内容是不同的,这样的一个个空间可以用一个个对象来表示,这些对象具有相同的类型,这个类型是什么?就是Class类型,
如何得到各个字节码对应的实例对象(Class类型)?
类名.class,例如system.class,
对象.getClass(),例如,new Date().getClass(),
Class.forName(“类名”);Class.forName(“java.util.Date”).
九个预定义实例对象:
八种基本数据类型 boolean, byte, char, short, int, long, float, double + void
对与反射的理解:反射就是把java类中的各种成分映射成相应的java类,例如一个java类中用一个Class类的对象来表示一个类中的各个组成部分:方法,成员变量包等信息也用一个个java类来表示,即他们也属于某个java类,表示java类的Class类提供了一系列的方法,来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应的java类来表示,他们是Field,Method,Contructor,Package等。
Constructor类
Constructor类代表一个类中的构造方法
得到某个类的构造方法
例如:Constructor[] constructors=Class.forName(“java.lang.String”).getConstructors(),
得到某一个构造方法:
例子:Constructor constructor=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class),
创建实例对象:
通常方式:String str=new String(new StringBuffer(“asd”));
反射方式:String str=(String)constructor.newInstance(new StringBuffer(“asd”));
实例:
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ReflectTest {
public static void main(String[] args) throws IllegalArgumentException,
InstantiationException, IllegalAccessException,
InvocationTargetException, SecurityException, NoSuchMethodException {
Constructor constructor1 = String.class
.getConstructor(StringBuffer.class);
/*
* String.class.getConstructor(StringBuffer.class)
* 传递了一个StringBuffer.class,表示要得到需要StringBuffer类型的String类的构造方法
*/
String str1 = (String) constructor1
.newInstance(new StringBuffer("asd"));
/* 这里传递 new StringBuffer("asd") 因为调用获得的构造方法时要用于上面相同的类型 */
System.out.println(str1.charAt(2));
}
}
我想反射还是比较难于掌握的尤其是对于我这样的一个新手而言。我就是卡在这里的,看了视频还是云里雾里的