0

0

Java中反射的含义和作用是什么?

WBOY

WBOY

发布时间:2023-04-21 15:16:08

|

1560人浏览过

|

来源于亿速云

转载

一、反射概述

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意 对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象 (一个类只有一个Class对象),这个对象就包含了完整的类的结构信 息。我们可以通过这个对象看到类的结构,这个对象就像一面镜子,透 过这个镜子看到类的结构,所以我们形象的称之为反射。

二、常用api

java.lang.Class:代表一个类

java.lang.reflect.Method:代表类的方法

java.lang.reflect.Field:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造器

static Class forName(String name) 返回指定类名 name 的 Class 对象

Object newInstance() 调用无参构造函数,返回该Class对象 的一个实例

getName() 返回此Class对象所表示的实体(类、 接口、数组类、基本类型或void)名称

Class getSuperClass() 返回当前Class对象的父类的Class对象

Class [] getInterfaces() 获取当前Class对象的接口

JenMusic
JenMusic

一个新兴的AI音乐生成平台,专注于多乐器音乐创作。

下载

ClassLoader getClassLoader() 返回该类的类加载器

Class getSuperclass() 返回表示此Class所表示的实体的超类的Class

Constructor[] getConstructors() 返回一个包含某些Constructor对象的数组

Field[] getDeclaredFields() 返回Field对象的一个数组 Method

getMethod(String name,Class … paramTypes) 返回一个Method对象,此对象的形参类型为paramType

示例:

public class Person {
    private String name;
    private int age;
    public Person() {
        System.out.println("Person类被初始化了。。。。。^_^");
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
}

反射

public class ClassDemo {
    public static void main(String[] args) throws
        Exception {
        // 1. 创建Class对象
        //Class clazz = (Class)
        Class.forName("Person");
        Class clazz =Class.forName("Person");
            // 2. 通过Class对象调用其方法
            // 2.1. 通过反射来实例化对象
            //Person person = clazz.newInstance();
            Object o = clazz.newInstance(); // 此名就相当于
        Person p = new Person()
            // 2.2. 获取类的完整类名称(包名+类名)
            String name = clazz.getName();
        System.out.println(name);
        // 2.3. 获取类的简单名称,就是类的名称,不含包名
        System.out.println(clazz.getSimpleName());
        // 2.4. 获取构造器
        Constructor[] constructors =
            clazz.getConstructors();
        for (Constructor constructor :
             constructors) {
            System.out.println(constructor.getName());
        }
        // 2.5. 获取字段
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
        // 2.6. 获取方法
        Method[] methods = clazz.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
    }
}

三、创建Class对象的四种方式

public class Demo {
    public static void main(String[] args) throws
        Exception {
        // 第一种方式:调用Class.forName()
        Class clazz =Class.forName("java.lang.String");
        // 第二种方式:通过类的字节码文件来创建
        Class clazz1 = String.class;
        // 第三种方式:通过调用对象的getClass()方法来创建
        String str = new String();
        Class clazz2 = str.getClass();
        // 第四种:通过类装载器来创建
        ClassLoader loader =String.class.getClassLoader();
        Class clazz3 =loader.loadClass("java.lang.String");
    }
}

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

C# 教程
C# 教程

共94课时 | 5.7万人学习

Java 教程
Java 教程

共578课时 | 40.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号