java反射Class类的api

news2024/10/11 1:03:01

目录

Class类

1.构造器相关

1)Constructor getConstructor(Class... parameterTypes):

2)Constructor[] getConstructors():

3)Constructor getDeclaredConstructor(Class... parameterTypes):

4)Constructor[] getDeclaredConstructors():

5)案例:获取构造器

1.代码

2.效果

2.字段(成员变量)相关

1)Field getField(String name):

2)Field[] getFields():

3)Field getDeclaredField(String name):

4)Field[] getDeclaredFields():

案例:获取字段

1.代码

2.效果

3.方法相关

1)Method getMethod(String name, Class... parameterTypes):

2)Method[] getMethods():

3)Method getDeclaredMethod(String name, Class... parameterTypes):

4)Method[] getDeclaredMethods():

5)案例:获取所有的方法

1.代码

2.效果

4.类信息相关

1)String getName():

2)Package getPackage():

3)Class getSuperclass():

4)Class[] getInterfaces():

5)TypeVariable>[] getTypeParameters():

6)boolean isInterface():

7)boolean isArray():

8)boolean isPrimitive():

9)T newInstance() throws InstantiationException, IllegalAccessException:

10)案例:获取类信息

1.代码

2.效果

5.注解相关

1) A getAnnotation(Class annotationClass):

2)Annotation[] getAnnotations():

3)boolean isAnnotationPresent(Class annotationClass):

案例:获取注解

1.代码

2.效果

6.泛型相关

1)Type getGenericSuperclass():

2)Type[] getGenericInterfaces():


Class类

  Class类在Java中是一个非常重要的类,它代表了运行时类的信息。每个类都有一个对应的Class对象,该对象包含了与类相关的元数据信息。Class类提供了许多方法来获取这些信息,如构造器、字段(成员变量)、方法等。下面是Class类的一些主要方法及其参数说明:

1.构造器相关

  • 1)Constructor<T> getConstructor(Class<?>... parameterTypes):

    • 返回具有指定参数类型公共构造函数
  • 2)Constructor<?>[] getConstructors():

    • 返回公共构造函数的数组
  • 3)Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):

    • 返回具有指定参数类型的声明构造函数(无论访问级别)。
  • 4)Constructor<?>[] getDeclaredConstructors():

    • 返回所有声明的构造函数(无论访问级别)。

5)案例:获取构造器

1.代码

实体类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

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

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

测试类

package org.xiji.c;

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

public class MyCatT {
    public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, InstantiationException, IllegalAccessException {


        //通过类获取
        Class<?> myClass = Class.forName("org.xiji.c.Cat");

        //获取所有构造
        Constructor<?>[] constructors = myClass.getConstructors();
        //遍历构造
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)");
        Cat cat = (Cat) constructors[0].newInstance("X", "black", 3);

        System.out.println(cat);
        //无参数构造
        System.out.println("无参数构造");
        Cat cat1 = (Cat) constructors[1].newInstance();
        cat1.setName("ZZ");
        cat1.setAge(6);
        cat1.setColor("black");
        System.out.println(cat1);

    }
}

2.效果

2.字段(成员变量)相关

  • 1)Field getField(String name):

    • 返回具有指定名称的公共字段。
  • 2)Field[] getFields():

    • 返回公共字段的数组
  • 3)Field getDeclaredField(String name):

    • 返回具有指定名称声明字段(无论访问级别)。
  • 4)Field[] getDeclaredFields():

    • 返回所有声明的字段(无论访问级别)。

案例:获取字段

1.代码
package org.xiji.c;

import java.lang.reflect.Field;

public class MyCatThree {
    public static void main(String[] args) throws ClassNotFoundException {

        System.out.println("获取所有的字段");
        Class<?> myClass = Class.forName("org.xiji.c.Cat");
        System.out.println("获取属性不限字段方法getDeclaredFields()");
        System.out.println("获取公共属性用getFields()");
        Field[] fields = myClass.getDeclaredFields();

        System.out.println(fields.length);
        for (Field field : fields) {
            System.out.println(field);
            System.out.println(field.getName());
            System.out.println(field.getType());

            System.out.println(field.getModifiers());
            System.out.println("--------------------------------");

            System.out.println(field.getDeclaringClass());
            System.out.println("获取注解");
            System.out.println(field.getAnnotations());

        }
    }
}

cat类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

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

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

2.效果

3.方法相关

  • 1)Method getMethod(String name, Class<?>... parameterTypes):

    • 返回具有指定名称和参数类型列表的公共方法
  • 2)Method[] getMethods():

    • 返回公共方法的数组,包括继承的方法。
  • 3)Method getDeclaredMethod(String name, Class<?>... parameterTypes):

    • 返回具有指定名称和参数类型列表的声明方法(无论访问级别)。
  • 4)Method[] getDeclaredMethods():

    • 返回所有声明的方法(无论访问级别)。

5)案例:获取所有的方法

1.代码
package org.xiji.c;

import java.lang.reflect.Method;

public class MyCatAll {

    public static void main(String[] args) throws ClassNotFoundException
    {
        System.out.println("获取所有的方法");
        System.out.println("获取方法不限方法getDeclaredMethods();");
        System.out.println("获取公共方法用getMethods();");
        Class<?> myClass = Class.forName("org.xiji.c.Cat");

        Method[] methods = myClass.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
            System.out.println(method.getReturnType());
            System.out.println(method.getParameterTypes());
            System.out.println(method.getModifiers());
            System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)");
        }

    }
}

cat类

package org.xiji.c;

import java.util.Objects;

public class Cat {
    private String name;

    private String color;

    private int age;

    public Cat() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, color, age);
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

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

    public Cat(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
}

2.效果

4.类信息相关

  • 1)String getName():

    • 返回此Class对象表示的实体(类、接口、数组类或原始类型)的名称
  • 2)Package getPackage():

    • 获取此类的
  • 3)Class<? super T> getSuperclass():

    • 返回表示此类直接超类的Class对象。
  • 4)Class<?>[] getInterfaces():

    • 确定此对象所表示的类或接口实现的接口
  • 5)TypeVariable<Class<T>>[] getTypeParameters():

    • 返回类型变量的数组
  • 6)boolean isInterface():

    • 判断这个类是否为接口
  • 7)boolean isArray():

    • 判断这个类是否为数组类
  • 8)boolean isPrimitive():

    • 判断这个类是否为基本类型
  • 9)T newInstance() throws InstantiationException, IllegalAccessException:

    • 创建Class对象表示的类的新实例

10)案例:获取类信息

1.代码
package org.xiji.c;

public class GetMyCatClassInfo {
    public static void main(String[] args) throws ClassNotFoundException
    {
        Class<?> clazz = Class.forName("org.xiji.c.Cat");
        System.out.println(clazz.getTypeName());

        System.out.println(clazz.getName());
        System.out.println(clazz.getSimpleName());
        System.out.println(clazz.getPackage());
        System.out.println(clazz.getSuperclass());
        System.out.println(clazz.getDeclaredFields());
        System.out.println(clazz.getDeclaredMethods());
        System.out.println(clazz.getDeclaredConstructors());
        System.out.println(clazz.getModifiers());
        System.out.println(clazz.getAnnotations());


    }
}

2.效果

5.注解相关

  • 1)<A extends Annotation> A getAnnotation(Class<A> annotationClass):

    • 如果存在这样的注解,则返回此元素上存在的指定类型的注解,否则返回null。
  • 2)Annotation[] getAnnotations():

    • 返回此元素上的所有注解
  • 3)boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):

    • 如果此元素上有指定类型的注解,则返回true,否则返回false。

案例:获取注解

1.代码
package org.xiji.c;


import javax.management.MXBean;


@MXBean

public class Dog {
    private String name;
    private String color;
    private int age;


}

2.效果

6.泛型相关

  • 1)Type getGenericSuperclass():

    • 返回表示此Class所表示的实体(类、接口、基本类型或void)的直接超类的Type
  • 2)Type[] getGenericInterfaces():

    • 确定此对象所表示的类或接口实现的接口,并以Type的形式返回它们。

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

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

