• 异常简介

  有异于常态,和正常情况不一样,有错误出现,阻止当前方法或作用域,称为异常。

  Java中的异常类都继承Throwable类,它有两个子类:Error和Exception。Error很少接触,主要指虚拟机错误、线程死锁等。Exception异常,可能是编码、环境、用户操作输入出现问题。

  Exception有很多子类,主要有RuntimeException(非检查异常)和其他异常类(检查异常)。其中引起RuntimeException可能是NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类型转换异常)和ArithmeticException(算术异常)等,说明代码的逻辑有问题,需要改进代码,他们都是RuntimeException的子类。引起检查异常可能是IOException(文件异常)、SQLException(SQL异常)等。

  • 处理异常
try{
//一些会抛出异常的方法
} catch (Exception e) {
//处理异常的代码块
}

  try抛出异常后,抛出异常的方法会终止执行,程序的控制权将被移交给catch块中的异常处理程序。try-catch语句块执行完之后,外面的语句会顺序执行。

  如果会出现多种类型的异常,这时用到了多重catch块,在try块后用多个catch块来捕获多种类型的异常,对其进行相应的处理。

try{
//一些会抛出异常的方法
} catch (Exception e) {
//处理异常的代码块
} catch (Exception2 e) {
//处理异常的代码块
} ...(n个catch块)...{
}

  注意先子类后父类的顺序编写catch语句块。

  用try-catch语句块处理完异常后,进行善后工作,可以用finally语句块。

try{
//一些会抛出异常的方法
} catch (Exception e) {
//处理异常的代码块
} catch (Exception2 e) {
//处理异常的代码块
} ...(n个catch块)...{
} finally {
//最终将要执行的一些代码
}

  • 异常抛出

  throw — 将产生的异常抛出

  throws — 声明将要抛出何种类型的异常

public void 方法名(参数列表) throws 异常列表 {
//调用会抛出异常的方法或者throw new Exception();
}

  可以抛出多种类型异常,每种异常类型中间用逗号隔开。如果某个方法调用了抛出异常的方法,那么这个方法必须添加try-catch语句去捕获这种异常,或者添加throws声明,将异常抛出给更上一层的调用者去进行处理。

package com.test;

public class Demo {
public static void main(String[] args) {
Demo demo = new Demo15();
demo.complete();
try {
demo.complete1();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public void devide(int one, int two) throws Exception {
if (two == 0) {
throw new Exception("两数相除,除数不能为0");
} else {
System.out.println("两数相除,结果为:" + one / two);
}
} public void complete() {
try {
devide(5, 0);
} catch (Exception e) {
System.out.println(e.getMessage());
}
} public void complete1() throws Exception {
devide(3, 0);
}
}

  执行结果:

  两数相除,除数不能为0
  两数相除,除数不能为0

  • 自定义异常
class 自定义异常类 extends 异常类型 {

}
package com.test;

public class MyException extends Exception {
public MyException () { }
public MyException(String message) {
super(message);
}
}
  • 异常链
package com.test;

public class ExceptionChain {
public static void main(String[] args) {
ExceptionChain ec = new ExceptionChain();
try {
ec.test2();
//ec.test3();
} catch (Exception e) {
e.printStackTrace();
}
}
public void test1() throws Exception {
throw new Exception("抛出异常1");
}
public void test2() {
try{
test1();
} catch (Exception e) {
RuntimeException newExc = new RuntimeException("抛出异常2");
newExc.initCause(e);
throw newExc;
} }

public void test3() {
try{
test1();
} catch (Exception e) {
//处理异常的另一种形式
RuntimeException newExc = new RuntimeException(e);
throw newExc;
} }
}

  执行结果:

java.lang.RuntimeException: 抛出异常2
at com.test.ExceptionChain.test2(ExceptionChain.java:20)
at com.test.ExceptionChain.main(ExceptionChain.java:7)
Caused by: java.lang.Exception: 抛出异常1
at com.test.ExceptionChain.test1(ExceptionChain.java:14)
at com.test.ExceptionChain.test2(ExceptionChain.java:18)
... 1 more

Java —异常的更多相关文章

  1. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  2. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  3. Java异常体系及分类

    上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...

  4. Java异常之自定义异常

    哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...

  5. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

  6. java 异常

    1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return  和  throw的区别 return 符合函数要求的值    throw  有问题的时候用它结束 ...

  7. 3.Java异常进阶

    3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...

  8. 2.Java异常学习

    1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...

  9. java异常架构图 和几个面试题

    1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...

  10. 黑马----JAVA异常

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...

随机推荐

  1. CF912E Prime Gift 数学

    Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manag ...

  2. C语言变量:名称、地址和值

    变量的名称.地址和变量的值之间关系密切. 我们可以认为变量有两个属性:名称和值(其他属性暂不讨论): 计算机编译和加载后也认为变量有两个属性:地址和值.地址就是变量在计算机内部的名称. 许多语言中地址 ...

  3. CF628D Magic Numbers (数据大+数位dp)求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数

    题意:求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数(这里的偶数位是的是从高位往低位数的偶数位).a,b<10^2000,m≤2000,0≤d≤9 a,b< ...

  4. Java8 流的使用示例

    foreach遍历处理 dataList.stream().forEach(index -> sb.append(dataList.get(index) + "',")); ...

  5. 两个数据库通过DataTable实现差异传输

    两个主要方法 /// <summary>/// 用途:/// 用源表和目标表比较,返回差异的数据(目标表为参照物)/// /// 逻辑:/// 1.合并两个表/// 2.循环合并后得到的表 ...

  6. 解决报错:import sun.misc.BASE64Decoder无法找到

    解决报错:import sun.misc.BASE64Decoder无法找到 2017年09月29日 16:03:26 chaoyu168 阅读数:2116 标签: sun.misc.BASE64De ...

  7. js Form表单转json格式,及后台接收(多种方法)

    转载:https://blog.csdn.net/qq_40138785/article/details/81533015 一.serialize()方法格式:var data = $("# ...

  8. struts1学习

    转载:https://blog.csdn.net/toyouheart/article/details/4509466

  9. Python模块:operator简单介绍

    Python官方文档地址:https://docs.python.org/3.6/library/operator.html?highlight=operator Operator提供的函可用于对象比 ...

  10. java——为什么要有接口?和抽象类有什么不一样?

    1.接口不是类,为什么? 接口如果是类,那就失去了java引入接口的意义了. java之所以引入接口,就是为了弥补不能多继承的缺点,在java中每个类只能有一个超类,但却可以实现多个接口. 2.接口可 ...