zoukankan      html  css  js  c++  java
  • JAVA笔记:异常的基本概念

    异常是指导致程序中断的一种指令流。

    一旦产生异常之后,异常后面的语句不会执行,还是停留在异常位置,并且把异常报告给用户。

    基本格式:

    try{

    //要执行的语句

    }

    catch(){

    //抛出异常

    }

    finally{

    //异常的唯一出口

    }

    例如:

    public class ExceptionTest {
    	public static void main(String args[]){
    		int i = 10;
    		int j =0;
    		try {
    			int temp = i/j;
    			System.out.println(temp);
    		} catch (Exception e) {
    			// TODO: handle exception
    			System.out.println("exception:"+e);
    		}finally{
    			System.out.println("over");
    		}
    	}
    }


    异常类的继承结构:

    Java的异常结构中 ,两个最常用的类是Exception和Error,这两个类都是Throwable 的子类。

    Exception一般表示程序中出现的错误,可以用try...catch来解决;

    而error指的是JVM错误,程序中无法处理。


    Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Javathrow 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。 

    处理异常时可以直接用System.out.println()打印异常,也可以用Exception提供的一个方法:public void printStackTrace()

    Java中处理异常的过程如下:

    *一旦产生异常,则会产生一个异常类的实例化对象。

    *在try语句中对该异常进行捕捉

    *产生的异常对象与catch语句中各个异常类型进行匹配,如果匹配成功,则执行catch中的代码

    *如果最后都没有匹配成功,则程序中断执行(一般少见)



    catch中的异常类型可以直接写Exception,根据输出确定,但是最好分别捕获异常。 

    捕获更粗颗粒的异常语句要放在捕获更细颗粒异常的语句之后,就像漏水,沙子,石块一样,要先漏水,再是沙子,最后是石块。


    throws关键字

    在定义一个方法的时候可以使用throws关键字来说明,该方法不处理异常,但是调用该方法时,要处理异常。

    例如:

    class Math{
    	public int div(int i,int j) throws Exception{
    		int temp = i/j;
    		return temp;
    	}
    }
    public class ExceptionTest {
    	public static void main(String args[]){
    		int a = 10;
    		int b = 0;
    		Math math = new Math();
    		try {  //必须使用try.catch捕捉异常
    			System.out.println(math.div(a, b));
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

    假如主方法上也使用了throws Exception,则主方法也不处理异常,此时处理异常的工具就是JVM。


    throw关键字

    throw的作用是在程序中抛出一个异常,它抛出的异常是一个异常类的实例化对象。

    例如:

    public class ExceptionTest {
    	public static void main(String args[]) throws Exception {
    		try {
    			throw new Exception("抛出一个异常");
    		} catch (Exception e) {
    			// TODO: handle exception
    			System.out.println(e);
    		}
    	}
    }
    
    一般实际开发中会把throw和throws结合使用。例如要显示所有的程序执行过程,同时也要打印出相关的异常,就要把所有的异常都交给方法调用处处理,

    例如:

    class Math {
    	public int div(int i, int j) throws Exception {
    		System.out.println("Start");
    		int temp = 0;
    		try {
    			temp = i / j;
    		} catch (Exception e) {
    			// TODO: handle exception
    			throw e;
    		} finally {
    			System.out.println("Over");
    		}
    		return temp;
    	}
    }
    
    public class ExceptionTest {
    	public static void main(String args[]) {
    
    		Math math = new Math();
    		try {
    			System.out.println(math.div(10, 0));
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }



    使用异常时还可以自定义异常类,创建类继承Exception类即可。

    Exception和RuntimeException的区别:

    Exception在程序中必须使用try...catch处理;

    RuntimeException则可以不使用try...catch处理,如果有异常产生,则交给JVM处理。



  • 相关阅读:
    我的.emacs配置文件
    C语言夜未眠5——变量前缀代表的含义
    c语言夜未眠4——对某一位或几位进行反转
    指针也可这么玩:返回局部指针变量,局部噢
    lua学习之table类型
    10个最“优秀”的代码注释
    为什么我希望用C而不是C++来实现ZeroMQ
    c语言夜未眠2——实现撤销和重做
    emacs学习笔记(基本概念)
    flutter json_serializable
  • 原文地址:https://www.cnblogs.com/tryitboy/p/4231125.html
Copyright © 2011-2022 走看看