Class对象

在想要知道一个类信息之前,需要获得该类的Class对象,java中类的属性,方法,接口,类型都与该Class对象有关。如果你在编译期知道一个类的名字的话,那么你可以使用如下的方式获取一个类的Class对象。

Class myClass= MyObject.class; 

如果你在编译期不知道类的名字,但是你可以在运行期获得到类名的字符串,那么你则可以这么做来获取Class对象:

String className = "xxx";//在运行期获取的类名字符串
Class class = Class.forName(className); 

在使用Class.forName()方法时,你必须提供一个类的全名,这个全名包括类所在的包的名字。例如MyObject类位于com.honjane.app包,那么他的全名就是com.honjane.app.MyObject。
如果在调用Class.forName()方法时,没有在编译路径下(classpath)找到对应的类,那么将会抛出ClassNotFoundException。

类名

你可以从Class对象中类名有两种。

1、通过getName() 方法返回类的全限定类名(包含包名):

Class aClass = Class.forName("xxxx");
String className = aClass.getName(); 

2、如果你仅仅只是想获取类的名字(不包含包名),那么你可以使用getSimpleName()方法:

Class aClass = Class.forName("xxxx");
String simpleClassName = aClass.getSimpleName();  

构造器

Constructor[] constructors = aClass.getConstructors(); 

方法

获得所以公开方法:所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。

Method [ ] methods = aClass.getMethods();

获得方法包含私有方法:包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。
Method [ ] methods = aClass.getDeclaredMethods();

获得单个方法:

   Method method1= aClass.getMethod(methodName, parameterTypes) ; Method method2 aClass.getDeclaredMethod(methodName, parameterTypes); 

属性

同理method有两个方法获取

Field[] method1= aClass.getFields();
Field[] method2= aClass.getDeclaredFields();

注解

你可以通过如下方式访问一个类的注解:

Annotation[] annotations = aClass.getAnnotations(); 

父类

通过Class对象你可以访问类的父类,superclass对象其实就是一个Class类的实例,所以你可以继续在这个对象上进行反射操作

Class superClass = aClass.getSuperClass();

接口

Class[] interfaces = aClass.getInterfaces();

由于一个类可以实现多个接口,因此getInterfaces();方法返回一个Class数组,在Java中接口同样有对应的Class对象。
注意:getInterfaces()方法仅仅只返回当前类所实现的接口。当前类的父类如果实现了接口,这些接口是不会在返回的Class集合中的,尽管实际上当前类其实已经实现了父类接口。

包信息

Package package = aClass.getPackage();

通过Package对象你可以获取包的相关信息,比如包名,你也可以通过Manifest文件访问位于编译路径下jar包的指定信息,比如你可以在Manifest文件中指定包的版本编号

修饰符

可以通过Class对象来访问一个类的修饰符,即public,private,static等等的关键

int modifiers = aClass.getModifiers();

修饰符都被包装成一个int类型的数字,这样每个修饰符都是一个位标识(flag bit),这个位标识可以设置和清除修饰符的类型。
可以使用java.lang.reflect.Modifier类中的方法来检查修饰符的类型:

Modifier.isAbstract(int modifiers);
Modifier.isFinal(int modifiers);
Modifier.isInterface(int modifiers);
Modifier.isNative(int modifiers);
Modifier.isPrivate(int modifiers);
Modifier.isProtected(int modifiers);
Modifier.isPublic(int modifiers);
Modifier.isStatic(int modifiers);
Modifier.isStrict(int modifiers);
Modifier.isSynchronized(int modifiers);
Modifier.isTransient(int modifiers);
Modifier.isVolatile(int modifiers); 

Java 反射:Classes相关推荐

  1. java反射用在哪里_Java反射

    昨天去参加比赛了,所以没有进行博客迁移.人生中的第一场健体比赛,虽然没得奖,但是收获和带来的思考颇丰.意外地进入了男子B组(174以上)的半决赛,然后在半决赛的时候还被裁判员点名出去单独比较,这个很让 ...

  2. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  3. java 反射 getclass_java 反射getClass .class 的使用方法示例

    本文实例讲述了java 反射getClass .class 的使用方法.分享给大家供大家参考,具体如下: java反射机制 怎么从一个实例上的获得类反射 /** * obj 实例的对象 * getCl ...

  4. java反射机制知识_Java反射机制讲解,程序员必须掌握的知识点

    关注程序员7歌,一起用技术改变世界 大家好,我是程序员7歌,今天我为大家讲解Java的反射机制. 首先我们来看看反射的概念: Java反射说的就是在程序运行中,任何一个类,我们都可以知道这个类的方法和 ...

  5. 大家都说 Java 反射效率低,为什么呢?

    我们在 Java 开发中,难免会接触到反射,而在一些框架中,反射的运用更是常见.我相信,每次提到反射,大家的第一反应一定是反射效率低,尽量少使用.但是反射的效率到底低多少?反射效率低的原因在哪里?这篇 ...

  6. java反射机制--reflection

    反射,reflection,听其名就像照镜子一样,可以看见自己也可以看见别人的每一部分.在java语言中这是一个很重要的特性.下面是来自sun公司官网关于反射的介绍:    Reflection is ...

  7. Java学习之二-Java反射机制

    问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...

  8. 粗浅看 java反射机制

    Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifi ...

  9. java 反射 Constructor、Method、Field 基本用法

    java反射主要从以下几个方面理解 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行类加载 理解反射的机制 掌握 Constructor.Method.Fie ...

  10. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

最新文章

  1. JavaSript模块规范 - AMD规范与CMD规范介绍[转]
  2. 重裝系統,磁盤消失解決方法
  3. CodeForces - 1373F Network Coverage(二分)
  4. 编译原理习题(含答案)——1 绪论——MOOC哈工大陈鄞配套, 1 编译是对()。 A. 机器语言的执行 B. 汇编语言的翻译
  5. WP7应用开发笔记(3) 界面设计
  6. linux kset subsystem 3.10内核,Kobject、Kset 和 Subsystem
  7. transform再次理解
  8. Android创建定时和周期任务
  9. PKU 3468 A Simple Problem with Integers
  10. Leetcode-Implement strStr()-Python
  11. 《高等数学》练习题库含答案(大学期末复习资料)
  12. 需求文档(PRD)撰写指南
  13. 最新emoji表情代码大全_微信表情包大全 百度输入法让你斗图斗到爽
  14. matlab中数字分频器的,数字分频器原理及设计.pdf
  15. python-图片转pdf
  16. android获取设备码,获取Android设备唯一标识码
  17. 颠覆你的思维,探寻人类发展史
  18. 如何升级win10.
  19. Oracle JDK | 迅雷内置浏览器解决 Java 下载需要登录 不能直接复制链接 直接下载慢
  20. Android仿自如客APP裸眼3D效果

热门文章

  1. POJ - 2533(动态规划 —— 最长子序列)
  2. TIG:一款威胁情报收集小工具
  3. Ten graph questions of about 2000 difficulty of Codeforces Round 2
  4. OSI七层模型及TCP/IP五层模型
  5. selenium-绕过登录
  6. 【apicloud问题解决记录】键盘弹出监听处理以及头部底部的黑色闪屏现象
  7. 再回首Java第二十二天
  8. Javascript面向对象编程与继承机制的设计思想(转)
  9. 浅谈Android选项卡(二)
  10. [转]asp.net中利用ashx实现图片防盗链