相关文章

国外火出圈儿的PM御用AI编程工具Bolt.new效果干不过国产的CodeFlying?号称全新定义全栈开发流程?

不知道大家最近有没有发现国外的很多AI都在挤破脑袋想去提升大模型的编程能力&#xff0c; 离我们最近的是上周Openai 发布的全新模型GPT-4o-Canvas&#xff0c; 拥有超强的代码编写能力。 另外还有LlamaCoder、Cursor、Claude artifacts、Replit... 光是今年一年就推出了好…

深入理解Transformer的笔记记录(精简版本)---- Transformer

自注意力机制开启大规模预训练时代 1 从机器翻译模型举例 1.1把编码器和解码器联合起来看待的话,则整个流程就是(如下图从左至右所示): 1.首先,从编码器输入的句子会先经过一个自注意力层(即self-attention),它会帮助编码器在对每个单词编码时关注输入句子中的的其他单…

xtu oj 四位数

样例输入# 2 1990 1111样例输出# 5 0 分离整数与合并 AC代码 #include<stdio.h> //判断四个数码是否相等 int Judge(int n){int flag1;int gn%10,sn/10%10,bn/100%10,qn/1000;if(gs&&gb&&gq)flag0;return flag; } int main(){int T;scanf("%d…

AI无人直播风口,云微客替你抓住了

现在很多老板都在找风口&#xff0c;其实风口就是我们大家看得见、摸得着的东西&#xff0c;就比如说近期比较火热的直播带货就属于是一个风口。可能很多老板会说直播、短视频之类的风口过于高科技&#xff0c;搞不来也搞不懂&#xff0c;跟自己好像没太大关系。 其实不然&…

嵌入式开发:STM32 硬件 CRC 使用

测试平台&#xff1a;STM32G474系列 STM32硬件的CRC不占用MCU的资源&#xff0c;计算速度快。由于硬件CRC需要配置一些选项&#xff0c;配置不对就会导致计算结果错误&#xff0c;导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…

【二叉搜索树】1 leetcode 98 验证二叉搜索树

1 题目描述 题目链接&#xff1a;验证二叉搜索树 2 题目解析 搜索二叉树的特点就是&#xff0c; 中序遍历之后的值是有序的。 根据这个性质&#xff0c;可以对树进行中序遍历&#xff0c;将遍历的结果存入到vector中最后判断vector中的值的顺序。如果是从小到大有序的&…

变色龙算法(CSA)的MATLAB代码复现

目录 1 变色龙算法优化BP神经网络代码复现 2 变色龙算法优化支持向量机代码复现 3 变色龙算法优化长短期记忆神经网络代码复现 1 变色龙算法优化BP神经网络代码复现 1&#xff09;单输出回归预测&#xff1a;单输出回归预测&#xff1a;变色龙算法优化BP神经网络模型&#…

MinIO分片上传超大文件(纯服务端)

目录 一、MinIO快速搭建1.1、拉取docker镜像1.2、启动docker容器 二、分片上传大文件到MinIO2.1、添加依赖2.2、实现MinioClient2.3、实现分片上传2.3.0、初始化MinioClient2.3.1、准备分片上传2.3.2、分片并上传2.3.2.1、设置分片大小2.3.2.2、分片 2.3.3、分片合并 三、测试3…

Windows命令行执行cmake

生成Win32 工程并编译 cmake ../../ -G "Visual Studio 16 2019" -A Win32set pathC:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin;%path%msbuild VideoNetOptimization.sln /p:ConfigurationRelWithDebInfo /p:PlatformWin3…

MSYS2+GCC 安装与应用保姆手册

msys2 提供可在Windows下使用 GCC 编译器&#xff1b;并且&#xff0c;借助 Linux 包管理功能&#xff0c;可轻松下载丰富的可在Windows下直接使用的 C/C 开发包&#xff0c;包括编译好的二进制包。 网络库asio、准标准库boost、zip解压缩、json格式处理、引擎 SDL……十八般兵…

