万物皆对象,类也是对象,java中将类也封装成了类
class Class{
Field field; // 字段,将字段封装成对象
Constructor constructor; // 将构造函数封装成对象
Method method; //方法类型
// 将类中的成员均封装为对象
// 对成员的操作和普通类一模一样
}
加载类前必须先获取字节码文件,获取的方法如下:
通过Object中getClass()获取
Person p1=new Person();
Person p2=new Person();
c1=p1.getClass();
c2=p2.getClass();
c1与c2相同,地址相同,因为Person.class字节码文件只有一份
通过class属性获取
类名.class
Class类中的forName()方法通过给定类名获取对应字节码啊文件对象
Class clazz=Class.forName("全限定名");
// 自动找类并加载到内存中
// 可能引发ClassNotFoundException
通过获取的字节码创建相应的对象
// 利用空参构造函数创建对象
Object obj=App.class.newInstance();
// 利用自定义的构造函数创建对象
Constructor constructor=App.class.getConstructor(String.class,Integer.class);
constructor.newInstance("",12);
// 可引发的异常
// java.lang.InstantiationException 初始化异常(所需的构造函数没有)
// java.lang.IllegalAccessException 构造函数权限不够(可能私有)
// java.lang.reflect.InvocationTargetException 当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收