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)的更多相关文章

  1. 浅谈java异常[Exception]

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

  2. Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo {     private static String ...

  3. java异常Exception

    学习笔记: 一.程序的异常:Throwable 严重问题:Error ,我们不处理.这种问题一般很严重,不如内存溢出 问题:Exception 编译问题:不是RuntimeException异常.必须 ...

  4. Java 异常Exception e中e的getMessage()和toString()方法的区别

    示例代码1: public class TestInfo { private static String str =null; public static void main(String[] arg ...

  5. Java异常 - Exception总结

    这篇blog总结的比较详细了. 如下图所示,在Java中所有异常的基类均为Throwable类.有两个子类,分别为Exception和Error.其中Error主要由JVM处理,比如OutOfMemo ...

  6. Java异常 Exception类及其子类

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  7. java异常——Exception、RuntimException

    一.Exception和RuntimeException的区别 Exception是RuntimeException的父类,使用了 Exception 的类都必须对异常进行处理(try / throw ...

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

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

  9. 2015年11月26日 Java基础系列(五)异常Exception

    序,异常都是标准类Throwable的一些子类的对象. Throwable类的几个方法 1 getMessage() 返回描述该异常的信息 2 printStackTrace() 把消息和栈的跟踪记录 ...

随机推荐

  1. HTML 5 audio标签

    audio标签的介绍 定义: <audio> 标签定义声音,比如音乐或其他音频流. <audio></audio>是HTML5中的新标签 能够在浏览器中播放音频, ...

  2. 在WIN7下安装运行mongodb

    1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...

  3. nodejs的安装配置

    Node.js安装及环境配置   一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下载对应你系统的N ...

  4. docker swarm的应用----docker集群的构建

    一.docker安装 这里我们安装docker-ce 的18.03版本 yum    -y remove docker  删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...

  5. c语言入门这一篇就够了-学习笔记(一万字)

    内容来自慕课网,个人学习笔记.加上了mtianyan标签标记知识点. C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C ...

  6. Highchart 饼图联动

    感觉好久没有更新博客了,最近一直忙着毕业论文,紧接着就开始搭建数据库,实在抽不出时间写. 正好趁着做数据库,写一写关于Highchart里两个饼图之间的互动. 用到的数据比较大,我也懒得修饰了,涉及到 ...

  7. 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 ...

  8. P1488 肥猫的游戏

    题目描述 野猫与胖子,合起来简称肥猫,是一个班的同学,他们也都是数学高手,所以经常在一起讨论数学问题也就不足为奇了.一次,野猫遇到了一道有趣的几何游戏题目,便拿给胖子看.游戏要求在一个有n个顶点凸多边 ...

  9. MyBatis-参数处理

    1.单个参数 mybatis不会做特殊处理. #{参数名/任意名}:取出参数值. 2.多个参数 mybatis会做特殊处理. 多个参数会被封装成 一个map. key:param1...paramN, ...

  10. SpringCloud Eureka 服务注册与服务发现

    一.Eureka简介 spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只 ...