习题5_Java面向对象01

1.定义一个Student类:
a. 要求包含4个成员变量 String name, int age, boolean isMale, int sno
b. 分别定义5个构造方法
分别为无参构造
初始化name成员变量值的1参构造方法
初始化name 和 sno两个成员变量值的2参构造方法
初始化name,age,isMale三个成员变量值的3参构造方法
初始化name,age, isMale,sno这4个成员变量值的4参构造方法
c. 再定义一个成员方法
public void print() {
System.out.println(name + “—” + age + “—” + (isMale ? “男” : “女”) + “—” + sno);
}
2.在第一题的基础上,创建两个Student对象分别为stu1和stu2
要求stu1对象的四个成员变量name, age, isMale, sno的值分别为“张三”,18,true, 1
要求stu2对象的四个成员变量name, age, isMale, sno的值分别为“李四”,25,false, 2
然后在两个对象上调用print()方法即
stu1.print(), stu2.print(),两次调用方法输出的结果相同吗?
为什么?(提示:在方法体中访问name成员变量,直接用成员变量名name,是this.name的简写形式)

代码:

public class Exercise01 {
    public static void main(String[] args) {
        Student stu1 = new Student("张三", 18, true, 1);
        Student stu2 = new Student("李四", 25, false, 2);
        stu1.print();
        stu2.print();
    }
}
//定义一个Student类
class Student{
    //定义4个成员变量
    String name;
    int age;
    boolean isMale;
    int sno;

    //无参构造方法
    public Student(){

    }
    //初始化name成员变量值的1参构造方法
    public Student(String name){
        this.name = name;
    }
    //初始化name 和 sno两个成员变量值的2参构造方法
    public Student(String name, int sno){
        this.name = name;
        this.sno  = sno;
    }
    //初始化name,age,isMale三个成员变量值的3参构造方法
    public Student(String name,int age, boolean isMale){
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }
    //初始化name,age, isMale,sno这4个成员变量值的4参构造方法
    public Student(String name,int age, boolean isMale, int sno){
        this.name = name;
        this.age = age;
        this.isMale = isMale;
        this.sno = sno;
    }
    //在定义一个成员方法
    public void print() {
        System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);
    }
}

运行结果:

在这里插入图片描述
在不同的对象上调用print方法,打印出的结果不同。
在stu1对象上调用print()方法,打印的结果是stu1对象的成员变量的值;在stu2对象上调用print()方法,打印的结果是stu2对象的成员变量的值。
之所以出现这样的结果,是因为在代码中输出name等成员变量的值,相当于访问的是this.name,this.age,this.isMale,this.sno。又因为,this代表当前对象,即在哪个对象上访问成员方法print(),print()方法中的this就代表哪个对象,因此,在两个不同的对象上调用print()方法,访问到的分别是两个不同对象的成员变量的值。

3.在定义类MyStudent(类中定义的成员变量和成员方法同Student,
同时在MyStudent类中定义和Student相似的5个构造方法)的基础上,
根据需要修改MyStudent相应构造方法的方法体,要求实现
MyStudent st = new MyStudent();
st.print();
这两句代码打印出的结果是 麻花疼—100—男---1000

代码:

public class Exercise03 {
    public static void main(String[] args) {
        MyStudent st = new MyStudent();
        st.print();
    }
}

class MyStudent{
    String name;
    int age;
    boolean isMale;
    int sno;

    //无参构造方法
    public MyStudent(){
        this("麻花疼", 100, true, 1000);
    }
    //初始化name成员变量值的1参构造方法
    public MyStudent(String name){
        this.name = name;
    }
    //初始化name 和 sno两个成员变量值的2参构造方法
    public MyStudent(String name, int sno){
        this.name = name;
        this.sno  = sno;
    }
    //初始化name,age,isMale三个成员变量值的3参构造方法
    public MyStudent(String name,int age, boolean isMale){
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }
    //初始化name,age, isMale,sno这4个成员变量值的4参构造方法
    public MyStudent(String name,int age, boolean isMale, int sno){
        this.name = name;
        this.age = age;
        this.isMale = isMale;
        this.sno = sno;
    }
    //在定义一个成员方法
    public void print() {
        System.out.println(name + "---" + age + "---" + (isMale ? "男" : "女") + "---" + sno);
    }
}

运行结果:

在这里插入图片描述

4.如图所示,分别将一个double类型的数据和一个引用类型的数据传入某个方法,在方法内分别对对应的数据进行一些运算 ,经过运算之后,double类型的数据和引用类型的数据分别是什么? 并解释下,为什么?
在这里插入图片描述
在这里插入图片描述

代码:

