Java基础之-反射(二)

反射获取类的内容

反射

反射当中最重要的内容—检查类的结构

现在我们来介绍获取类结构的相关方法:

  1. Field类 关于类的成员变量
  2. Method 关于类的方法
  3. Constucotr 类的构造器
介绍着三个类分别的作用:
这三个类首先同时有一个叫做getName()的方法,用来返回属性、方法、或构造器的名称。

下面展示一些 getName方法的使用

 try {
            //1.使用forName的方式获取Class类对象
            Class<?> c = Class.forName("com.reflection.Student");
            Field id = c.getField("id"); //这里只能获取到公共的成员属性
            String name = id.getName();
            System.out.println("该属性的名称:" + id);
        } catch (Exception e) {
            e.printStackTrace();
        }
Class类中的

public Field[] getFields()
​ public Method[] getMethods()
​ public Constructor[] getConstructor
s

分别用于返回这个类支持的公共属性、方法、构造器的数组,包括了父类的公共成员

getDeclaredFields()
​ getDeclaredMethods()
​ getDeclaredConstructors()

这三个方法将会返回类中声明的全部属性、方法和构造器的数组,其中包括了私有的、受保护的成员,但是不包括父类的属性和行为

package com.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/*
    自定义类的要求:
        能够有私有的(private)公有的(public) 属性以及方法和构造器
 */
public class ClassTest5 {
    
    
    public static void main(String[] args) {
    
    
        //获取Student类对应的Class类对象
        Class<Student> c = Student.class;

        //演示getFields getMethods getConstructors方法
        //可以根据自己的喜爱 自定义类
        Field[] fields = c.getFields();
        for (Field field : fields) {
    
    
            System.out.println("该类公有的属性有:" + field); //包括父类的全部公有属性
        }

        Method[] methods = c.getMethods();
        for (Method method : methods) {
    
    
            System.out.println("该类公有的方法有:" + method); //以及父类
        }

        Constructor<?>[] constructors = c.getConstructors();
        for (Constructor<?> constructor : constructors) {
    
    
            System.out.println("类公有的构造方法有:" + constructor);
        }
    }
}
package com.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassTest6 {
    
    
    public static void main(String[] args) {
    
    
        Class<Student> c = Student.class;

        Field[] fields = c.getDeclaredFields();
        for (Field field : fields) {
    
    
            System.out.println( "类当中的所有属性:" + field);
        }

        Method[] methods = c.getDeclaredMethods();
        for (Method method : methods) {
    
    
            System.out.println(method);
        }

        Constructor<?>[] constructors = c.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors) {
    
    
            System.out.println(constructor);
        }
    }
}

小结

这一章介绍了如何使用Class当中的方法来获取类的结构,需要注意的就是这些方法的不同之处,初学者如果有更多的兴趣可以查看API,这里我们只会介绍最重要的一些方法。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ChengXuTeng/article/details/123949038
今日推荐