当前位置: 首页 > news >正文

Java面向对象编程实战指南1

一、实验实训目的和要求

1、理解 Object 类的基础地位及 toString ()、equals () 等核心方法的功能,熟练掌握其重写规则;全面掌握包装类的特性、基本数据类型与包装类的转换机制,以及 valueOf ()、parseXxx () 等常用方法的应用。

2、能在自定义类中正确重写 Object 类方法以实现对象的个性化描述与比较;能运用包装类解决数据有效性处理(如无效数值存储)等实际问题,提升面向对象编程中类的封装与代码规范性。

3、掌握 Java API 的查阅方法,理解 Object 类在集合框架等实际场景中的应用;学会基于包装类进行类设计,增强代码对复杂数据的适配性与可扩展性。

4、培养职业素养与学习意识:通过遵循方法重写规则培养契约精神,在数据处理中养成严谨细致的编程习惯;通过自主探索 API 文档,树立自主学习与终身学习意识,适应技术发展需求。

二、实验实训器材(包括仪器、设备、主要试剂或元器件、软件等)

器材:电脑、JDK软件、ideal软件

三、实验实训内容和主要操作步骤

2.1 验证性实验

1、用户类(User)的封装与构造方法实现。调试下面的程序,分析程序的功能和运行结果并添加代码注释。

public class User {​

private String username;​

private String password;​

private String tel;​

​ public User() {}​

​ public User(String username, String password, String tel) {​

this.username = username;​

this.password = password;​

this.tel = tel;​

}​

public String getUsername() {​

return username;​

}​

public void setUsername(String username) {​

this.username = username;​

}​

public String getPassword() {​

return password;​

}​

public void setPassword(String password) {​

this.password = password;​

}​

public String getTel() {​

return tel;​

}​

public void setTel(String tel) {​

this.tel = tel;​

}​

}

2、在上述 User 类中覆盖 toString 方法,格式为 “username:xxx,password:xxx,tel:xxx”。调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

@Override​

public String toString() {​

return "username:" + username + ",password:" + password + ",tel:" + tel;​

}

3、在上述 User 类中覆盖 equals 方法,只要用户名相同则判定为相同对象。调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

@Override​

public boolean equals(Object obj) {​

if (this == obj) return true;​

if (obj == null || getClass() != obj.getClass()) return false;​

User user = (User) obj;​

return username.equals(user.username);​

}

4、编写测试类,调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

import java.util.Scanner;​

public class UserTest {​

public static void main(String[] args) {​

Scanner scanner = new Scanner(System.in);​

System.out.println("请输入第一个用户信息:");​

System.out.print("用户名:");​

String username1 = scanner.nextLine();​

System.out.print("密码:");​

String password1 = scanner.nextLine();​

System.out.print("电话:");​

String tel1 = scanner.nextLine();​

User user1 = new User(username1, password1, tel1);​

System.out.println("请输入第二个用户信息:");​

System.out.print("用户名:");​

String username2 = scanner.nextLine();​

System.out.print("密码:");​

String password2 = scanner.nextLine();​

System.out.print("电话:");​

String tel2 = scanner.nextLine();​

}​

}

5、学生类(Student)的封装与包装类应用。调试下面的程序,分析程序的功能和运行结果并添加代码注释。

public class Student {

private String name;

private Integer age;

private Double score;

public Student() {}

public Student(String name, Integer age, Double score) {

this.name = name;

this.age = (age != null && age >= 0) ? age : null;

this.score = (score != null && score >= 0 && score <= 100) ? score : null;

}

public String getName() { return name; }

public Integer getAge() { return age; }

public Double getScore() { return score; }

public void setName(String name) { this.name = name; }

public void setAge(Integer age) {

this.age = (age != null && age >= 0) ? age : null;

}

public void setScore(Double score) {

this.score = (score != null && score >= 0 && score <= 100) ? score : null;

}

}

6、在上述Student 类基础上覆盖 toString 方法,“姓名:xxx,年龄:xxx,成绩:xxx” ,其中无效数据(null )显示为 “未填写”。调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

@Override

public String toString() {

String ageStr = (age != null) ? age.toString() : "未填写";

String scoreStr = (score != null) ? score.toString() : "未填写";

return "姓名:" + name + ",年龄:" + ageStr + ",成绩:" + scoreStr;

}

7、在 Student 类 set 方法基础上,新增 isAgeValid、isScoreValid 方法。调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

public boolean isAgeValid() {

return age != null && age >= 0;

}

public boolean isScoreValid() {

return score != null && score >= 0 && score <= 100;

}

