Java16-java语法基础——异常
Java16-java语法基础——异常
一、异常概念
1、异常:应用程序在运行过程中出现的错误或非正常的意外情况,即虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误。
2、原因:数组越界、空指针的访问、试图读取不存在的文件、数学除零
3、异常处理机制由编译器强制执行
4、Java编译器要求方法必须声明跑出可能发生的非运行时异常,但并不要求必须声明抛出未捕获的运行时异常。
5、完全不出错是不可能的,不要刻意回避,要多想意外发生后如何去处理它。
二、为什么用异常
1、运行时发生错误,如果没有异常处理机制,程序将会终止并是使所有已分配资源的状态保持不变,这样会导致资源泄露
如:不能收回某个程序分配的内存,以供其它程序使用。
例子:
public class ExceptionRaised{ public ExceptionRaised(){ } public int calculate(int operand1,int operand2){
int result = operand1/operand2; //第5行
return result;
} public static void main(String[] args){
ExceptionRaised obj = new ExceptionRaised();
int result = boj.calculate(9,0);
System.out.println(result);
}
}
解析:在运行到第五行时,发生错误,程序突然终止并将控制交给操作系统。
三、异常的分类
在java语言中,“异常”可以看作是一个类,异常类的根是Throwable。Throwable是类库java.lang包中的一个类,并派生出Exception类和Error类两个子类。
异常分为:Error和Exception(Exception包括RuntimeException和其他Exception等)
Error——Java运行系统中的内部错误以及资源耗尽的情况。
Exception——RuntimeException及其子类(编程导致的异常)、其它Exception类。
1、Error体系 :
Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。
2、Exception体系包括RuntimeException体系和其他非RuntimeException的体系 :
(1)RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
(2)其他非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
四、异常的层次结构
五、Java异常类
六、异常的捕获
1、捕获异常。通过try catch方法,catch子句中防止处理异常的语句。
2、声明异常。在方法名后面加上throws Exceptionname,..., 方法本身只是抛出异常,由函数调用者来捕获异常。
注意:
(1)Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
(2)当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
(3)如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
(4)对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
七、处理异常
1、try和catch块
1、try-catch异常处理语句:
try{
程序段;
}catch(异常类对象名){
异常处理代码;
}
2、嵌套try-catch块
try{
程序段;
try{
程序段;
}catch(异常类对象名){
异常处理代码;
}
}catch(异常类对象名){
异常处理代码;
}
(1)有时块的一部分导致一个错误,而块本身也可能导致一个错误,必须将一个异常嵌套在另一个异常处理机制中
(2)从内层try语句寻找与异常匹配的catch语句,如无,检查下一个,从里到外,直到最后一个catch
3、多重catch块
try{
程序段;
}catch(异常类1 对象名){
处理代码;
} catch(异常类2 对象名){
处理代码;
} catch(异常类3 对象名){
处理代码;
}
注意:
(1)一段代码可能会生成多个异常
(2)当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句
(3)执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略
(4)使用多重 catch 语句时,异常子类一定要位于异常父类之前 ,否则,控制权将永远传不到子类,将产生一个不能到达的代码,即产生错误
4、finally块
finally 是java异常处理提供的另一个关键字,通俗的说finally是异常处理语句结构的一部分,表示无论什么情况都要执行的模块。finally语句的主要作用是在try或catch转到其他部分前做的一些“善后”工作。比如:关闭打开的文件,释放链接、内存等系统资源。
finally语句的执行是一种无条件的操作,无论在哪种异常下都会执行,即使try或catch模块中有continue、return、break等关键字,或者是有throw语句,程序都会执行finally 语句。
有时需要清理代码,但程序已经停止运行,使用finally 块可使程序不管发生什么异常都将执行清理代码操作。
每个try语句至少有一个catch子句或finally子句。
Java16-java语法基础——异常的更多相关文章
- Java语法基础(1)
Java语法基础(1) 1. Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...
- Java编程基础-异常
一.异常 1.什么是异常 在java中,程序在运行时出现的不正常情况称为异常,以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理.其实就是java对不正常情况进 ...
- Java语法基础学习DayEight
一.异常处理 1.结构 java.lang.Object |-----java.lang.Throwable |-----java.lang.Error:错误,java程序对此无能为力,不显式处理 | ...
- java语法基础(四)
继承 继承概述 继承是面向对象语言的三大基本特性(封装,继承,多态)之一. 一个类可以继承另外一个类,继承的类称为子类(也可以叫派生类),被继承的类称为父类(或者也叫基类,超类). 通过继承,子类可以 ...
- JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...
- 黑马程序员——【Java基础】——Java语法基础
---------- android培训.java培训.期待与您交流! ---------- 一.关键字 1.定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有的字母都为小写. ...
- java语法基础(一)
这个是自己前两年做java视频教程时候的课件.感兴趣的同学可以参考下. 这里是纯粹的语法行总结. editplus的使用 选择项目目录 打开editplus 左侧目录导航栏 可以打开盘符,文件夹 可以 ...
- Java语法基础-异常处理
异常处理类层次结构图 检查异常与非检查异常 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类.javac在编译时,不会提示和发现这 ...
- java语法基础
Java的基本符号(token) Java的单词符号有五种:关键字.标识符.常量.分隔符和操作符. Java的字符集 Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见 ...
随机推荐
- HttpWebRequest post 请求超时问题
在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步, 发送一个请求, 包含一个Expect:100-continue, ...
- Java面向对象 第4节 类的多态性
一.多态的概念 在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法.通常有两种途径实现多态:方法的重载和覆盖. 多态性允许以统一的风格处理已存在的变量及相关的类. ...
- 实战 ant design pro 中的坑
1.替换mock数据: 1.将:.roadhogrc.mock.js 中的代理模式替换 当不使用代理的时候就会将所有 /api/的链接换成 http://localhost:8080/ export ...
- linux上静态库和动态库的编译和使用(附外部符号错误浅谈)
主要参考博客gcc创建和使用静态库和动态库 对于熟悉windows的同学,linux上的静态库.a相当于win的.lib,动态库.so相当于win的.dll. 首先简要地解释下这两种函数库的区别,参考 ...
- <ROS> 机器人描述--URDF和XACRO
文章转自 https://blog.csdn.net/sunbibei/article/details/52297524 特此鸣谢原创作者的辛勤付出 1 URDF 文件 1.1 link和joint ...
- FluentData -Micro ORM with a fluent API that makes it simple to query a database 【MYSQL】
官方地址:http://fluentdata.codeplex.com/documentation MYSQL: MySQL through the MySQL Connector .NET driv ...
- C#中Button.DialogResult属性
窗体中的某个按钮,如果设置了DialogResult(不是设置为None),当窗体是通过ShowDialog方法显示的时候 则不必设置任何响应函数,单击按钮也可窗体.然后,该窗体的DialogResu ...
- 给idea添加类注释和方法注释模板
这是我找到的最好的,最简单明白的一文: https://blog.csdn.net/xiaoliulang0324/article/details/79030752
- Django_admin组件
1.Django_admin组件的意义 作者:Eric 微信:loveoracle11g 新建Django项目bms图书管理系统 App为book book/models.py添加表关系 from d ...
- html/css/js-个人容易忘的一些属性
1.当div里面的文字超过给定div给定的宽度,div里面的文字自动换行 word-break:break-all:会截断该行最后的单词 word-wrap:break-word:不会截断,该行长度最 ...