简明 Java 错误处理机制
用个最简单的例子来展示为什么需要错误处理,以及怎么用。
import java.io.FileInputStream;
import java.io.FileNotFoundException; public class ThrowsTest {
public static void main(String[] args) throws FileNotFoundException { try {
throwsTest();
} catch (FileNotFoundException e) {
System.out.println("File is not found!");
throw e;
} catch (NullPointerException e) {
System.out.println(e);
} System.out.println("hi");
} public static void throwsTest() throws FileNotFoundException,NullPointerException {
new FileInputStream("shiyanlou.file"); throw new NullPointerException("have a try!"); }
}
上面的代码中, throwsTest 抛出了两个 exception:一个错误是由它调用的方法 FileInputStream 抛给它的,另一个是它自己抛出的。
在 main 函数中,通过 try-catch 来捕捉这两个 exception 并处理。
基本原则是:
1. 抛出的 exception 肯定会被 catch。
2. catch 到的 exception 可以当场处理掉,则 exception 被终止。
3. catch 到的 exception 也可以再 throw 给上一级调用者处理。
4. 如果一级级往上抛,最终由 JVM 来 catch 的话,就是直接终止程序并打印 stack frame 错误。
我们使用 exception 的核心目的,就是为了避免第 3 中情况发生。
可以想象,如果因为某个文件没有找到,我们的软件就直接崩溃了,这是件很难接受的事情;从使用角度来讲,大不了重新指定路径。
所以,我们要努力做好前 3 件事。
前辈总结的 exception 使用心得:

exception 的继承关系:

发挥问题:是不是可以自己定义 Throwable ?
简明 Java 错误处理机制的更多相关文章
- Java的多线程机制系列:不得不提的volatile及指令重排序(happen-before)
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- Java类型擦除机制
Java泛型是JDK 5引入的一个特性,它允许我们定义类和接口的时候使用参数类型,泛型在集合框架中被广泛使用.类型擦除是泛型中最让人困惑的部分,本篇文章将阐明什么是类型擦除,以及如何使用它. 一个常见 ...
- Java GC回收机制
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- 成为JavaGC专家(1)—深入浅出Java垃圾回收机制
转载自:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC ...
- Java内存回收机制
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...
- PHP异常与错误处理机制
先区别一下php中错误 与 异常的概念吧 PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况.平时遇到的warming.notice ...
- Java的多线程机制系列:(四)不得不提的volatile及指令重排序(happen-before)
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专 ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
随机推荐
- python基础-面向对象编程之多态
面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...
- 国内不fq安装K8S四: 安装过程中遇到的问题和解决方法
目录 4 安装过程中遇到的问题和解决方法 4.1 常见问题 4.2 常用的操作命令 4.3 比较好的博客 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国 ...
- Beyond Compare 4解除日期限制,激活版本
修改注册表 1 在搜索栏中输入 regedit ,打开注册表 2 删除项目:计算机\HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare ...
- CentOS6安装部署配置Nginx
操作系统: CentOS 6.9 脚本语言: shell https://github.com/iscongyang/Practical/blob/master/shell-scripts/insta ...
- 201871010108-高文利《面向对象程序设计(java)》第二周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- 2019牛客国庆day3-G &CF1238E
牛客G: 给定大小为N的数组a[],给定M组关系,让你重排a[],使得sum{M队关系的绝对值之差}最小.首先将a排序,然后依次把a填入数组. 假设i在二进制下有x个1,用dp[i]更新dp[i|(1 ...
- 02-linux-换源-ui方式
换软件源 使用清华的软件源. Ubuntu 的 ui 界面操作^换源 System setting -> Software & update -> Download from -& ...
- 重新学习Spring注解——ICO
02.组件注册-@Configuration&@Bean给容器中注册组件 03.组件注册-@ComponentScan-自动扫描组件&指定扫描规则 04.组件注册-自定义TypeFil ...
- qhclass
http://www.qhclass.com/classroom/62/courses
- (HK1-2)海康相机直接连接电脑不经过路由器设置
解决电脑无法通过网线直连海康摄像机的问题 https://blog.csdn.net/u014552102/article/details/86708371 一.现象: 通过博主的另外一篇博客h ...