java学习第二十课
暑期自学来到第二十课,这节课学的是异常处理,之前写代码大多只关注逻辑能不能跑通,第一次系统接触 Java 的异常体系。有 C/C++ 的基础,能看懂程序出错崩溃是什么情况,但 Java 把错误分成异常和错误两套体系,这点和 C++ 还是有区别。
简单了解了什么是异常,程序运行的时候出现不符合预期的情况,就会抛出异常,不做处理程序就会直接终止。主要学习 try‑catch 捕获异常,还有 throw、throws,以及 finally 代码块。把可能出错的代码放到 try 里面,如果出现异常,就会进入对应的 catch 块执行处理逻辑,finally 里面的代码不管是否发生异常基本都会执行,很适合用来做资源关闭这类操作。
写练习的时候遇到不少坑。一开始分不清 throw 和 throws,一个是手动抛出异常对象,写在方法体内;一个是声明这个方法可能抛出异常,写在方法签名后面,写代码的时候经常写混位置。还有捕获异常的顺序,多个 catch 的时候,子类异常要写在父类异常前面,顺序颠倒编译器就会报错,这点踩了好几次坑。另外 finally 不是什么情况都百分百执行,如果 try 里面直接执行了 System.exit 退出程序,finally 就不会运行,这个细节之前完全没考虑到。
对比 C++,C++ 也有 try‑throw‑catch,但是 Java 把异常分得更细,强制很多异常必须显式处理,要么 catch 捕获,要么 throws 往外抛,不处理编译直接过不了。C++ 不会强制要求处理异常,很多错误直接裸奔运行,运行时才崩掉。
这节课给我的感受就是,写代码不能只追求跑通,还要考虑程序出错之后该怎么应对,不能一报错整个程序直接瘫痪。异常不是用来掩盖代码 bug 的,是用来处理那些预料之外、没办法完全避免的问题。后面打算多写几组测试案例,练习不同异常的捕获,把 throw 和 throws 的用法练熟,为后面学习集合做铺垫。

浙公网安备 33010602011771号