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("文件创建失败。");
}
}
}