2025年软考高项(信息系统项目管理师)包过班靠谱吗?

随着新一轮软考的到来&#xff0c;出现了很多“软考包过”的信息&#xff0c;但需要注意的是&#xff0c;“软考包过”根本不可信&#xff01; 因此不要想着依靠不正当手段来取得证书&#xff0c;要知道&#xff0c;如今 软考 由笔试变为机考&#xff0c;很难作弊&#xff0c;…

​速卖通、敦煌卖家备战双11+黑五前,怎么增加店铺曝光?

在速卖通这个竞争激烈的跨境电商平台上&#xff0c;店铺曝光率是决定销售成败的关键因素之一。为了在众多商家中脱颖而出&#xff0c;增加速卖通店铺曝光显得尤为重要。速卖通怎么增加店铺曝光&#xff1f; 一、速卖通怎么增加店铺曝光? 1、优化产品列表 速卖通的产品列表是…

需求9——通过一个小需求来体会service层的作用

昨天在完成了睿哥的需求验收之后&#xff0c;暂时没有其他任务&#xff0c;因此今天可能会比较有空闲时间。趁着这个机会&#xff0c;我打算把之前完成的一些需求进行总结&#xff0c;方便以后复习和参考。 在8月份的时候&#xff0c;我负责了一个需求&#xff0c;该需求的具体…

白色简洁大方公司企业网站源码 WordPress主题2款

WordPress白色简洁大方公司企业网站主题2款 白色整洁风格wordpress主题是一款比较新颖的国际设计范风格 简洁而大方的 WordPress 主题&#xff0c;适合个人博客、企业和工作室用。 完美支持下拉菜单的wordpress企业主题。 wordpress简白企业模板是一款适合企业站以及工作室…

c++基础知识复习(1)

前期知识准备 1 构造函数 &#xff08;1&#xff09;默认构造函数&#xff1a;没有参数传入&#xff0c;也没有在类里面声明 &#xff08;2&#xff09;手动定义默认构造函数&#xff1a;没有参数传入&#xff0c;但是在类里面进行了声明 可以在类外实现或者类内实现 以下案…

IDM6.42下载器最新版本,提速你的网络生活!

&#x1f680;【速度与激情&#xff0c;IDM 6.42来袭&#xff01;】&#x1f4a3; Hey, 亲爱的下载达人们&#xff01;&#x1f44b; 今天我要给你们安利一个神器——Internet Download Manager&#xff08;简称IDM&#xff09;&#xff0c;版本6.42&#xff0c;这可不是普通的…

猿人学 — 第1届第13题(解题思路附源码)

猿人学 — 第1届第13题&#xff08;解题思路附源码&#xff09; 发现在翻页过程中&#xff0c;只要中途有几秒的间隔&#xff0c;那么就会显示拉取数据失败&#xff0c;然后网页重新加载回到刚进来显示的第一页的情况 重新加载时&#xff0c;会发送一系列的请求&#xff0c;发…

threejs-基础材质设置

一、介绍 主要内容&#xff1a;基础材质(贴图、高光、透明、环境、光照、环境遮蔽贴图) 主要属性&#xff1a; side: three.DoubleSide, //设置双面 color: 0xffffff, //颜色 map: texture, //纹理 transparent: true, // 透明度 aoMap: aoTexture, //ao贴图 aoMapIntensity: 1…

JAVA海外短剧国际版系统小程序源码

海外短剧国际版系统——连接世界的剧情舞台 &#x1f30d; 引言&#xff1a;跨越国界的情感共鸣 在这个全球化的时代&#xff0c;文化的边界越来越模糊&#xff0c;而艺术成为了连接不同国家和地区人民心灵的桥梁。今天&#xff0c;我要向大家介绍一个令人兴奋的平台——“海…

【必看!!!】Python—requests模块详解!(文末附带无偿大礼包)

1、模块说明 requests是使用Apache2 licensed 许可证的HTTP库。 用python编写。 比urllib2模块更简洁。 Request支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动响应内容的编码&#xff0c;支持国际化的URL和POS…