本文实例讲述了Java通过反射查看类的信息。分享给大家供大家参考,具体如下:

一 点睛

1 通过反射获取Class对象

使用Class类的forName()静态方法。该方法需要传入字符串参数,该字符串参数的值是某个类的全限定类名(必须添加完整包名)。

调用某个类的class属性来获取该类对应的Class对象。例如Person.class将会返回Person类对应的Class对象。

调用某个对象的getClass()方法,该方法是java.lang.Object类中的一个方法,所以所有Java对象都可以调用该方法,该方法将会返回该对象所属类对应的Class对象。

2 从Class中获取信息

获取构造器

访问Class对应的类所包含的方法

访问Class对应的类所包含的属性(Field)

访问Class对应的类上所包含的注释。

访问该Class对象对应类包含的内部类。

访问该Class对象对应类所在的外部类。

访问该Class对象所对应类所继承的父类、所实现的接口等。

二 实战

1 代码

import java.util.*;

import java.lang.reflect.*;

import java.lang.annotation.*;

// 定义可重复注解

@Repeatable(Annos.class)

@interface Anno {

}

@Retention(value = RetentionPolicy.RUNTIME)

@interface Annos {

Anno[] value();

}

// 使用4个注解修饰该类

@SuppressWarnings(value = "unchecked")

@Deprecated

// 使用重复注解修饰该类

@Anno

@Anno

public class ClassTest {

// 为该类定义一个私有的构造器

private ClassTest() {

}

// 定义一个有参数的构造器

public ClassTest( String name ) {

System.out.println("执行有参数的构造器");

}

// 定义一个无参数的info方法

public void info() {

System.out.println("执行无参数的info方法");

}

// 定义一个有参数的info方法

public void info( String str ) {

System.out.println("执行有参数的info方法"

+ ",其str参数值:" + str);

}

// 定义一个测试用的内部类

class Inner {

}

public static void main( String[] args )

throws Exception {

// 下面代码可以获取ClassTest对应的Class

Class clazz = ClassTest.class;

// 获取该Class对象所对应类的全部构造器

Constructor[] ctors = clazz.getDeclaredConstructors();

System.out.println("ClassTest的全部构造器如下:");

for (Constructor c : ctors) {

System.out.println(c);

}

// 获取该Class对象所对应类的全部public构造器

Constructor[] publicCtors = clazz.getConstructors();

System.out.println("ClassTest的全部public构造器如下:");

for (Constructor c : publicCtors) {

System.out.println(c);

}

// 获取该Class对象所对应类的全部public方法

Method[] mtds = clazz.getMethods();

System.out.println("ClassTest的全部public方法如下:");

for (Method md : mtds) {

System.out.println(md);

}

// 获取该Class对象所对应类的指定方法

System.out.println("ClassTest里带一个字符串参数的info()方法为:"

+ clazz.getMethod("info", String.class));

// 获取该Class对象所对应类的上的全部注解

Annotation[] anns = clazz.getAnnotations();

System.out.println("ClassTest的全部Annotation如下:");

for (Annotation an : anns) {

System.out.println(an);

}

System.out.println("该Class元素上的@SuppressWarnings注解为:"

+ Arrays.toString(clazz.getAnnotationsByType(SuppressWarnings.class)));

System.out.println("该Class元素上的@Anno注解为:"

+ Arrays.toString(clazz.getAnnotationsByType(Anno.class)));

// 获取该Class对象所对应类的全部内部类

Class>[] inners = clazz.getDeclaredClasses();

System.out.println("ClassTest的全部内部类如下:");

for (Class c : inners) {

System.out.println(c);

}

// 使用Class.forName方法加载ClassTest的Inner内部类

Class inClazz = Class.forName("ClassTest$Inner");

// 通过getDeclaringClass()访问该类所在的外部类

System.out.println("inClazz对应类的外部类为:" +

inClazz.getDeclaringClass());

System.out.println("ClassTest的包为:" + clazz.getPackage());

System.out.println("ClassTest的父类为:" + clazz.getSuperclass());

}

}

2 运行

ClassTest的全部构造器如下:

private ClassTest()

public ClassTest(java.lang.String)

ClassTest的全部public构造器如下:

public ClassTest(java.lang.String)

ClassTest的全部public方法如下:

public static void ClassTest.main(java.lang.String[]) throws java.lang.Exception

public void ClassTest.info(java.lang.String)

public void ClassTest.info()

public final void java.lang.Object.wait() throws java.lang.InterruptedException

public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException

public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException

public boolean java.lang.Object.equals(java.lang.Object)

