一、实验目的
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