一. 前言

本篇文章总结分析Java面向对象程序课程:

(1)线上课程与理论学习:

内容:通过视频课程学习Java面向对象核心概念封装继承多态)及核心内容(抽象类接口、泛型、集合、正则表达式等)。

★★☆☆☆工作量:每周需投入3-4小时,包括观看视频(约2小时)、完成随堂测验(选择题、简答题)。

(2)线下课程与实验实践:

内容:以案例驱动(主要以大象装进冰箱实例)的方式开展实验,以及迭代实验,如异常处理代码调试、类与对象的设计多态性实现用户界面设计等。

★★★★☆工作量:每周8-10小时,需完成实验报告(代码提交+实验分析);还需要手敲代码到实验提交系统里面(这个真的敲得巨巨巨难受,很吃操作的,约4小时),但是手敲代码对报错的印象是无比深刻的,大部分报错是单词敲错(实验提交系统没有编译报错);在我写实验五的用户界面设计时,发现报错是因为编译器版本不同,比如var和node的使用,实验提交系统里只支持node的使用,这个让我印象比较深刻。

(3)周期性作业与项目:

① PTA作业:

频率与内容:每周1次,涵盖基础语法(如集合ArrayList、LinkedList操作)、面向对象特性(如抽象类、接口实现)及算法设计(如电梯单部调度设计)。

★★★★☆工作量:单次作业耗时4-6小时,需通过调试与优化代码以满足测试用例要求。

② Blog作业:

要求:共撰写两篇技术博客(和这一次的总结性博客),内容需包含对阶段PTA作业的总结、代码示例及个人反思(如航空货运管理系统中的继承与多态的设计)。

★★★☆☆工作量:每篇约3000字,需投入6-8小时进行资料整理与写作。

(4)航空货运管理系统GUI设计:

目标:开发一个完整的航空货运管理用户界面设计系统,需整合多文件存储用户下订单处理支付处理物流动画设计等知识点。

★★★★★★ 工作量:总耗时约30-40小时,涵盖需求分析、模块设计代码实现程序运行与测试优化等。


二. 面向对象技术总结

① 封装:

学什么: 通过实验理解封装的本质是将数据与操作绑定,通过访问修饰符(private/protected/public)控制访问权限,并利用getter/setter方法实现数据校验

应用案例: 在实验中设计Elephant类时,将name、weight等属性设为private,并通过setName(int name)方法限制名字非负,避免非法数据输入

掌握程度: 熟练掌握封装的语法与设计原则,但对封装在大型系统中的模块化作业理解较浅

② 继承与多态:

学什么: 继承通过extends实现代码复用多态通过父类引用指向子类对象(动态绑定)实现接口统一。

应用案例:PTA航空货运管理系统作业中设计Customer父类IndividualCustomer、CorporateCustomer子类,通过discountRate()方法重写实现多态

掌握程度: 能完成继承链设计与多态调用,但对多重继承(接口实现)与泛型继承(如List的底层机制)理解不足。

③ 抽象类与接口:

学什么: 抽象类(abstract class)用于定义部分实现的方法,接口(interface)定义纯抽象行为。例如,在实验中定义抽象类Animal包含计算动物总重量的抽象方法getAllWeight()子类Elephant继承后重写实现具体逻辑

应用案例: 实验作业中通过接口Comparable实现对象排序,自定义类实现compareTo()方法

掌握程度: 能区分抽象类与接口的使用场景

④ 集合框架:

学什么: 掌握List、Set、Map接口及其实现类(如ArrayList、HashSet、HashMap)的特性与适用场景。

应用案例: PTA作业中用HashMap统计Java关键词频率,利用HashSet去重。

掌握程度: 能熟练使用常用集合类LIst,但对Set和Map不太熟悉。

⑤ 异常处理:

学什么: 通过try-catch-finally捕获异常,自定义异常类继承Exception或RuntimeException。例如,在文件读写实验中捕获IOException,并设计InvalidInputException处理非法输入

应用案例: 翻转课堂用户界面设计作业中利用 try-catch代码块处理异常情况。

