第一种方法(通过类名加载类 ):
//这里需要做异常处理,或的加载类的类对象类。
Class<?> forName = Class.forName("com.xb.test.Student");
//通过类对象类的方法实例化一个对象
Object newInstance = forName.newInstance();
//判断该类实例化的对象是否为加载的类
if (newInstance instanceof Student ) {
System.out.println("这是有个学生对象");
}
控制台输出:
第二种方法(通过类名直接加载 ):
//测试方法同上 这种方法是延时加载
Class stu =Student.class;
第三种方法(通过类对象加载):
Student stu1=new Student();
Class class1 = stu1.getClass();
第四种方法(通过类加载器加载):
//获取类加载器
ClassLoader cl=ClassLoader.getSystemClassLoader();
//通过类加载器加载类对象类 延迟加载
Class<?> loadClass = cl.loadClass("com.xb.test.Student");
加载类的过程:
加载器:①类加载器、②Ext扩展加载器、③引导加载器
加载过程:(有向上委托和向下通知的过程)
当一个类需要被加载的时候类加载器不会马上加载这个类而是会想扩展加载器委托,
扩展加载器受到委托后也不会去加载这个类,而是会委托给引导加载器,
引导加载器会到java的rt.jar中寻找是否存在该类不存在向下通知,扩展加载器也会在Ext文件下找是否存在该类,不存在向下通知
最后类加载器会进行加载(可以防止java核心API被篡改)