下面示范如果通过Class对象获取对应类的信息:

package com.reflect;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method; //使用两个注释修饰的类 @SuppressWarnings(value="unchecked")
@Deprecated
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 NoSuchMethodException, SecurityException, ClassNotFoundException {
//下面代码可以获取ClassTest对应的class
Class<ClassTest> clazz=ClassTest.class;
//获取该Class对象所对应类的全部构造器
Constructor[] constructors=clazz.getDeclaredConstructors();
System.out.println("ClazzTest的全部构造器如下:");
for(Constructor constructor:constructors ){
System.out.println(constructor);
}
System.out.println("============================"); //获取该Class对象所对应类的全部public构造器
Constructor[] publicCtors=clazz.getConstructors();
System.out.println("ClazzTest的全部public构造器如下:");
for(Constructor constructor:publicCtors ){
System.out.println(constructor);
}
System.out.println("============================"); //获取该Class对象所对应的全部public 方法
Method[] mds=clazz.getMethods();
System.out.println("ClassTest的全部public方法如下:");
for(Method md:mds){
System.out.println(md);
}
System.out.println("============================"); //获取该Class对象所对应的指定方法
System.out.println("ClassTest里带一个字符串参数的info方法为:"+clazz.getMethod("info", String.class));
System.out.println("============================"); //获取该Class对象所对应类的上的全部注释
Annotation[] anns=clazz.getAnnotations();
System.out.println("ClassTest的全部Annotation如下:");
for(Annotation an:anns){
System.out.println(an);
} System.out.println("该Class元素上的@SuppressWarnings注释为:"+clazz.getAnnotation(SuppressWarnings.class));
System.out.println("============================"); //获取该Class对象所对应类的全部内部类
Class<?>[] inners=clazz.getDeclaredClasses();
System.out.println("ClassTest的全部内部类如下:");
for(Class c:inners){
System.out.println(c);
}
System.out.println("============================"); //使用Class.forName方法加载ClassTest的Inner内部类
Class inClazz=Class.forName("com.reflect.ClassTest$Inner");
//通过getDeclaringClasses()访问该类所在的外部类
System.out.println("inClazz所对应的外部类为:"+inClazz.getDeclaringClass()); System.out.println("ClassTest的包为:"+clazz.getPackage());
System.out.println("ClassTest的父类为:"+clazz.getSuperclass());
} }

运行后结果如下:

ClazzTest的全部构造器如下:
private com.reflect.ClassTest()
public com.reflect.ClassTest(java.lang.String)
============================
ClazzTest的全部public构造器如下:
public com.reflect.ClassTest(java.lang.String)
============================
ClassTest的全部public方法如下:
public void com.reflect.ClassTest.info(java.lang.String)
public void com.reflect.ClassTest.info()
public static void com.reflect.ClassTest.main(java.lang.String[]) throws java.lang.NoSuchMethodException,java.lang.SecurityException,java.lang.ClassNotFoundException
public final native java.lang.Class java.lang.Object.getClass()
public native int java.lang.Object.hashCode()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
============================
ClassTest里带一个字符串参数的info方法为:public void com.reflect.ClassTest.info(java.lang.String)
============================
ClassTest的全部Annotation如下:
@java.lang.Deprecated()
该Class元素上的@SuppressWarnings注释为:null
============================
ClassTest的全部内部类如下:
class com.reflect.ClassTest$Inner
============================
inClazz所对应的外部类为:class com.reflect.ClassTest
ClassTest的包为:package com.reflect
ClassTest的父类为:class java.lang.Object

从运行结果可以看出,Class提供的功能非常丰富,它可以获得该类里包含的构造器、方法、内部类、注释等信息,也可以获取该类包含的属性(Field)信息----通过getFields()或 getFileds(String name)方法即可.

注:对于只能在源代码上保留的注释,使用运行时获得的Class对象无法访问到该注释对象。如上面的@Suppress Warnings 注释.

Java 反射之Class用法的更多相关文章

  1. Java反射的常见用法

    反射的常见用法有三类,第一类是“查看”,比如输入某个类的属性方法等信息,第二类是“装载“,比如装载指定的类到内存里,第三类是“调用”,比如通过传入参数,调用指定的方法. 1 查看属性的修饰符.类型和名 ...

  2. java 反射与常用用法

    java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理. 如何获得Class对象 ...

  3. Java反射之Field用法

    在Java反射中Field用于获取某个类的属性或该属性的属性值 一:如何通过Field反射获取类的属性 Field提供如下几种方法: :1:Class.getDeclaredField(String ...

  4. Java 基础之详解 Java 反射机制

    一.什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...

  5. 不藏了,这些Java反射用法总结都告诉你们

    摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...

  6. java反射-- Field 用法实践

    java 反射是一种常用的技术手段, 通过加载类的字节码的方式来获取相关类的一些信息 比如成员变量, 成员方法等. Field 是什么呢? field 是一个类, 位于java.lang.reflec ...

  7. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  8. java反射机制 + Method.invoke解释 getMethod + 反射理解

    功能: 通过读取另一个Dll去创建一个控件(Form,Button,TextBox,DataGridView),然后对当中一些属性进行检查. 创建控件的大致流程是,Assembly->Modul ...

  9. Java反射机制深度剖析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...

随机推荐

  1. Java语言程序设计-助教篇

    1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...

  2. MySQL系列教程(五)

    MyCAT MyCat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远 ...

  3. ANTLR和StringTemplate实例:自动生成单元测试类

    ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...

  4. linux:cpu 每-CPU 的变量

    每-CPU 的变量 每-CPU 变量是一个有趣的 2.6 内核的特性. 当你创建一个每-CPU变量, 系统中每个处理器获得它自己的这个变量拷贝. 这个可能象一个想做的奇怪的事情, 但是它有自己的优点. ...

  5. ML学习分享系列(1)_计算广告小窥[上]

    原作:面包包包包包包 修改:寒小阳 && 龙心尘 时间:2016年1月 出处: http://blog.csdn.net/breada/article/details/50572914 ...

  6. Spring入门介绍(一)

    Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的. 目的:解决企业应用开发的复杂性. 功能:使用基本的javaBean代替EJB. ...

  7. Struts2处理流程性需求的一种解决方案

    在应用程序设计中,经常出现如下的需求. 查看用户填写的数据,而且数据是分页填写. 看下面这个情况 用户的信息有三页,分别是Form abc. 现在的问题是,后面的逻辑该如何设计. 如果把,FormAB ...

  8. 1. React介绍 React开发环境搭建 React第一个程序

    什么是 React         React 是 Facebook 发布的 JavaScript 库,以其高性能和独特的设计理念受到了广泛关注. React的开发背景         Faceboo ...

  9. UNIX网络编程——非阻塞connect: Web客户程序

    非阻塞的connect的实现例子出自Netscape的Web客户程序.客户先建立一个与某个Web服务器的HTTP连接,再获取一个主页.该主页往往含有多个对于其他网页的引用.客户可以使用非阻塞conne ...

  10. UNIX网络编程——设置套接字超时

    在涉及套接字的I/O操作上设置超时的方法有以下3种: 调用alarm,它在指定超时期时产生SIGALRM信号.这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm ...