概述
Java反射机制
- 什么是反射?
答:将一个java类的各个部分封装为其他对象的机制 - 反射有什么好处,为什么要使用反射?
答:一是可以解耦,提高程序的可重用性;二是方便程序在操作中使用这些对象;三是反射是框架的核心
程序在计算机中的三个阶段
获取字节码的三种方式
- 通过Class.forName(“全类名”)
- 类名.class
- 对象.getClass()
package com.quan.practice;
import com.quan.bean.Person;
public class ReflectTest {
public static void main(String[] args) throws ClassNotFoundException {
// 1. 通过全类名的方法获取Class对象
Class cls1 = Class.forName("com.quan.bean.Person");
// 2. 通过类名.class获取Class对象
Class cls2 = Person.class;
// 3. 通过对象.getClass()获取Class对象
Person person = new Person();
Class cls3 = person.getClass();
// 结果都为真,因为Class对象只会被类加载器加载一次
System.out.println(cls1 == cls2);
System.out.println(cls1 == cls3);
}
}
通过三种方法获取的Class对象都为同一个,因为Class对象只会被类加载器加载一次
获取成员变量对象
获取成员变量对象是为了设置和查看对象相应的成员变量值。
- 以下是获取成员变量的常用方法
// 获取Person类的访问限定符为public成员变量
Person.class.getField(String name);
// 获取Person类的某个成员变量
Person.class.getDeclaredField(String name);
// 获取Person类的所有访问限定符为public的成员变量
Person.class.getFields();
// 获取Person类所有的成员变量
Person.class.getDeclaredFields();
- 设置和访问对象相应的成员变量
public static void main(String[] args) throws Exception {
// 获取访问限定符为public相应的成员变量
Field publicNameField = Person.class.getField("publicName");
Person person = new Person();
System.out.println(person);
// 设置person对象的publicName成员变量
publicNameField.set(person, "quan");
System.out.println(person);
// 访问person对象的publicName成员变量
System.out.println(publicNameField.get(person));
// 非public成员变量无法调用get、set方法,如果需要调用get、set方法,需要设置可以访问性为true
// publicNameField.setAccessible(true);
}
获取构造方法对象
获取构造方法对象就是为了创建对象
// 获取Person类的构造器
Constructor<Person> personConstructor = Person.class.getConstructor(Integer.class, String.class, String.class);
// 通过构造器创建对象
Person person = personConstructor.newInstance(1, "quan", "quan");
获取成员函数对象
获取成员函数对象就是为了调用成员函数
public static void main(String[] args) throws Exception {
// 获取public成员方法(有参数)
Method sayHelloMethod = Person.class.getMethod("sayHello", String.class);
// 无参数
// Method sayHelloMethod = Person.class.getMethod("sayHello");
Person person = new Person();
// 调用成员方法
sayHelloMethod.invoke(person, "Hacker");
}
最后
以上就是迷你音响为你收集整理的Java基础-反射机制的作用的全部内容,希望文章能够帮你解决Java基础-反射机制的作用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复