发生异常的情况有很多,其中包括以下几大类:

1. 空指针异常;

2. 用户输入异常;

3. 多层异常捕获;

想要知道Java是如何处理异常的,就需要掌握以下这三种异常的处理:

1.检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,                 一个 异常就发生了,这些异常在编译时不能被简单地忽略。

2.运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

3.错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们                在编 译 也检查不到的。

如何捕获异常:

try和catch关键字

将可能引发异常的代码段放在 Try 块中,而将处理异常的代码放在 Catch 块中。Catch 语句的顺序很重要。发生异常时,异常沿堆       栈向上传递,每个 Catch 块都有机会处理它。通过将异常类型与 Catch 块中指定的异常名称相匹配,可确定处理异常的 Catch 块。

例如,以下 Catch 块将捕获简单对象访问协议 (SOAP) 异常:

catch (SoapException e){Console.WriteLine("SOAP Exception Error Code: {0}",

e.SubCode.Code.Name);

Console.WriteLine("SOAP Exception Message is: {0}",

e.Message);}Catch e As SoapException

Console.WriteLine("SOAP Exception Error Code: {0}", e.SubCode.Code.Name)

Console.WriteLine("SOAP Exception Message is: {0}", e.Message)End Try

如果不存在特定类型的 Catch 块,则由可能存在的常规 Catch 块来捕捉异常。

例如,您可以通过添加以下代码来捕获一般异常:

catch (Exception e){Console.WriteLine("Exception Message: {0}", e.Message);}Catch e As Exception

Console.WriteLine("Exception Message: {0}", e.Message)End Try

将针对特定类型异常的 Catch 块放在一般异常之前。

公共语言运行库将捕捉 Catch 块未捕捉的异常。根据运行库的配置,可能会显示一个调试对话框,或者停止执行程序并显示一个包含异常信息的对话框。

多重捕获:

一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

多重捕获块的语法如下所示:

try{

// 程序代码

}catch(异常类型1 异常的变量名1){

// 程序代码

}catch(异常类型2 异常的变量名2){

// 程序代码

}catch(异常类型2 异常的变量名2){

// 程序代码

}

上面的代码段包含了 3 个 catch块。

可以在 try 语句后面添加任意数量的 catch 块。

如果保护代码中发生异常,异常被抛给第一个 catch 块。

如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个 catch 块。

如此,直到异常被捕获或者通过所有的 catch 块。

finally关键字

finally 关键字用来创建在 try 代码块后面执行的代码块。

当发生异常后,catch捕获后自动结束程序,之后的finaly语句块就不会被执行了。

在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

try{

// 程序代码

}catch(异常类型1 异常的变量名1){

// 程序代码

}catch(异常类型2 异常的变量名2){

// 程序代码

}finally{

// 程序代码

}

自定义异常:

很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。

自定义异常的使用例子:

自定义test1()方法,抛出 “我喝酒了”的异常信息,test2()方法调用test1()方法,并将异常包装成RuntimeException类型的异常,继续抛出,在main方法中调用test2()方法,并尝试捕获异常

public voidtest2() {try{

test1();

}catch(CustomException e){

RuntimeException exception= newRuntimeException(e);//exception.initCause(cause)

throwexception;

}

}public voidtest1() throws CustomException{throw new CustomException("我喝酒了");

}//main方法

public static voidmain(String[] args) {

CustomExceptionInitalobject = newCustomExceptionInital();//try{

object.test2();//}catch(Exception e){//e.printStackTrace();//}

}

