反射巩固题

1.利用反射和重载完成以下功能
1)创建Student类,类中有属性name和age并封装属性
2)重载Student的构造函数,一个是无参构造并,另一个是带两个参数的有参构造,要求在构造函数打印提示信息 
3)创建带main函数的NewInstanceTest类,利用Class类得到Student对象
4)通过上述获取的Class对象分别调用Student有参函数和无参函数

//Student类
public class Student {
    private String name;
    private int age;

    public Student() {
        System.out.println("无参构造方法");
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造方法");
    }

    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;
    }
}
//NewInstanceTest类
public class NewInstanceTest {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class clazz = Class.forName("Student");
        Constructor student1=clazz.getConstructor();
        Student student01= (Student) student1.newInstance();
        Constructor student2=clazz.getConstructor(String.class,int.class);
        Student student02=(Student)student2.newInstance("张三",23);
    }
}

2. 利用通过反射修改私有成员变量
    1)定义PrivateTest类,有私有name属性,并且属性值为hellokitty,只提供name的getName的公有方法
    2)创建带有main方法ReflectTest的类,利用Class类得到私有的name属性
    3)修改私有的name属性值,并调用getName()的方法打印name属性值

//PrivateTest类
public class PrivateTest {
    private String name="hellokitty";

    public String getName() {
        return name;
    }
}
//ReflectTest类
public class ReflectTest {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        PrivateTest privateTest = new PrivateTest();
        Class clazz=privateTest.getClass();
        Field field= clazz.getDeclaredField("name");
        field.setAccessible(true);
        field.set(privateTest,"张三");
        System.out.println(privateTest.getName());
    }
}

3. 利用反射和File完成以下功能
    1)利用Class类的forName方法得到File类
    2)在控制台打印File类的所有构造器
    3)通过newInstance的方法创建File对象,并创建D:\mynew.txt文件

public class RefelctTest01 {
    public static void main(String[] args) throws Exception {
        Class clazz=Class.forName("java.io.File");
        Constructor [] constructors=clazz.getDeclaredConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }
        Constructor constructor1=clazz.getConstructor(String.class);
        File file= (File) constructor1.newInstance("D:\\mynew.txt");
        boolean newFile = file.createNewFile();
        if(newFile){
            System.out.println("文件创建成功。");
        }else {
            System.out.println("文件创建失败。");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值