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,这里我们只会介绍最重要的一些方法。

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philosophy7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值