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

文章目录

  • 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();
		}
		
	}
}

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; MySQL 学习 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 &#x1f381;软件版本&#xff1a; MySQL 5.7.44 文章目录 1.创建数据库2.数据库中的编码问题2.1.字符集与校验集2.3.支持的字符…

Antv/G2 折线图 DataSet 数据展开成指定格式

DataSet 文档 G2 3.2 DataSet 文档 Demo&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><m…

Kakaotalk如何注册?常见问题解答

kakaoTalk是一款韩国即时通讯软件&#xff0c;使用程度类似于国内的微信&#xff0c;他还包含叫车服务、食品外送、餐厅预订、支付和游戏等多种功能&#xff0c;几乎每个韩国人都在使用KakaoTalk。 因此&#xff0c;对于要发展韩国市场的独立站人&#xff0c;这款软件必定是营…

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

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

物理问题中常见的分析问题----什么样的函数性质较好

物理问题中常见的积分符号位置交换问题 重极限与累次极限 高数下的定义 累次极限&#xff1a;求极限时需要遵循一定的顺序重极限&#xff1a;任意方向趋于的极限 两者之间的关系&#xff1a; 两者没啥关系存在累次极限存在而不相等的函数...... 求和符号与积分符号互换--逐项积…

【Axure】axure rp 导入元件库和使用,主流元件库下载使用

vant 元件库下载&#xff1a;Vant4 设计资源 element UI 元件库下载&#xff1a;element ui 设计资源 Andt Design Vue 下载设计资源&#xff1a;Andt Design Vue Andt Design Pro下载设计资源&#xff1a;Andt Design Pro Arco Design 设计资源&#xff1a;Arco Design …

光纤网络排障分析

日常工作中&#xff0c;发现某条光链路连接不稳定&#xff0c;时快时慢、时断时连。 在交换机上直接查看这条链路交换口上的光收发功率&#xff0c;发现异常。 简单说明下&#xff0c;RX Power代表光模块接收功率&#xff0c;TX Power代表发送功率。 引起这种故障的原因很多&a…

插入排序详讲:直接插入排序+希尔排序(图解+思路+代码)

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 排序 一、 排序的概念 1.排序&#xff1a; 一组数据按递增/递减排序 2.稳定性&#xff1a; 待排序的序列中&#…

【第2章 Docker容器基础入门】 课程介绍 + docker容器介绍

一、课程介绍 1.1、容器运行时 1.2、官网 1.3、私有镜像 二、什么是 Docker &#xff1f; 2.1 Docker 的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 2.2 、K8S 1.25版本之后可能废弃docker&#xff0c;为什么还需要学习docker&#xff1f; 一、课程介…

Golang 发送邮件

Go 有内置好的本地库可以发送邮件&#xff0c;在 GitHub 上也有别人写好的第三方包可以发送邮件。 本文将分别介绍一下这两种发送邮件的方式。 1、内置的net/smtp 为了更好的模拟发送邮件&#xff0c;推荐一个邮件测试工具&#xff1a;MailHog&#xff0c;MailHog 是面向开发…

永磁材料测试系统参考标准

1. 概述 TY1000是一套专用于测量永磁材料磁性能的智能化系统&#xff0c;由励磁与测量主机、电磁铁、磁测量传感器、计算机及测量软件等组成。适用于测量各类型永磁材料的磁性能&#xff0c;并绘制相关磁特性曲线&#xff0c;具有操作便捷、测量快速、重复性好、可靠性高等特点…

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

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

RXMVB2 2RK251 206AN大容量双位置继电器 JOSEF约瑟 DC110V

系列型号&#xff1a; RXMVB2 RK 251 204大容量双位置继电器; RXMVB2 RK 251 205大容量双位置继电器; RXMVB2 RK 251 206大容量双位置继电器; DCS-11大容量双位置继电器; DCS-12大容量双位置继电器; DCS-13大容量双位置继电器; 一、用途 RXMVB2(DCS-10)系列大容量双位置继电器…

【开源】基于Vue和SpringBoot的校园失物招领管理系统

项目编号&#xff1a; S 006 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S006&#xff0c;文末获取源码。} 项目编号&#xff1a;S006&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系…

HackTheBox-Starting Point--Tier 2---Vaccine

文章目录 一 Vaccine 测试过程1.1 打点1.1.1 FTP匿名登录1.1.2 SQL注入 1.2 权限提升 二 题目 一 Vaccine 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 10.129.191.631.1.1 FTP匿名登录 2.FTP允许匿名登录&#xff0c;发现backup.zip ftp 10.129.191.63解压backup.zip&#x…

Docker-minio部署

1.创建目录 创建文件目录&#xff0c;用来存放配置和上传文件目录 &#xff08;1&#xff09;Minio 外部挂载的配置文件(/mydata/minio/config) &#xff08;2&#xff09;存储上传文件的目录(/mydata/minio/data) mkdir -p /home/minio/config mkdir -p /home/minio/data2.拉…

黑群晖断电导致存储空间已损毁修复记录

黑群晖断电2次,担心的事情还是发生了,登录后提示存储空间已损毁...... 开干!! 修复方式: 1.使用SSH登录到群晖,查看相关信息 # 登录后先获取最高权限 root@DiskStation:~# sudo -i # 检测存储池状态 root@DiskStation:~# cat /proc/mdstat Personalities : [linear] […

【JavaEE】Servlet API 详解(HttpServletRequest类)

二、HttpServletRequest Tomcat 通过 Socket API 读取 HTTP 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象&#xff08;内容和HTTP请求报文一样&#xff09; 1.1 HttpServletRequest核心方法 1.2 方法演示 WebServlet("/showRequest&…

M2LC-Net

模型结构 作者未提供代码

Eclipse使用配置tomcat服务:未识别的web项目

问题1&#xff1a;未识别的项目 解决&#xff1a;elispse未识别到改项目为Web项目