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. 学以致用七---Centos7.2+python3.6.2+django2.1.1 --搭建一个网站(补充)

    补充:上一节出现的报错提示 可在settings.py 里,改成 ‘*’  ,这样所有的主机都可以访问了. 打开网页 注意红色框出来的 hello 是和 urls.py里的hello对应 urls.p ...

  2. ActiveMQ -5.9和jms-1.1源码下载

    ActiveMQ-5.9和jms-1.1源码下载:见附件

  3. 常用模块xml,shelve,configparser,hashlib

    XML 什么XML:全称 可扩展标记语言 标记指的是代表某种含义的字符 XML<> 为什么需要XML 为能够在不同的平台间继续数据的交换 为了使交换的数据能让对方看懂 就需要按照一定的语法 ...

  4. mybatis的update操作的几种动态更新

    mybatis是我们开发者常用的dao框架,亿轻巧灵活为特征,在crud操作中,动态更新是常用的操作.我搜集了两种动态更新的sql写法,以备日后备用! 方法1: update loan_product ...

  5. linux-CentOS初学terminal命令(2)vi、gcc、g++、./、mv、cp、ifconfig

    1.vi filename(vi,visual editor,可视化编辑器)用vim文本编辑器打开filename文件. vim文本编辑器有三种模式:命令模式(Command mode),插入模式(I ...

  6. hdu5016

    题意:给定一个n个点的图,这个图是一棵树,然后有些点建立了集市.并且没有集市的地方去集市一定是去最近的,如果距离相同,那么则去标号最小的..现在你还能在建一个集市,问建完这个集市最多有多少个点来这里. ...

  7. ASP.NET MVC Owin 基本理解

    一.OWIN OWIN(Open Web Interface for .Net),定义了一个服务器(IIS)和Web应用程序(MVC,Webform)通信的标准接口,并且通过抽象层使得这两个在微软平台 ...

  8. SpringMVC源码分析(3)DispatcherServlet的请求处理流程

    <springmvc源码分析(2)dispatcherservlet的初始化>初始化DispatcherServlet的多个组件. 本文继续分析DispatcherServlet解析请求的 ...

  9. 将Azure计算机视觉添加到Xamarin应用程序简单体验

    微软Azure提供了大量的AI及机器学习功能,可以通过简单的RestAPI调用. 关于此文中提到的Azure计算机视觉,可查看此链接的详细介绍. 通过微软的服务,只需要几行代码即可使用计算机视觉中的 ...

  10. 最值得拥有的免费Bootstrap后台管理模板

    在PHP开发项目中,后台管理因为面向群体相对比较固定,大部分以实现业务逻辑和功能.使用Bootstrap后台模板可以让后端开发很轻松的就展现给客户一个响应式的后台,节约前端开发的时间.下面PHP程序员 ...