Java-反射(三)

141 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);