【java学习—十四】反射获取一个类的父类、接口、构造方法(3)

news2024/11/26 3:48:51

文章目录

  • 1. 通过反射获取一个类的父类和接口
  • 2. 反射获取一个类的构造方法
    • 2.1. 获取全部构造器


1. 通过反射获取一个类的父类和接口

使用反射可以取得:

  1. 实现的全部接口
    public Class<?>[] getInterfaces():确定此对象所表示的类或接口实现的接口。
  2. 所继承的父类
    public Class<? Super T> getSuperclass():返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class 。

举例:通过反射调用实现的全部接口和所继承的父类。
其中父类为Person类,子类为Student类,两种接口分别为Move和Study两种,用来描述上学方式和学习范围。

实现步骤:
步骤一:定义Person类:

package day14;

public class Person {
	public String name;
	int age;
	
}

步骤二:定义接口Move和Study
(1)Move

package day14;

public interface Move {
	void moveType();
}

(2)Study

package day14;

public interface Study {
	void studyInfo();
}

步骤三:定义Person的子类Student并实现上面两种接口

package day14;

public class Student extends Person implements Move,Study{
	
	String school;
	
	public void showInfo() {
		System.out.println("学校是:" + this.school);
	}
	
	@Override
	public void studyInfo() {
		System.out.println("学习的是中学知识");
	}
	
	@Override
	public void moveType() {
		System.out.println("骑自行车去上学");
	}

}

步骤四:Test.java

package day14;

public class Test1 {

	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("day14.Student");//通过 包名.类名 的字符串,调用Class.forName方法获取指定类的Class实例
			
			Class superClazz = clazz.getSuperclass();//获取父类
			System.out.println(superClazz.getName());
			