点击查看代码
// 设置下拉框选择事件处理
        comboBoxCity.setOnAction(e -> {
            String selected = comboBoxCity.getValue();// 显示默认选中项
            System.out.println("用户选择了:" + selected);
            // 创建窗口并显示
            try {
            	District(selected, arg0);
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
        });

⑥ JavaFX:

学什么: 使用JavaFX构建GUI应用,掌握Scene、Stage、Button等组件及事件处理。例如,在实验中设计登录界面,通过setOnAction响应按钮点击事件

应用案例: 航空货运管理GUI设计中用TableView展示数据文件表格

掌握程度: 能完成基础界面开发,但对动画效果(Timeline)模式等高级特性未深入探索


三. 采坑心得

注: 阶段性PTA作业的采坑心得可前往我前两次分享的BLOG作业中查看,本次重点分享我的航空货运管理系统GUI作业(JavaFX)的采坑心得

① 问题: 嵌套布局导致界面错乱

场景: 初期使用多个HBox和VBox嵌套实现复杂表单,但窗口缩放时组件挤压变形,输入框与标签错位

原因: 未合理利用GridPane的行列约束过度依赖绝对定位

解决方案: 改用GridPane划分区域,通过RowConstraints和ColumnConstraints设置固定比例与填充。

经验: 优先选择约束布局(如GridPane)处理复杂界面,减少嵌套层级。
★★★★☆ GridPane真的真的好用,强烈推荐哈

点击查看GridPane布局代码
    	customerGrid.setVgap(10);
        customerGrid.setHgap(15);
        
        nameField = createTextField("客户姓名", "请输入客户姓名");
        phoneField = createTextField("客户联系电话", "请输入联系电话");
        emailField = createTextField("客户编号", "请输入客户的编号");
        addressArea = createTextArea("收货地址", "请输入详细收货地址");
        typeCombo = createComboBox("客户类型", 
                "Individual", "Corporate", "重要客户", "特殊客户");
        typeCombo.setValue("Individual");
        addressArea.setPrefRowCount(1);
        
        customerGrid.add(createLabel("客户姓名:"), 0, 0);
        customerGrid.add(nameField, 1, 0);
        customerGrid.add(createLabel("客户联系电话:"), 2, 0);
        customerGrid.add(phoneField, 3, 0);
        customerGrid.add(createLabel("客户编号:"), 0, 1);
        customerGrid.add(emailField, 1, 1);
        customerGrid.add(createLabel("收货地址:"), 2, 1);
        customerGrid.add(addressArea, 3, 1);
        customerGrid.add(createLabel("客户类型:"), 0, 2);
        customerGrid.add(typeCombo, 1, 2);
        GridPane.setColumnSpan(addressArea, 3);

界面效果:

② 问题: 控件对齐间距不一致

场景: 不同模块的按钮、标签间距差异大,影响视觉一致性。

解决方案: 统一设置padding和spacing属性,例如全局定义Insets和HBox.setSpacing(10)。

使用CSS类(如.button-style)统一控件字体边距

经验: 通过CSS样式表集中管理界面风格,避免默认的编码样式。

③ 问题: 按钮点击无响应

场景: 部分按钮无法触发事件,但代码中已注册setOnAction

原因: 事件处理代码抛出未捕获异常,导致后续逻辑中断控件未正确添加到场景图(Scene)中

解决方案: 在事件处理器中添加try-catch块,捕获NullPointerException等异常。使用System.out.println调试控件是否成功绑定到控制器

经验: 事件处理需防御性编程,确保异常不影响整体界面。


四. 改进建议及总结

实验设计分层化

现状: 实验难度梯度不合理,部分学生因基础薄弱(这里更强调的是数学逻辑算法思维基础)难以完成算法复杂任务,例如电梯单部调度问题,没必要设计这种算法题目,我个人在写完这(3次作业)道题后,没有学到任何有关面向对象程序设计的感觉注: 是感觉)(也可能是我能力太菜了),甚至有点学不下去了,毫无意义个人感觉)。

建议:

强制语法、面向对象思维练习(如重写equals()方法)。

结合设计模式(如使用JavaFX实现图形绘制)(JavaFX建议学习继承抽象类的时候就开始接触,到最后短期内要花费很长很长时间去了解并且深入学习敲UI控件,★★★★★ 这很吃操作的)。