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 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
113 63
|
29天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
20 2
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
113 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
3月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
17 0
|
3月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
62 2
|
3月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
3月前
|
Java 开发者
Java编程之旅:探索面向对象的力量
【9月更文挑战第16天】在编程的世界中,Java以其强大的面向对象编程特性而闻名。本文将带你走进Java的世界,一起探索类与对象的奥秘,学习如何通过封装、继承和多态性构建健壮的软件系统。无论你是初学者还是有经验的开发者,本文都旨在提供实用的代码示例,帮助你提升Java技能。准备好开始这段旅程了吗?让我们启程吧!