第一题
- 编写一个程序从控制台输入一个学生类的类名,如:com.lanqiao.reflect.Student,通过反射创建出学生对象;同时从控制台输入姓名,年龄,性别等信息。
- 使用反射技术获得Constructor实例来创建一个Student对象
- 使用反射技术通过Field对象给属性赋值。
- 使用反射技术调用“setter”的Method的invoke(student对象,值)方法来给学生对象的属性赋值。
- 使用反射技术调用a)创建出来的Student对象的eat(String foodName)方法。
Student.class
public class Student implements java.io.Serializable {
public String name;
private int num;
public Student(String name, int num) {
this.name = name;
this.num = num;
}
Student(String name) {
this.name = name;
}
Student(int num) {
this.num = num;
}
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", num=" + num +
'}';
}
public String eat(String foodName) {
return this.name+"吃"+foodName;
}
}
ReflectDemo.class
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
Scanner input=new Scanner(System.in);
System.out.println("请输入学生类的类名:");// src目录下的student
String next = input.next();
Class<?> aClass = Class.forName(next);
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class, int.class);
System.out.println("请输入名字:");
String next1 = input.next();
System.out.println("请输入学号:");
int i = input.nextInt();
Object student = declaredConstructor.newInstance(next1, i);
System.out.println(student);
//利用方法的方式给属性赋值
Constructor<?> declaredConstructor1 = aClass.getDeclaredConstructor();
Object student1 = declaredConstructor1.newInstance();
Method setName = aClass.getDeclaredMethod("setName",String.class);
System.out.println("(调用方法的方式)请输入名字:");
String next2 = input.next();
setName.invoke(student1, next2);
Method setNum = aClass.getDeclaredMethod("setNum", int.class);
System.out.println("(调用方法的方式)请输入学号:");
int i1 = input.nextInt();
setNum.invoke(student1, i1);
System.out.println(student1);
Method eat = aClass.getDeclaredMethod("eat", String.class);
System.out.println("请输入食物名字:");
String next3 = input.next();
System.out.println(eat.invoke(student, next3));
}
}