yyhyyj

导航

 

1. 前言
本门Java面向对象编程课程是我在计算机科学学习道路上的重要里程碑。通过一学期的系统学习,我全面掌握了Java语言特性与面向对象编程思想。课程采用多元化的教学方式,包括PTA编程作业、实验课实践、线上视频学习以及线下课堂讲解,形成了理论与实践相结合的完整学习闭环。

1.1 课程工作量分析
PTA作业共完成了12次题目集,平均每周1次,题目数量从最初的3-5题逐渐增加到后期的综合性大作业。特别值得一提的是"航空货运管理系统"这类综合性项目,需要投入10-15小时完成。

实验课程工作量不算太多,每次实验平均耗时3-4小时,内容涵盖从基础语法到GUI开发的完整知识体系。最耗时的实验是JavaFX图形界面开发,花费了近6小时完成。

线上学习方面,课程简洁明了,我完成了全部视频学习。

1.2 难度评估
课程难度呈现阶梯式上升趋势:

前4周:基础语法和简单面向对象概念(难度★★☆)

5-8周:继承、多态、接口等高级特性(难度★★★)

9-12周:集合框架、异常处理和IO流(难度★★★★)

13-16周:JavaFX图形界面开发(难度★★★★★)

最具挑战性的是JavaFX部分,需要同时理解事件驱动模型、FXML布局和MVC架构,综合性很强。

2. 面向对象技术总结
2.1 封装(Encapsulation)
学习成果:

掌握了通过private修饰符隐藏实现细节

熟练使用getter/setter方法控制属性访问

理解了封装对代码维护性的重要性

典型案例:
public class BankAccount {
private double balance;

public void deposit(double amount) {
    if(amount > 0) {
        balance += amount;
    }
}

public double getBalance() {
    return balance;
}

}
认知提升:封装不仅是数据隐藏,更是契约设计。良好的封装可以降低模块间的耦合度,我在PTA作业中通过合理封装使类的修改影响范围最小化。

欠缺之处:对包级私有(package-private)访问控制的使用场景理解不够深入。

2.2 继承(Inheritance)
学习成果:

能够正确使用extends关键字建立继承关系

理解方法重写(Override)与super关键字

掌握了继承的"is-a"关系判断原则

实验案例:
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}

class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
认知误区:初期曾滥用继承,试图用继承解决所有代码复用问题。通过"航空货运管理系统"的设计,我理解了组合优于继承的原则。

待提高:对继承层次过深导致的脆弱基类问题的解决方案掌握不够。

2.3 多态(Polymorphism)
学习成果:

理解编译时多态(重载)与运行时多态(重写)的区别

掌握通过接口实现多态的技术

能在实际项目中应用策略模式等基于多态的设计模式

认知提升:多态是面向对象最强大的特性之一,它使得程序扩展性大幅提升。在货运系统题目中,通过多态支持了不同货物类型的运费计算。

问题发现:对动态绑定机制在JVM中的实现原理理解不够深入。

2.4 抽象类与接口
学习成果:

能正确选择使用抽象类或接口

理解接口的默认方法和静态方法

掌握函数式接口与Lambda表达式的结合使用

实验代码:
abstract class Shape {
abstract double area();
}

interface Drawable {
default void draw() {
System.out.println("Drawing...");
}
}

class Circle extends Shape implements Drawable {
double area() { /* 实现 */ }
}
掌握不足:对接口演化(从Java 8到Java 17的接口特性变化)理解不够系统。

2.5 集合框架
学习成果:

掌握ArrayList、LinkedList、HashSet、HashMap等常用集合

理解迭代器模式和增强for循环

能正确选择集合类型解决实际问题

应用实例:
Map<String, List> customerOrders = new HashMap<>();

// 使用Java 8 Stream API处理集合
double total = orders.stream()
.filter(o -> o.getAmount() > 100)
.mapToDouble(Order::getAmount)
.sum();
存在问题:对并发集合(如ConcurrentHashMap)的使用经验不足。

2.6 异常处理
学习成果:

理解checked exception与unchecked exception的区别

掌握try-catch-finally的正确使用

能自定义异常类表达业务异常

最佳实践:
try {
loadConfig("config.properties");
} catch (FileNotFoundException e) {
logger.error("配置文件缺失", e);
throw new BusinessException("系统配置错误", e);
} finally {
releaseResources();
}
认知误区:初期常常捕获异常后不做任何处理,通过代码审查意识到这会掩盖问题。