8、编写测试类,调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

public class StudentTest {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("请输入学生信息:");

System.out.print("姓名:");

String name = scanner.nextLine();

System.out.print("年龄:");

Integer age = null;

try {

age = Integer.valueOf(scanner.nextLine());

} catch (NumberFormatException e) {

// 输入非数字,age保持null

}

System.out.print("成绩:");

Double score = null;

try {

score = Double.valueOf(scanner.nextLine());

} catch (NumberFormatException e) {

// 输入非数字,score保持null

}

Student student = new Student(name, age, score);

System.out.println("学生信息:" + student);

System.out.println("年龄是否有效:" + student.isAgeValid());

System.out.println("成绩是否有效:" + student.isScoreValid());

scanner.close();

}

}

9、包装类常用方法综合应用。调试下面的程序,并分析程序的功能和运行结果并添加代码注释。

public class WrapperMethodTest {

public static void main(String[] args) {

String strInt = "100";

int num = Integer.parseInt(strInt);

System.out.println("字符串\"100\"转int:" + num);

String strDouble = "95.5";

Double d = Double.valueOf(strDouble);

System.out.println("字符串\"95.5\"转Double:" + d);

System.out.println("int最大值:" + Integer.MAX_VALUE);

System.out.println("int最小值:" + Integer.MIN_VALUE);

System.out.println("double最大值:" + Double.MAX_VALUE);

System.out.println("double最小值:" + Double.MIN_VALUE);

Integer a = 50;

Integer b = 100;

System.out.println("a compareTo b:" + a.compareTo(b));

}

}

2.2 自主设计性实验

10、编程实现学生对象信息输出和比较。

要求:定义 Student 类,属性包括学号(id)、姓名(name)、年龄(age),进行封装并提供 get/set 方法及构造方法;重写 toString 方法,格式为 “id:xxx,name:xxx,age:xxx”;重写 equals 方法,学号相同则为相同对象。编写测试类,创建两个 Student 对象,输入信息并判断是否相同,打印对象信息。​

11、编程实现商品类(Goods)的比较​

要求:定义 Goods 类,属性有商品编号(goodsId)、商品名称(goodsName)、价格(price),完成封装、构造方法;重写 equals 方法,商品编号相同则为相同商品;重写 toString 方法展示商品信息。编写测试类,输入两个商品信息,判断是否为同一商品并打印结果。​

四、实验实训数据及结果分析(数据、表格、程序、图形图像、注释、分析说明等)

http://www.jsqmd.com/news/151145/

相关文章:

  • vue 中v-show注意事项
  • Java面试必考:Object类与equals解析2
  • PWM控制蜂鸣器音调:小白也能懂的图解说明
  • 多线程编程核心要点速览
  • AI伦理审查辅助系统:可解释性与推理速度兼得之道
  • 快速理解STM32F4固件包结构与用途
  • 猎奇智能冲刺港股:上半年营收2.5亿净利6889万 拟募资9亿
  • 大数据领域分布式计算的多租户管理模式
  • vue v-if和v-show比较
  • 多模态视频理解实战:从0到1构建视频-文本对齐大模型
  • PWM波形优化提升WS2812B驱动方法稳定性
  • 用TensorRT镜像跑通百亿参数模型,只需一块消费级GPU
  • 短视频内容审核自动化:TensorRT加速视觉语言模型
  • 城市大脑交通调度:TensorRT支撑的实时预测模型集群
  • 稀疏化模型+TensorRT:下一代高效推理的双剑合璧
  • uds28服务完整示例:基于CANoe的仿真验证
  • 收藏级大模型底层逻辑详解:10分钟让小白也能看懂AI如何思考
  • vue v-for 列表渲染指令zhuyi
  • Portainer 管理容器超方便?搭配 cpolar 让 Nginx 服务随处可及
  • 2025.12.28日周报
  • 模拟信号与单片机接口电路设计通俗解释
  • 本地部署大模型不再卡顿:基于TensorRT的轻量化方案
  • 科研机构如何用TensorRT加速论文复现过程?
  • 编程助手本地化部署:VS Code插件+TensorRT模型实战
  • STM32最小系统开发前奏:Keil4安装系统学习
  • 无需修改代码:如何用TensorRT插件式接入现有AI系统?
  • 动态输入长度优化:针对大模型Token变化的TensorRT策略
  • 设备树GPIO配置在驱动中的使用:入门必看
  • 大模型Token计费系统搭建:结合TensorRT实现精准计量
  • esp32引脚使用图解:核心要点快速理解