• 异常简介

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

  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. springboot整合actuator,进行运维监控

    首先引入依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. Dell N5010 Win7下 玩CS全屏(1366*768)问题

    在Dell N5010 Win7 下完CS1.6 全屏不了,以下是解决办法 1.按windows+r键打开 运行 窗口,输入regedit,打开注册表 2.依次点开 HKEY_LOCAL_MACHIN ...

  3. SprimgMVC学习笔记(八)—— SpringMVC与前台json数据交互

    一.两种交互形式 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析, ...

  4. IDEA 一些 莫名其妙的错误....解决办法...

    1.  如果 一直 update indices......... windows : 删除 c 盘 用户目录下 .IntelliJIdea2017.3/system/caches  目录 ..... ...

  5. java nio 之MappedByteBuffer

    其实掌握MappedByteBuffer并不难,只要记住"三方三法三特性"(我自己总结的,呵呵~~不要扔鸡蛋哦...)这句话就可以轻松搞定!MappedByteBuffer 只是一 ...

  6. Java——flush()方法

    Java在使用流时,缓冲区是一种发送数据的高效方法,但当溢出缓冲区的部分需要用flush()方法强制将数据发送出去,不必等到缓冲区再次装满,尤其是在数据量特别小的情况下,如果不使用此方法,很容易出现流 ...

  7. python 基础内置函数表及简单介绍

    内建函数名 (表达形式) 主要作用 备注 abs(x) 返回一个X值得绝对值(x=int/float/复数) all(iterable) 如果 iterable 的所有元素均为 True(或 iter ...

  8. Hive学习(三)Hive的Java客户端操作

    Hive的Java客户端操作分为JDBC和Thrifit Client,首先启动Hive远程服务: hive --service hiveserver 一.JDBC 在MyEclipse中首先创建连接 ...

  9. Hive学习(二)

    1.Hive数据导入 2.Hive的数据查询 3.Hive的Java客户端和自定义函数 1.Hive数据导入 (1.1)使用Load语句导入 HiveQL中提供LOAD DATA命令,用于导入数据到H ...

  10. Kudu安装(官网推荐的步骤)(installing build Kudu from source)

    不多说,直接上干货! Kudu安装前的建议说明(博主推荐) 这是安装Kudu的另一种方法 Kudu安装(官网推荐的步骤)(installing Kudu using parcels or packag ...