java反射学习笔记(一)

java反射机制

反射机制是指在运行中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法和属性。即动态获取信息和动态调用对象方法的功能称为反射机制。

反射机制的作用:

在运行时判断任意一个对象所属的类
在运行时构造一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法,生成动态代理

与反射相关的类:

Class:表示类,用于获取类的相关信息
Field:表示成员变量,用于获取实例变量和静态变量等
Method:表示方法,用于获取类中的方法参数和方法类型等
Constructor:表示构造器,用于获取构造器的相关参数和类型等

import java.lang.reflect.Constructor;

import static java.lang.Class.forName;

public class ReflectTest {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, NoSuchFieldException {
        BtfGr bg=new BtfGr("ly",21,1);
        String className="fenshe.BtfGr";

//        获取Class类有三种基本方式
        Class c1=BtfGr.class;
        Class c2=bg.getClass();
        Class c3=Class.forName(className);

        //      Class类创建实例
        BtfGr bg1=(BtfGr) c1.newInstance();
        System.out.println("Class类创建实例: "+bg1);

//      Field字段
        System.out.println("获取level字段:  "+c2.getDeclaredField("level"));

//        获取构造方法
        System.out.println("获取构造方法: ");
        Constructor[] c2c= c2.getConstructors();
        for( Constructor c: c2c )
            System.out.println(c);

//      获取方法
        System.out.println("\n获取getName 方法: "+c2.getDeclaredMethod("getName"));
    }
}

class BtfGr
{
    private  String name;
    private  int age;
    private   int level;
    public BtfGr()
    {

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    @Override
    public String toString() {
        return "BtfGr{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", level=" + level +
                '}';
    }
}

Class类创建实例: BtfGr{name='null', age='0', level=0}
获取level字段:  private int fenshe.BtfGr.level
获取构造方法: 
public fenshe.BtfGr()
public fenshe.BtfGr(java.lang.String,int,int)

获取getName 方法: public java.lang.String fenshe.BtfGr.getName()


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值