您的位置:首页 > 编程语言 > Java开发

Java反射API使用实例

2016-08-03 15:10 381 查看
/**
* 访问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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: