1、try catch finally 异常捕获

public class ExceptionTest {
public static void main(String[] args) {
int a = 1;
int b = 0;
int c = 2;
try {
c = a / b;
System.out.println("异常发生后");
} catch (Exception e) {
System.out.println("捕获异常...");
} finally {
System.out.println("finally ....");
} System.out.println("异常结束:" + c); }
}
/*
output:
捕获异常...
finally ....
异常结束:2
*/

结论:发生异常后,finally中的代码是肯定会运行的,异常捕获之后的代码也会运行。

2、catch代码块中有return关键字,程序怎么处理

public class ExceptionTest2 {
public static void main(String[] args) {
int a = 1;
int b = 0;
int c = 2;
try {
c = a / b;
System.out.println("异常发生后");
} catch (Exception e) {
System.out.println("捕获异常...");
return; //注意这个关键字
} finally {
System.out.println("finally ....");
} System.out.println("异常结束:" + c); }
}
/*
output:
捕获异常...
finally ....
*/

结论:在catch中有 return 关键字,finally中的代码也一定会执行,但是异常捕获之后的代码不会再运行了。

3、throw new Exception的使用

public class ThrowExceptionTest {
public static void main(String[] args) {
ThrowExceptionTest te = new ThrowExceptionTest();
try {
te.calculate(0);
} catch (Exception e) {
System.out.println("计算异常---->:" + e.getMessage());
e.printStackTrace();
}
} public void calculate(int a) {
try {
int b = 2/a; //这里会有异常
} catch (Exception e) {
System.out.println("进入catch");
throw new BizException("计算错误");
} finally {
System.out.println("进入finally");
}
}
}
/*
out.pring:
进入catch
进入finally
计算异常---->:计算错误
*/

结论:在catch中抛出的异常会在调用它的上层方法中捕获到

public class ThrowExceptionTest2 {
public static void main(String[] args) {
ThrowExceptionTest2 te = new ThrowExceptionTest2();
try {
te.getFileUrl(null);
} catch (Exception e) {
System.out.println("获取文件异常---->:" + e.getMessage());
e.printStackTrace();
}
} public String getFileUrl(String fileName) {
if(StringUtils.isBlank(fileName)) {
throw new BizException("文件名为空");
}
return fileName;
} }
/*
out.pring:
获取文件异常---->:文件名为空
*/

结论:普通语句中抛出的异常,会在调用它的上层方法中捕获到。

4、方法throws 异常(RuntimeException,Exception),调用它的上层方法是怎么处理的

public class ThrowRuntimeExceptionTest1 {
public void f() throws RuntimeException{
System.out.println("我抛出了RuntimeException");
} public void g() throws Exception{
System.out.println("我抛出了Exception");
} public static void main(String[] args) {
ThrowRuntimeExceptionTest1 test = new ThrowRuntimeExceptionTest1();
test.f(); //这里不用捕获异常
try {
test.g(); //这里必须try catch,否则会编译出错
} catch (Exception e) {
e.printStackTrace();
}
}
}

结论:方法 throws Exception,在调用它的上层方法必须要try catch,否则编译会出错。方法 throws RuntimeException,在调用它的上层方法不用强制try catch 不会有编译出错。

5、JDK7异常处理的新语法

public class Jdk7Exception {
public static void main(String[] args) {
try {
System.out.println("代码片段.....");
} catch (IllegalArgumentException | ArithmeticException e) { //一个catch块中可以捕获多个异常
e.printStackTrace();
}
}
}

参考:

  https://gitee.com/play-happy/base-project

JavaSE-异常的更多相关文章

  1. JavaSE 异常抛光解析

    异常 异常指的是程序中的不正常现象,一般异常都是由第三方数据的使用造成的.java中每种异常现象都会有一个对应的异常类.java对异常的处理方式就是终止程序.异常机制其实是为了帮助我们找到程序中的问题 ...

  2. [javaSE] 异常捕获

    异常:程序在运行时出现的不正常现象 Throwable |——Error |——Exception 严重级别:Error类和Exception类 异常的处理:try{}catch{}finally{} ...

  3. java新手笔记23 异常

    1.import package com.yfs.javase; import java.util.Scanner; //import java.lang.String;//默认导入 public c ...

  4. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  6. JavaSE学习笔记(6)---异常

    JavaSE学习笔记(6)---异常 ​ 软件程序在运行过程中,非常可能遇到问题,我们称之为异常,英文是:Exception,意思是例外.遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的处理 ...

  7. [007] - JavaSE面试题(七):异常

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [007] - JavaSE面试题(七):异常 第1问:Error和Exception的区别? E ...

  8. javase基础笔记4——异常/单例和类集框架

    继承 extends final关键 多态 是在继承的基础上 接口 interface 异常 exception 包的访问可控制权限 private default protect public 异常 ...

  9. JavaSE复习_7 异常

    △子父类涉及的异常问题:      1.子类在覆盖方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类,且只能抛出异常的子集      2.如果父类抛出了多个异常,子类只 ...

  10. 《Java从入门到放弃》JavaSE入门篇:异常

    异常!!!看看生活中的异常例子: 正常情况下,从家到公司上班,只需要20分钟!但如果在路上碰到堵车或修路或车突然自燃等问题,那就没办法正常去上班了.其中堵车或修路或车突然自燃等问题就属于异常. 碰到异 ...

随机推荐

  1. VIP之FrameBuffer

     2.VIP Frame Buffer 1.原来我是一直存在一个疑惑,demo上说VIP Frame Buffer输出是固定的60fps,但是在NiosII的程序中我没有找到设置输出为60fps的设置 ...

  2. revoke回收权限的小问题

    revoke回收权限的时候,原理是从user/db/tables_priv/columns_priv四个表上delete数据: on *.*的权限在user表上 on xx.*的权限在db表上 on ...

  3. 视图,sql注入问题,事物,存储过程

    视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...

  4. C#-VS配置开发环境-摘

    配置开发环境   包含的开发环境 LightSwith LightSwitch 微软出品 web界面开发部署非常方便

  5. hdu 4915 括号匹配+巧模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4915 给定一个序列,由()?组成,其中?可以表示(或者),问说有一种.多种或者不存在匹配. 从左向右,优先填满n ...

  6. spring security文档地址

    https://docs.spring.io/spring-security/site/docs/4.1.0.RELEASE/reference/htmlsingle/

  7. Python自动化开发 - 网络编程

    本节内容 1.客户端/服务器架构 2.OSI七层 3.socket层 4.socket是什么 5.套接字发展史及分类 6.套接字工作流程 一.客户端/服务器架构 即Client/Server架构,包括 ...

  8. ORACLE中的FTP例子代码

    http://blog.csdn.net/mashengwang/article/details/5982663 CREATE OR REPLACE DIRECTORY my_docs AS '/u0 ...

  9. 在Delphi中处理word文档与数据库的互联

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  10. spring项目读取配置的demo

    背景 读取配置是基础能力,研发这个模式不错,可以从不同配置中读取数据,如下图: 可以根据不同分类的文件来管理配置,然后统一在conf中配置哪些文件 package com.jwen.platform. ...