Java入门14(反射)

反射

🌟约定优于配置,配置优于实现

​ 将类当作一个对象进行处理,这就是反射

IOC 控制反转

​ 在需要使用对象的时候,开发者不需要自己new,只需要通过配置文件或者注解,对象可以由代码自行创建,根据配置文件的变更,创建不同的对象,调用不同的方法

获取类对象的方式

​ ⭐在JVM中,类在运行之前,需要先借助ClassLoader类进行类加载,想加载哪一个类,就必须先加载这个类的类对象,一个 JVM 对应一个 ClassLoader 类,每一个类在一个JVM中也只有一个类对象,无论怎么获取类对象,获取的类对象一定是同一个

  1. 通过.class直接获取,这种方法不会加载类中的静态成员
  2. 通过类的路径获取
  3. 通过该类对象所对应的类的实例获取
// 通过.class直接获取
Class<Studnet> sClass = Student.class;
// 通过类的路径获取
Class<Student> sClass = (Class<Student>) Class.forName("com.iweb.demo01.Student");
// 通过该类对象所对应的类的实例获取
Class<Student> sClass = (Class<Student>) new Student().getClass();

根据类对象去获取构造方法的反射对象

// 获取无参构造方法的反射对象
// 无参构造方法,不需要添加参数
Constructor<Student> studentConstructorNoArgs = studentClass.getConstructor(); 
// 借助构造器对象,可以实现实例化类对象
Student s = studentConstructorNoArgs.newInstance();
// 访问对象。。。

// 获取有参构造方法
// 有参构造方法,需要添加参数类型的反射对象
Constructor<Student> studentConstructorAllArgs = studentClass.getConstructor(String.class,Integer.class);
// 借助构造器对象,可以实现实例化类对象
Student student = studentConstructorAllArgs.newInstance("robot01",12);
// 访问对象

创建方法所对应的反射现象

// 创建方法所对应的反射对象(无参)
Method getNameMethod = studentClass.getMethod("getName");
// 借助方法的反射对象,调用方法
String result = (String) getNameMethod.invoke(student);

// 创建方法所对应的反射对象(有参)
Method setNameMethod = studentClass.getMethod("setName", String.class);
// 借助方法的反射对象,调用方法
setNameMethod.invoke(student,"robot02");
System.out.println(student);

热门相关:倾心之恋:总裁的妻子   万古至尊   闺范   裙上之臣   戏精老公今天作死没