文档章节

Java 异常处理

hibegin
 hibegin
发布于 2016/08/15 17:36
字数 793
阅读 6
收藏 0

完善的异常处理有利于程序稳定。不要不停的 catch 异常。


什么是异常??

定义: 异常是一个事件,它发生在程序的执行过程中,会破坏程序的正常执行 在一个错误发生会在一个方法时,创建一个Exception对象来处理来保证程序能继续执行下去。当异常发生时,JVM会搜索调用栈上的所有方法,若没有找到合适的异常处理方法,JVM将会终止程序,或者是终止当前线程。

try,catch,finally

  • try语句块来捕获异常,try必须提供一个处理这个异常 catch 或者是 finally
  • catch 编写异常处理代码
  • finally 将总是执行在 try 语句块结束时(不过线程在执行 try,catch 时被中断或者是杀掉,那么finally就可能不执行),固通常用于防止资源泄露。
FileInputStream in = null;
try {
	in = new FileInputStream("/home/xiaochun/1.tmp");
} catch(IOException e){
	// 进行异常处理
	e.printStackTrace();
} finally{
	if(in!=null){
		try {
		in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

throws,throw

  • try-catch 是当前方法处理异常,有时候你无法直接处理异常,你可能无法预料到你的软件包的所有的需求。这样就不要进行异常的捕获,而是让调用该方法的来处理异常,那么你就需要使用 throw new Exception(); 并且在方法签名声明会发生异常(RuntimeException)。

Throwable

Throwable 是Error和Exception父类

Error

当动态链接失败或其他硬故障,JVM将会扔出一个错误,通常程序不会捕获或抛出异常,如 OutOfMemoryError,StackOverflowError

Exception

CheckedException

除开RunTimeException以及其子类,其他Exception都称为CheckedException,而这些异常都是需要强制捕获的。如 IOException,SQLException。

RuntimeException (UncheckedExeption)
  • 因为Java编程语言不是必须要捕获所有异常,这部分异常称为不检查异常(RuntimeException,Error 是他们的父类),比如 NullException,ArrayIndexOutOfBoundsException,NumberFormatException,个人感觉应该尽量避免在自己的代码中扔出 RuntimeExcepion 或者其子类,这样不会到在代码编写过程中忽略这些异常。异常一直抛到能处理的地方。除非是无论做什么都不能让程序继续执行下去。

异常的优点

  • 分离正常业务代码分离错误代码
  • 传递错误的异常调用堆栈,方便程序排错
  • 分组和区分错误类型

再说几点

  • 代码中不用粗暴的使用 e.printStackTrace(); 而是使用将其记录到日志里面
  • 使用 throw new SomeException(e) 而不是 throw new SomeException() 自己定义异常时不要丢掉异常链

参考资料 http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

© 著作权归作者所有

共有 人打赏支持
hibegin

hibegin

粉丝 32
博文 9
码字总数 5952
作品 2
江北
Java学习系列文章:说说Java中的异常

在正常的程序设计中,程序异常处理是非常关键和重要的一部分。试想一个项目中没有一个好的异常处理,这个项目会怎么样? 什么是异常 异常其实是程序上的错误,包括程序逻辑错误和系统错误。比...

java高级架构牛人
06/29
0
0
异常的概念和Java异常体系结构

一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架, 是Java语言健壮性的一个重要体现。 Java把异常当作对象...

杭州_周陶忠
2013/09/10
0
0
Java 复习 —— 异常处理

前言 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误...

learn_more
2015/08/21
0
0
Java中的异常报告和处理机制 && Java中的异常栈轨迹和异常链

参考文献: https://www.cnblogs.com/zhangdaicong/p/6127984.html 为了应对运行期间可能出现的错误,提高程序的的稳健性,Java中定义了强大的异常处理机制。 Java的异常机制在增强程序稳健性...

城固如春
2017/11/07
0
0
用 JNI 进行 Java 编程(4)

高级主题 概述 从 Java 程序内调用本机代码破坏了 Java 程序的可移植性和安全性。尽管已编译的 Java 字节码保持了很好的可移植性,但必须为您打算用来运行该应用程序的每个平台重新编译本机代...

Jerikc
2012/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

@SpringBootApplication 注解

@SpringBootApplication注解是一个组合注解,包含以下注解 @Target(ElementType.TYPE) 注解的作用目标 @Retention(RetentionPolicy.RUNTIME) Reteniton的作用是定义被它所注解的注解保留多久,...

java.刘
33分钟前
0
0
sentinel自定义DataSource实战

序 本文主要研究一下如何自定义sentinel的DataSource,这里以jdbc为例。 maven <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sen......

go4it
49分钟前
1
0
xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。用RandomForest所需要的树的深度和Decisio...

tantexian
50分钟前
0
0
php-fpm的pool - 慢执行日志 - 进程管理 - open_basedir

php-fpm的pool : 为避免多站点使用同一个pool时因一个站点故障导致php资源耗尽,牵连使用同一个pool的其他站点的正常工作,可对每一个站点设置独立pool。 增加pool: 1.编辑php-fpm配置文件...

ZHENG-JY
今天
0
0
Linux之ssh服务默认端口修改

导读 SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全...

问题终结者
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部