目录

一、异常的概念

二、异常的分类

三、异常的捕获和处理

四、使用自定义异常

一、异常的概念

java异常是指java提供的用于处理程序运行过程中错误的一种机制

所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,索要读取的文件不存在等)

设计良好的程序应该在异常发生时提供处理这些错误的方法,是的程序不会因为异常的发生而阻断或产生不可预见的结果

java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被其提交给java运行系统,这个过程成为抛出(throw)异常

当java运行时系统接受到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程成为捕获(catch)异常

//一个捕获异常的示例
public class test {
public static void main(String args[]) {
try {
System.out.println(2/0);
} catch (ArithmeticException ae) {
System.out.print("运行出错!");
}
}
}

二、异常的分类

Throwable:可被抛出的

Error:系统错误,做自己处理不了的

Exception:自己可以做处理的,可以catch的

RuntimeExpetion:经常出的错误(这种错误可以catch,也可以不catch)

还有一种exception是必需要去捕获的

三、异常的捕获和处理

try {
//可能抛出异常的语句
} catch ( SomeException1 e ) {
......
} catch ( SomeException2 e) {
......
} finally {
......
}
  • try代码段包含可能产生异常的代码
  • try代码段后根由一个或多个catch代码段
  • 每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法
  • 当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的catch代码段
  • finally段的代码无论是否发生异常都会在最后进行执行

try{

  • try语句指定了一段代码,该段代码就是一次捕获并处理例外的范围。
  • 在执行过程中该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理
  • 如果没有例外产生,所有的catch代码段都被略过不执行

} catch ( ) {

  • 在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象
  • 在catch中声明的异常对象(catch(someException e))封装了异常时间发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。
  • 例如:getMessage()方法:用来得到有关异常事件的信息。printStackTrace()方法:用来跟踪异常事件发生时执行堆栈的内容。

}  finally (){

  • finally语句为异常处理提供一个统一的出口,是的在控制流程转到程序的其他部分以前,能够对程序的状态做统一的管理
  • 无论try所指定的程序块中是否抛出例外,finally所指定的黛娜都要被执行。
  • 通常在finally语句中可以进行资源的清除工作,如:关闭打开的文件,删除临时文件等

对于一些自己处理不了的异常或是自己不想去处理的异常,可以直接往外抛异常,这样就可以不用在代码段中加try{}catch{}

//一个抛出异常的例子
public class test {
public static void main(String args[]) throws IOException {
test();
} static void test() throws IOException {
System.out.println(2/0);
}
}
//不加try...catch的另外一种抛异常方法
public class test {
public static void main(String args[]) throws IOException {
int i = 0;
if (i == 0) {
throw new IOException("出错了");
}
}
}

看一个例子,这就是打印的堆栈信息,虽然报错很多行,但是或许只要更改一次就可以解决:

另外在捕获异常的时候注意下面这种问题:

四、使用自定义异常

使用自定义异常一般有如下步骤:

1.通过继承java.lang.Exception类声明自己的异常类

2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出

3.在方法的声明部分用throws语句声明该方法可能抛出的异常

//创建一个exception类存放自己的exception
public class MyExpection extends Exception {
private int id;
public MyExpection (String message,int id) {
super(message);
this.id = id;
}
public int getId() {
return id;
}
}
//测试类
public class Test {
//定义一个方法
public void regist(int num) throws MyExpection {
if(num < 0) {
throw new MyExpection("不应该为负值", 3);
}
System.out.println("登记人数: "+ num);
}
//定义另一个方法
public void manager() {
try {
regist(100);
} catch (MyExpection e) {
System.out.println("登记失败,出错类型码="+e.getId());
e.printStackTrace();
}
System.out.println("操作结束!");
}
//程序入口main方法
public static void main(String[] args) {
Test t = new Test();
t.manager();
}
}

可以自己调试输出

注意:

当原方法有异常时重写该方法需要抛出与原方法所抛出异常类型一致的异常或不抛出异常,其他情况都无法进行重写

六、java异常处理的更多相关文章

  1. java异常处理机制

    本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...

  2. Java 异常处理机制和集合框架

    一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...

  3. java异常处理机制 (转载)

    java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...

  4. Java—异常处理总结

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...

  5. 如何正确使用Java异常处理机制

    文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...

  6. [ Java学习基础 ] Java异常处理

    一.异常概述 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Sys ...

  7. Java异常处理机制难点解惑-用代码说话

    是否需要看这篇文章? 下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerE ...

  8. Java 异常处理的误区和经验总结

    Java 异常处理的误区和经验总结   1 本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员 ...

  9. 基础知识《十一》Java异常处理总结

    Java异常处理总结           异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制 ...

  10. 深入探索 高效的Java异常处理框架

    转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...

随机推荐

  1. 【quickhybrid】如何实现一个Hybrid框架

    章节目录 [quickhybrid]如何实现一个跨平台Hybrid框架 [quick hybrid]架构一个Hybrid框架 [quick hybrid]H5和Native交互原理 [quick hy ...

  2. Daily Scrum 11.15

    今日完成任务: 1.在回答页面显示用户的相关信息 2.重写了搜索方法,并在自己的Demo网站测试成功 3.修改问题实体属性,加入悬赏积分:并在问题列表页面显示问题悬赏分数 遇到困难:一个是对于学长的搜 ...

  3. java 框架 面试

    Java—SSH(MVC)1. 谈谈你mvc的理解MVC是Model—View—Controler的简称.即模型—视图—控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC ...

  4. HDU 2262 Where is the canteen 期望dp+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...

  5. Cosplay之孩子的妈咪

    很荣幸的担任“孩子妈妈”的角色,站在父母的角度去思考怎样的一个四则运算的APP才算是符合要求,可以受到广大家长的喜爱.不外乎有这样一些功能:1.可以随时的给孩子出题目,而且可以很快的得出正确答案.分析 ...

  6. git学习-综合性文章

    文章:[转载]理解 Git 分支管理最佳实践 首先介绍了git各种分支:

  7. Week2-作业一——《构建之法》三章精读之想

    Week2-作业一——精读<构建之法> 前言 其实我本人是不经常看书的,电子书倒是看了不少,实体书真的不经常看,但是为了这次作业的需求,我还是选择静下心来阅读一下这本<构建之法> ...

  8. 四则运算web版

    1)在文章开头给出Coding.Net项目地址.(1') https://git.coding.net/meiyoupiqidefan/jieduizuoye.git url测试地址:http://3 ...

  9. Linux上多次restore Tensorflow模型报错

    环境:python3,tensotflow 在恢复了预先训练好的模型进行预测时,第一次是能够成功执行的,但我多次restore模型时,出现了以下问题: 1.ValueError: Variable c ...

  10. 初入React(一)

    React:是2013年Facebook在github上的一个开源js库,它将用户界面抽象为一个个组件,再由开发者将其组合成页面.它不是完整的MVC/MVVM框架,专注于提供清晰.简洁的view层解决 ...