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()


你可能感兴趣的:(Java)