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

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体