Java反射类、构造方法、类变量、类方法

news2024/9/25 17:17:53

被反射的Student类

package reflect;

public class Student {
    public String name;
    private String age;
    public int num;

    public Student(){
    }
    public Student(String age) {
        this.age = age;
    }
    private Student(String name, String age){
        this.age = age;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

反射获取Class的三种方式

  • Class.forName()
  • 类名.class
  • 类对象.getClass()

代码

        //1
        Class aClass = Class.forName("reflect.Student");
		//2
        Class bClass = Student.class;
		//3
        Student student = new Student();
        Class cClass = student.getClass();

运行如下
在这里插入图片描述

反射获取构造方法

获取所有
  • getConstructors() 只能获取public类型构造方法
  • getDeclaredConstructors() 获取所有声明的构造方法

代码

        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");
        //getConstructors()
        Constructor[] constructor = aClass.getConstructors();
        for(Constructor con : constructor){
            System.out.println(con);
        }
        System.out.println();
        //getDeclaredConstructors()
        Constructor[] constructor2 = aClass.getDeclaredConstructors();
        for(Constructor con : constructor2){
            System.out.println(con);
        }
    }

运行如下
在这里插入图片描述

获取单个

declared差异和上面一样,至于获取哪个构造方法,由方法传入的参数类型决定

  • getConstructor()
  • getDeclaredConstructor()

代码

        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");
        
        /*
        public Student(){
        }
        public Student(String age) {
            this.age = age;
        }
        private Student(String name, String age){
            this.age = age;
            this.name = name;
        }
        */
        Constructor constructor1 = aClass.getDeclaredConstructor();
        Constructor constructor2 = aClass.getDeclaredConstructor(String.class);
        Constructor constructor3 = aClass.getDeclaredConstructor(String.class,String.class);
        
        System.out.println(constructor1);
        System.out.println(constructor2);
        System.out.println(constructor3);

运行如下
在这里插入图片描述

反射获取成员变量

其实和上面获取构造方法一样,只不过变成了field

获取所有
  • getFields()
  • getDeclaredFields()

代码

package reflect;

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");

        Field[] fields = aClass.getFields();
        for(Field field : fields){
            System.out.println(field);
        }
        System.out.println();
        Field[] fields2 = aClass.getDeclaredFields();

        for(Field field : fields2){
            System.out.println(field);
        }
    }

}

运行如下
在这里插入图片描述

获取单个
  • getField()
  • getDeclaredField()

括号中传入String类型的变量名

代码

package reflect;

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");

        Field field = aClass.getField("name");
        System.out.println(field);
        
        Field field2 = aClass.getDeclaredField("age");
        System.out.println(field2);
    }

}

运行如下
在这里插入图片描述

获取成员方法

当然是和前面基本一样了,不多解释了

获取所有
  • getMethods()
  • getDeclaredMethods()

代码

package reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");

        Method[] methods = aClass.getMethods();
        for(Method method: methods){
            System.out.println(method);
        }
        System.out.println();
        Method[] methods2 = aClass.getDeclaredMethods();
        for(Method method: methods2){
            System.out.println(method);
        }
    }

}

运行如下
在这里插入图片描述

仔细观察,你会发现如果不加declare的方法,会连带父类的一些方法一起打印,这一点需要注意一下

最后是获取单个方法

反射方法最大的问题是什么?重载
怎么办呢,那就在反射前不仅声明要获取的方法名,同时也声明参数类型
比如String,就写String.class;int就写int

  • getMethod()
  • getDeclaredMethod()

代码

package reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
        //获取反射类Student
        Class aClass = Class.forName("reflect.Student");

        Method method = aClass.getMethod("setName", String.class);
        System.out.println(method);
        Method method2 = aClass.getDeclaredMethod("getName");
        System.out.println(method2);
    }

}

运行如下
在这里插入图片描述

最后,记得要抛出异常奥,要不然拒绝服务就来了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下使用CMake编译lua

Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。 Lua的官方网站上只提供了源码,需要使用Make进行编译,具体的编译方法为 curl -R -O http://www.lua.org/ftp/lua-5.4.6.…

从零构建属于自己的GPT系列6:模型部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

IP属地变化背后的原因

随着互联网的普及和技术的不断发展,IP属地变化的现象越来越受到人们的关注。近日,有网友发现自己的IP属地发生了变化,引发了广泛讨论。那么,IP属地为什么会发生变化呢? 首先,网络环境的变化是导致IP属地变化…

过拟合与欠拟合

一、模型选择 1、问题导入 2、训练误差与泛化误差 3、验证数据集和测试数据集 4、K-折交叉验证 一般在没有足够多数据时使用。 二、过拟合与欠拟合 1、过拟合 过拟合的定义: 当学习器把训练样本学的“太好”了的时候,很可能已经把训练样本自身的一些特…

JAVA:乘除窗体的实现

目录 题目要求: 窗口的实现: try 和 catch 的用法: 思路大意: 关键代码的实现: 题目要求: 使用 try 和catch 方法完成乘法除法的异常处理和窗体的实现,如下图所示: 窗口的实…

