Java反射API使用实例
/**
* 访问Class对应的类所包含的注释:getAnnotation();getDelaredAnnotation();
* 访问Class对应的类所包含的内部类:getDeclaredClasses()
* 访问Class对应的类所包含的外部类getDeclaringClass()
* 访问Class对应的类所继承的父类和实现的接口等:
* getModifiers()返回此类或接口的所有修饰符
* Class[] getInterfaces() 返回该Class对象对应类所实现的全部接口
* getPackage();获取此类的包
* getName();以字符串形式返回此Class对象所表示的类的名称
* getSimpleName()以字符串形式返回此Class对象所表示类的简称
* getSuperclass()返回该Class所表示的类的超类对应的Class对象
*/
ReflectDemo.java
package com.pb.reflect.classinfo;
/**
*
* @author Administrator
* 1、包
* 2、注解
* 3、构造方法
* 4、方法
* 5、内部类
*
*/
@SuppressWarnings(value="unchecked")
@Deprecated
public class ReflectDemo {
//私有构造方法
private ReflectDemo(){ }
//公有的带name参数的构造方法
public ReflectDemo(String name){ }
public void info(){ }
public void info(String str){ }
class inner{ }
}
TestReflectDemo.java
package com.pb.reflect.classinfo; import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method; public class TestReflectDemo {
public static void main(String[] args) {
//下面的代码可以获取ReflectDemo的Class对象
Class<ReflectDemo> class1 = ReflectDemo.class;
//获取ReflectDemo中全部的构造方法
Constructor[] constructor = class1.getDeclaredConstructors();
System.out.println("########ReflectDemo全部的构造方法########");
for (Constructor constructor2 : constructor) {
System.out.println(constructor2.toString());
}
//获取ReflectDemo的public构造方法
System.out.println("########ReflectDemo公共的构造方法########");
Constructor[] constructor1=class1.getConstructors();
for (Constructor constructor2 : constructor1) {
System.out.println(constructor2.toString());
}
//获取ReflectDemo的public 的方法
System.out.println("########ReflectDemo公共的方法########");
Method[] methods=class1.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.toString());
}
//获取对应类的指定方法,方法名、方法参数的类型,找到info方法,info带的参数类型是String
try {
System.out.println("########ReflectDemo带有String类型参数的info方法########");
Method method=class1.getMethod("info", String.class);
System.out.println(method.toString());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 获取ReflectDemo的全部注释
Annotation[] annotation=class1.getAnnotations();
System.out.println("########ReflectDemo所有的注释 信息#####");
for (Annotation annotation2 : annotation) {
System.out.println(annotation.toString());
}
//获取ReflectDemo的包信息
Package package1 = class1.getPackage();
System.out.println(package1.toString()); // 获取ReflectDemo的内部类
Class[] inners = class1.getDeclaredClasses();
System.out.println("########ReflectDemo所有的内部类#####");
for (Class class2 : inners) {
System.out.println(class2.toString());
} try {
Class inclass = Class.forName("com.pb.reflect.classinfo.ReflectDemo$inner");
// 输出内部类的信息
System.out.println("########ReflectDemo所有的内部类的信息");
System.out.println("inclass对应类的外部类为:"+inclass.getDeclaringClass());
System.out.println("inclass对应类的包为:"+inclass.getPackage());
System.out.println("inclass对应类的父类为:"+inclass.getSuperclass());
System.out.println("inclass对应类的名称为:"+inclass.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} }
}
Java反射API使用实例的更多相关文章
- Java反射API研究(1)——注解Annotation
注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...
- java反射机制简单实例
目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...
- java 反射机制的实例
[案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /** * 通过一个对象获得完整的包名和类名 ...
- Java反射API研究(3)——java.lang.Class<T>
对于反射来说,Class是核心,任何反射的对象都需要通过Class来获得. Class 类的实例表示正在运行的 Java 应用程序中的类和接口.枚举是一种类,注释是一种接口.每个数组属于被映射为 Cl ...
- Java反射API研究(2)——java.lang.reflect详细内容与关系
对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType ...
- Java反射API研究(4)——Class中的重要对象
一.Constructor与Method的父类:Executable Executable表示一个可执行类,构造方法与普通方法都是Executable AnnotatedType[] getAnnot ...
- Java反射api详解
虽然已经用了很多反射相关的api,但是还没有详细研究官方api文档,下面以1.6为基础研究一下api文档(因为只找到了1.6的中文版...),同时补充1.7和1.8对反射相关api的改变.
- java反射API
反射主要对象 Class Constructor Field Method API-Class 获取Class对象 Object.getClass() className.class Class.fo ...
- java反射机制-简单实例
public class Car { private String brand; private String color; private int maxSpeed; public Car() { ...
随机推荐
- .Net 异步方法加上“timeout”
在本羊读大学的时候,Thread让本羊云里雾里,代码写的痛不欲生,真的是让本羊脑袋里很多“线”缠绕在一起. 之后,Task让本羊代码写的飞起,甚至有时候根本不需要Task的时候还是要写上,那样显得档次 ...
- .net程序员转行做手游开发经历(五)
大家好,真的是好长时间都没有更新博客了.上来博客园发现很多朋友还在关注我们,那给大家汇报下最近的一些进展. 收费版上线了,但是下载量不是很多,刚发布的时候下载每天的下载还是挺多,我们几个小伙伴在论坛. ...
- Servicestack IRequestLogger获取 IHttpRequest
我在 ServiceStack里实现了 Logging 中的请求与返回,同时我想在IRequestLogger.Log() 方法中获取 IHttpRequest . IRequestContext 并 ...
- 转一篇Unity客户端与Java服务器的通信
转自:http://www.programering.com/a/MTNxYDMwATQ.html A few days ago a friend asked me about Unity3D ins ...
- [CF#290 Div.1 C]Fox And Dinner(最大流)
题目:http://codeforces.com/contest/512/problem/C 题目大意:给你若干个数,让你分成k组,每组围成一个圆,使得相邻两个数和均为素数,且每组人数应>=3个 ...
- Allegro 中手动制作螺丝孔封装
以直径2.5mm的螺丝孔为例: 添加过孔,通常过孔的尺寸稍大于实际的螺丝直径,这里设置为2.8mm的直径. 添加过孔焊盘的其他属性. 制作边上的小焊盘. 新建Package Symbol然后点击Lay ...
- 如何给我们的eclipse新建文件自动生成注释
有时候,我们需要给我们的文件加载注释,但手动给每一个方法,每一个类添加注释,非常的繁琐,幸好强大的eclipse已经为我们准备好了自动添加注释的配置文件,它就是——codetemplates.xml ...
- 【CSS】 background
background: #22b4ff //背景色 url("http://images.cnblogs.com/cnblogs_com/oiliu/529256/o_titleIMG.jp ...
- context:component-scan扫描使用的use-default-filters
如下方式可以成功扫描到@Controller注解的Bean,不会扫描@Service/@Repository的Bean. <context:component-scan base-package ...
- Intent传参数
Intent 是Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据.Intent 一般可被用于启动活动.启动 服务.以及发送广 ...