Java程序设计实验3 | 面向对象(上)(一)

简介: 实验目的是理解和掌握面向对象编程的基本概念,包括类的声明、实例化和调用,方法及构造方法的定义,方法重载,值传递和地址传递,以及使用this关键字和static关键字。

一、实验目的


1、理解面向对象的相关基本概念,掌握类的声明、类的实例化和调用。


2、掌握方法及构造方法的定义;


3、掌握方法重载的用法,理解值传递和地址传递两种参数传递方式的区别;


4、掌握this关键字和static关键字的用法;


5、掌握访问控制符的使用,以实现类的封装和信息隐蔽;


6、能够初步进行类的设计,编写基本的面向对象的程序;


7、了解对象内存分配和垃圾回收机制的原理。


实验内容


1、编一个学生类(Student)


其中包含以下内容:


属性:学号studentNo,姓名studentName,性别studentGender,年龄studentAge。


方法:构造方法,显示学号方法showNo(),显示姓名方法showName(),显示性别方法showSex(),显示年龄方法showAge(),修改年龄方法modifyAge()。


主类(S3_1)包含:主方法main(),在其中创建两个学生对象s1和s2并初始化,两个对象的属性自行确定,然后分别显示这两个学生的学号、姓名、性别、年龄,然后修改s1的年龄并显示修改后的结果。


本题比较简单,按要求编程即可,注意构造方法的语法书写以及Student类的属性封装。


源代码:


import java.util.Scanner;
 
public class S3_1 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        Student s1 = new Student(1001,"小明","男",18);
        Student s2 = new Student(2002,"小红","女",20);
 
        System.out.println("学生1:");
        s1.showNo();
        s1.showName();
        s1.showGender();
        s1.showAge();
 
        System.out.println("学生2:");
        s2.showNo();
        s2.showName();
        s2.showGender();
        s2.showAge();
        System.out.println("修改学生2的年龄为:");
        int age = reader.nextInt();
        s2.modifyAge(age);
        s2.showAge();
    }
}
 
class Student {
    //属性封装
    private int studentNo;
    private String studentName;
    private String studentGender;
    private int studentAge;
 
    public Student(int studentNo, String studentName, String studentGender, int studentAge) {
        this.studentNo = studentNo;
        this.studentName = studentName;
        this.studentGender = studentGender;
        this.studentAge = studentAge;
    }
 
    public void showNo() {
        System.out.println("学号是:" + this.studentNo);
    }
 
    public void showName() {
        System.out.println("姓名是:" + this.studentName);
    }
 
    public void showGender() {
        System.out.println("性别是:" + this.studentGender);
    }
    public void showAge() {
        System.out.println("年龄是:" + this.studentAge);
    }
    public void modifyAge(int age) {
        this.studentAge = age;
    }
}


列出测试数据和实验结果截图:




2、编写一个简单计算器


拥有加减乘除等方法,每个方法都有2个操作数,同为double类型或同为整型,方法设计为重载,在测试类里通过键盘输入操作数,显示计算结果.


本题的重点是方法的重载。


方法的重载是指在一个类中可以有多个名字相同的方法,但这些方法的参数列表各不相同。参数列表指的是参数的个数、类型、顺序。如果两个方法的方法名与参数列表都完全相同,那么就不是重载,而是重复,程序会报错。重载与方法的返回值无关。


若要完善本题代码,有一些小细节需要注意,如double类型的运算结果需要保留几位小数,是否需要处理被0除的情况等。不过事实上,Java虚拟机会处理被0除的情况,那就是会抛出ArithmeticException异常。这个异常不需要我们手动定义,jvm也会处理。


源代码:

import java.util.Scanner;
 
