*2. 使用反射机制完成学生对象的创建并输出学生信息。
要求:
(1) 定义一个学生类Student,其中包含姓名(String)、年龄(int)、成绩(float)的属性。
(2) 编写带参与无参构造方法。
(3) 重写父类的toString()方法用于输出学生的信息。
(4) 编写测试类TestStudent,从键盘录入学生的信息格式为(姓名:年龄:成绩)一次性录入使用“:”分隔,
举例(mary:20:90)。
(5) 使用String类的split方法按照“:”进行分隔。
(6) 调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
(7) 调用重写父类的toString()方法将学生信息进入输出显示。
*/
package com.zy;
public class Student {
String name;
int ags;
float score;
@Override
public String toString() {
return "Student [name=" + name + ", ags=" + ags + ", score=" + score
+ "]";
}
public Student(String name, int ags, float score) {
this.name = name;
this.ags = ags;
this.score = score;
}
public Student() {
}
}
package com.zy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;
public class TestStudent {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
System.out.println("请输入学生的姓名:年龄:成绩:(格式(mary:20:90))");
Scanner sc=new Scanner(System.in);
String s = sc.nextLine();
String[] st = s.split(":");
Class s1 = Class.forName("com.zy.Student");
Constructor s2= s1.getDeclaredConstructor(String.class, int.class, float.class);
String name=st[0];
int ags=Integer.parseInt(st[1]);
int score=Integer.parseInt(st[2]);
Student in =(Student) s2.newInstance(name,ags,score);
System.out.println(in);
}
}
Class c1=Class.forName("cn.bjsxt.bean.User");
sysp("全路径:"+c1.getName());
sysp("类名:"+c1.getSimpleName());
sysp("访问权限:"+Modifier.toString(c1.getModifiers()));
sysp("是否是接口:"+c1.isInterface());
sysp("父亲全路径名:"+c1.getSuperclass().getName());
sysp("父类名:"+c1.getSuperclass().getSimpleName());
获取public的属性:object.getFields()
获取所有的属性: object.getDeclaredFields()
根据属性名称获取public的属性信息:
object.getField(“sex”);
根据属性名称获取属性的信息:
object.getDeclaredField(“name”);
要求:
(1) 定义一个学生类Student,其中包含姓名(String)、年龄(int)、成绩(float)的属性。
(2) 编写带参与无参构造方法。
(3) 重写父类的toString()方法用于输出学生的信息。
(4) 编写测试类TestStudent,从键盘录入学生的信息格式为(姓名:年龄:成绩)一次性录入使用“:”分隔,
举例(mary:20:90)。
(5) 使用String类的split方法按照“:”进行分隔。
(6) 调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
(7) 调用重写父类的toString()方法将学生信息进入输出显示。
*/
package com.zy;
public class Student {
String name;
int ags;
float score;
@Override
public String toString() {
return "Student [name=" + name + ", ags=" + ags + ", score=" + score
+ "]";
}
public Student(String name, int ags, float score) {
this.name = name;
this.ags = ags;
this.score = score;
}
public Student() {
}
}
package com.zy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;
public class TestStudent {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
System.out.println("请输入学生的姓名:年龄:成绩:(格式(mary:20:90))");
Scanner sc=new Scanner(System.in);
String s = sc.nextLine();
String[] st = s.split(":");
Class s1 = Class.forName("com.zy.Student");
Constructor s2= s1.getDeclaredConstructor(String.class, int.class, float.class);
String name=st[0];
int ags=Integer.parseInt(st[1]);
int score=Integer.parseInt(st[2]);
Student in =(Student) s2.newInstance(name,ags,score);
System.out.println(in);
}
}
Class c1=Class.forName("cn.bjsxt.bean.User");
sysp("全路径:"+c1.getName());
sysp("类名:"+c1.getSimpleName());
sysp("访问权限:"+Modifier.toString(c1.getModifiers()));
sysp("是否是接口:"+c1.isInterface());
sysp("父亲全路径名:"+c1.getSuperclass().getName());
sysp("父类名:"+c1.getSuperclass().getSimpleName());
获取public的属性:object.getFields()
获取所有的属性: object.getDeclaredFields()
根据属性名称获取public的属性信息:
object.getField(“sex”);
根据属性名称获取属性的信息:
object.getDeclaredField(“name”);