java获取运行时对象,java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构...

我们可以通过反射,获取对应的运行时类中所有的属性、方法、构造器、父类、接口、父类的泛型、包、注解、异常等。。。。

典型代码:

83cb4dd095f4ecee3a2ea83598b15a24.png

@Test

public void test1(){

Class clazz = Person.class;

//获取属性结构

//getFields():获取当前运行时类及其父类中声明为public访问权限的属性

Field[] fields = clazz.getFields();

for(Field f : fields){

System.out.println(f);

}

System.out.println();

//getDeclaredFields():获取当前运行时类中声明的所属性。(不包含父类中声明的属性

Field[] declaredFields = clazz.getDeclaredFields();

for(Field f : declaredFields){

System.out.println(f);

}

}

@Test

public void test1(){

Class clazz = Person.class;

//getMethods():获取当前运行时类及其所父类中声明为public权限的方法

Method[] methods = clazz.getMethods();

for(Method m : methods){

System.out.println(m);

}

System.out.println();

//getDeclaredMethods():获取当前运行时类中声明的所方法。(不包含父类中声明的方法

Method[] declaredMethods = clazz.getDeclaredMethods();

for(Method m : declaredMethods){

System.out.println(m);

}

}

/*

获取构造器结构

*/

@Test

public void test1(){

Class clazz = Person.class;

//getConstructors():获取当前运行时类中声明为public的构造器

Constructor[] constructors = clazz.getConstructors();

for(Constructor c : constructors){

System.out.println(c);

}

System.out.println();

//getDeclaredConstructors():获取当前运行时类中声明的所的构造器

Constructor[] declaredConstructors = clazz.getDeclaredConstructors();

for(Constructor c : declaredConstructors){

System.out.println(c);

}

}

/*

获取运行时类的父类

*/

@Test

public void test2(){

Class clazz = Person.class;

Class superclass = clazz.getSuperclass();

System.out.println(superclass);

}

/*

获取运行时类的带泛型的父类

*/

@Test

public void test3(){

Class clazz = Person.class;

Type genericSuperclass = clazz.getGenericSuperclass();

System.out.println(genericSuperclass);

}

/*

获取运行时类的带泛型的父类的泛型

代码:逻辑性代码 vs 功能性代码

*/

@Test

public void test4(){

Class clazz = Person.class;

Type genericSuperclass = clazz.getGenericSuperclass();

ParameterizedType paramType = (ParameterizedType) genericSuperclass;

//获取泛型类型

Type[] actualTypeArguments = paramType.getActualTypeArguments();

// System.out.println(actualTypeArguments[0].getTypeName());

System.out.println(((Class)actualTypeArguments[0]).getName());

}

/*

获取运行时类实现的接口

*/

@Test

public void test5(){

Class clazz = Person.class;

Class[] interfaces = clazz.getInterfaces();

for(Class c : interfaces){

System.out.println(c);

}

System.out.println();

//获取运行时类的父类实现的接口

Class[] interfaces1 = clazz.getSuperclass().getInterfaces();

for(Class c : interfaces1){

System.out.println(c);

}

}

/*

获取运行时类所在的包

*/

@Test

public void test6(){

Class clazz = Person.class;

Package pack = clazz.getPackage();

System.out.println(pack);

}

/*

获取运行时类声明的注解

*/

@Test

public void test7(){

Class clazz = Person.class;

Annotation[] annotations = clazz.getAnnotations();

for(Annotation annos : annotations){

System.out.println(annos);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值