1捕获异常

1.1 finally语句保证有无错误都会执行

try{...}catch (){...}finally{...}

  • 使用try...catch捕获异常
  • 可能发生异常的语句放在try{...}中
  • 使用catch捕获对应的Exception及其子类

1.2 捕获多个异常

try{...} catch() {...} catch(){...}finally{..}

使用多个catch子句:

  • 每个catch捕获对应的Exception及其子类
  • 从上到下匹配,匹配到某个catch后不再继续匹配

注意:catch的顺序非常重要,子类必须写在前面:

try{...} catch(IOException e){...} catch(UnsupportedEncodingException e){...}

UnsupportedEncodingException是IOExcetion的子类,这样UnsupportedEncodingException永远都不会被捕获到

import java.io.*;
import java.lang.String; public class Main {
public static void main(String[] args) {
process("abc");
process("0");
}
static void process(String s) {
try{
int n = Integer.parseInt(s);
int m = 100 / n;
}catch(NumberFormatException e){
System.out.println(e);
System.out.println("Bad input");
}catch (ArithmeticException e){
System.out.println(e);
System.out.println("Bad input");
}finally {
System.out.println("end process");
}
}
}

1.3 multi-catch

如果某些异常的处理逻辑相同:

  • 不存在继承关系,必须编写多条catch子句,可以用 " | " 表示多种Exception
import java.lang.String;

public class Main {
public static void main(String[] args) {
process("abc");
process("0");
}
static void process(String s) {
try{
int n = Integer.parseInt(s);
int m = 100 / n;
}catch(NumberFormatException|ArithmeticException e){
System.out.println(e);
System.out.println("Bad input");
}finally {
System.out.println("end process");
}
}
}

2.总结

  • catch子句的匹配顺序非常重要,子类必须放在前面
  • finally子句保证有无异常都会执行
  • finally是可选的
  • catch可以匹配多个非继承关系的异常(JDK >= 1.7)

廖雪峰Java3异常处理-1错误处理-2捕获异常的更多相关文章

  1. 廖雪峰Java3异常处理-1错误处理-1Java的异常

    1.计算机运行中的错误 在计算机程序运行的过程中,错误总会出现,不可避免的 用户输入错误 读写文件错误 网络错误.内存耗尽.无法连接打印机不可 String s = "abc"; ...

  2. 廖雪峰Java3异常处理-1错误处理-3抛出异常

    1.异常的传播 当某个方法抛出异常时: 如果当前方法没有捕获,异常就被抛到上层调用方法 直到遇到某个try...catch被捕获 使用printStackTrace()打印处方法的调用栈 import ...

  3. 廖雪峰Java3异常处理-1错误处理-4自定义异常

    JDK已有的异常: RuntimeException * NullPointerException * IndexOutOfBoundsException * SecurityException * ...

  4. 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging

    Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...

  5. 廖雪峰Java3异常处理-2断言和日志-1使用断言

    1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...

  6. 廖雪峰Java3异常处理-2断言和日志-4使用Log4j

    1.Log4j Log4j是目前最流行的日志框架.有两个版本 1.x:Log4j 2.x:Log4j2 Log4j下载地址https://www.apache.org/dyn/closer.lua/l ...

  7. 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging

    1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...

  8. 廖雪峰Java-3流程控制-7for循环

    for循环 for循环使用计数器实现循环 for循环条件需要设置:计数器初始值:循环前检测条件:每次循环后如何更新计数器 计数器变量通常命名为i int[] ns = {1,4,9,16,25}; f ...

  9. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

随机推荐

  1. ACM-ICPC 2018 徐州赛区网络预赛(9.9)

    #include<bits/stdc++.h> #define int long long using namespace std; ; ; ]; int quick(int a,int ...

  2. Go Example--switch

    package main import ( "fmt" "time" ) func main() { i := 2 fmt.Print("write ...

  3. uname command

    The command uname helps us in development special in scripts, see help of the uname uname --help Usa ...

  4. 深入详解美团点评CAT跨语言服务监控(四)服务端消息分发

    这边首先介绍下大众点评CAT消息分发大概的架构如下: 图4 消息分发架构图 分析管理器的初始化 我们在第一章讲到服务器将接收到的消息交给解码器(MessageDecoder)去做解码最后交给具体的消费 ...

  5. c# AddMonths,你了解吗?

    AddMonths:找到对应月的day,如果没有则取最后一个day var d1 = new DateTime(2017, 6, 30); var d2 = d1.AddMonths(-1);//20 ...

  6. Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A

    Bartender 使用 Excel 数据库时出现 0x800A0E7A 这是因为没有装 数据库驱动的原因. 安装微软的驱动就可以. 注意是安装 32 位的驱动. https://www.micros ...

  7. spring中afterPropertiesSet方法与init-method配置描述

    1. InitializingBean.afterPropertiesSet()Spring中InitializingBean接口类为bean提供了定义初始化方法的方式,它仅仅包含一个方法:after ...

  8. eclipse中如何去掉复制代码有行号的数字

    当我想查找别人资料,想复制别人的代码,但别人的代码中序号行数数字,怎么能快速去除呢,如以下截图所示  首先将你的带有行号的代码拷到一个类中.你会看到一大堆的错误,不用急.   注意将视图切换到java ...

  9. java中四种访问修饰符

    Java中的四种访问修饰符:public.protected.default(无修饰符,默认).private. 四种修饰符可修饰的成分(类.方法.成员变量)   public protected d ...

  10. Hystrix 使用入门

    在很多系统架构中都需要考虑横向扩.单点故障等问题,对于一个庞大的应用集群,部分服务或者机器出现问题不可避免,在出现故障时,如何减少故障的影响.保障集群的高可用,成为一个重要的工作,Hystrix 是一 ...