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");
}
}

java学习笔记12--异常处理的更多相关文章

  1. 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 ...

  2. Java学习笔记之异常处理

    一.异常的分类 1.由Java虚拟机抛出的异常(Error):程序无法处理的问题,用户不用去进行处理(虚拟机错误丶内存溢出错误丶线程死锁) 2.Exception异常:程序本身可以进行处理的异常 1. ...

  3. Java 学习笔记(11)——异常处理

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

  4. Java学习笔记12

    循环 打印一个字符串(例如: "Welcome to Java!") 100次,就需要吧下面的输出语句重复写100遍,这是相当繁琐的: System.out.println(&qu ...

  5. Java学习笔记之——异常处理

    1.异常: 在程序运行时,发生了一些错误导致程序不能正常结束或者中断 2.异常导致的后果 Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将其被提交 ...

  6. Java学习笔记-12.传递和返回对象

    1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...

  7. Java学习笔记12(面向对象五:构造方法、this再探)

    在开发中,经常需要在创建对象的同时明确对象对的属性值, 比如一个Person对象创建时候就应该有age和name等属性 那么如何做到在创建对象的同时给对象的属性初始化值呢? 这里介绍构造方法: 1.构 ...

  8. java学习笔记12(final ,static修饰符)

    final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  10. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. Linux内存管理中的slab分配器

    转载自:http://edsionte.com/techblog/archives/4019 Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的. ...

  2. 【转载】ARouter-万能路由协议

    Github源码地址:https://github.com/alibaba/ARouter 一.功能介绍 支持直接解析标准URL进行跳转,并自动解析参数注入 支持多模块工程使用 支持添加多个拦截器,自 ...

  3. 【交叉染色法判断二分图】Claw Decomposition UVA - 11396

    题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该 ...

  4. 【Java】SpringBoot入门学习及基本使用

    SpringBoot入门及基本使用 SpringBoot的介绍我就不多说了,核心的就是"约定大于配置",接下来直接上干货吧! 本文的实例: github-LPCloud,欢迎sta ...

  5. Cable master POJ - 1064

    Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Commi ...

  6. 克鲁斯卡尔(并查集)hdu 1233

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. hpu 1194 Sequence

    HS(Handsome)的Ocean在纸上写下NN个整数,Ocean把它定义为OO序列. Ocean认为一个序列的价值的是:序列中不同元素个数. 现在他想知道OO序列中所有子序列的价值之和. 比如说: ...

  8. web项目启动执行方法

    近期在项目中需要将用户在web启动时就查询出来,当作缓存使用. 一.首先需要实现 ServletContextListener 接口 public class UserCacheUtils imple ...

  9. 51nod部分容斥题解

    51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...

  10. [CC-ANUCBC]Cards, bags and coins

    [CC-ANUCBC]Cards, bags and coins 题目大意: 给你\(n(n\le10^5)\)个数,\(q(q\le30)\)次询问,问从中选取若干个数使得这些数之和为\(m(m\l ...