在Java中,异常分为编译时异常和运行时异常。

编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理。
运行时异常(runtimeException及其子类):在程序编译过程中监测到出现运行时异常,函数上或内部可以直接抛出异常,不需要捕获和声明。

编译时异常:
  在某个方法中,try中出现异常,会将异常信息封装成一个对应异常信息的异常对象(new Exception),然后在catch中将这个异常对象进行捕获,然后进行异常的处理。

  在main方法中,如果出现异常,如果没有进行异常处理,或者在异常处理中又出现异常的抛出,当异常一层层的往上抛,却没有得到解决时,最终会抛给 JVM,JVM会将异常执行默认的异常处理机制。

public static void main(String[] args)throws Exception{
try{
throw new Exception("1");
}catch(IOException e){
throw new Exception("2");
}catch(Exception e){
throw new Exception("3");
}finally{
throw new Exception("4");
}
}

  这段代码的最终结果是:4。

  因为finally最终会被执行,如果将finally去掉,那么会打印出3,因为3最终是抛给JVM了,JVM会使用默认的方式进行打印输出。

  在上段main方法中,出现throws和throw,两者的区别是throws使用在函数上,后面可跟多个异常。throw使用函数内,后面跟一个异常对象(new Exception)

  两者的相同点是都需要进行异常的捕获处理。

  多异常的处理(编译时异常):

    1、声明异常时,建议声明更为具体的异常,这样处理也会更具体.
        多个异常处理,多个catch捕获
    2、对方声明多个异常,就对应有多个catch快
        如果多个catch快中的异常出现继承关系,父类catch(Exception)快放最下面。
    3、多异常处理中,程序一次只处理一个异常。
     在多异常的处理中,如果在一个方法中出现了异常,那么程序会在编译时监测到第一个异常时,就会触发异常的处理机制,

    去程序中查到对应该异常的异常捕获快(catch)。

注意:当某个语句出现异常,该语句调用的方法应该声明异常抛出,之后该语句应该捕获异常(try-catch),或者将该语句所在的方法上抛出异常(throws)。抛给JVM去处理。

运行时异常(RuntimeException):

  Exception中有一个特殊的子类异常RuntimeException运行时异常。

  1、如果在函数内容抛出异常,函数上可以不用声明,编译一样通过。

  2、如果在函数上声明了该异常,调用者可以不用进行处理,编译一样也通过。

      之所以不用在函数上声明,是因为不需要让调用者去处理。

  3、当该异常发生,其实是希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,程序员会代码进行修正。

public class ExceptionDemo {

	private static double div(int i, int j) {
if(j <= 0){
throw new ArithmeticException();
}
double resoult = i/j;
return resoult;
} public static void main(String[] args){
int i = 4,j=0;
double x = div(i,j);
System.out.println("x= "+x);
}

  在上段代码中声明了ArithmeticException异常,该异常时RunnableException异常的子类。

  也可以将ArithmeticException异常换成我们自己定义的异常(OtherException )。当使用自定义异常时,如果该异常的发生,无法继续进行运算,就让自定义异常继承RunnableException

public class OtherException extends RuntimeException{

	public OtherException() {
System.out.println("自定义异常执行了");
} }

  

Java基础之异常处理机制的更多相关文章

  1. 黑马程序员——JAVA基础之异常处理机制

    ------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...

  2. Java基础(四)-异常处理机制及其设计

    本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...

  3. Java基础总结--异常处理机制

    ----异常的概述-----1.异常,就是不正常的现象,可能发生在编译期间也可能发生在运行期间2.可能会出现不同的异常,进而在Java中对其描述封装为类--在这些异常类中抽取其共性的东西(异常发生的位 ...

  4. Java 中的异常处理机制

    生活中的异常:  不能够完整而顺利的完成一些工作 根据不同的异常进行相应的处理,而不会就此终端我们的生活 引出:  异常处理: 方式:  1.选择结构(逻辑判断)避免 demo:if逻辑处理异常 im ...

  5. Java基础:异常机制

    最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行 ...

  6. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  7. Java中的异常处理机制的简单原理和应用?

    程序运行过程中可能出现各种"非预期"情况,这些非预期情况可能导致程序非正常结束. 为了提高程序的健壮性,Java提供了异常处理机制: try { s1... s2... s3... ...

  8. Java中的异常处理机制《》

    异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ...

  9. 16、java中的异常处理机制

    异常:就是程序在运行时出现不正常情况.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 对于问题的划 ...

随机推荐

  1. Linux shell 中提取zip或jar文件中的某个文件

    Linux shell 中提取zip或jar文件中的某个文件 假如有个压缩包 abc.jar, 里面文件如下 (可以用unzip -l abc.jar 查看): data/1.txt data/2.t ...

  2. [转]asp:ScriptManager

    概述 ScriptManager 控件管理用于 Microsoft ASP.NET AJAX 页面的客户端脚本.默认情况下,ScriptManager 控件将 Microsoft AJAX 库的脚本与 ...

  3. Jmeter性能测试之添加思考时间

    利用定时器添加用户思考时间 JMeter如何插入思考时间,在一个真实的性能测试场景中,是需要加入思考时间,来模拟真实用户行为.本文就来介绍,如何在三个请求之间添加思考时间. 1. 在Test Plan ...

  4. android webview 中 js 模板引擎的使用

    最近在项目中要求用 webview 展示几个界面, 而后台返回的不是 html 而是 json 数据. 起初用 StringBuilder 一个一个拼 html, 后来感觉太繁琐,拼一个还行,拼多了就 ...

  5. 微服务~Consul服务注册与发现

    服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利 ...

  6. 计算两个NSDate之间,相隔多少秒数

    计算两个NSDate之间,相隔多少秒数 //两个时间间隔秒数 - (NSInteger)intervalSecondsWithSmallDate:(NSDate*)smallDate bigDate: ...

  7. OAuth2.0 微信授权机制

    我在了解设计Restful接口的时候,发现涉及到接口验证,可以利用OAuth2.0机制来验证. 我开发的微信端Web网页通过微信授权的时候,微信端也是用OAuth2.0机制来获取用户基本信息. OAu ...

  8. mysql的线程处于System lock状态下

    The thread has called mysql_lock_tables() and the thread state has not been updated since. This is a ...

  9. PHP学习3——数组

    主要内容: 简介 常用的方法 循环遍历数组 PHP预定义数组 数组的处理函数 数组 PHP由于是弱类型的语言,他的变量类型是可以自由变换的,他的数组很自由,长度是可以动态增加的. 他的索引默认为数字0 ...

  10. Java - 网络IO的阻塞

    最近学习时碰到事件驱动和非阻塞的相关知识,随之想到了Java中的Reactor.io与nio的一些东西:在前辈的博客上翻了翻.复习复习,在此记录一番. 实在找不到比较大点的东西,于是随便弄了个压缩包, ...