PDF控件Spire.PDF for .NET【转换】演示:将 PDF 转换为线性化

PDF 线性化,也称为“快速 Web 查看”,是一种优化 PDF 文件的方法。通常,只有当用户的网络浏览器从服务器下载了所有页面后,用户才能在线查看多页 PDF 文件。然而,如果 PDF 文件是线性化的,即使完整下载尚未…

Java-----链表

本篇碎碎念:唐朝诡事录中的西安与洛阳让我想到了,远赴人间惊鸿宴会,一睹人间盛世颜,描绘的就是这两个古都吧,有机会一定要去游览一番 今日份励志文案: 最好的状态就是向自己喜欢的东西一点点靠近 …

国产数据库适配-南大通用(Gbase)问题整理

Gbase 函数 [GBase 8s 教程]GBase 8s 常用函数、表达式_gbase函数-CSDN博客 Gbase 8s hibernate方言包下载: Index of /dl/hibernate select * from sysmaster:sysdbslocale 导出数据 su - gbasedbt export DB_LOCALEzh_CN.57372 export CLIENT_LOCALEzh_cn…

ESXI 6.7升级update3

一、适用场景 1、企业已有专业服务器,通过虚拟化环境搭建了vm server; 2、备份整个vm server时,需要使用ovftool工具完成,直接导出ovf模板时报错; 3、升级EXSI6.7的build 8169922版本为update 3版本后,已保…

Vue3-08-条件渲染-v-if 的基本使用

v-if 是什么 v-if 一个指令, 它是用来根据条件表达式,进行选择性地【展示】/【不展示】html元素的。比如 : 有一个按钮A,当条件为真时,展示该按钮;条件为假时,不展示该按钮。与 js 中的 条件判…

轮播图封装,包含进度圆点,左右切换

轮播图封装&#xff0c;包含进度圆点&#xff0c;左右切换 封装一个函数&#xff0c;方便多次调用 html: <div class"home-Carousel" ><ul class"list1"><li class"item1 active"><a href"javascript:;" class&…

redis-学习笔记(Jedis 通用命令)

flushAll 清空全部的数据库数据 jedis.flushAll();set & get set 命令 get 命令 运行结果展示 exists 判断该 key 值是否存在 当 redis 中存在该键值对时, 返回 true 如果键值对不存在, 返回 false keys 获取所有的 key 值 参数是模式匹配 *代表匹配任意个字符 _代表匹配一…

SD-MTSP:开普勒优化算法KOA求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、开普勒优化算法KOA 开普勒优化算法&#xff08;Kepler optimization algorithm&#xff0c;KOA&#xff09;由Mohamed Abdel-Basset等人于2023年提出。 参考文献&#xff1a; [1]Mohamed Abdel-Basset, Reda Mohamed, Shaimaa A. Abdel Azeem, Mohammed Jameel, Mohamed …

提升数据分析效率:Amazon S3 Express One Zone数据湖实战教程

前言 什么是 Amazon S3&#xff1f;什么是 S3 Express One Zone&#xff1f;实现概述 技术架构组件实现步骤概览 第一步&#xff1a;构建数据湖的基础第二步&#xff1a;选择并查看数据集第三步&#xff1a;在 Athena 中搭建架构第四步&#xff1a;数据转换与优化第五步&#x…

three.js(二)

three.js&#xff08;二&#xff09; 参考前言正文简单开始(不使用任何框架)补充 粗略带过(使用Vue框架)细致讲解(比如我使用react框架)App.jsx 的进阶版 项目打包补充打包遇到的问题:原因:解决办法: 参考 https://threejs.org/docs/ 前言 上一集中,我们用到了three.js的一个…

开源云原生网关Linux Traefik本地部署结合内网穿透远程访问

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

人工智能算法合集

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;作为当今世界最热门的技术领域之一&#xff0c;正日益改变着我们的生活方式、工作方式甚至整个社会结构。在人工智能领域中&#xff0c;算法是至关重要的一环&#xff0c;它们是实现人工智能技术应用的核…

Axure元件的介绍使用以及登录界面和个人简历的绘制

目录 一、Axure元件介绍 1.1 简介 1.2 特点 1.3 元件操作 二、基本元件的使用 2.1 矩形和圆形 2.2 图片 2.2.1 图片元件特点 2.2.2 具体操作 2.3 占位符 2.3.1 使用规范方法举例 2.4 文本元件 2.4.1 图示 2.5 热区 2.5.1 图示 2.5.2 热区辅助页面排版 2.6 线段…

Linux 系统上配置 SSH 密钥

1. 生成 SSH 密钥 打开终端&#xff0c;运行以下命令来生成 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -C "wqzbxhexample.com" 替换 "wqzbxhexample.com" 为你在 GitHub 注册时使用的邮箱地址。 2. 添加 SSH 密钥到 SSH 代理 运行以下命令来启…

智能优化算法应用:基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.纵横交叉算法4.实验参数设定5.算法结果6.…