反射课后练习

/**
 * 定义PrivateTest类,有私有name属性,并且属性值为 hellokitty
 * 提供getName的公有方法
 * 创建PrivateTest的类,利用 Class类行到私有时 name属性,修改私有的 name属性值,并调用getName()的方法打印 name属性值
 */
public class HomeWork01 {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
        //1、得到PrivateTest类对应的Class对象
        Class<PrivateTest> privateTestClass = PrivateTest.class;
        //2、创建对象实例
        PrivateTest privateTest = privateTestClass.newInstance();
        //3、得到name属性对象
        Field name = privateTestClass.getDeclaredField("name");
        //4、因为name属性是private私有的,爆破name
        name.setAccessible(true);
        name.set(privateTest,"gyc");
        //5、得到getName方法对象
        Method getName = privateTestClass.getMethod("getName");
        //6、因为getName是public,所以直接调用
        System.out.println(getName.invoke(privateTest));

    }
}
class PrivateTest{
    private String name = "hellokitty";
    public String getName() {
        return name;
    }
}

输出:gyc

/**
 * 1.利用 Class类的 forName方法得到 File类的 class对象
 * 2.在控制台打印 File类的所有构造器
 * 3.通过 newInstance 的方法创建 File对象,并创建E:\mynew.txt文件
 */
public class HomeWork02 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class<?> fileClass = Class.forName("java.io.File");
        Constructor<?>[] declaredConstructors = fileClass.getDeclaredConstructors();
        //遍历输出
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println("File构造器:" + declaredConstructor);
        }
        //3、指定的得到 public java.io.File(java.lang.String)
        Constructor<?> declaredConstructor = fileClass.getDeclaredConstructor(String.class);
        String fileAllPath = "d:\\mynew.txt";
        Object file = declaredConstructor.newInstance(fileAllPath);//创建File对象
        //4.得到createNewFile 的方法对象
        Method createNewFile = fileClass.getMethod("createNewFile");
        createNewFile.invoke(file);//创建文件,调用的是 createNewFile
        // file的运行类型就是File
        System.out.println(file.getClass());
        System.out.println("创建文件成功" + fileAllPath);
    }
}

 输出:

File构造器:public java.io.File(java.lang.String,java.lang.String)
File构造器:public java.io.File(java.lang.String)
File构造器:private java.io.File(java.lang.String,java.io.File)
File构造器:public java.io.File(java.io.File,java.lang.String)
File构造器:public java.io.File(java.net.URI)
File构造器:private java.io.File(java.lang.String,int)
class java.io.File
创建文件成功d:\mynew.txt

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值