第三次Blog作业——对java课程的总结
前言:
转眼间,这学期紧张而充实的Java学习接近尾声。本门java课正式的告诉我 上大学可以这么累。上大学可以这么可怜。我看到在南昌大学学医的同学课比我少,我认。在江西农业大学学农的同学一周一节课,我认。同学对我说 你怎么26号就放假了呀!他们不知道我是7月26号才放假。回顾这段时间,课程的压力、知识的深度,确实常常让人感到喘不过气。但此刻静下心来整理笔记,心中更多的是一种历经挑战后的平静,以及一丝坚持下来的欣慰。这学期的Java课程,内容之多、节奏之快,远超我的预期。学的我要死不活 好歹是坚持下来了 接下来是我的个人的心得与体会。
面向对象技术总结:
这学期的Java学习之旅,终于跨越了面向对象编程(OOP)最核心的几个基石:封装、继承、多态、抽象类、接口,并初步接触了图形界面开发JavaFX以及程序健壮性的守护者异常处理。
1. 面向对象的基石:封装、继承、多态
-
封装 (Encapsulation): 这是我理解面向对象的第一把钥匙。它的核心思想是把数据(属性)和操作数据的方法(行为)捆绑在一个单元(类)中,并对外隐藏对象内部实现的细节。通过使用
private修饰属性,并提供公共的getter和setter方法进行访问和修改,实现了:-
数据保护: 防止外部代码随意修改内部状态,保证了数据的有效性和安全性。
-
代码模块化: 将复杂的实现细节隐藏起来,使用者只需关注类提供的公共接口(方法),降低了使用复杂度。
-
易于维护: 内部实现的修改只要不改变公共接口,就不会影响使用该类的其他代码。这在实际编程中非常重要,也是我在设计类时首要考虑的原则。
-
-
继承 (Inheritance): 它允许我们基于一个已有的类(父类/超类)来创建新的类(子类/派生类)。子类继承了父类的属性和方法(非
private的),并可以:-
复用代码: 避免重复编写父类已有的代码,提高了开发效率。
-
扩展功能: 在子类中添加新的属性和方法,或者覆盖 (Override) 父类的方法以满足子类的特定需求(这是实现多态的关键基础)。理解
extends关键字和super关键字(用于调用父类构造方法或成员)是掌握继承的核心。
-
-
多态 (Polymorphism): 这是OOP中非常强大且富有魅力的特性,意为“多种形态”。它允许我们使用父类类型的引用指向子类对象,并在运行时根据实际对象的类型来调用相应的方法。主要体现为:
-
方法重写 (Override): 子类对父类方法进行重新实现。这是运行时多态的基础。
-
向上转型 (Upcasting):
Parent p = new Child();父类引用指向子类对象。 -
动态绑定 (Dynamic Binding): 在程序运行时(而非编译时),JVM根据引用变量
p实际指向的对象类型(Child)来决定调用哪个类(Child)的method()。这使得程序设计更灵活、更易扩展。理解“编译看左边(父类),运行看右边(子类)”这句总结对我掌握方法调用的规则帮助很大。
-
2. 抽象与契约:抽象类与接口
-
抽象类 (Abstract Class):
-
使用
abstract关键字修饰的类。 -
不能直接实例化,只能被继承。
-
可以包含
abstract方法(只有声明,没有实现,要求子类必须实现)和具体方法(有实现的方法)。 -
也可以包含普通属性和方法。
-
作用: 为相关类提供一个通用的模板或部分实现,强制要求子类完成特定抽象方法的实现。它介于普通类和接口之间,适合存在一些共性实现但又需要子类各自实现特定行为的情况。
-
-
接口 (Interface):
-
使用
interface关键字定义。 -
在Java 8之前,只能包含抽象方法 (
public abstract可省略) 和常量 (public static final可省略)。Java 8+ 允许包含default方法和static方法。 -
一个类使用
implements关键字来实现一个或多个接口,必须实现接口中所有的抽象方法(除非该类是抽象类)。 -
作用: 定义了一组行为规范或能力契约。它只关心“做什么”,不关心“怎么做”(由实现类负责)。接口的核心价值在于:
-
完全抽象: 比抽象类更纯粹地定义行为。
-
实现多继承: Java类不支持多继承,但一个类可以实现多个接口,从而获得多种行为。
-
解耦: 定义标准,降低模块间的依赖。例如,排序功能只需要对象
implements Comparable接口并实现compareTo方法即可。
-
-
3. 构建用户界面:初识JavaFX
-
这是Java提供的用于创建桌面图形用户界面(GUI)的现代库(取代了早期的AWT和Swing)。
-
核心概念:
-
Stage (舞台): 应用程序的顶级窗口。
-
Scene (场景): 容纳所有UI组件的容器,设置于Stage上。
-
Node (节点): 所有UI组件(控件如
Button,Label,TextField;布局如VBox,HBox,GridPane;形状等)的基类。节点构成Scene Graph(场景图)。
-
-
布局管理: 使用
Pane的子类(如VBox,HBox,BorderPane,GridPane)来组织和自动调整组件的位置和大小,适应不同窗口尺寸,比手动设置坐标更灵活可靠。 -
事件处理 (Event Handling): GUI的灵魂。为控件(如按钮
Button)添加事件监听器(如setOnAction),在用户交互(如点击)发生时执行相应的代码逻辑。这让我编写的程序真正开始“活”起来,能与用户进行交互。 -
初步体验: 通过动手创建简单的窗口、添加按钮文本框、处理按钮点击事件,感受到了GUI编程的基本流程和乐趣,虽然界面还很简单,但看到自己写的程序有了可视化的界面,很有成就感。
4. 程序的守护者:异常处理
-
什么是异常 (Exception): 程序在运行时发生的非正常情况或错误(如:除以零、数组越界、文件不存在、网络连接中断等)。
-
为什么需要处理: 如果不处理异常,程序会崩溃并打印错误堆栈信息,用户体验极差。异常处理机制使程序能够优雅地应对错误,尝试恢复或至少给出友好的提示信息后安全退出。
-
核心机制 (
try-catch-finally):-
try块: 包含可能抛出异常的代码。 -
catch块: 捕获并处理特定类型的异常(Exception或其子类)。可以有多个catch块处理不同类型的异常。 -
finally块: 无论是否发生异常,最终都会执行的代码块,通常用于释放资源(如关闭文件流、数据库连接)。finally块非常关键,确保了资源的清理。
-
-
异常类型: 区分
RuntimeException(运行时异常/非受检异常,通常由编程错误导致,不强制处理) 和Exception的其他子类 (受检异常,编译器强制要求处理,要么try-catch要么在方法签名上用throws声明抛出)。 -
实践体会: 在文件操作、网络请求等地方主动使用
try-catch块来处理潜在的IOException等异常,并确保在finally中关闭资源,显著提高了程序的健壮性和可靠性。理解try-with-resources(Java 7+) 语法对简化资源关闭非常有帮助。
踩坑心得:
2.读题很重要啊
不认真读题可能会让你在完成任务后发现需要大量返工。这就像在建房子时没看清楚设计图,结果建了一半才发现你造的是一个厕所而不是一个卧室。认真读题可以帮助你避免这种“返工”的烦恼。能够帮助你避免那些让你拍脑袋的“低级错误”。你可能会想,“我直接动手做,再回来读题也不迟。” 但事实上,误读题目可能会让你浪费大量时间。认真读题不仅仅是为了避免错误,更是为了提高效率、增强自信并确保任务顺利完成。就像在航海中,你需要仔细研究航海图,才能确保船只航行在正确的航线上。
3.调试很爽啊F6我按不停的
调试就像是在代码里挖地雷,你永远不知道下一行代码会不会让你中招。通过调试,你可以发现那些隐藏的错误。可以帮助你理解代码的实际执行流程,避免你在脑海里无休止地模拟程序运行。这样可以保存你的脑细胞,让你有更多的精力去解决真正重要的问题。帮助你更好地理解代码的逻辑和潜在问题。每一次调试都是一次提升编程技能的机会,让你在未来的开发中更加得心应手。调试是编程过程中不可或缺的一部分,它不仅有助于发现和解决问题,还能提升你的编程技能和信心。就像医生需要听诊器来诊断病人的心跳一样,程序员需要调试工具来检查代码的状况。
eg:
惨痛经历: 多少次程序编译失败,或者运行时出现诡异错误,最终定位到的原因让人哭笑不得:一个分号 ; 写成了全角 ;,一个英文逗号 , 写成了中文逗号 ,,该用 == 比较的地方用了 = 赋值,if 条件后面少了个括号 {},或者关键单词拼写错误(Applicants 写成 Appilcants)。更隐蔽的是,有时空格的位置不对(比如方法名和括号之间多了一个空格),也可能导致编译器不认或者逻辑错误。这些错误往往藏得很深,在密密麻麻的代码里很难一眼发现,消耗了大量调试时间。
深刻教训: 编码时必须极度关注细节! 养成良好的输入习惯:
-
-
确保输入法在英文状态下编写代码(除了字符串和注释内容)。
-
注意符号的全半角。 所有编程符号(
;,{}()[]===+-等)都必须是半角英文符号。 -
仔细检查拼写。 类名、方法名、变量名、关键字都不能拼错。IDE的提示和错误标记是帮手,但自己也要细心。
-
注意格式规范。 保持一致的缩进(IDE通常能自动格式化
Ctrl+Alt+L),注意空格的使用(虽然Java对某些空格不敏感,但规范使用能提高可读性并避免一些意外错误)。 -
利用IDE的实时检查。 现代IDE(如IntelliJ IDEA, Eclipse)会在你输入时实时标记语法错误和部分拼写错误,养成边写边看的习惯。
-
踩这些坑的过程虽然痛苦,但也正是这些教训让我深刻体会到,编程不仅仅是写出能运行的代码,更要写出清晰、可维护、健壮的代码。 好的习惯(设计先行、注重细节、勤写注释、规范命名)从学习阶段开始培养,受益无穷。
总结:
学习封装、继承、多态、抽象类和接口,让我真正理解了面向对象编程的精髓——用对象模拟现实世界,通过封装隐藏细节,通过继承实现复用和层次化,通过多态实现灵活扩展,通过抽象类和接口定义规范和契约。JavaFX 的初步实践,则让代码从冰冷的命令行走进了有温度的图形界面,理解了事件驱动模型。而异常处理,是编写健壮、可靠程序的必备技能。
虽然这些只是Java庞大知识体系的开篇,学习过程中也时常会遇到概念理解上的卡壳和代码调试的困扰(正如在之前笔记中记录的),但每当通过查阅资料、动手实践、反复思考后弄明白一个点,或者成功运行起一个带有界面、能处理异常的小程序时,那种豁然开朗和点滴积累带来的成就感,是支撑我继续前行的动力。
作为南昌航空大学24201718班的一员,我深知这只是开始,后续还有集合、IO流、多线程、网络编程、数据库连接等更深入的内容等待着探索。但掌握了这些OOP的核心思想和基础技能,让我对未来的学习有了更强的信心。路虽远,行则将至。 我会继续坚持,一步一个脚印地记录和消化每一个知识点。
谢谢助教老师 谢谢老师 别挂我科 我求你们了 真的....

浙公网安备 33010602011771号