public class Exercise04 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "我是马化腾";
        p.age = 50;
        /*
        该方法接收的是引用类型的参数,该引用类型的参数值在调用方法和被调用方法中各有一份,
        但两个参数对应的数据只有一份,即两个引用变量的值指向的是同一个对象,而方法体中,
        修改的同一个对象的成员变量值,所以在方法执行完之后,通过实际参数的引用值,访问同一个对象,
        所以访问到的是对象成员变量值,即被改变之后的值。
        */
        PersonTest(p);
        double money = 100.00;
        /*
        对于该方法而言,接收的是基本数据类型的参数,
        参数值在调用方法(main方法)和被调用方法中(doubleTest方法)各有一份,
        所以在被调用方法体中,最该的其实只是被调用方法中那一份形式参数的值,
        所以在方法执行完之后,实际参数的值并未被修改。
         */
        doubleTest(money);
        System.out.println("方法执行后的money:" + money);
        System.out.println("方法执行后的name:" + p.name);
    }
    private static void doubleTest(double money){
        money = 200.00;
    }
    public static void PersonTest(Person person){
        System.out.println("传入的person的name:" + person.name);
        person.name = "我是马云";
        System.out.println("方法内重新赋值后的name:" + person.name);
    }
}
class Person{
    String name;
    int age;
}

运行结果:

在这里插入图片描述

5.定义一个表示学生信息的类Student,要求如下:
(1)类Student的成员变量:id表示学号;name表示姓名;gender表示性别;age表示年龄;java表示Java课程成绩。
(2) 在定义一个print()方法,输出student对象的 name,gender,age,java的值(即输出学生信息)
(3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
提示: 数组既可以存储基本数据类型的值,也可以存储引用数据类型的值
因此,5个Student对象可以放在一个Student数组中
Student[] students = new Student[5];
students[1] = student对象的引用
求最大值,最小值,平均值,都可以通过循环遍历 students数组来完成

代码:

public class Exercise01 {
    public static void main(String[] args) {
        Student[] students = new Student[5];
        students[0] = new Student(1, "小明", true, 18, 85);
        students[1] = new Student(2, "小红", false, 20, 70);
        students[2] = new Student(3, "李雷", true, 19, 75);
        students[3] = new Student(4, "小丽", false, 18, 95);
        students[4] = new Student(5, "韩梅梅", false, 19, 90);
        System.out.println("输出5位学生的信息:");
        students[0].print();
        students[1].print();
        students[2].print();
        students[3].print();
        students[4].print();
        System.out.println("5位学生中java成绩最高是:" + max(students));
        System.out.println("5位学生中java成绩最低是:" + min(students));
        System.out.println("java的平均成绩是:" + average(students));
    }
    //求java成绩的最大值
    public static double max(Student[] students) {
        double maxValue = 0;
        for (int i = 0; i < students.length; i++) {
            if (students[i].java > maxValue)
                maxValue = students[i].java;
        }
        return maxValue;
    }
    //求java成绩的最小值
    public static double min(Student[] students) {
        double minValue = students[0].java;
        for (int i = 0; i < students.length; i++) {
            if (students[i].java < minValue)
                minValue = students[i].java;
        }
        return minValue;
    }
    //求java成绩的平均值
    public static double average(Student[] students) {
        double sum = 0;
        for (int i = 0; i < students.length; i++) {
            sum += students[i].java;
        }
        return sum/students.length;
    }
}
//定义的学生类
class Student{
    //定义成员变量
    int id;
    String name;
    boolean gender;
    int age;
    double java;//java课程成绩

    //构造5参方法赋初值
    public Student(int id, String name, boolean gender,int age, double java){
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.java = java;
    }
    //定义成员方法,输出学生信息
    public void print(){
        System.out.println("name = " + name + ",gender = " + (gender ? "男" : "女") +
                ",age = " + age + ",java = " + java);
    }
}

运行结果:

在这里插入图片描述

6.在com.cskaoyan.a包下,定义一个名为MyClass的类如下
public class MyClass {
public void hello() {
System.out.println(“a包”);
}
}
同时,在com.cskaoyan.b包下,一个类名也为MyClass
public class MyClass {
public void hello() {
System.out.println(“b包”);
}
}
同时在com.cskaoyan.b包下定义一个Test类如下:
public class Test {
public void static main(String[] args) {
MyClass myClass = new MyClass();
myClass.hello();
}
}
毫无疑问,当执行Test中的main方法的时候输出的是: b包
先要求,在不改变Test main方法中代码的情况下,让main方法运行之后输出 a包,应该怎么做?

解答:

在Test类所在的java文件中使用import语句导入a包的MyClass类即可。比如:

import com.cs.a.MyClass;

#个人学习记录,如发现有错误之处,欢迎与我交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值