六、java异常处理
目录
一、异常的概念
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异常处理的更多相关文章
- java异常处理机制
本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- java异常处理机制 (转载)
java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...
- Java—异常处理总结
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- [ Java学习基础 ] Java异常处理
一.异常概述 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Sys ...
- Java异常处理机制难点解惑-用代码说话
是否需要看这篇文章? 下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerE ...
- Java 异常处理的误区和经验总结
Java 异常处理的误区和经验总结 1 本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员 ...
- 基础知识《十一》Java异常处理总结
Java异常处理总结 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制 ...
- 深入探索 高效的Java异常处理框架
转载自:http://www.sunwei.org/archives/196 摘要:本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Sprin ...
随机推荐
- 为什么找程序员一定要看他的 GitHub
听说 最开始听到这句话是某知名互联网公司大牛告诉我的,我很不以为然,不过迫于他是"leader"我也注册了一个 highsea (广告 0.0):当然我可懒得 push 更别提 c ...
- map的运用
一.map是一种关联容器,支持高效的查找和访问 map中的元素是一些关键字-值(key-value)对: 关键字起索引作用: 值表示与索引相关联的数据. 关联容器中元素是根据关键字存储的,故其不支持位 ...
- Team Member Introduction and Division of Work
Team leader Name:宋天舒 Student Number:12061166 Interested In: Information safety. Responsible For: Des ...
- Alpha阶段产品功能说明
先展示一下我们的功能流程图吧~ 一.学生用户 1. 学生登陆注册 BuaaClubs是北航所有在校生都可以注册登录的网站. 登陆界面是这样哒~ 2. 浏览报名活动 同学们可以在这个网站上查看所有社团发 ...
- 2018软工实践—Beta冲刺(6)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 最终测试文稿编写 展示GitHub当日代码/文档签入记录 ...
- Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter
几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...
- 300道随机四则运算小程序(java编写)
这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...
- 蜗牛慢慢爬 LeetCode 5.Longest Palindromic Substring [Difficulty: Medium]
题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum le ...
- 基于JQuery的前端form表单操作
Jquery的前端表单操作: jquery提供了良好的方法封装,在一些基本的操作的时候,能节省很多的麻烦,其中,在具体使用时,form表单的数据提交是最频繁也最常见的前后数据交换方式,所以在前 ...
- crosses initialization of “XXX” 的问题
在switch-case中定义了变量,用g++编译的时候报错crosses initialization of “XXX” ,在网上一查,说是gcc要求变量的定义不能位于goto之后 将变量定义放在s ...