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. python基本数据类型之字符串(一)

    python中字符串中有很多方法,具体方法如下图所示: 分割方法 字符串的分割方法: 1.join方法: join方法是字符串方法中最重要的方法之一,它的作用是将某一字符插入到字符串中用作连接. 具体 ...

  2. oracle 数据库io 异常,错误代码17002 解决办法

    数据库使用一个月了,突然挂掉:错误代码17002 io异常:read timeout 解决: 1.登陆sql命令窗口 [oracle@hostname ~]$ sqlplus /nolog SQL*P ...

  3. PHP与Python哪个做网站产品好?

    虽然python现在比较火,但在传统的LAMP组合里Linux+apache/tomcat+MySql+PHP里是PHP做网站的脚本语言,但现在已经变了:https://baike.baidu.com ...

  4. DeepFace和GAN

    由于换脸技术的影响,现在造假视频的成本越来越低.AI换脸视频也越来越热门,甚至有一些已经达到了以假乱真的程度.虽然有明星反对表示无奈,可是.... 据报道,2018年,arXiv上发布了902篇GAN ...

  5. 20169207《Linux内核原理及分析》第十二周作业

    本周选做的信息安全实验为Python实现Zip文件的暴力破解 实验预备: 这次实验我们需要用到的库为zipfile.下来我们先来了解一下这个模块. 首先我们的重点是对zip文件的操作,而zipfile ...

  6. Linux 禁ping和开启ping操作

    方法一:     # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 如果要恢复,只要: # echo 0 > /proc/sys/net ...

  7. 计算日期差(Python实现)

    class Solution: def Days(self,year,month,day): if (year%4==0 and year%100!=0) or year%400==0: monthl ...

  8. ssh连接超慢解决

    手头有台Linux服务器ssh登录时超级慢,需要几十秒.其它服务器均没有这个问题.平时登录操作都默默忍了.今天终于忍不住想搞清楚到底什么原因.搜索了一下发现了很多关于ssh登录慢的资料,于是自己也学着 ...

  9. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  10. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...