difeny

 

第三次blog作业

Java 面向对象课程学习总结

前言

在这门 Java 面向对象课程的学习之旅中,各类学习任务如同拼图般相互配合,共同构建起完整的知识版图。

博客作业是知识沉淀的沃土,每次梳理知识点、撰写博客的过程,都像是在搭建自己的编程知识库,不仅加深了对知识的理解,还锻炼了技术表达能力;PTA 作业则是编程实战的练兵场,海量练习题从基础语法到复杂逻辑,全方位锤炼编程技巧;实验环节如同真实项目的缩影,将理论知识应用于实际场景,让我体会到从代码到成果的转化魅力;线上课程打破时间与空间限制,方便随时查漏补缺,线下课程的面对面交流互动,能让复杂晦涩的概念在老师的讲解与同学的讨论中变得清晰易懂。

整体而言,课程的工作量较为饱满,课余时间基本都投入到了学习与练习中。难度梯度设置合理,从入门的基础语法,逐步过渡到封装、继承、多态等面向对象核心特性,再到集合框架、异常处理、JavaFX 等进阶内容,虽然充满挑战,但每一次攻克难题都带来满满的成就感,编程能力也在这个过程中实现了从量变到质变的提升。
面向对象技术总结
封装、继承、多态
封装实践:学生类设计
java
class Student {
private String name; // 学生姓名
private int age; // 学生年龄
private int score; // 学生成绩

// 姓名访问方法
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

// 年龄访问方法(含合法性校验)
public int getAge() {
    return age;
}
public void setAge(int age) {
    if (age > 0 && age < 100) {
        this.age = age;
    } else {
        System.out.println("年龄输入不合法,范围应在1-99之间");
    }
}

// 成绩访问方法(含合法性校验)
public int getScore() {
    return score;
}
public void setScore(int score) {
    if (score >= 0 && score <= 100) {
        this.score = score;
    } else {
        System.out.println("成绩输入不合法,范围应在0-100之间");
    }
}

}

核心收获:通过private关键字实现数据隐藏,通过公共方法控制访问,确保数据安全性与代码可维护性。
继承应用:图形类体系
java
// 图形基类
class Shape {
protected String color; // 图形颜色

public Shape(String color) {
    this.color = color;
}

public String getColor() {
    return color;
}

}

// 圆形子类
class Circle extends Shape {
private double radius; // 半径

public Circle(String color, double radius) {
    super(color);            // 调用父类构造方法
    this.radius = radius;
}

public double getArea() {
    return Math.PI * radius * radius;  // 计算圆面积
}

}

// 矩形子类
class Rectangle extends Shape {
private double width; // 宽度
private double height; // 高度

public Rectangle(String color, double width, double height) {
    super(color);
    this.width = width;
    this.height = height;
}

public double getArea() {
    return width * height;  // 计算矩形面积
}

}

核心收获:子类通过extends关键字继承父类属性与方法,如Circle继承Shape的颜色属性,实现代码复用;通过super关键字调用父类构造方法,确保对象初始化逻辑的完整性。
多态实现:图形面积计算
java
class Main {
public static void main(String[] args) {
// 向上转型:子类对象赋值给父类引用
Shape circle = new Circle("红色", 5.0);
Shape rectangle = new Rectangle("蓝色", 4.0, 6.0);

    // 多态调用:根据对象实际类型执行对应方法
    System.out.println("圆形面积:" + circle.getArea());
    System.out.println("矩形面积:" + rectangle.getArea());
}

}

运行结果:

plaintext
圆形面积:78.53981633974483
矩形面积:24.0

核心收获:通过父类引用指向子类对象(向上转型),调用同名方法时会根据对象实际类型执行子类实现(方法重写),体现多态的 "同一接口,不同实现" 特性。
抽象类与接口
抽象类:操作类框架
java
// 抽象操作类(定义计算规则接口)
abstract class AbstractOperator {
public abstract int operate(int a, int b); // 抽象方法,强制子类实现
}

// 加法操作子类
class AddOperator extends AbstractOperator {
@Override
public int operate(int a, int b) {
return a + b;
}
}

// 减法操作子类
class SubtractOperator extends AbstractOperator {
@Override
public int operate(int a, int b) {
return a - b;
}
}

