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 ...
随机推荐
- Linux内存管理中的slab分配器
转载自:http://edsionte.com/techblog/archives/4019 Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的. ...
- 【转载】ARouter-万能路由协议
Github源码地址:https://github.com/alibaba/ARouter 一.功能介绍 支持直接解析标准URL进行跳转,并自动解析参数注入 支持多模块工程使用 支持添加多个拦截器,自 ...
- 【交叉染色法判断二分图】Claw Decomposition UVA - 11396
题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该 ...
- 【Java】SpringBoot入门学习及基本使用
SpringBoot入门及基本使用 SpringBoot的介绍我就不多说了,核心的就是"约定大于配置",接下来直接上干货吧! 本文的实例: github-LPCloud,欢迎sta ...
- Cable master POJ - 1064
Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Commi ...
- 克鲁斯卡尔(并查集)hdu 1233
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hpu 1194 Sequence
HS(Handsome)的Ocean在纸上写下NN个整数,Ocean把它定义为OO序列. Ocean认为一个序列的价值的是:序列中不同元素个数. 现在他想知道OO序列中所有子序列的价值之和. 比如说: ...
- web项目启动执行方法
近期在项目中需要将用户在web启动时就查询出来,当作缓存使用. 一.首先需要实现 ServletContextListener 接口 public class UserCacheUtils imple ...
- 51nod部分容斥题解
51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...
- [CC-ANUCBC]Cards, bags and coins
[CC-ANUCBC]Cards, bags and coins 题目大意: 给你\(n(n\le10^5)\)个数,\(q(q\le30)\)次询问,问从中选取若干个数使得这些数之和为\(m(m\l ...