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() { ...
随机推荐
- lecture5-对象识别与卷积神经网络
Hinton第五课 突然不知道object recognition 该翻译成对象识别好,还是目标识别好,还是物体识别好,但是鉴于范围性,还是翻译成对象识别吧.这一课附带了两个论文<Convolu ...
- WPF EventSetter Handler Command
最近做一个工具,突然发现ListBox和ListView等列表控件的MouseDoubleClick事件有时候是获取不到当前双击的行对象数据的,比如这样写: <ListBox Grid.Row= ...
- 迭代和递归 - leetcode 206. Reverse Linked List
Reverse Linked List,一道有趣的题目.给你一个链表,输出反向链表.因为我用的是JavaScript提交,所以链表的每个节点都是一个对象.例如1->2->3,就要得到3-& ...
- idea配置。
1.project Structure — 修改project(1.name,sdk,level(6-@Override in interface)) 修改modules(点击web,加上source ...
- Java 增强型的for循环 for each
Java 增强型的for循环 for each For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如 ...
- Android开发之SlidingMenu开源项目的使用和问题
一.关于如何导入lib 第一步:New Module 点击+: 第二步:选择Import Eclipse ADT Project: 第三步:选择你想引入的lib文件,选择完成后,会开始编译你添加的项 ...
- python学习笔记整理——列表
Python 文档学习笔记 数据结构--列表 列表的方法 添加 list.append(x) 添加元素 添加一个元素到列表的末尾:相当于a[len(a):] = [x] list.extend(L) ...
- jq 修改input 标签的值
<input type="number" id="output" placeholder="0" /> jq使用方法 $('#o ...
- PHP之function_handling 函数
function_handling 函数 function_handling 函数 需求: 编写一个函数,传入的参数个数不确定,请求出其和. 使用到 以下几个函数: 代码说明: 函数的参数可以是另外一 ...
- extjs 箱子布局
a.flex 配置项 flex 配置项不是设置在布局上,而是设置在子项的配置项.每个子项相对的 flex 值都会与全体子项 flex 累加的值相比较,根据此结果,处理每个子项的 flex 最后是多少. ...