public java.lang.String java.lang.Object.toString()

public native int java.lang.Object.hashCode()

public final native java.lang.Class java.lang.Object.getClass()

public final native void java.lang.Object.notify()

public final native void java.lang.Object.notifyAll()

ClassTest里带一个字符串参数的info()方法为:public void ClassTest.info(java.lang.String)

ClassTest的全部Annotation如下:

@java.lang.Deprecated()

@Annos(value=[@Anno(), @Anno()])

该Class元素上的@SuppressWarnings注解为:[]

该Class元素上的@Anno注解为:[@Anno(), @Anno()]

ClassTest的全部内部类如下:

class ClassTest$Inner

inClazz对应类的外部类为:class ClassTest

ClassTest的包为:null

ClassTest的父类为:class java.lang.Object

希望本文所述对大家java程序设计有所帮助。

查看患者信息java_Java通过反射查看类的信息示例相关推荐

  1. Java知识点总结(反射-获取类的信息)

    Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字.属性.方法.构造器等) import java.lang.reflec ...

  2. Java基础-通过反射获取类的信息

    目录 1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8.反射Constructor ...

  3. java反射获取实现类_Java介绍通过反射获取类的信息

    免费学习推荐:java基础教程 目录1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8 ...

  4. 获取小程序用户信息+java_java获取微信小程序用户信息

    第一步:获取openid.session_key等信息. /** * 获取微信小程序的用户openid和session_key/unionid * 返回格式:{"session_key&qu ...

  5. java 反射 获取方法列表_Java 反射获取类详细信息的常用方法汇总

    为了加深印象,特把方法都从新敲了一遍,等不会的时候返回了看看就好了. 类ReflectionDemo package Reflection; @Deprecated public class Refl ...

  6. Java反射 Class类

    Class类的实例表示正在运行的Java应用程序中的类和接口.它是Java反射的基础,对任何一个类,首先产生一个Class对象,然后才通过class类获得其他的信息. 获取class类对象方式: 通过 ...

  7. java 查看类_JAVA基础知识之JVM-——通过反射查看类信息

    Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...

  8. .Net 中的反射(查看基本类型信息) - Part.2

    转自:http://www.cnblogs.com/JimmyZhang/archive/2008/02/17/1071372.html 反射概述 和Type类 1.反射的作用 简单来说,反射提供这样 ...

  9. python如何查看类信息_关于如何查看本地python类库详细信息的方法

    开通博客有一段时间了,之前一直想写些东西,但是鄙人在开发方面造诣不深(说"造诣"就有点不要face了),所以不知道写些什么(其实是怕写得不好),那今天终于鼓起勇气决定写些东西. 最 ...

最新文章

  1. linux如何添加默认路由表_Linux-如何添加路由表
  2. java 硬件交互_Java关键字之native
  3. python哨兵循环_Python中的Sentinel(哨兵)值
  4. Spring Boot-使用Spring Initializer快速创建Spring Boot项目
  5. JavaScript高级程序设计学习笔记第二十章--JSON
  6. 使用Beautifulsoup爬取药智网数据
  7. 跨境电商独立站模式解析与机会分析?
  8. Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
  9. 【oracle】oracle常用命令汇总
  10. matlab中inv a,设A为矩阵,b为列向量,则Matlab中运算A\b 和运算inv(A)*b
  11. 如何鉴别硬盘是否是全新的,及HD Tune的使用方法
  12. UiPath PDF拆分与合并
  13. java生气_Java来抢饭碗,C++可别生气
  14. 微信公众号的申请以及测试号的申请
  15. python opencv2 将两张图片合并为一张
  16. webuploader 实现图片批量上传
  17. Qt编写视频监控系统70-OSD标签和图形信息(支持写入到文件)
  18. C语言运算符优先级 复习小妙招欸嘿
  19. 【陈工笔记】# 人脸识别的实际操作记录 #
  20. 大数据之spark详解

热门文章

  1. 迭代瀑布不是Scrum
  2. 海思对接索尼ECX334 RGB OLED屏总结
  3. 学Python找工作你起码要会这些
  4. [TCP]基于TCP的心跳和加密设计
  5. el-table行合并,单列行合并或者指定列合并行
  6. 如何查看OpenAI的api-key?
  7. op反馈电阻并联反馈电容
  8. PS更新升级Adobe Camera Raw(ACR)15.3
  9. Android手机之间通过声音传输信息方法——声波通信(含工程代码)
  10. 如何基于 RISC-V CPU 集成一个 RISC-V SoC 呢?(下)