public class S3_2 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        Calculator calculator = new Calculator();
 
        System.out.println("请输入要运算的数据类型(0为int,1为double):");
        int judge = reader.nextInt();
 
        if(judge == 0){
            System.out.println("请输入两个整数:");
            int x = reader.nextInt();
            int y = reader.nextInt();
            System.out.println("请输入运算符(+ - * /)");
            String operation = reader.next();
 
            int ret = 0;
            switch(operation){
                case "+":
                    ret = calculator.add(x,y);
                    break;
                case "-":
                    ret = calculator.sub(x,y);
                    break;
                case "*":
                    ret = calculator.mul(x,y);
                    break;
                case "/":
                    ret = calculator.div(x,y);
                    break;
            }
            System.out.println("计算结果是" + ret);
 
        }else if(judge == 1){
            System.out.println("请输入两个实数:");
            double x = reader.nextDouble();
            double y = reader.nextDouble();
            System.out.println("请输入运算符(+ - * /)");
            String operation = reader.next();
 
            double ret = 0;
            switch(operation){
                case "+":
                    ret = calculator.add(x,y);
                    break;
                case "-":
                    ret = calculator.sub(x,y);
                    break;
                case "*":
                    ret = calculator.mul(x,y);
                    break;
                case "/":
                    ret = calculator.div(x,y);
                    break;
            }
            System.out.printf("计算结果是%.2f",ret);    //保留2位小数
        }
    }
}
 
class Calculator {
    public int add(int x,int y) {
        return x+y;
    }
    public int sub(int x,int y){
        return x-y;
    }
    public int mul(int x,int y) {
        return x*y;
    }
    public int div(int x,int y){
        return x/y;
    }
    public double add(double x,double y) {
        return x+y;
    }
    public double sub(double x,double y){
        return x-y;
    }
    public double mul(double x,double y) {
        return x*y;
    }
    public double div(double x,double y){
        return x/y;
    }
 
}


列出测试数据和实验结果截图:






若被0除,则抛出异常:



3、设计一个日期类

定义类的构造方法对日期进行初始化,在toString()中将其输出格式定为“月/日/年”。最后,编写一个测试程序来测试所定义的日期类能否实现预定的功能。

源代码:


public class Test2 {
    public static void main(String[] args) {
        MyDate date = new MyDate(2023,1,18);
        System.out.println(date);
    }
}
 
class MyDate{
    private int year;
    private int month;
    private int day;
 
    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    
    //重写toString()方法
    @Override
    public String toString() {
        return month+"/"+day+"/"+year;
    }
}


列出测试数据和实验结果截图:



Java程序设计实验3 | 面向对象(上)(二)+

https://developer.aliyun.com/article/1520476?spm=a2c6h.13148508.setting.14.de6d4f0eMR642Y

相关文章
|
2天前
|
Java
Java编程思想(面向对象)第四版PDF分享
探索《Java编程思想》第四版,理解Java不仅是特性集合,更是解决问题的强大工具。本书深入设计层面,构建编程思维模型,助你逐步精通Java。[阅读更多](https://zhangfeidezhu.com/?p=355) ![Java编程思想](https://ucc.alicdn.com/pic/developer-ecology/nrw3f3oqlpmag_c8ff959a921545f1bbabcefd37f029cf.png)
18 1
Java编程思想(面向对象)第四版PDF分享
|
7天前
|
存储 Java C语言
Java面向对象课程设计--类管理系统
Java面向对象课程设计--类管理系统
14 1
|
7天前
|
Java
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
|
20小时前
|
存储 安全 Java
Java基础系列1:Java面向对象
Java基础系列1:Java面向对象
|
21小时前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
4 0
|
21小时前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
5 0
|
7天前
|
Java
Java面向对象特征(一)----- 封装
Java面向对象特征(一)----- 封装
|
8天前
|
机器学习/深度学习 Java API
杨校老师课堂之Java面向对象知识点整理集锦3
杨校老师课堂之Java面向对象知识点整理集锦
9 0
|
8天前
|
Java API 数据安全/隐私保护
杨校老师课堂之Java面向对象知识点整理集锦2
杨校老师课堂之Java面向对象知识点整理集锦
14 0
|
8天前
|
Java 编译器 开发工具
杨校老师课堂之Java面向对象知识点整理集锦1
杨校老师课堂之Java面向对象知识点整理集锦
8 0