java学习笔记12--异常处理
java学习笔记系列:
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note12.html,转载请注明源地址。
1、异常处理概述
从一个读取两个整数并显示商的例子:
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
System.out.print("Enter two integers: ");
int number1 = input.nextInt();
int number2 = input.nextInt();
System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
}
Enter two integers: 3 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:18)
解决的一个简单的办法是添加一个if语句来测试第二个数字:
public class Main
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in); System.out.print("Enter two integers: ");
int number1 = input.nextInt();
int number2 = input.nextInt();
if(number2 != 0)
System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
else
System.out.println("Divisor cannot be zero ");
}
}
为了演示异常处理的概念,包括如何创建、抛出、捕获以及处理异常,继续改写上面的程序如下:
public class Main
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in); System.out.print("Enter two integers: ");
int number1 = input.nextInt();
int number2 = input.nextInt();
try {
if(number2 == 0)
throw new ArithmeticException("Divisor cannot be zero");
System.out.println(number1 + " / " + number2 + " is " + (number1 / number2));
}
catch(ArithmeticException ex) {
System.out.println("Exception: an integer " + "cannot be divided by zero ");
}
System.out.println("Execution continues ...");
}
}
2、异常处理的优势
改用方法来计算商:
public class Main
{
public static int quotient(int number1, int number2) {
if(number2 == 0)
throw new ArithmeticException("Divisor cannot be zero");
return number1 / number2;
} public static void main(String args[])
{
Scanner input = new Scanner(System.in); System.out.print("Enter two integers: ");
int number1 = input.nextInt();
int number2 = input.nextInt();
try {
int result = quotient(number1, number2);
System.out.println(number1 + " / " + number2 + " is " + result);
}
catch(ArithmeticException ex) {
System.out.println("Exception: an integer " + "cannot be divided by zero ");
}
System.out.println("Execution continues ...");
}
}
异常处理的优势就是将检测错误从处理错误中分离出来。
3、异常类型

4、关于异常处理的更多知识
java的异常处理模型基于三种操作:声明一个异常、抛出一个异常、捕获一个异常

声明异常
在方法中声明异常,就是在方法头中使用关键字throws,如下所示:
public void myMethod throws Exception1,Exception2,……,ExceptionN
抛出异常
检测一个错误的程序可以创建一个正确的异常类型的实例并抛出它
实例:
IllegalArgumentException ex = new IllegalArgumentException("Worng Argument");
throw ex;
或者直接:
throw new IllegalArgumentException("Worng Argument");
捕获异常
当抛出一个异常时,可以在try-catch中捕获和处理它:
try {
statements;
} catch (exception1 ex1){
handler for exception1;
} catch (exception1 ex2){
handler for exception2;
}
……
catch (exception1 exN){
handler for exceptionN;
}
从异常中获取信息
可以采用Throwable类中的方法获取异常的信息
public class test {
public static void main(String[] args) {
try {
System.out.println(sum(new int[]{1,2,3,4,5}));
} catch(Exception ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
System.out.println(ex.toString());
System.out.println("Trace Info Obtained from getBackTrace");
StackTraceElement[] traceElements = ex.getStackTrace();
for(int i = 0; i < traceElements.length; i++) {
System.out.print("monthod " + traceElements[i].getMethodName());
System.out.println("(" + traceElements[i].getClassName());
System.out.println(traceElements[i].getLineNumber() + ")");
}
}
}
private static int sum(int[] list) {
int sum = 0;
for(int i = 0; i <= list.length; i++) {
sum += list[i];
}
return sum;
}
}
finally语句
无论异常是否出现,都希望执行某些代码,这时可以采取finally子句:
public class test {
public static void main(String[] args) {
PrintWriter output = null;
try {
output = new PrintWriter("wu.txt");
output.println("wlecome tio java");
} catch(IOException ex) {
ex.printStackTrace();
} finally {
if(output != null)
output.close();
}
System.out.println("End of the program");
}
}
java学习笔记12--异常处理的更多相关文章
- java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlA ...
- Java学习笔记之异常处理
一.异常的分类 1.由Java虚拟机抛出的异常(Error):程序无法处理的问题,用户不用去进行处理(虚拟机错误丶内存溢出错误丶线程死锁) 2.Exception异常:程序本身可以进行处理的异常 1. ...
- Java 学习笔记(11)——异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.ou ...
- Java学习笔记12
循环 打印一个字符串(例如: "Welcome to Java!") 100次,就需要吧下面的输出语句重复写100遍,这是相当繁琐的: System.out.println(&qu ...
- Java学习笔记之——异常处理
1.异常: 在程序运行时,发生了一些错误导致程序不能正常结束或者中断 2.异常导致的后果 Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将其被提交 ...
- Java学习笔记-12.传递和返回对象
1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...
- Java学习笔记12(面向对象五:构造方法、this再探)
在开发中,经常需要在创建对象的同时明确对象对的属性值, 比如一个Person对象创建时候就应该有age和name等属性 那么如何做到在创建对象的同时给对象的属性初始化值呢? 这里介绍构造方法: 1.构 ...
- java学习笔记12(final ,static修饰符)
final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
随机推荐
- LeetCode 16. 3Sum Closest(最接近的三数之和)
LeetCode 16. 3Sum Closest(最接近的三数之和)
- 2017-2018-1 20179202《Linux内核原理与分析》第二周作业
本周着重学习了汇编指令,并通过反汇编C程序了解栈帧变化. 实践 看了孟老师的演示视频后,我重新写了C程序,如下: int main() { int a=1,b=2; return g(a,b); } ...
- 2017/11/13 Leetcode 日记
2017/11/13 Leetcode 日记 463. Island Perimeter You are given a map in form of a two-dimensional intege ...
- shell中的cat和文件分界符(<<EOF) (转)
原文地址: http://blog.csdn.net/mosesmo1989/article/details/51123257 在shell中,文件分界符(通常写成EOF,你也可以写成FOE或者其他任 ...
- CSS 笔记——阴影、圆角、旋转、光标
7. 阴影.圆角.旋转.光标 (1)box-shadow 阴影 基本语法 text-shadow: h-shadow v-shadow blur color; box-shadow: h-shadow ...
- Python字典树实现
class Trie: # word_end = -1 def __init__(self): """ Initialize your data structure he ...
- hdu 4352 数位dp+nlogn的LIS
题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数. 链接:点我 该题的关键是记录LIS的状态,学习过nlogn解法的同学都知道,我们每次加入的元素要和前面的比对替换,这里就 ...
- CCTableView使用及其ViewSize动态调整
cocos2dx的CCTableView使用及其ViewSize动态调整,直接上代码参考如下: // // summary : 水平滑动样式的TableView用法 void createGlobal ...
- bzoj4567 背单词
Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计 ...
- Codeforces Round #302 (Div. 2) B. Sea and Islands 构造
B. Sea and Islands Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544/p ...