1. 声明异常

    throw: 关键字,用于抛出一个指定的异常对象

    必须写在方法内部必须是Exception或Exception的子类对象

    throws: 用于方法声明上,表示当前方法不处理该异常,提醒调用者处理异常

    方法内部抛出编译器异常
/**
* <h1>方式一: 声明异常</h1>
* throw, throws
* */
public class DeclareException { /**
* <h2>使用 throw 关键字抛出运行时异常</h2>
* */
private static boolean validate01(String name) { if (null == name) {
throw new NullPointerException("name is null...");
} return "qinyi".equals(name);
} /**
* <h2>编译期异常, 必须处理这个异常, 或者是由 throws 继续抛出给上层调用者处理</h2>
* */
private static void validate02(String name) throws EOFException,
FileNotFoundException { if (null == name) {
throw new EOFException("name is null...");
} if (!"qinyi".equals(name)) {
throw new FileNotFoundException("name is not qinyi...");
}
}
}
  1. 捕获异常

    三个关键字:trycatchfinally

    try:该代码块内编写可能产生异常的代码

    catch:用于进行某种异常的捕获并处理

    finaly: 不管代码出现异常与否,都会对该代码块执行
/**
* <h1>方式2: 捕获异常</h1>
* try...catch...finally
* */
@SuppressWarnings("all")
public class CatchException { /**
* <h2>validate01 抛出单个异常</h2>
* */
private static boolean validate01(String name) { if (null == name) {
throw new NullPointerException("name is null...");
} return "qinyi".equals(name);
} /**
* <h2>validate02 抛出多个异常</h2>
* */
private static boolean validate02(String name) { if (null == name) {
throw new NullPointerException("name is null...");
} if ("".equals(name)) {
throw new IllegalArgumentException("name is blank...");
} if (!"qinyi".equals(name)) {
throw new RuntimeException("name is not qinyi...");
} return true;
} /**
* <h2>打开并关闭 Stream</h2>
* */
private static void openAndCloseStream() { Stream<Path> pathStream = null; try {
pathStream = Files.list(Paths.get("/tmp"));
List<Path> paths = pathStream.collect(Collectors.toList());
System.out.println(paths.size());
// ....
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (null != pathStream) {
pathStream.close();
}
}
} public static void main(String[] args) { // 1. 捕获单个异常
try {
validate01(null);
} catch (Throwable th) {
System.out.println(th.getMessage());
th.printStackTrace();
} // 2.1 捕获多个异常 -- 第一种方法, 多一个异常一次捕获多次处理
try {
validate02("");
} catch (NullPointerException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} catch (IllegalArgumentException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} catch (RuntimeException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} // 2.2 捕获多个异常 -- 第二种方式, 一个 try, 一个 catch
try {
validate02("");
} catch (NullPointerException | IllegalArgumentException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} // 2.3 捕获多个异常 -- 第三种方式, 定义一个范围更大的父类异常对象
try {
validate02("");
} catch (RuntimeException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
}

33. Java对异常处理的两种方式的更多相关文章

  1. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  2. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  3. Java实现多线程的两种方式

    实现多线程的两种方式: 方式1: 继承Thread类 A: 自定义MyThread类继承Thread类 B: 在MyThread类中重写run() C: 创建MyThread类的对象 D: 启动线程对 ...

  4. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  5. Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  6. java文件读写的两种方式

    今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOExceptio ...

  7. K:java中序列化的两种方式—Serializable或Externalizable

    在java中,对一个对象进行序列化操作,其有如下两种方式: 第一种: 通过实现java.io.Serializable接口,该接口是一个标志接口,其没有任何抽象方法需要进行重写,实现了Serializ ...

  8. java 实现websocket的两种方式

    简单说明 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  9. java实现同步的两种方式

    同步是多线程中的重要概念.同步的使用可以保证在多线程运行的环境中,程序不会产生设计之外的错误结果.同步的实现方式有两种,同步方法和同步块,这两种方式都要用到synchronized关键字. 给一个方法 ...

  10. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

随机推荐

  1. Windows Python2.7环境 安装paramiko模块(转)

    http://t.zoukankan.com/staffyoung-p-5587450.html 链接,网上大多数都是同一篇文章 Paramiko是用python语言写的一个模块,遵循SSH2协议,支 ...

  2. vscode 中用git命令合并分支

    操作:主分支master的代码合并到当前分支wz 操作之前,两个分支的内容都要拉取最新的代码 命令为 git pull origin master git pull origin wz 或者vs内直接 ...

  3. windows与linux下的路径区别

    windows与linux下的路径区别windows用的是"\",linux用的是"/"这一点要特别清楚,, ps:在PHP windows也可以用/表示路径 ...

  4. mysql错误号码2003 can't connect to mysql server on 'localhost' (0)解决方案

    找到mysql安装目录下的Bin目录,在cmd中进入这个目录,运行net start mysql 却显示服务名无效 所以此时 首先在MYSQL的安装目录bin下,输入mysqld --install ...

  5. 1970:【15NOIP普及组】扫雷游戏

    1970:[15NOIP普及组]扫雷游戏 时间限制: 1000 ms         内存限制: 131072 KB提交数: 5638     通过数: 3495 [题目描述] 扫雷游戏是一款十分经典 ...

  6. 快速居中对齐 flex+margin auto

  7. 微信带参数的小程序码生成并上传到七牛云(java)

    在大家看正式内容之前请耐心的听我把这段话说完:我冒昧的猜一下,你为了解决问题估计已经看了很多文章了,如果这边文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,共同进步,我之前在完成这个功能之前,从 ...

  8. 2.13python基础知识

    编程语言的发展史 1.机器语言:内部用0和1表示 2.汇编语言:简单的字母表示二进制 3.高级语言:人类可以理解的 1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 2. ...

  9. Unity打包xcode修改工程配置代码

    1 using System.IO; 2 using UnityEngine; 3 using UnityEditor; 4 using UnityEditor.iOS.Xcode; 5 using ...

  10. 生成数据库文档 —— Spring Boot + Screw

    1.创建一个SpringBoot项目(本人使用的是IntelliJ IDEA 2020.1 x64) 最佳简单的项目配置如下: 2.添加相关依赖 <!--screw依赖--> <de ...