java异常

来源:互联网 发布:中国季度gdp数据 编辑:程序博客网 时间:2024/06/10 09:43

在java中,异常对象都是派生于Throwable类的一个实例,并且当java中的内置异常类不能满足需求时,用户可以创建自己的异常类。

1.Throwable有两个重要的子类:Exception和 Error。
Error描述了java运行时系统内部错误和资源耗尽错误。不由程序进行捕获或处理,当error发生时,程序将会停止。如OutOfMemoryError(当JVM在为对象分配内存空间时,剩余的空间不够,同时也没有可以释放的内容时,会发省这样的错误)。
Exception是程序本身可以处理的异常,分为RuntimeException和非RuntimeException。
2.Unchecked Exception和Checked Exception。
其中Error和RuntimeException及它们的子类为不可查异常(编译器不要求强制处置的异常)。
除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常(编译器要求必须处置的异常)。
3.java中异常处理方式分为抛出异常和捕获异常。
抛出异常分为隐式声明抛出和显示声明抛出。
由于RuntimeException不可查,系统将自动抛出异常,允许程序方法不作任何声明抛出或处理,直接交给调用该方法的地方处理,程序能编译通过,不会对可能产生异常的代码行给出提示,即隐式抛出。
对于所有可查异常,要么显式抛出异常,要么捕捉异常。

4.自定义异常

public class MyException extends Exception{/** * 自定义可查异常类 */private static final long serialVersionUID = 1L;public MyException() {}public MyException(String message) {super(message);}}
处理异常方式如下:

public class Test {/** * 处理两数相除,抛出一个MyException异常,当除数为0时,会创建异常对象,提示信息为"除数不能为0" * @param a 被除数 * @param b 除数 * @throws MyException 交给上层调用者处理该异常 */public void divide(int a , int b)throws MyException{if(b==0)throw new MyException("除数不能为0");else {System.out.println(a/b);}}/** * 调用divide()方法,并且捕获异常 */public void compte1(){int a = 1;int b = 0;try {divide(a,b);} catch (MyException e) {e.printStackTrace();}}/** * 调用divide()方法,抛出异常不做处理,交给更上一层处理 * @throws MyException */public void compte2() throws MyException{int a = 1;int b = 0;divide(a,b);}public static void main(String args[]){//new Test().compte1();try {new Test().compte2();} catch (MyException e) {e.printStackTrace();}}}

下面是一个小作业,曾经在慕课网上学习java时老师留下的作业



下面贴出代码:

public class Demo {/** * 用户根据名称或者序号查找图书 *///0-语文                  1-数学                       2-英语static String books[] = {"语文" , "数学" , "英语"};static Scanner scan = null;/** * 根据命令选择查找图书的方式 * @param order 键盘输入的命令 * @throws OrderException  抛出命令错误异常 * @throws BookException  抛出找不到图书异常 */public static void orderManager (int order)throws OrderException, BookException{if(order!=1 && order!=2){throw new OrderException("命令不存在");}if(order ==1){     //根据名称查找System.out.println("输入图书名称");scan = new Scanner(System.in);String key = scan.nextLine();searchByName(key);}if(order ==2){    //根据序号查找System.out.println("输入图书序号");scan = new Scanner(System.in);int index = scan.nextInt();searchById(index);}}private static void searchById(int index) throws BookException {if(index<0 || index>books.length-1 ){throw new BookException("该序号的图书不存在");}else{System.out.println(index + books[index]);}}private static void searchByName(String key) throws BookException {int i = 0;for(i = 0;i<books.length;i++){if(key.equals(books[i]))break;}if(i>=books.length){throw new BookException("改名称的图书不存在");}else{System.out.println(i + books[i]);}}public static void main(String args[]){while(true){System.out.println("输入命令:1-按名称查找    2-按序号查找");scan = new Scanner(System.in);int order = scan.nextInt();try {orderManager(order);} catch (OrderException e) {System.out.println("改命令不存在");continue;} catch (BookException e){System.out.println("该图书不存在");continue;}}}}
public class OrderException extends Exception{/** * 命令错误异常 */private static final long serialVersionUID = 1L;public OrderException(){}public OrderException(String message){super(message);}}
public class BookException extends Exception{/** * 找不到图书异常 */private static final long serialVersionUID = 1L;public BookException(){}public BookException(String message){super(message);} }




0 0
原创粉丝点击