java项目 异常如何解决_Java项目中常见的异常处理相关推荐

  1. java异常统一处理_Java 代码中的全局异常处理

    最近接手一个新项目,写用例的时候去翻看代码,发现部分代码里缺少基本的异常处理,包括对参数异常以及业务异常的处理.对照之前负责过的异常处理做得比较好的项目,给开发提了几点建议,顺便又去翻看了之前项目的代 ...

  2. 如何解决恶意APK中常见的Native代码加壳保护

    导语:在分析恶意软件时偶然会发现受Native代码加壳保护的APK,本文将介绍如何解决恶意APK中常见的Native代码加壳保护. 在分析恶意软件时偶然会发现受Native代码加壳保护的APK,大多数 ...

  3. java程序模拟atm机_Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...

  4. java runtime异常如何解决_成都汇智动力-Java中常见的RunTime异常及异常详解

    java.lang.ArithmeticException算术条件异常.譬如:整数除零等.java.lang.ArrayIndexOutOfBoundsException数组索引越界异常.当对数组的索 ...

  5. java 绑定微信号开发_Java开发中的常见危险信号

    java 绑定微信号开发 在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码有问 ...

  6. java抛异常 代替返回_Java使用和C++类似的异常处理

    Java使用和C++类似的异常处理 (2007-07-12 18:16:19) 1.处理错误的方法有很多流行方法 2.一般方法是把程序处理代码段分散到系统代码中,在可能发生错误的地方处理错误 优点:便 ...

  7. java类型转换异常_解决java.lang.ClassCastException的java类型转换异常的问题

    解决java.lang.ClassCastException的java类型转换异常的问题,异常,对象,错误,给大家,会报 解决java.lang.ClassCastException的java类型转换 ...

  8. java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图

    Java高级----异常处理机制.自定义异常----含思维导图 Java高级----异常处理机制.自定义异常----含思维导图 南一Java自学交流QQ群: 586012641 拒绝任何广告,共享Ja ...

  9. java io使用哪些设计模式_JAVA IO中的设计模式

    在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式. 在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和使用范畴做了 ...

最新文章

  1. ERROR: epmd error for host 192: badarg (unknown POSIX error)
  2. 揭开对机器学习的七点误解
  3. UI产品设计流程中的14个要点
  4. 将python文件打包成exe可运行文件
  5. matlab模拟gpd,如何用ARMA模型预测中国GDP
  6. [Leetcode]-containsNearbyDuplicate
  7. JavaScript中的String()函数与示例
  8. 操作系统(三)内存管理
  9. 机器学习解决问题思路 — 词嵌入矩阵E对于NLP问题的重要性
  10. linux中的帮助命令man(manual 手册,帮助,指南)
  11. Android--建立能与访问者进行相互通信的本地服务
  12. PySpark-Recipes : 写数据到Hive(local data)
  13. 【Leetcode 136】Single Number
  14. Crystal Ball 图标进入EXCEL后却没加载 Crystal Ball
  15. win10系统WiFi突然消失打不开,终极解决方法
  16. 8、项目管理基础知识
  17. Service phantomjs unexpectedly exited. Status code was: 1
  18. 系统架构设计师与系统分析师历年实体分析与解答下载_做Python数据分析5年了,复制粘贴是我最牛逼的技能,直到看到这些公众号,我学习了...
  19. Apache Druid安装部署手册
  20. Spring Boot 入门系列(二十三)整合Mybatis,实现多数据源配置!

热门文章

  1. android白色字体代码,Android实现状态栏白底黑字效果示例代码
  2. java目录实用工具_JAVA 创建文件和文件夹,删除文件和文件夹的实用工具
  3. 在java中的交换方法有哪些_java中交换两个变量的值有哪几种方法,交换两个变量a和b的值...
  4. oracle定时加载文件,采用sqlldr定时将文本文件加载进入数据库
  5. Shiro过滤器配置(ShiroFilterFactoryBean)
  6. RROR in main Module not found: Error: Can‘t resolve ‘index.js‘
  7. sde oracle11g,Arcsde post oracle11g报错解决办法
  8. idea 设置内存_IDEA新特性:提前知道代码怎么走!
  9. python格式字符_python格式字符
  10. mysql 5.0.37.tar.gz_Linux下MySQL5.0.37安装配置步骤