zoukankan      html  css  js  c++  java
  • Java异常处理

    异常是一种Exception类型的对象。

    1 Exception与Error

    Exception与Error继承于Throwable类,二者的区别:

    Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理,该类的printStackTrace()方法输出异常信息较为完整。

    Error:一般指的是JVM的错误,程序中无法处理。

    Java中所有捕获范围小的异常必须放在捕获范围大的异常之前(否则编译时会报错)。对一个程序而言,如果有多个异常,最好分别进行捕获,而不要直接使用Exception捕获全部异常。

    2 throws与throw

    throws:在定义一个方法时可以使用throws进行声明,使用throws进行声明的方法表示此方法不处理异常,而交给方法的调用处进行处理。

    throw用来人为的抛出的一个异常,抛出时,直接抛出异常类的实例化对象即可。

    ThrowDemo.java

    class Math{
    	public int div(int i,int j) throws Exception{	// 定义除法操作,如果有异常,则交给被调用处处理
    		System.out.println("***** 计算开始 *****") ;
    		int temp = 0 ;	// 定义局部变量
    		try{
    			temp = i / j ;	// 计算,但是此处有可能出现异常
    		}catch(Exception e){
    			throw e ;
    		}finally{	// 不管是否有异常,都要执行统一出口
    			System.out.println("***** 计算结束 *****") ;
    		}
    		return temp ;
    	}
    };
    public class ThrowDemo{
    	public static void main(String args[]){
    		Math m = new Math() ;
    		try{
    			System.out.println("除法操作:" + m.div(10,0)) ;
    		}catch(Exception e){
    			System.out.println("异常产生:" + e) ;
    		}
    	}
    };
    


    3 try/catch流程控制

    如果成功的话


    如果失败的话


    4 异常处理规则

    (1)Throw可以配合try、catch或throws语句使用,但不可以独立存在;

    (2)catch与finally不能没有try;

    (3)try与catch之间不能有程序;

    (4)try一定要有catch或finally

    (5)只带有finally的try必须要声明异常

    5 Exception与RuntimeException

    继承关系:Exception->RuntimeExcetion->IllegalArgumentExcetion->NumberFormatExcetion ;Exception的抛出本质上属于多态的运用。

    一般而言,Exception在程序中必须使用try...catch进行处理,但是RuntimeException可以不使用try...catch进行处理,此时如有异常产生,则异常将由JVM进行处理。

    即便不是RuntimeException异常,也可以使用throws关键字来避开异常处理,这种方式本质上属于duck方式。但是ducking只是在踢皮球,早晚还是得有人来处理这件事。如果main()也duck掉异常的话,最终只有JVM来处理异常了,而Java虚拟机对异常是没有什么责任感的,这样最终会导致程序中断执行。因此,最好做个堂堂正正的程序员。

    6 断言

    断言定义格式:assert boolean expression;  /  assert boolean expression : detail information;

    执行命令:java -ea ClassName; //-enableasssertions简写为-ea

    如果boolean表达式的结果为false,则会提示错误信息,如果没有声明Information,则系统会使用默认信息提示,类似于Exception与自定义Exception

    Test.java

    public class Test{
    	public static void main(String args[]){
    		int x[] = {1,2,3} ;	// 定义数组,长度为3
    		assert x.length==0 : "数组长度不为0" ;	// 此处断言数组的长度为0
    	}
    };


  • 相关阅读:
    cf406E Hamming Triples (推公式)
    cf1076E Vasya and a Tree (线段树)
    LOJ2503 NOIP2014 解方程 【HASH】
    vue+antd 解决的rowKey未指定报错Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key.
    vue 引入第一个elementui组件
    bootstrap导航和table
    垃圾回收jstat术语
    jmap heap 分析
    高内存分析
    expalin精讲
  • 原文地址:https://www.cnblogs.com/ioveNature/p/6646600.html
Copyright © 2011-2022 走看看