Java异常(Exception)
Java异常:运行期出现的错误
1. Java异常是Java提供的用于处理程序中错误的一种机制;
2. 错误指的是程序运行期间发生的异常事件,如除零溢出、数组下标越界、读取的文件不存在....
3. Java程序的执行过程中如出现异常事件,会生成一个异常类对象,该异常对象封装了异常事件的信息并将其提交给Java运行时系统,此过程称之为抛出异常(throw exception);
4. 当Java运行时系统接收到异常对象后,会寻找能处理这一异常的代码,并把当前异常对象交给其处理,此过程称之为捕获异常(catch exception);
5. 异常的分类:J2SDK中定义了很多异常类,这些异常类对应了各种各样可能出现的异常事件,如下图

① Error:称为错误(系统错误),你处理不了,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理.
② Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显示声明或捕获.
③RuntimeException:一类特殊的异常,如被0除、数组下标越界,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行的效率影响很大。因此由系 统自动检测并将他们交给缺省的异常处理程序(用户可不比对其处理).
6. try语句
① try{...} 语句指定了一段代码,该段代码就是一次捕获并处理例外的范围;
② 在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常作相应的处理;
③ 如果没有例外产生,所有的catch代码都被忽略,不执行.
7. catch语句
① 在catch语句块中是对异常进行处理的代码,每个try语句可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象;
② 在catch中声明的异常对象(catch(someException e))封装了异常事件发生的信息,在Catch语句块中可以使用这个对象的一些方法获取这些信息.
③ getMessage()方法,用来得到有关异常事件的信息;
printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容;
一般而言,printStackTrace()方法用得比较多,它包含了getMessage()方法的内容,跟踪异常:如果一段代码可能发生异常是由于另外一段代码异常引起的,则它会打 印两段代码的异常信息,以及出错位置.
8. finally语句
① finally语句为异常处理提供了一个统一的出口,使得在控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理;
② 无论try语句指定的程序块中是否抛出异常,finally所指定的代码都要被执行;
③ 通常在finally语句中进行资源的清除工作,如:关闭打开的文件、删除临时文件、释放非内存资源;
9. 除了在测试之外,在你实际当中编程的时候,在main方法中抛出Exception是相当不好的编程习惯,应该写try,catch作相应的处理;
10. 在一个try语句块中,父类异常的捕获语句不可以写在子类异常的捕获的上面,否则会覆盖子类的异常;
11. 使用自定义异常:
其中,自定义异常的步骤如下:
① 通过继承 java.lang.Exception类声明自己定义的异常;
② 在方法适当的位置,生成自定义异常的实例,并用 throw 语句抛出;
③ 在方法的声明部分用 throws 语句声明该方法可能抛出异常.
如 Demo_3 所示.
12. Demo
Demo_1
import java.io.*;
public class TestEx {
public static void main(String[] args){
FileInputStream in = null;
int b;
try {
in = new FileInputStream("myfile.txt");
b = in.read();
while(b != -1){
System.err.println((char)b);
b = in.read();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
in.close();
System.out.println("hello");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Demo_2
import java.io.*;
public class TestEx {
void m(int i) throws ArithmeticException{
if(i==0){
throw new ArithmeticException("被除数为0");
}
}
void f() throws FileNotFoundException, IOException {
FileInputStream in = new FileInputStream("myfile.txt");
int b;
b = in.read();
while(b != -1){
System.out.println((char)b);
b = in.read();
}
}
void g() throws Exception {
f();
}
public static void main(String[] args){
try {
new TestEx().g();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Demo_3
class MyException extends Exception {
private int id;
public MyException(String message, int id) {
super(message);
this.id = id;
}
public int getId(){
return id;
}
}
public class TestEx {
public void regist(int num) throws MyException{
if(num<0){
throw new MyException("人数为负值,不合理",3); //regist方法在这个地方抛出异常后,这个方法就不会继续往下执行了
}
System.out.println("登记人数: "+num);
}
public void manager(){
try {
regist(100);
// regist(-1);
} catch (MyException e) {
System.out.println("登记失败,出错类型:"+e.getId());
e.printStackTrace();
}
System.out.println("操作结束");
}
public static void main(String[] args){
TestEx te = new TestEx();
te.manager();
}
}
regist(100)的运行结果:登记人数: 100
操作结束
regist(-1)的运行结果:登记失败,出错类型: 3
操作结束
MyException: 人数为负值,不合理
at TestEx.regist(TestEx.java:15)
at TestEx.manager(TestEx.java:22)
at TestEx.main(TestEx.java:31)
13. 异常与继承之间的关系
在继承后,重写方法需要抛出与原来异常类型一致异常或不抛出异常.
class A{
public void method() throws IOException{}
}
class B1 extends A{ // 错误
public void method() throws FileNotFoudException{}
}
class B3 extends A{ // 正确
public void method(){}
}
class B4 extends A{ // 错误
public void method(){} throws IOException, MyException{}
}
Java异常(Exception)的更多相关文章
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别
Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String ...
- java异常Exception
学习笔记: 一.程序的异常:Throwable 严重问题:Error ,我们不处理.这种问题一般很严重,不如内存溢出 问题:Exception 编译问题:不是RuntimeException异常.必须 ...
- Java 异常Exception e中e的getMessage()和toString()方法的区别
示例代码1: public class TestInfo { private static String str =null; public static void main(String[] arg ...
- Java异常 - Exception总结
这篇blog总结的比较详细了. 如下图所示,在Java中所有异常的基类均为Throwable类.有两个子类,分别为Exception和Error.其中Error主要由JVM处理,比如OutOfMemo ...
- Java异常 Exception类及其子类
C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...
- java异常——Exception、RuntimException
一.Exception和RuntimeException的区别 Exception是RuntimeException的父类,使用了 Exception 的类都必须对异常进行处理(try / throw ...
- Atitit java的异常exception 结构Throwable类
Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...
- 2015年11月26日 Java基础系列(五)异常Exception
序,异常都是标准类Throwable的一些子类的对象. Throwable类的几个方法 1 getMessage() 返回描述该异常的信息 2 printStackTrace() 把消息和栈的跟踪记录 ...
随机推荐
- HTML 5 audio标签
audio标签的介绍 定义: <audio> 标签定义声音,比如音乐或其他音频流. <audio></audio>是HTML5中的新标签 能够在浏览器中播放音频, ...
- 在WIN7下安装运行mongodb
1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...
- nodejs的安装配置
Node.js安装及环境配置 一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下载对应你系统的N ...
- docker swarm的应用----docker集群的构建
一.docker安装 这里我们安装docker-ce 的18.03版本 yum -y remove docker 删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...
- c语言入门这一篇就够了-学习笔记(一万字)
内容来自慕课网,个人学习笔记.加上了mtianyan标签标记知识点. C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C ...
- Highchart 饼图联动
感觉好久没有更新博客了,最近一直忙着毕业论文,紧接着就开始搭建数据库,实在抽不出时间写. 正好趁着做数据库,写一写关于Highchart里两个饼图之间的互动. 用到的数据比较大,我也懒得修饰了,涉及到 ...
- Maximum sum
描述 Given a set of n integers: A={a1, a2,-, an}, we define a function d(A) as below: t1 t2 d(A) = max ...
- P1488 肥猫的游戏
题目描述 野猫与胖子,合起来简称肥猫,是一个班的同学,他们也都是数学高手,所以经常在一起讨论数学问题也就不足为奇了.一次,野猫遇到了一道有趣的几何游戏题目,便拿给胖子看.游戏要求在一个有n个顶点凸多边 ...
- MyBatis-参数处理
1.单个参数 mybatis不会做特殊处理. #{参数名/任意名}:取出参数值. 2.多个参数 mybatis会做特殊处理. 多个参数会被封装成 一个map. key:param1...paramN, ...
- SpringCloud Eureka 服务注册与服务发现
一.Eureka简介 spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只 ...