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

所有不正常的类都继承与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 异常基本结构的更多相关文章
- Atitit java的异常exception 结构Throwable类
Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...
- Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换
Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- 2.Java异常学习
1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...
- 浅析Java异常
1.什么是异常 结构不佳的代码不能运行,这是Java的基本理念. 发现错误的理想时机是在编译期.然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决.这就需要错误能通过某种方式,把适当的 ...
- Java异常的深入研究与分析
前言 本文是异常内容的集大成者,力求全面,深入的异常知识研究与分析.本文由金丝燕网独家撰写,参考众多网上资源,经过内容辨别取舍,文字格式校验等步骤编辑而成,以飨读者.对于本文的内容,建议小白需要多多思 ...
- 全面理解Java异常的运行机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
随机推荐
- ASP.Net 第一天笔记 MVC 控制器与视图数据传递注意事项
1.如果方法的参数的名称与表单元素Name属性的值一致的话,会自动填充 2.如果表单元素的Name属性与实体类型中属性一致,那么表单中的数据会自动赋值给实体中的属性 3.控制器中重载的方法 方法前上边 ...
- 基于Python玩转人工智能最火框架 TensorFlow应用实践✍✍✍
基于Python玩转人工智能最火框架 TensorFlow应用实践 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起 ...
- 54-Ubuntu-打包压缩-4-bzip2压缩和解压缩介绍
bzip2 tar和bizp2命令结合可以实现文件打包和压缩 tar只负责打包,但不压缩 用bzip2压缩tar打包后的文件,其扩展名一般为xxx.tar.bz2 在tar命令有一个选项-j可以调用b ...
- 44-Ubuntu-用户管理-09-chmod的数字表示法介绍
chmod 修改文件和目录权限 chmod在设置权限时,可以简单地使用三个数字分别对应拥有者/组和其他用户的权限. 注意: chmod直接修改文件|目录的'读|写|执行'权限,但是不能精确到拥有者|组 ...
- hdu6393 /// 树链剖分
题目大意: 给定n q 在n个点n条边的图中 进行q次操作 0 k x 为修改第k条边的值为x 1 x y 为查询x到y的最短路 https://blog.csdn.net/nka_kun/artic ...
- troff - groff 文档排版系统的 troff 处理器
总览 SYNOPSIS troff [ -abcivzCERU ] [ -d cs ] [ -f fam ] [ -F dir ] [ -m name ] [ -M dir ] [ -n num ] ...
- linux 下无法输入# 显示为£
在键盘布局里面,(Keyboard Layout)设置为中国,汉语.解决问题
- Spring 在Web中的应用
Spring 在Web中的应用 在web项目开发中,不会直接实例化ApplicationContext对象,如果想用到ApplicationContext,一般的步骤: 配置一个监听器ContextL ...
- 用selenium 自动爬取某一本小说章节及其内容,并存入数据库中
from selenium import webdriver import pymysql from selenium.webdriver.support.ui import WebDriverWai ...
- Windows路径操作API函数学习【转载】
文章出自https://www.cnblogs.com/MakeView660/p/6644838.html 前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内 ...