利用反射和重载完成以下功能
1)创建Student类,类中有属性name和age并封装属性
2)重载Student的构造函数,一个是无参构造并,另一个是带两个参数的有参构造,要求在构造函数打印提示信息
3)创建带main函数的NewInstanceTest类,利用Class类得到Student对象
4)通过上述获取的Class对象分别调用Student有参函数和无参函数
*/
public class NewInstanceTest {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> aClass = Class.forName("fanshe.fansheExer.Student");
Constructor<?> cons1 = aClass.getConstructor();
System.out.println(cons1);
Object o = cons1.newInstance();
Constructor<?> cons2 = aClass.getConstructor(String.class, Integer.class);
System.out.println(cons2);
Object o2 = cons2.newInstance("王芳", 21);}
}
class Student{
private String name;
private Integer age;public Student() {
System.out.println("无参构造");
}public Student(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("有参构造函数");
}}
/*
1. 利用通过反射修改私有成员变量
1. 定义PrivateTest类,有私有name属性,并且属性值为hellokitty,只提供name的getName的公有方法
2. 创建带有main方法ReflectTest的类,利用Class类得到私有的name属性
3. 修改私有的name属性值,并调用getName()的方法打印name属性值
*/
public class ReflectTest {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
Class<?> aClass = Class.forName("fanshe.fansheExer.PrivateTest");
System.out.println(aClass);
Field name = aClass.getDeclaredField("name");
System.out.println(name.getName());
Object o = aClass.newInstance();
name.setAccessible(true);
name.set(o,"cat");
Method getName = aClass.getMethod("getName");
Object invoke = getName.invoke(o);
System.out.println(invoke);
}
}
class PrivateTest{private String name="hellokitty";
public String getName() {
return name;
}
}
/*
2. 利用反射和File完成以下功能
1. 利用Class类的forName方法得到File类
2. 在控制台打印File类的所有构造器
3. 通过newInstance的方法创建File对象,并创建D:\mynew.txt文件
*/public class Exer3 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> aClass = Class.forName("java.io.File");
System.out.println(aClass);
Constructor<?>[] cons = aClass.getDeclaredConstructors();
for (Constructor<?> con : cons) {
System.out.println(con);
}
Constructor<?> con = aClass.getConstructor(String.class);
Object o = con.newInstance("D:\\mynew.txt");
Method createNewFile = aClass.getMethod("createNewFile");
createNewFile.invoke(o);
System.out.println(o);
}
}