待改进:对异常处理性能开销的理解不够深入。

2.7 JavaFX
学习成果:

掌握FXML与Controller的绑定

理解事件驱动编程模型

能实现简单的MVC架构应用

实验案例:
// Controller类
public class LoginController {
@FXML
private TextField usernameField;

@FXML
protected void handleSubmit(ActionEvent event) {
    String user = usernameField.getText();
    // 处理逻辑
}

}
学习难点:线程安全问题(Platform.runLater的使用)和数据绑定机制花费了较多时间理解。

掌握不足:对CSS样式定制和动画效果的实现还不够熟练。

3. 采坑心得
3.1 设计模式应用误区
问题描述:在"航空货运管理系统"初期版本中,我试图为每个货物类型创建子类(普通货物、危险货物等),导致类爆炸。

错误代码:
class NormalCargo extends Cargo {}
class DangerousCargo extends Cargo {}
class ExpeditedCargo extends Cargo {}
// ...更多子类
解决方案:改用策略模式,将运费计算算法抽象为接口。

改进后:
interface RateStrategy {
double calculate(double weight);
}

class Cargo {
private RateStrategy strategy;
// ...
}
3.2 集合使用不当
问题场景:在题目中,使用ArrayList频繁删除中间元素导致性能问题。

错误代码:
List list = new ArrayList<>();
// ...多次调用
list.remove(index); // O(n)操作
经验教训:理解不同集合的实现原理,根据操作特征选择合适集合。

3.3 异常处理不当
问题案例:在文件处理实验中,吞掉异常导致问题难以排查。

错误示范:

java
try {
loadFile();
} catch (IOException e) {
// 空catch块!
}
改进方案:

至少记录日志

使用有意义的自定义异常

考虑异常转译

改进后:
try {
loadFile();
} catch (IOException e) {
logger.error("文件加载失败: " + filePath, e);
throw new DataLoadException("无法加载数据文件", e);
}
4. 改进建议与课程总结
4.1 课程改进建议
教学方面:

增加代码审查环节,让学生互相评审代码

提供更多真实项目案例,如小型电商系统

加强调试技巧的专项训练

引入单元测试的早期教学

增加设计模式的专题讨论

学习建议:

建立个人代码库收集优秀实现

定期进行重构练习

参与开源项目积累实战经验

使用SonarQube等工具进行代码质量分析

养成编写技术博客的习惯

4.2 个人学习总结
通过本门课程的学习,我在以下几个方面获得了显著提升:

技术能力方面:
掌握了Java面向对象的核心特性,能够设计合理的类层次结构,理解了设计原则在实际项目中的应用场景,具备了使用JavaFX开发简单图形界面的能力,学会了集合框架的高效使用和异常处理的最佳实践。

工程思维方面:

认识到代码可读性的重要性,养成了良好的命名习惯,理解了模块化设计的价值,学会控制类的职责范围,建立了防御性编程的思维,对输入校验和异常处理更加重视,体会到测试驱动开发的优势,开始尝试先写测试再写实现。

仍需加强的领域:

并发编程:线程安全、锁机制等

JVM原理:内存模型、垃圾回收机制

设计模式:更多模式的深入理解和应用

性能优化:算法复杂度分析和调优技巧

4.3 未来学习规划
基于课程学习中的不足,我制定了以下学习计划:

深入Java核心技术:

阅读《Effective Java》和《Java并发编程实战》,研究JDK源码,理解核心类的实现。

扩展技术栈:

学习Spring框架的企业级应用开发,探索Java函数式编程特性,研究Java模块化系统(JPMS)。

工程实践:

参与GitHub上的开源Java项目,使用Jenkins搭建持续集成环境,学习使用JProfiler进行性能分析。

理论提升:

研究面向对象设计原则的数学基础,学习软件架构设计模式,了解领域驱动设计(DDD)思想。

这门Java面向对象编程课程为我打下了坚实的编程基础,使我对软件开发的认知从"能运行"提升到了"好设计"的层次。我将继续保持学习热情,在实践中不断提升自己的面向对象设计和实现能力。

posted on 2025-06-22 22:59  君行一叶舟  阅读(18)  评论(0)    收藏  举报