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 ...
随机推荐
- NEO4j简单入门
Neo4j是: 一个开源 无Schema 没有SQL 图形数据库 图形数据库也称为图形数据库管理系统或GDBMS. Neo4j的官方网站:http://www.neo4j.org Neo4j的优点 它 ...
- Java面向对象封装和继承
面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...
- 实验吧--隐写术--九连环--WriteUp
题目: http://ctf5.shiyanbar.com/stega/huan/123456cry.jpg 是一张图: 放到binwalk查看一下 发现存在压缩文件. 使用-e参数将文件分离 打开文 ...
- 一个简单的ConnectionPool,手动搞
看了一圈, 没看到稍微好用的ConnectionPool, 除了一个aiomysql, 但是这个是异步的, 我暂时没有用到这么高版本的Python, 所以就动手造一个轮子. 原理比较简单, 先造一个线 ...
- 【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1089 Solved: 533 Description ...
- 【BZOJ 4035】 4035: [HAOI2015]数组游戏 (博弈)
4035: [HAOI2015]数组游戏 Time Limit: 15 Sec Memory Limit: 32 MBSubmit: 181 Solved: 89 Description 有一个长 ...
- 【尺取法好题】POJ2566-Bound Found
[题目大意] 给出一个整数列,求一段子序列之和最接近所给出的t.输出该段子序列之和及左右端点. [思路] ……前缀和比较神奇的想法.一般来说,我们必须要保证数列单调性,才能使用尺取法. 预处理出前i个 ...
- 压测工具Siege
一.下载 http://www.joedog.org/ http://www.joedog.org/pub/siege/siege-2.70.tar.gz 二.测试 siege -c200 -r10 ...
- EMGU 2.9.X在VS2010下调试真正靠谱的配置
emgu有多强大或者干什么的网上找资料吧.这里就说说我在2010下的配置的经历. 在网上找了很多资料,有细节到一步一步的,但我跟着弄还是没有成功.比如修改cpu,复制emgu的bin目录下某些所需文件 ...
- 对Java Serializable(序列化)的理解和总结(一)
导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean ...