持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第31天,点击查看活动详情
ClassLoader
- 类加载器作用是用来把类(class)装载进内存的。JVM 规范定义了如下类型的类的加载器。 1.获取一个系统类加载器
ClassLoader classloader = ClassLoader.getSystemClassLoader();System.out.println(classloader);2.获取系统类加载器的父类加载器,即扩展类加载器classloader = classloader.getParent();System.out.println(classloader);3.获取扩展类加载器的父类加载器,即引导类加载器classloader = classloader.getParent();System.out.println(classloader);4.测试当前类由哪个类加载器进行加载classloader = Class.forName("exer2.ClassloaderDemo").getClassLoader();System.out.println(classloader);5.测试JDK提供的Object类由哪个类加载器加载classloader =Class.forName("java.lang.Object").getClassLoader();System.out.println(classloader);6.关于类加载器的一个主要方法:getResourceAsStream(String str):获取类路径下的指定文件的输入流InputStream in = null;in = this.getClass().getClassLoader().getResourceAsStream("exer2\\test.properties");System.out.println(in);
创建运行时类的对象
- 创建类的对象:调用Class对象的newInstance()方法 要 求:
- 类必须有一个无参数的构造器。
- 类的构造器的访问权限需要足够。
- 难道没有无参的构造器就不能创建对象了吗?
- 不是!只要在操作的时候明确的调用类中的构造器,并将参数传递进去之后,才可以实例化操作。
- 步骤如下: 1.通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的指定形参类 型的构造器
2.向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数。
3.通过Constructor实例化对象。 1.根据全类名获取对应的Class对象
String name = “atguigu.java.Person";Class clazz = null;clazz = Class.forName(name);2.调用指定参数结构的构造器,生成Constructor的实例Constructor con = clazz.getConstructor(String.class,Integer.class);3.通过Constructor的实例创建对应类的对象,并初始化类属性Person p2 = (Person) con.newInstance("Peter",20);System.out.println(p2);