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

java反射获取类信息

2016-07-26 11:27 405 查看
(转载)http://www.cnblogs.com/zhuawang/archive/2012/12/09/2809895.html

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(String str) {
System.out.println("执行有参数的info方法" + ",其实str参数值:" + str);
}

// 定义一个测试用的内部类
class Inner {

}

public static void main(String[] args) throws Exception {
// 下面代码可以获取ClassTest对应的Class
Class<ClassTest> clazz = ClassTest.class;
// 获取该 Class 对象所对应类的全部构造器
Constructor[] ctors = clazz.getDeclaredConstructors();
System.out.println("ClassTest 的全部构造器如下:");
for (Constructor c : ctors) {
System.out.println(c);
}
// 获取该 Class 对象所对应类的全部 public 方法
Constructor[] publicCtors = clazz.getConstructors();
System.out.println("ClassTest 的全部 public 构造器如下 :");
for (Constructor c : publicCtors) {
System.out.println(c);
}
// 获取该 Class 对象所对应类的指定方法
Method[] mtds = clazz.getMethods();
System.out.println("ClassTest 的全部 public 方法如下:");
for (Method md : mtds) {
System.out.println(md);
}
// 获取该 Class 对象所对应类的指定方法
System.out.println("ClassTest 里带一个字符串参数的 info 方法为:"
+ clazz.getMethod("info", String.class));
//获取该 Class 对象所对应类的上的全部注释
Annotation[] anns=clazz.getAnnotations();
System.out.println("ClassTest 的全部 Annotattion 如下:");
for (Annotation an : anns) {
System.out.println(an);
}
System.out.println("该 Class 元素上的 @SuppressWarnings 注释为:"+
clazz.getAnnotation(SuppressWarnings.class));

<pre name="code" class="java">


//获取该 Class 对象所对应类的全部内部类 Class<?>[] inners=clazz.getDeclaredClasses(); System.out.println("ClassTest 的全部内部类如下:"); for (Class c : inners) { System.out.println(c); } //使用 Class.forName 方法加载 ClassTest 的 Inner 内部类 Class inClazz=Class.forName("ClassTest$Inner");
//通过getDeclaringClass()防伪该类所在的外部类 System.out.println("inClazz 对应类所在的外部类为:"+inClazz.getDeclaredClasses()); System.out.println("ClassTest 的包为:"+clazz.getPackage()); System.out.println("ClassTest 的父类为:"+clazz.getSuperclass()); } }


获取该Class对象所对应的类的全部内部类
clazz.getDeclaredClasses()


获取该Class对象所对应的类的全部方法(不包括构造函数、不包括继承下来的方法、注意:包括重写的方法)
clazz.getDeclaredFields()


interface Donothing {
void study();
}

class Ani {
public void drink() {

}
}

class StudentOne extends Ani implements Donothing{
public int age;
public String name;
public StudentOne() {

}
public StudentOne(int age, String name) {
this.age = age;
this.name = name;
}

public void now() {

}

private void feture() {

}

@Override
public void study() {

}

@Override
public void drink() {

}
}


这里
System.out.println(clazz.getDeclaredMethods().length);输出为4。

如果将将study方法注释掉
// @Override
// public void study() {

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