反射实现

*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”);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值