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

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