1.Throwable 继承体系
* Eorro
* Exception
--RuntimeException 该类及其子类用于表示运行时异常,Exception类下所有其他子类都用于表示编译时异常。
--其他子类 2.Throwable 常用方法
* String getMessage() 返回此 throwable 的详细消息字符串
* void printStackTrace() 将此throwable 及其追踪输出至标准错误流
* void printStackTrace(PrintStream s) 将此throwable 及其追踪输出到指定的输出流 3.try ... catch
* 程序发生异常会立即终止,无法继续向下执行。为了解决这样的问题,Java中提供了一个中对异常进行处理的方式--异常捕获 class ExampleTest{ public static void main(String[] args){ try{
int result = divide(4,0);
System.out.println(result); }catch(Exception e){
System.out.println("捕获异常信息为:"+e.getMessage());
}
System.out.println("程序继续向下执行");
} public static int divide(int x,int y){
int result = x / y;
return result;
}
}
--对可能发生异常的代码用 try ... catch语句进行处理。
--在try代码中发生被0除的异常,程序会转而执行catch中的代码。
--在try代码中,发生异常语句后面的代码是不会被执行的【System.out.println(result);】。
--catch代码块对异常处理完毕后,程序仍会向下执行,而不会异常终止。语句【System.out.println("程序继续向下执行");】仍会被执行 4.finally
* 程序中有些语句无论程序是否发生异常都要被执行,这时就可以在try...catch语句后加一个finally代码块。
class ExampleTest{ public static void main(String[] args){ try{
int result = divide(4,0);
System.out.println(result); }catch(Exception e){
System.out.println("捕获异常信息为:"+e.getMessage());
return; //用于结束当前语句
}finally{
System.out.println("进入finally代码块");
}
System.out.println("程序继续向下执行");
} public static int divide(int x,int y){
int result = x / y;
return result;
}
}
--catch代码块中增加了return语句,用于结束当前方法,此时语句【System.out.println("程序继续向下执行");】就不会再被执行
--finally 中的代码块仍会被执行
--由于finally代码块的特性,通常用finally代码块释放系统资源 * finally代码块有一种情况下是不会被执行的,那就是在try...catch语句中执行了【System.exit(0)】,该语句表示退出当前虚拟机。 5.throws 关键字
-- 在上面的例子中,由于调用的是自己写的divide()的方法,因此很清楚该方法可能会发生异常。试想一下,如果是别人来调用该divide()方法,他如何判断该方法是否会产生异常及什么类型的异常?
-- 针对这种情况,java中允许在方法的后面使用throws关键字对外声明该方法有可能产生何种类型的异常。这样,调用者就明确知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过
-- throws 关键字声明抛出异常的语法格式:修饰符 返回值类型 方法名([参数1,参数2.....]) throws Exception1[,Exception2.......] class ExampleTest{ public static void main(String[] args){ int result = divide(4,2);
System.out.println(result);
} // 使用throws 关键字声明抛出异常
public static int divide(int x,int y) throws Exception{
int result = x / y;
return result;
}
} --由于定义divide()方法时声明抛出异常,但调用divide()方法时未做处理(异常捕获或在main方法级别继续throws),因此无法编译 class ExampleTest{ public static void main(String[] args){ try{
int result = divide(4,0);
System.out.println(result); }catch(Exception e){
System.out.println("捕获异常信息为:"+e.getMessage());
return; //用于结束当前语句
}
} // 使用throws 关键字声明抛出异常
public static int divide(int x,int y) throws Exception{
int result = x / y;
return result;
}
} 6.自定义异常
* 自定义异常类必须继承自Exception或其子类 //自定义一个异常类继承自 Exception
public class DivideByMinusException extends Exception { public DivideByMinusException() {
super(); //调用 Exception 无参的构造方法
} public DivideByMinusException(String message) {
super(message); //调用 Exception 有参的构造方法
} } * 自定义异常类的使用 需要用到关键字 throw,其格式:throw new 异常对象 public class ExampleTest { public static void main(String[] args) { int result = divide(4,-2);
System.out.println(result); } // 未使用throws 关键字声明抛出异常
public static int divide(int x,int y) {
if(y<0){
throw new DivideByMinusException ("被除数是负数");
} int result = x / y;
return result;
}
} --程序在编译时会发生异常。在一个方法内使用throw关键字抛出异常对象时,需要在该方法上使用throws关键字声明抛出异常。并在上一级调用中使用try...catch捕获异常 public class ExampleTest {
public static void main(String[] args) { int result;
try {
result = divide(4,-2);
System.out.println(result);
} catch (DivideByMinusException e) {
e.printStackTrace();
}
} // 使用throws 关键字声明抛出异常
public static int divide(int x,int y) throws DivideByMinusException {
if(y<0){
throw new DivideByMinusException ("被除数是负数");
} int result = x / y;
return result;
} }

