ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-09-29 反射习题

2021-09-29 20:30:20  阅读:192  来源: 互联网

标签:sname String int 09 sage 2021 sid 习题 public


编程题
1. 定义封装类Student,类中的成员有:  
    私有属性:学号,姓名,年龄,性别
    无参构造方法,全参数构造方法
    定义每个属性的setters和getters方法
    重写toString方法和equals方法(根据学号比较对象)

   在测试类中利用反射完成以下操作:
    1. 用户从控制台输入要加载的类名
    2. 实例化该类,要求调用有参构造方法完成实例化对象的同时为属性赋值
    3. 获取并遍历类中的所有方法,执行所有的get开头的方法,并将其返回值打印输出。

封装类:

class Student {
    //1、四个私有属性:学号、姓名、年龄、性别
    private int sid;
    private String sname;
    private int sage;
    private String ssex;
    //2、两个构造方法:无参和全参
    public Student() {
    }
    public Student(int sid, String sname, int sage, String ssex) {
        this.sid = sid;
        this.sname = sname;
        this.sage = sage;
        this.ssex = ssex;
    }
    //重写toString():
    @Override
    public String toString() {
        return "Student{" +"sid=" + sid + ", sname='" + sname + '\''
                +", sage=" + sage + ", ssex='" + ssex + '\'' +'}';
    }
    //重写equals和hashCode
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return sid == student.sid;
    }
    @Override
    public int hashCode() {
        return Objects.hash(sid);
    }
    //get和set:

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getSage() {
        return sage;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
}

测试方法:在main中

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入您要操作的类名:");
        String name = sc.next();
        Class cls = Class.forName("TXT.CodeTest."+name);
        System.out.println("您要操作的类是:"+cls.getName());
        Constructor c = cls.getConstructor(int.class,String.class,int.class,String.class);
        {//用于测试的,非答题代码:
            Object stu1 = c.newInstance(819, "抱羊", 20, "女");
            Object stu2 = c.newInstance(819, "卷卷", 20, "女");
            //试一下equals方法写没写好:
            System.out.println(stu1.equals(stu2));//true,写的很棒!
            //试一下toString方法写没写好:
            System.out.println(stu1.toString());
            //Student{sid=819, sname='抱羊', sage=20, ssex='女'},写得很成功!
        }
        Student stu = (Student) c.newInstance(927,"小羊",19,"男");
        Method methods[] = cls.getMethods();//获得这个类所有的方法
        for (Method m:methods) {//遍历方法的集合
            if(m.getName().contains("get")){//如果方法名包含get
                Object o = cls.getMethod(""+m.getName()).invoke(stu);
                //getMethod能获得这个方法,参数名为方法名getName,invoke调用,返回值类型为Object接收
                //上面这段话其实等价于Object o = m.invoke(stu);
                System.out.println(m.getName()+"方法获得的值为:"+o);
            }
        }

运行结果:

 

2.创建Demo类,在类中定义一个私有方法  demo(),方法体中输出“私有方法”,
创建测试类Test,利用反射在运行期输入要加载的类名,然后实例化对象,然后执行该私有方法。

标签:sname,String,int,09,sage,2021,sid,习题,public
来源: https://blog.csdn.net/zz2097831284/article/details/120555306

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有