应用场景:当多个子类有共同逻辑框架但具体实现不同时,用抽象类定义骨架,子类填充细节(如模板方法模式)。
接口:排序功能实现
java
// 实现Comparable接口实现对象比较
class Person implements Comparable {
private String name;
private int age;

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

@Override
public int compareTo(Person o) {
    return this.age - o.age;  // 按年龄升序排列
}

@Override
public String toString() {
    return "Person{name='" + name + "', age=" + age + "}";
}

}

// 接口默认方法示例
interface MyInterface {
default void defaultMethod() {
System.out.println("这是接口的默认方法,可在实现类中直接使用");
}

static void staticMethod() {
    System.out.println("这是接口的静态方法,可通过接口名直接调用");
}

}

核心区别:

抽象类:包含抽象方法和具体方法,子类只能单继承
接口:全是抽象方法(JDK8 + 支持默认方法 / 静态方法),类可实现多个接口
集合框架、异常处理与 JavaFX
集合框架:ArrayList 与 HashMap
java
import java.util.ArrayList;
import java.util.HashMap;

public class CollectionExample {
public static void main(String[] args) {
// ArrayList:有序可重复集合
ArrayList fruitList = new ArrayList<>();
fruitList.add("Apple");
fruitList.add("Banana");
fruitList.add("Orange");
System.out.println("水果列表:" + fruitList); // 输出:[Apple, Banana, Orange]

    // HashMap:键值对映射
    HashMap<String, Integer> scoreMap = new HashMap<>();
    scoreMap.put("张三", 90);
    scoreMap.put("李四", 85);
    scoreMap.put("王五", 95);
    System.out.println("成绩映射:" + scoreMap);  // 输出:{张三=90, 李四=85, 王五=95}

    // 集合嵌套:ArrayList存储HashMap
    ArrayList<HashMap<String, Object>> studentList = new ArrayList<>();
    // ... 此处可添加学生信息映射
}

}

注意事项:集合嵌套使用时需注意类型安全,建议使用泛型(如ArrayList<HashMap<String, String>>)。
异常处理:文件读写
java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
public static void main(String[] args) {
// try-with-resources自动关闭资源
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 逐行读取文件内容
}
} catch (IOException e) {
System.err.println("文件读取失败:" + e.getMessage()); // 处理读取异常
}
}
}

最佳实践:

使用try-with-resources处理可关闭资源,避免内存泄漏
区分异常类型(如IOException、NullPointerException),针对性处理
JavaFX:简单界面开发
java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class JavaFXExample extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button("点击我");
btn.setOnAction(e -> System.out.println("按钮被点击了")); // 事件监听

    StackPane root = new StackPane(btn);
    Scene scene = new Scene(root, 300, 200);

    primaryStage.setTitle("JavaFX示例");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);  // 启动JavaFX应用
}

}

学习难点:复杂界面需掌握布局管理器(如BorderPane、GridPane)和 FXML 标记语言,目前仅能实现基础交互逻辑。

采坑心得

类设计混乱: 初期写电梯管理系统时,将电梯属性、上下楼逻辑、走向混杂在一个类中,导致代码耦合度极高。
解决方案:遵循单一职责原则,将系统拆分为多个类。
边界条件遗漏: PTA 作业中计算斐波那契数列时未处理负数输入,导致程序抛出StackOverflowError。
改进措施:编写代码前先罗列输入范围(如n >= 0),添加前置条件校验:
java
if (n < 0) throw new IllegalArgumentException("n不能为负数");

改进建议与总结

对课程的建议
案例驱动教学:讲解抽象概念(如设计模式)时,增加企业级项目案例(如电商系统架构),帮助理解技术应用场景。
实验分层设计:基础实验巩固知识点,进阶实验提供开放性需求(如 "设计一个可扩展的游戏角色系统"),激发创新思维。
博客反馈优化:针对博客中的技术误区,提供批注式反馈(如在代码段旁标注 "此处可使用单例模式优化")。
个人学习总结
这门课程不仅教会了 Java 面向对象的核心技术,更培养了 "分析问题→设计方案→编码实现→测试优化" 的完整开发思维。从最初对着 UML 图不知所措,到能独立设计小型系统架构,每一次作业和实验都是成长的阶梯。

posted on 2025-06-22 22:39  difeny  阅读(8)  评论(0)    收藏  举报

导航