异常

2020-06-23 12:30

什么是异常

异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 Java编程过程中会引发异常的情况:

打开一个不存在的文件 网络连接中断、 数组下标越界、

正在加载的类文件丢失

Java编程语言使用异常处理机制为程序提供了错误处理的能力 异常是一种特殊的对象,类型为java.lang.Exception或其子类

对异常处理的方法有:

没有申明异常:ex.printStackTrace(); 显示出程序运行到当前类的执行流程

System.out.println(ex.toString()); 返回一个异常类中定义好的异常信息 System.out.println(\ System.out.println(ex.getMessage());

方法申明异常(不处理异常,只抛出给上一级):

throw ex; throw new Exception(“被除数不能为0!”);

五个关键字的语法格式:

try{

//程序中可能会出现异常的代码 }catch(异常类 对象名(变量名)){ }finally{ }

throw 对象(异常类的对象)

throws:方法名后面

例如 public void get() throws 异常类{ }

finally块:可以确保无论是否发生异常,finally块中的代码总能被执行

package com.inspur.charpter12;

1

import java.util.Scanner; public class ExcepTest5 { }

public static void main(String[] args) { }

// TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.println(\请输入第一个数:\); int a = input.nextInt();

System.out.println(\请输入第二个数:\); int b = input.nextInt(); Excep excep = new Excep(); try {

System.out.println(\); excep.division(a, b);

System.out.println(\);

System.out.println(\ zero\);

} catch (Exception ex) { } finally {

System.out.println(\!\); }

System.out.println(\);

使用try/catch块捕获异常,分为三种情况

public void method(){

try {

// 代码段(此处不会产生异常) } catch (异常类型 ex) {

// 对异常进行处理的代码段 }

// 代码段 }

第一种情况 (代码不产生异常):程序正常运行,跳过异常处理部分 第二种情况 (异常可以匹配):程序遇到异常时与catch的异常匹配,正常处理异常和异常后的代码

第三种情况 (异常不匹配,程序中断) 多重catch块

1、一段代码可能会引发多种类型的异常

2、当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句

3、执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略 4、在安排catch语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类

2

public class ExcepTest6 { }

public static void main(String[] args) { Scanner input = new Scanner(System.in); Excep excep = new Excep(); try }

{

System.out.println(\请输入第一个数:\ int a = input.nextInt();

System.out.println(\请输入第二个数:\ int b = input.nextInt(); System.out.println(\ excep.division(a, b);

System.out.println(\

} catch (InputMismatchException ex1) {

System.out.println(\输入不为数字!\ } catch (ArithmeticException ex2) {

System.out.println(\被除数不能为0!\ } catch (Exception ex3) { System.out.println(\发生错误:\ }

System.out.println(\

throws关键字作用

声明异常类型

a.在某一个方法的声明处,说明该方法可能会抛出的异常类型

b.如果在程序中某些代码可能会出现异常,那么程序有两种处理方式:try catch进行捕获处理,另一种方式是,他不进行处理,声明出去(throws) ,让上一级类中调用该方法的地方进行处理。

C、异常是抛给调用者的,向上一级抛出,如果还有上一级再往上抛出 。还可以将异常通过main函数抛给java运行时系统处理 (一般项目中不这样用,在main方法中直接捕获异常)

抛出异常throw(不处理只抛出)

1、捕获异常中抛出异常的对象名 public class Excep { public int division(int a, int b) throws Exception

{

try { return a / b;

} catch (Exception ex) { throw new Exception(“被除数不能为0!”);

3

}

}

public int fn1(int a, int b) throws Exception { return division(a, b); }

}

public class ExcepTest9 {

public static void main(String[] args) { ……

try { }

excep.fn1(a, b);

System.out.println(ex.toString());

} catch (Exception ex) {

} }

2、在申明异常的方法体中时抛出异常

throw new MyException(\我自己的异常类\, \异常类\);

java类库中异常类的体系结构

均在java.lang包中 --Throwable --Exception

--运行时异常 ,程序员可以不做处理

--ArithmeticException、 IndexOutOfBoundsException、NullPointerException、ClassCastException等等

--非运行时异常 ,程序员必须对非运行时异常做处理。 IOExcption --Error

定义自己的异常类

package com.inspur.chapter13; //定义自己的异常类MyException

public class MyException extends Exception { }

package com.inspur.chapter13; public class TestMyException {

4

String name;

MyException(String message, String name) { }

super(message);//继承父类的属性 this.name = name;//初始化自己的属性

}

public static void main(String[] args) {

TestMyException t = new TestMyException(); int a[] = new int[11]; try {

t.test(a);

ex.printStackTrace(); } catch (MyException ex) {

}//在调用方法的时候捕获异常 }

public void test(int[] a) throws MyException { }

//在方法中申明异常 if (a.length > 10) { }

throw new MyException(\我自己的异常类\, \异常类\); //在方法体中抛出异常

课后习题

从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数多于5个的异常(数组越界),显示“请输入至多5个整数”。

import java.util.InputMismatchException; import java.util.Scanner; public class Test2 { }

public static void main(String[] args) { }

// TODO Auto-generated method stub int a[] = new int[5];

Scanner input = new Scanner(System.in); try {

for (int i = 0; i < 6; i++) { }

a[i] = input.nextInt();

} catch (InputMismatchException ex1) { System.out.println(\请输入整数\); } catch (Exception ex2) { }

System.out.println(\请输入最多5个整数\);

写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+

5


异常.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年百万公众网络学习成效测试参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: