Java学习之路(六十六)| 反射(四) 获取类结构信息
作者:互联网
各自努力,最高处见!加油!
反射(四)获取类结构信息
- 一、第一组方法(java.lang.Class类)
- 二、第二组方法(java.lang.Class类)
- 三、第三组方法(java.lang.reflect.Method类)
- 四、第四组方法(java.lang.reflect.Constructor类)
一、第一组方法(java.lang.Class类)
- 得到Class对象
- getName:获取全类名
- getSimpleName:获取简单类名
- getFields:获取所有public修饰的属性,包含本类以及父类的
- getDeclaredFields:获取本类中所有属性
- getMethods:获取所有public修饰的方法,包含本类以及父类的
- getDeclaredMethods:获取本类中所有方法
- getConstructors: 获取本类所有public修饰的构造器
- getDeclaredConstructors:获取本类中所有构造器
- getPackage:以Package形式返回 包信息
- getSuperClass:以Class形式返回父类信息
- getInterfaces:以Class[]形式返回接口信息
- getAnnotations:以Annotation[] 形式返回注解信息
示例代码:
import org.testng.annotations.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
//如何通过反射获取类的结构信息
public class ReflectionUtils {
public static void main(String[] args) {
}
//第一组方法API
@Test
public void api_01() throws ClassNotFoundException, NoSuchMethodException {
// 得到Class对象
Class<?> personCls = Class.forName("com.xmtedu.Person");
// getName:获取全类名
System.out.println(personCls.getName());//com.xmtedu.Person
// getSimpleName:获取简单类名
System.out.println(personCls.getSimpleName());//Person
// getFields:获取所有public修饰的属性,包含本类以及父类的
Field[] fields = personCls.getFields();
for (Field i : fields) {
System.out.println("本类及父类的public属性"+i.getName());
}
// getDeclaredFields:获取本类中所有属性
Field[] declaredFields = personCls.getDeclaredFields();
for (Field f : declaredFields) {
System.out.println("本类所有属性:"+f.getName());
}
// getMethods:获取所有public修饰的方法,包含本类以及父类的(Object中的方法也会包含在内)
Method[] methods = personCls.getMethods();
for (Method method : methods) {
System.out.println(""+method.getName());
}
// getDeclaredMethods:获取本类中所有方法
Method[] declaredMethods = personCls.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println("本类中所有方法:"+declaredMethod.getName());
}
// getConstructors: 获取本类所有public修饰的构造器
Constructor<?>[] constructors = personCls.getConstructors();
for (Constructor<?> c : constructors) {
System.out.println("public修饰的构造器:"+c.getName());
}
// getDeclaredConstructors:获取本类中所有构造器
Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println("获取本类中所有构造器:"+declaredConstructor.getName());
}
// getPackage:以Package形式返回 包信息
System.out.println(personCls.getPackage());
// getSuperClass:以Class形式返回父类信息
Class<?> superclass = personCls.getSuperclass();
System.out.println("父类的class对象:"+superclass);
// getInterfaces:以Class[]形式返回接口信息
Class<?>[] interfaces = personCls.getInterfaces();
for (Class<?> anInterface : interfaces) {
System.out.println("接口信息"+anInterface.getName());
}
// getAnnotations:以Annotation[] 形式返回注解信息
Annotation[] annotations = personCls.getAnnotations();
System.out.println("返回注解信息:"+annotations.getClass());
}
}
被测试的类
public class Person extends A implements IA,IB{
public Person(String hobby, String name) {
super(hobby);
this.name = name;
}
public String name;
protected int age;
String job;
private double sal;
public void m1(){
}
protected void m2(){
}
void m3(){
}
private void m4(){
}
}
interface IA{
}
interface IB{
}
class A{
public String hobby;
public int hand;
public A(String hobby) {
this.hobby = hobby;
}
private A(int hand){
this.hand=hand;
}
public void father(){
}
}
二、第二组方法(java.lang.Class类)
- getModifiers:以int形式返回修饰符。
说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。public(1)+static(8)=9 。 - getType:以Class形式返回类型。
- getName:返回属性名。
示例代码
@Test
public void m2() throws ClassNotFoundException {
Class<?> personCls = Class.forName("com.xmtedu.Person");
Field[] declaredFields = personCls.getDeclaredFields();
for (Field f : declaredFields) {
System.out.println("本类所有属性:"+f.getName()+"该属性修饰符值:"+f.getModifiers()+"该属性类型:"+f.getType());
}
}
三、第三组方法(java.lang.reflect.Method类)
- getModifiers:以int形式返回修饰符。
说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16 。 - getReturnType:以Class形式获取返回类型。
- getName:返回方法名。
- getParameterTypes:以Class[ ]返回参数类型。
@Test
public void m3()throws ClassNotFoundException{
Class<?> personCls = Class.forName("com.xmtedu.Person");
Method[] declaredMethods = personCls.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println("方法"+declaredMethod.getName()+"该方法的访问修饰符:"+declaredMethod.getModifiers()+
"该方法的返回值类型"+declaredMethod.getReturnType());
}
}
四、第四组方法(java.lang.reflect.Constructor类)
- getModifiers:以int形式返回修饰符。
- getName:返回构造器名(全类名)。
- getParameterTypes:以Class[ ]返回参数类型数组。
标签:personCls,反射,Java,getName,System,public,println,六十六,Class 来源: https://blog.csdn.net/weixin_45904051/article/details/121253526