java(4) 异常的更多相关文章

  1. java的异常

    下面是我对Java异常知识的几个小总结,也算是资源回收一下 一.Java异常的知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运 ...

  2. 《java中异常和错误》

    异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发 ...

  3. Atitit java的异常exception 结构Throwable类

    Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...

  4. Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  5. java 异常

    异常简介 java中有Error和Exception Error:是程序无法处理的错误,表示运行应用程序中较严重问题.大多数错误与代码编写者执行操作无关,而表示运行时JVM出现的问题. Excepti ...

  6. Java基础——异常体系

    在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...

  7. Java并发编程:Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  8. 【转】Java ConcurrentModificationException异常原因和解决方法

    原文网址:http://www.cnblogs.com/dolphin0520/p/3933551.html Java ConcurrentModificationException异常原因和解决方法 ...

  9. JAVA基础——异常详解

    JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...

  10. 你真的会阅读Java的异常信息吗?

    给出如下异常信息: java.lang.RuntimeException: level 2 exception at com.msh.demo.exceptionStack.Test.fun2(Tes ...

随机推荐

  1. php 字符串 以 开头 以结尾 startWith endWith

    From: http://www.shipingzhong.cn/node/1217 //第一个是原串,第二个是 部份串function startWith($str, $needle) { retu ...

  2. UITableView 顶部能够放大的图片

    UITableView 顶部能够放大的图片 现在有挺多的应用在 UITableView 顶部加入图片,通过拖拽 UITableView 来实现图片的放大. 对比一下腾讯出品的两款App QQ:可展示更 ...

  3. scp 链接文件的问题 + tar

    将本地的文件上传到服务器上,希望保持相对链接关系.(链接文件和被链接文件都在同一的目录下) 使用scp进行传输时,链接关系不会保存,所以需要解决下.(当然可以使用rsync或tar解决,但是rsync ...

  4. Oracle统计每条数据的大小

    怎么查询一条记录到底占了多少空间呢,随便用一个表举例(如上图),就着解决眼前问题的原则(oracle),网上简单查了查,发现生效了,就没深入了解了,包括其它数据库怎么解决,都没做研究.Oracle下, ...

  5. Maven Missing artifact jar

    maven error:Multiple annotations found at this line: - Missing artifact log4j:log4j:jar:1.2.15:compi ...

  6. 本文将详细介绍oracle 10g OEM常规错误

    本文将详细介绍oracle 10g OEM常规错误-------Unknown host specified解决方法,需要了解的朋友可以参考下 详细出处参考:http://www.jb51.net/a ...

  7. python 使用循环生成list

    #-*- coding:UTF-8 -*- squares=[] for x in range(10): squares.append(x**2) print squares #[0, 1, 4, 9 ...

  8. Android开发学习笔记-实现联网检测程序版本

    package com.frank.mobilesafe; import java.io.InputStream; import java.net.HttpURLConnection; import ...

  9. 使用pycharm,追求最优的代码。

    1.最近追求的是代码0警告,没有任何提示. 怎么追求这样的目标,不需要再去单独使用pylint和flake8这些玩意,只需要看pycharm右边编辑区的竖向滚动条的黄色就可以了. 2. 比较糟糕的就是 ...

  10. Java使用for循环输出杨辉三角

    杨辉三角形由数字排列,可以把它看做一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方的数字与左上角数值之和.编写程序,使用for循环输出包括10行在内的杨辉三角形. 思路是创建一个整型二 ...