Class类实例化对象取得类的结构

2024-09-02 05:08

本文主要是介绍Class类实例化对象取得类的结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过一个demo熟悉class类的用法。

1.Person3.java

包含一个China接口和Person3类,一些简单方法

package com.yyj.Class;interface China{	// 定义China接口public static final String NATIONAL = "China" ;	// 定义全局常量public static final String AUTHOR = "yyj" ;	// 定义全局常量public void sayChina() ;		// 无参的,没有返回值的方法public String sayHello(String name,int age) ;	// 定义有两个参数的方法,并返回内容
}public class Person3 implements China{private String name ;private int age ;public Person3(){	// 无参构造}public Person3(String name){this.name = name ;	// 设置name属性}public Person3(String name,int age){this(name) ;this.age = age ;}public void sayChina(){	// 覆写方法System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;}public String sayHello(String name,int age){return "我是" +name + ",我今年" + age + "岁了!" ;}public void setName(String name){this.name = name ;}public void setAge(int age){this.age = age ;}public String getName(){return this.name ;}public int getAge(){return this.age ;}
};

2.getAllAboutClass.java

(1)使用Class类进行Person3类的实例化和per对象的实例化,调用基本方法

(2)取得Person3类的结构:构造方法、属性、接口、父类、全部方法。

package com.yyj.Class;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;public class getAllAboutClass {public static void main(String args[]) {Class<?> c = null;// 声明class对象try {c = Class.forName("com.yyj.Class.Person3");// 实例化class对象为person3类} catch (ClassNotFoundException e) {e.printStackTrace();}Person3 per=null;try {per=(Person3)c.newInstance();//person3对象的实例化} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}per.sayChina();per.setName("yyj");per.setAge(23);System.out.println(per.sayHello("yyj",23));// -----输出person3类中全部构造方法:访问权限修饰符+返回值类型+方法名+参数Constructor<?> con[] = c.getConstructors();// 取得类中全部构造方法System.out.println("person类中全部构造方法:");for (int i = 0; i < con.length; i++) {int mo = con[i].getModifiers(); // 取得第i个构造方法的访问权限修饰符System.out.print(Modifier.toString(mo) + " ");// 得到修饰符名并打印System.out.print(con[i].getName() + " ");// 得到方法名并打印Class<?> param[] = con[i].getParameterTypes();System.out.print("(");for (int j = 0; j < param.length; j++) {System.out.print(param[j].getName() + " args" + j);if (j < param.length - 1) {System.out.print(",");}}System.out.println(")");}// -----person3类公共属性:修饰符+类型+属性名称System.out.println("公共属性:");Field f[] = c.getFields();// 取得公共属性for (int i = 0; i < f.length; i++) {int mo = f[i].getModifiers();// 取得属性修饰符(数字)System.out.print(Modifier.toString(mo) + " ");// 还原修饰符Class<?> t = f[i].getType();// 取得属性类型System.out.print(t.getName() + " ");// 输出属性类型名称System.out.println(f[i].getName());// 输出属性名称}// -----本类属性:修饰符+类型+属性名称System.out.println("本类属性:");Field df[] = c.getDeclaredFields();// 取得本类属性for (int i = 0; i < df.length; i++) {int mo = df[i].getModifiers();// 取得属性修饰符(数字)System.out.print(Modifier.toString(mo) + " ");// 还原修饰符Class<?> t = df[i].getType();// 取得属性类型System.out.print(t.getName() + " ");// 输出属性类型名称System.out.println(df[i].getName());// 输出属性名称}// -----person3类实现的接口System.out.println("person3类实现的接口:");Class<?> inter[] = c.getInterfaces();for (int i = 0; i < inter.length; i++) {System.out.println(inter[i].getName());}// -----person3类继承的父类System.out.println("person3类继承的父类:");Class<?> fa = c.getSuperclass();System.out.println(fa.getName());// -----person3类全部方法System.out.println("person3类全部方法:");Method m[] = c.getMethods(); // 取得全部方法for (int i = 0; i < m.length; i++) {Class<?> r = m[i].getReturnType(); // 得到返回值类型Class<?> p[] = m[i].getParameterTypes(); // 取得全部参数的类型int xx = m[i].getModifiers(); // 得到修饰符System.out.print(Modifier.toString(xx) + " "); // 输出修饰符System.out.print(r + " ");System.out.print(m[i].getName());System.out.print("(");for (int j = 0; j < p.length; j++) {System.out.print(p[j].getName() + " " + "arg" + j);if (j < p.length - 1) {System.out.print(",");}}Class<?> ex[] = m[i].getExceptionTypes(); // 取出异常if (ex.length > 0) {System.out.print(") throws ");} else {System.out.print(")");}for (int j = 0; j < ex.length; j++) {System.out.print(ex[j].getName());if (j < p.length - 1) {System.out.print(",");}}System.out.println();}}
}

这篇关于Class类实例化对象取得类的结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129078

相关文章

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

springboot+mybatis一对多查询+懒加载实例

《springboot+mybatis一对多查询+懒加载实例》文章介绍了如何在SpringBoot和MyBatis中实现一对多查询的懒加载,通过配置MyBatis的`fetchType`属性,可以全局... 目录springboot+myBATis一对多查询+懒加载parent相关代码child 相关代码懒

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符

《sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符》:本文主要介绍sqlserver、mysql、oracle、pgsql、sqlite五大... 目录一、转义符1.1 oracle1.2 sqlserver1.3 PostgreSQL1.4 SQLi

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave