java学习笔记系列:

java学习笔记11--集合总结

java学习笔记10--泛型总结

java学习笔记9--内部类总结

java学习笔记8--接口总结

java学习笔记7--抽象类与抽象方法

java学习笔记6--类的继承、Object类

java学习笔记5--类的方法

java学习笔记4--对象的初始化与回收

java学习笔记3--类与对象的基础

java学习笔记2--数据类型、数组

java学习笔记1--开发环境平台总结

本文地址: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");
}
}

最新文章

  1. 看懂UML类图与时序图
  2. 完全卸载Oracle方法、步骤
  3. sql插入删除表内字段基础操作
  4. 一些判断Linux是否被黑的经验
  5. log4j 使用笔记整理中
  6. Lucene简介
  7. [core java学习笔记][第六章接口与内部类]
  8. 计蒜客NOIP模拟赛(2)D1T3 深黑幻想
  9. 解决CSDN需要登录才能看全文
  10. java 反射模式
  11. H5上传图片之canvas
  12. MySQL(四)
  13. day12 十二、开放封闭、装饰器
  14. js a标签 + ajax 多参数穿参
  15. centos7 清除系统日志、历史记录(包括history)、登录信息
  16. linux获取精准进程PID之pgrep命令
  17. iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
  18. nginx 学习笔记(6) nginx配置文件中的度量单位
  19. SpringBoot 入门(一)
  20. 代码上传不到github远程仓库的经历和总结

热门文章

  1. Java经典设计模式之十一种行为型模式
  2. 洛谷——P1330 封锁阳光大学
  3. nyoj 214 单调递增子序列(二)
  4. Python实现简单的API接口
  5. HDU 3339 In Action【最短路+01背包】
  6. POWEROJ 2610 判断回文串 【HASH】
  7. 在阅读sqlmap源码时学到的知识--检查运行环境
  8. AX5511 Boost Converter
  9. Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
  10. CentOS6.5使用yum命令方便快捷安装Nginx与卸载