我是靠谱客的博主 迷你音响,最近开发中收集的这篇文章主要介绍Java基础-反射机制的作用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java反射机制

  1. 什么是反射?
    答:将一个java类的各个部分封装为其他对象的机制
  2. 反射有什么好处,为什么要使用反射?
    答:一是可以解耦,提高程序的可重用性;二是方便程序在操作中使用这些对象;三是反射是框架的核心

程序在计算机中的三个阶段

在这里插入图片描述

获取字节码的三种方式

  1. 通过Class.forName(“全类名”)
  2. 类名.class
  3. 对象.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对象只会被类加载器加载一次

获取成员变量对象

获取成员变量对象是为了设置和查看对象相应的成员变量值。

  1. 以下是获取成员变量的常用方法
// 获取Person类的访问限定符为public成员变量
Person.class.getField(String name);
// 获取Person类的某个成员变量
Person.class.getDeclaredField(String name);
// 获取Person类的所有访问限定符为public的成员变量
Person.class.getFields();
// 获取Person类所有的成员变量
Person.class.getDeclaredFields();
  1. 设置和访问对象相应的成员变量
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基础-反射机制的作用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部