java 查看类_JAVA基础知识之JVM-——通过反射查看类信息
Class实例
当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类。有三种方式可以获取Class对象
使用Class的静态方法forName(完整包名)
调用类自身的class属性
调用类对象的getClass方法。 该方法继承自java.lang.Object,任何对象都有这个方法。
通常情况下,推荐用第二种方式。因为第二种方式既不需要重建对象,也不需要调用方法,而是直接读取类的属性。
从Class实例中获取类的信息
Class类提供了大量方法来获取Class实例所对应的类的信息,下面是一些常用的方法,
Constructor getConstructor(Class...parameterTypes), 返回类中带参数的构造函数
Method getMethod(String name, Class>...parameterTypes), 返回带参数的指定方法
Filed getFiled(String name), 返回类中的属性变量
关于不定形参Class...parameterTypes的解释,
例如类中有两个同名方法,
public void info(String name),
public void info(String name, int age)
如果用反射的方法,仅仅通过方法名是无法区分开的,因此需要指明形参
这里的形参用的是Class 类型的,即 java.lang.String 这种,而不是字符串的String类型,
正如上面第一节所说,使用 类名.class 可以获取这个类在JVM中的Class实例, 所以要使用反射来获取上面两个类的info方法的方式为,
1 Class clazz = T.class
2
3 clazz.getMethod("info", String.class)4
5 clazz.getMethod("info", String.class, Integer.class)
下面例子演示了Class 的大部分方法,如何从Class实例中获取对应类的信息,
1 packagejvmTest;2
3 importjava.lang.annotation.Annotation;4 importjava.lang.annotation.Retention;5 importjava.lang.reflect.Constructor;6 importjava.lang.reflect.Method;7 importjava.util.Arrays;8
9 /*
10 //定义可重复注解11 @Repeatable(Annos.class)12 @interface Anno {}13 @Retention(Value=RetentionPolicy.RUNTIME)14 @interface Annos {15 Anno[] value();16 }17 //使用4个注解修饰该类18 @SuppressWarnings(value="unchecked")19 @Deprecated20 //使用重复注解修饰该类21 @Anno22 @Anno23 */
24 public classClassTest {25
26 privateClassTest() {}27 publicClassTest(String name) {28 System.out.println("执行有参数构造器");29 }30 public voidinfo() {31 System.out.println("执行无参info");32 }33 public voidinfo(String str) {34 System.out.println("执行有参数info");35 }36
37 classInner {}38
39 public static void main(String[] args) throwsException{40 //获取ClassTest在JVM中对应的Class实例
41 Class clazz = ClassTest.class;42 //获取clazz对应类的全部构造器
43 Constructor[] ctors =clazz.getDeclaredConstructors();44 System.out.println("ClassTest的全部构造器如下:");45 for(Constructor c: ctors) {46 System.out.println(c);47 }48 //获取所有public构造器
49 Constructor[] publicCtors =clazz.getConstructors();50 System.out.println("ClassTest的全部public构造器如下:");51 for(Constructor c: publicCtors) {52 System.out.println(c);53 }54 //获取所有public方法
55 Method[] mtds =clazz.getMethods();56 System.out.println("ClassTest所有public方法如下:");57 for(Method md : mtds) {58 System.out.println(md);59 }60 //获取指定方法
61 System.out.println("ClassTest中带一个字符串参数的info方法: " + clazz.getMethod("info", String.class));62 //获取全部注解
63 Annotation[] anns =clazz.getAnnotations();64 System.out.println("ClassTest全部注解如下: ");65 for(Annotation an : anns) {66 System.out.println(an);67 }68 //System.out.println("ClassTest类的@SuppressWarning注解为: " + Arrays.toString(clazz.getAnno))69 //获取全部内部类
70 Class>[] inners =clazz.getDeclaredClasses();71 System.out.println("ClassTest所有内部类: ");72 for (Class>c : inners) {73 System.out.println(c);74 }75 //使用forName()加载内部类76 //Class inClazz = Class.forName("ClassTest$Inner");77 //通过getDeclaringClass()访问该类所在的外部类78 //System.out.println("inClazz对应的外部类: " + inClazz.getDeclaringClass());
79 System.out.println("ClassTest的包为: " +clazz.getPackage());80 System.out.println("ClassTest的父类为: " +clazz.getSuperclass());81 }82 }
java 查看类_JAVA基础知识之JVM-——通过反射查看类信息相关推荐
- java程序运行必须得三个io类_Java基础知识(三)
一.hashCode 与 equals (重要) 面试官可能会问你:"你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?" 1 ...
- java保护型数据成员_Java基础知识笔记第四章:类和对象
编程语言的几个发展阶段 面向机器语言 面向过程语言 面向对象语言:封装.继承.多态 类 类声明 classPerson{ ....... }class植物{ ....... } 类体 类使用类体来描述 ...
- java io 对象_JAVA基础知识之IO——对象序列化
对象序列化 Java对象序列化(Serialize)是指将Java对象写入IO流,反序列化(Deserilize)则是从IO流中恢复该Java对象. 对象序列化将程序运行时内存中的对象以字节码的方式保 ...
- java.io.file()_JAVA基础知识之IO-File类
File类介绍 File是java.io包下面的一个类,代表与平台无关的文件或者目录.JAVA中,无论文件还是目录,都可以看作File类的一个对象.File类能对文件或目录新建,删除,获取属性等操作, ...
- java class 字符串_java基础知识四 math类 字符 字符串 控制台输入输出 StringBuilder与StringBuffer...
第四章:数学函数.字符和字符串 math类 Math是final类:在java.lang.Math中,所有数学函数都是静态方法 在一个java程序中,java.lang包中的所有类是隐式导入的. 三角 ...
- java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用
一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...
- java e次方_java基础知识
一.java的简介 1.后台开发语言.跨平台,安全性高.面向对象 二.java基础 1.类是java中最小编写代码的单元 2.语句要分号结束 3.括号成对出现 4.运行原理--从上往下 三.注释:代码 ...
- java 集合数据类型_Java基础知识(数据类型和集合)
一.数据类型 包装类型 包装类型是对基本数据类型不足之处的补充. 基本数据类型的传递方式是值传递,而包装类型是引用传递,同时提供了很多数据类型间转换的方法. Java1.5 以后可以自动装箱和拆箱 二 ...
- java用构造方法定义book类_JAVA基础学习之路(三)类定义及构造方法
类的定义及使用 一,类的定义 classBook {//定义一个类intprice;//定义一个属性intnum;public static int getMonney(int price, intn ...
最新文章
- java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...
- 解构亚马逊Alexa的1.5万种技能
- chosen组件实现下拉框
- 转:如何求出grid图像每个cell对应的x,y坐标?
- linux网络设备—mdio总线
- LeetCode 155. Min Stack
- java 多线程的一种实现方式
- 用Python爬取3万多条评论,看韩国人如何评价电影《寄生虫》?
- 深入理解Java面向对象三大特性 封装 继承 多态
- php和fastapi,FastAPI快速开始
- 编译编译时,用不到的库,一定不要链接
- JAVA API中文在线帮助文档
- js将 0,1,2,3...转成一,二,三....(数字转换大写)
- python画图——雪花(科赫曲线)
- Beta 多样性排序分析方法与比较
- Javascript实现全屏阅读和复制功能
- 12306极速全自动抢票
- 【MyBatis 面试题】
- 基本电路知识(电阻电源受控源)
- 6.nand flash