异常的定义:阻止当前方法或作用域继续执行的情况,即程序无法正常执行下去称之为异常。

异常的基本结构:

所有不正常的类都继承与Throwable类,包括Error类和Exception类

Error一般是JVM抛出的错误,比如StackOverFlowError,OutOfMemoryError,这些错误是无法挽回的,只能结束当前Java进程的执行;

Exception异常是Java应用抛出的,分为编译时期可检测的异常(如IOException)和运行时期的异常(NullPointerException)

编译时期可检测的异常必须要处理,否则编译器会报错误,

运行时期的异常RuntimeException不需要强制处理,Exception异常一般可以通过捕获处理以后,程序可以继续正常执行。

java异常常用的解决语句:

栗子一:

try  catch  finally 语句:

public static void main(String[] args) {
int []arr=new int[5];
try {
arr[5]=0;
System.out.println(5);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("下标越界啦!");
System.out.println("e.getMessage()"+e.getMessage());
System.out.println("e.getCause()"+e.getCause());
System.out.println("e.toString()"+e.toString());
}finally {
           System.out.println("finally执行了");
}
}

运行结果:

下标越界啦!
e.getMessage()5
e.getCause()null
e.toString()java.lang.ArrayIndexOutOfBoundsException: 5
finally执行了

try语句块通常包括可能发生异常的代码,try语句块发生异常时,不再继续执行,try语句不能单独使用

catch用来捕获异常并且发出警告:提示、检查配置、网络连接,记录错误等。

每一个catch块用于处理一个异常。异常匹配是按照catch块的顺序从上往下寻找的,只有第一个匹配的catch会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配,因此,如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。

finally最终执行的代码,用于关闭和释放资源。

异常的常用方法:

e.toString()获取的信息包括异常类型和异常详细消息,

e.getCause()获取产生异常的原因

e.getMessage()只是获取了异常的详细消息字符串。

栗子二:

throw是用于抛出异常。

public static void main(String[] args) {
int[] arr = new int[5];
int i = 5;
if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界");
System.out.println(arr[i]);
}
}

throws用在方法签名中,用于声明该方法可能抛出的异常,方法的调用者来处理异常

   public static void main(String[] args) {
try {
test();
}catch (Exception e){
System.out.println("捕获异常");
}
}
private static void test() throws ArrayIndexOutOfBoundsException{
int[] arr = new int[5];
int i = 5;
if (i > arr.length - 1) throw new ArrayIndexOutOfBoundsException("数组下标越界");
System.out.println(arr[i]);
}

 注意的点:    1、不管有木有出现异常或者try和catch中有返回值return,finally块中代码都会执行;

                     2、finally中最好不要包含return,否则程序会提前退出,返回会覆盖try或catch中保存的返回值。

                     3.  如果方法中try,catch,finally中没有返回语句,则会调用这三个语句块之外的return结果

           4. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序

Java 异常基本结构的更多相关文章

  1. Atitit java的异常exception 结构Throwable类

    Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...

  2. Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换

    Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...

  3. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  4. 2.Java异常学习

    1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...

  5. java异常架构图 和几个面试题

    1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...

  6. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...

  7. 浅析Java异常

    1.什么是异常 结构不佳的代码不能运行,这是Java的基本理念. 发现错误的理想时机是在编译期.然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决.这就需要错误能通过某种方式,把适当的 ...

  8. Java异常的深入研究与分析

    前言 本文是异常内容的集大成者,力求全面,深入的异常知识研究与分析.本文由金丝燕网独家撰写,参考众多网上资源,经过内容辨别取舍,文字格式校验等步骤编辑而成,以飨读者.对于本文的内容,建议小白需要多多思 ...

  9. 全面理解Java异常的运行机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

随机推荐

  1. 如何删除github里的项目

    1.登录github网站后,就会看到如下画面,在头像下面有个你的项目资源这一栏,假如我要删除名为“hhh”的项目,现在鼠标点进这个项目里面 2.进去后点setting 点进去后,默认是选择了OPtio ...

  2. 47-Ubuntu-系统信息-2-df和du查看磁盘和目录空间占用

    序号 命令 作用 01 df -h disk free 显示磁盘剩余空间;-h以人性化的方式显示文件大小 02 du -h [目录名] disk usage 显示目录下的文件大小 注:显示磁盘信息的时 ...

  3. 百度网盘不限速下载PanDownload网页版+IDM

    1.安装配置IDM 下载链接:链接:https://pan.baidu.com/s/13P4ae-IPgi5Y13CGEZgmlg 提取码:do44 安装后在浏览器(推荐chrome或Firefox) ...

  4. BOM的构成

    1.DOM 和 BOM 的区别 DOM:文档对象模型,把[文档]当做一个[对象]来看待,DOM的顶级对象是document 主要学习的是操作页面元素,DOM 是 W3C 的标准规范 BOM:浏览器对象 ...

  5. canvas-nest.js 设置网页背景

    只需要在HTML,body中加如这行代码就可以实现效果,可以在color中修改颜色 <!DOCTYPE html> <html> <head> <meta c ...

  6. scip 练习2.18

    (define (append a b ) (if (null? a )b (cons (car a) (append (cdr a) b)))) (define (reverse l) (appen ...

  7. java两个栈实现一个队列&&两个队列实现一个栈

    栈:先进后出  队列:先进先出 两个栈实现一个队列: 思路:先将数据存到第一个栈里,再将第一个栈里的元素全部出栈到第二个栈,第二个栈出栈,即可达到先进先出 源码: class Queue<E&g ...

  8. 【JZOJ3292】【BZOJ4415】【luoguP3988】发牌

    description 在一些扑克游戏里,如德州扑克,发牌是有讲究的.一般称呼专业的发牌手为荷官.荷官在发牌前,先要销牌(burn card).所谓销牌,就是把当前在牌库顶的那一张牌移动到牌库底,它用 ...

  9. 通过jquery获取页面信息

    获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document ...

  10. clipboard.js实现页面内容复制到剪贴板

    clipboard.js实现复制内容到剪切板,它不依靠flash以及其他框架,应用起来比较简单 <input type="text" name="copy_txt& ...