			Class[] interfaces = clazz.getInterfaces();//获取当前类的所有接口
			for(Class c : interfaces) {
				System.out.println("接口:" + c.getName());
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

Test.java运行结果:

在这里插入图片描述

2. 反射获取一个类的构造方法

public Constructor[] getConstructors():返回此 Class 对象所表示的类的所有 public 构造方法。

举例

对上述类Student方法添加三个构造方法

package day14;

public class Student extends Person implements Move,Study{
	//构造方法1
	public Student() {
		
	}
	//构造方法2
	public Student(String school) {
		this.school = school;
	}
	//构造方法3
	private Student(String school, int age) {
		this.school = school;
		this.age = age;
	}
	
	
	String school;
	
	public void showInfo() {
		System.out.println("学校是:" + this.school);
	}
	
	@Override
	public void studyInfo() {
		System.out.println("学习的是中学知识");
	}
	
	@Override
	public void moveType() {
		System.out.println("骑自行车去上学");
	}

}

Test.java:

package day14;

import java.lang.reflect.Constructor;

public class Test1 {

	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("day14.Student");//通过 包名.类名 的字符串,调用Class.forName方法获取指定类的Class实例								
			Constructor[] cons = clazz.getConstructors();
			for(Constructor c : cons) {
				System.out.println("构造方法名称:" + c.getName());
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

运行结果:
在这里插入图片描述

2.1. 获取全部构造器

public Constructor[] getConstructors():返回此 Class 对象所表示的类的所有 public 构造方法。
public Constructor[] getDeclaredConstructors():返回此 Class 对象表示的类声明的所有构造方法。

Constructor 类中:
    ①取得修饰符 : public int getModifiers();
    ②取得方法名称 : public String getName();
    ③取得参数的类型: public Class<?>[] getParameterTypes();

举例:

Test.java:

package day14;

import java.lang.reflect.Constructor;

public class Test1 {

	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("day14.Student");//通过 包名.类名 的字符串,调用Class.forName方法获取指定类的Class实例			
			
			Constructor[] cons = clazz.getConstructors();//获取类的公有构造方法
			
			for(Constructor c : cons) {
				System.out.println("-----------------------0------------------------------");
				System.out.println("构造方法名称:" + c.getName());//获取方法名称
				//getModifiers取得方法的修饰符,返回数组1代表public
				System.out.println("构造方法:" + c.getName() + "的修饰符是:" + c.getModifiers());//获取方法的修饰符
				
				Class[] paramClazz = c.getParameterTypes();
				
				for(Class pc : paramClazz) {
					System.out.println("构造方法:" + c.getName() + "的参数类型是:" + pc.getName());
				}
				System.out.println("-----------------------1------------------------------");
			}
			
			
			
			Constructor[] cons1 = clazz.getDeclaredConstructors();//获取类的所有构造方法,包括公有和私有的
			
			for(Constructor c : cons1) {
				System.out.println("----------------------000-----------------------------");
				
				System.out.println("构造方法名称:" + c.getName());//获取方法名称
				//getModifiers取得方法的修饰符,返回数组1代表public;返回数字2代表是private
				System.out.println("构造方法:" + c.getName() + "的修饰符是:" + c.getModifiers());//获取方法的修饰符
				
				Class[] paramClazz = c.getParameterTypes();
				
				for(Class pc : paramClazz) {
					System.out.println("构造方法:" + c.getName() + "的参数类型是:" + pc.getName());
				}
				System.out.println("----------------------111-----------------------------");
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

运行结果:

在这里插入图片描述

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

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

相关文章

【论文阅读】(GAN)Generative Adversarial Nets

论文地址&#xff1a;[1406.2661] Generative Adversarial Networks (arxiv.org) “GAN之父” Ian Goodfellow 发表的第一篇提出 GAN 的论文&#xff0c;这应该是任何开始研究学习 GAN 的都该阅读的一篇论文&#xff0c;它提出了 GAN 这个模型框架&#xff0c;讨论了非饱和的损…

算法——图——bsf 广度优先搜索算法 (Breadth First Search)

图遍历算法——bsf 广度优先搜索算法 &#xff08;Breadth First Search&#xff09; 算法 概述算法过程步骤一&#xff1a;初始化原点到队列步骤二&#xff1a;将队列的头顶点放入到已完成集合步骤三&#xff1a;将订单的关联顶点放入到队列中步骤四&#xff1a;将u顶点设置为…

【23真题】易,学硕爆冷,题目常规!

今天分享的是23年广州大学823的信号与系统试题及解析。广州大学23年学硕爆冷&#xff0c;一志愿全部录取&#xff0c;不知道24情况将如何。我们拭目以待&#xff01; 本套试卷难度分析&#xff1a;本套试题内容难度中等偏下&#xff0c;考察的知识点都是比较常见的&#xff0c…

不使用宝塔面板 安装 EasyImage 简单图床

发布于 2023-07-17 在 https://chenhaotian.top/linux-app/easy-image/ 前言 如果不希望安装宝塔面板或其国际版 aapanel&#xff08;尽管宝塔面板可以在安装后关闭&#xff09;&#xff0c;那么可以参考这篇文章。 本文安装环境为 Debian 11, 在 Ubuntu 20.04 测试通过 安…

【python 生成器】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 1

python生成器系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 第一章 yield — Python (Part I) 文章目录 python生成器系列文章目录前言1. Generator Function 生成器函数2.并发和并行&#xff0c;抢占式和协作式2.Let’…

spring-cloud-注册中心

一、服务注册中心组件(*) 定义&#xff1a;服务注册中心就是在整个微服务架构单独抽取一个服务&#xff0c;该服务不做项目中任何业务功能&#xff0c;仅用来在微服务中记录微服务、对微服务进行健康状态检查&#xff0c;及服务元数据信息存储常用的注册中心&#xff1a;eurek…

python实现双臂老虎机k-armed-bandit

老虎机&#xff0c;投入钱币会随机返还钱币&#xff08;reward&#xff09; 这里设置两台老虎机&#xff0c;一台均值500&#xff0c;标准差5&#xff0c;一台均值550&#xff0c;标准差10 初始值均为998&#xff0c;更新规则为reward之和/轮数 最后结果会在均值附近收敛 impo…

Eigen的基操

转自博客 博客

解析SQL 获取表、字段及SQL查询参数

解析SQL 获取表、字段及SQL查询参数 1. 执行效果2. 使用2.1 引入依赖2.2 相关实体2.3 工具类 1. 执行效果 2. 使用 2.1 引入依赖 <!-- sql 解析处理--><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifa…

2022年12月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下面哪个语句正确定义了元组类型数据tuple1?( ) A: tuple1=[“张三”,“李四”,“王五”] B: tuple1=(“张三”;“李四”;“王五”) C: tuple1=(张三,李四,王五) D: tuple1=(“张三…

Mybatis-Plus最新教程

目录 原理&#xff1a;MybatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库信息。 ​编辑1.添加依赖 2.常用注解 3.常见配置&#xff1a; 4.条件构造器 5.QueryWrapper 6.UpdateWrapper 7.LambdaQueryWrapper:避免硬编码 8.自定义SQL 9.Iservic…

C++——友元函数

如下是一个日期类&#xff1a; class Date { public:Date(int year 2023, int month 10, int day 1){_year year;_month month;_day day;if (_month < 1 || month > 12 || _day < 1 || _day > GetMonthDay(_year, _month)){cout << "日期不规范&…

[MySQL] MySQL中的数据类型

在MySQL中&#xff0c;数据类型用于定义表中列的数据的类型。在前面的几篇文章中&#xff0c;我们也会看到有很多的数据类型&#xff0c;例如&#xff1a;char、varchar、date、int等等。本篇文章会对常见的数据类型进行详细讲解。希望会对你有所帮助&#xff01; 文章目录 一、…

[黑马程序员Pandas教程]——Pandas读取保存数据

目录&#xff1a; 学习目标读写文件 写文件读取文件 index_col参数指定索引parse_dates参数指定列解析为时间日期类型encoding参数指定编码格式读取tsv文件Pandas读写文件小结读写数据库 安装pymysql包将数据写入数据库从数据库中加载数据总结项目地址 1.学习目标 能够使用Pan…

吊打Fast Request还免费? 这款插件真心好用!

今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;比Fast Request更好用并且完全免费&#xff01;三大亮点功能&#xff1a;写完代码IDEA内一键生成API文档&#xff1b;写完代码IDEA内一键调试&#xff0c;&#xff1b;生成API目录树&#xff0c;双击即可快速…

keil5暗色主题配置

在keil文件目录下找到global.prop 将以下内容替换至该文件即可 # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page0 caretline.visible0 highlight.matchingbraces1 print.syntax.coloring1 use.tab.color1 crea…

PostgreSQL基本操作

目录 1.源码安装PostgreSQL 1.1.前置条件&#xff08;root下操作&#xff09; 1.1.1.卸载yum安装的postgresql 1.1.2.创建postgres用户 1.1.3.安装部分依赖 1.1.4.源码安装uuid 1.2.安装PostgreSQL 1.2.1.使用postgres用户管理PostgreSQL 1.2.2.下载解压postgres12源码…

【算法每日一练]-图论(保姆级教程 篇1(模板篇)) #floyed算法 #dijkstra算法 #spfa算法

今天开始讲图论 目录 图的存储 算任意两点的最短路径: floyed算法&#xff1a; 算一个点到其他所有点的最短距离 dijkstra算法: spfa算法&#xff1a; 图的存储 其实&#xff1a;邻接矩阵和链式向前星都能存边的信息&#xff0c;vector只能存点的信息&#xff0c;再搭配上v[]…

【JUC】四、可重入锁、公平锁、非公平锁、死锁现象

文章目录 1、synchronized2、公平锁和非公平锁3、可重入锁4、死锁 1、synchronized 写个demo&#xff0c;具体演示下对象锁与类锁&#xff0c;以及synchronized同步下的几种情况练习分析。demo里有资源类手机Phone&#xff0c;其有三个方法&#xff0c;发短信和发邮件这两个方…

加速可编程创新,2023年英特尔FPGA中国技术日披露全矩阵FPGA产品与应用方案

在新场景、新应用海量增长的驱动下&#xff0c;中国本地市场对于FPGA产品的需求也在日益多元化和快速扩展。我们始终致力于以中国客户的实际需求为导向&#xff0c;基于领先的FPGA产品和软件为千行百业提供全场景的解决方案。——叶唯琛 英特尔可编程方案事业部中国总经理 今日…