IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA的反射 -> 正文阅读

[Java知识库]JAVA的反射

JAVA中的反射(框架的灵魂)

反射

在我看来反射就是获取一个类中的类名、方法名、变量
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象

(反射就是把java类中的各成分映射成一个个的对象)

反射的使用

1、获取Class对象的三种方式

1.1如果创建了对象(Object),直接使用Object.getClass()

1.2直接使用类名.class

1.3使用Class中的forName(String className)方法Class.forName()


public class TestFanshe {
    public static void main(String[] args) throws ClassNotFoundException {
         /**
         *  1.1如果创建了对象(Object),直接使用Object.getClass()
         **/
        Student stu = new Student();
        Class Cls1 = stu.getClass();
        /**
         * 1.2直接使用类名.class
         **/
        Class Cls2 = Student.class;
        /**1.3使用Class中的forName(String className)方法Class.forName()
         * 
         **/
        Class Cls3 = Class.forName("fanshe.Student");

        System.out.println(Cls1);
        System.out.println(Cls2);
        System.out.println(Cls3);
    }
}

在这里插入图片描述

2、获取构造方法

2.1获取公有的构造方法

public Constructor[] getConstructors()(获取所有的)
public Constructor getConstructor(Class… parameterTypes)(获取单个的)

2.2获取全部的构造方法(包括私有)

public Constructor[] getDeclaredConstructors()
public Constructor getDeclaredConstructor(Class… parameterTypes)

2.3构造方法的使用

Constructor–>newInstance(Object… initargs)

package fanshe;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class TestFanshe01 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class Cls = Class.forName("fanshe.Student");

        /**
         *public Constructor[] getConstructors()(获取所有的)
         *public Constructor getConstructor(Class... parameterTypes)(获取单个的)
         **/
        Constructor[] constructors = Cls.getConstructors();
        Constructor constructor = Cls.getConstructor(int.class, String.class);

        /**
         *public Constructor[] getDeclaredConstructors()
         *public Constructor getDeclaredConstructor(Class... parameterTypes)
         **/
        Constructor[] declaredConstructors = Cls.getDeclaredConstructors();
        Constructor declaredConstructor = Cls.getDeclaredConstructor(int.class);

        /**
         *创建对象
         **/
        Object o = constructor.newInstance(18, "张三");
        System.out.println(o);

    }
}

在这里插入图片描述

3、获取成员方法

在这里插入图片描述

3.1成员方法的使用

Object obj = 类名.class.getConstructor().newInstance()
方法名.invoke(要调用方法的对象(obj),要调用的方法名)

package fanshe;

import java.lang.reflect.Method;

public class TestFanshe02 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("fanshe.Student");

        Method[] methods = cls.getMethods();
        Method method = cls.getMethod("show");

        Method[] declaredMethods = cls.getDeclaredMethods();
        Method declaredMethod = cls.getDeclaredMethod("show");

        Object o = cls.newInstance();
        method.invoke(o);
    }
}

在这里插入图片描述

4、获取成员变量(和获取成员方法差不多就不在演示)

在这里插入图片描述

注意:一个类在运行期间只会产生一个class文件

反射的作用

1、运行配置文件内容

2、越过泛型检查

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:13:10  更:2021-09-02 11:14:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:11:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码