反射-初始

反射:允许对成员变量,成员方法和构造方法的信息进行编程访问

(java的提示)

public class getclasss {
    //获取class对象的三种方式
    public static void main(String[] args) throws ClassNotFoundException {

        //最常用
        Class clazz1 = Class.forName("com.heima.getclass.Student");
        //作为参数
        Class clazz2 = Student.class;
        //有对象
        Student s = new Student();
        Class claszz3 = s.getClass();

    }

 

public class getconstructor {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class clazz = Class.forName("com.heima.getclass.Student");
        //获取公有构造方法
        Constructor[] cons1 = clazz.getConstructors();
        for (Constructor con : cons1) {
            System.out.println(con);
        }
        //获取公有及私有构造方法
        Constructor[] con2 = clazz.getDeclaredConstructors();
        for (Constructor con : con2) {
            System.out.println(con);
        }
        //返回单个的参数方法
        Constructor c1 = clazz.getDeclaredConstructor();
        System.out.println(c1);
        Constructor c2 = clazz.getDeclaredConstructor(String.class,int.class);
        System.out.println(c2);
        //获取构造方法的权限,public1  private2  protected4 static8
        int modifiers = c2.getModifiers();
        System.out.println(modifiers);

        //暴力反射:临时取消权限校验
        c2.setAccessible(true);
        Student stu = (Student) c2.newInstance("jb",11);
        System.out.println(stu);
    }
}
public class getField {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
        //获取公有成员变量数组
        Class clazz = Class.forName("com.heima.getclass.Student");
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        //获取公有单个变量
        Field field = clazz.getField("name");
        System.out.println(field);

        //获取单个私有变量
        Field name = clazz.getDeclaredField("name");
        System.out.println(name);

        //获取权限修饰符
        int modifiers = name.getModifiers();
        System.out.println(modifiers);

        //获取成员变量名
        String n = clazz.getName();
        System.out.println(n);

        //获取成员变量类型
        Class<?> type = name.getType();
        System.out.println(type);

        //获取对象的值
        Student s = new Student("张三",11);
        name.setAccessible(true);
        String name1 = s.name;
        System.out.println(name1);

        name.set(s,"里斯");
        System.out.println(s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值