异常(Exception)

一、什么是异常?

异常就是程序中的错误,比如数组越界、访问空指针等。在Java中,一切皆对象,异常也不例外。所有的异常都是派生于Throwable类的一个实例对象。

二、异常的分类

在异常界,有两大流派。一派叫Error类,另一派叫Exception类,它们都继承自Throwable类。在Exception类下还有两大分支,IOException类和RuntimeException类。

RuntimeException是由程序本身的错误导致的异常。

IOException是程序本身没有问题,但是因为IO发生的错误引起的异常。

举例:

RuntimeException(unchecked)

IOException(checked)

数组访问越界

试图打开一个不存在的文件

访问空指针

试图在文件尾部读取数据

错误的类型转换

RuntimeException类和它的叔叔Error类比较亲,叔侄俩统称为未检查异常(unchecked Exception),大白话就是不用你检查,不用你管的异常。而IOException和它的兄弟和叔叔明显不是一路的,被称为已检查异常(checked Exception),就是你得管它。

三、异常处理(Exception handing)

前面说过未检查异常不用我们管,所以这里就只说我们怎么对付已检查异常。

(1)throws

 首先,你得声明它。方法应该在其首部用throws+异常名声明所有可能抛出的异常。

  抛出异常的4中情形:

  1.调用一个抛出已检查异常的方法。

  2.程序运行过程中发现错误,并且利用throws语句抛出已检查异常

  3.程序出现错误,比如数组访问越界,会自动抛出ArrayIndexOutOfBoundsException

  4.Java虚拟机和运行时库出现的内部错误

  举个例子:

 Class MyAnimation{
     public Image LoadImage(String s)throws IOException, EOFException
     {
     ......
     }
 }

(2)用throw关键字抛出异常

 String readData(Scanner in)throws EOFException{
     ...
     while(...){
         if(!in.hasNext())
         {
             if(n<len)
             throw new EOFException();
         }
     }
 }        

(3)自定义异常

当java提供的异常满足不了需要的时候,可以自己DIY一个

 //定义一个FileFormatException类
 class FileFormatException extends IOException{
     public FileFormatException(){}
     public FileFormatException(String gripe){
         super(gripe);
     }
 }
 //下面抛出自定义异常
 String readData(Scanner in)throws EOFException
 {
     ...
     while(...){
         if(ch == -1){
             if(n<len)
             throw new FileFormatException();
         }
     }
     return s;
 }    

(4)捕获异常

光把异常抛出去,不能不管啊,所以就得捕获它并处理它。

 //利用try-catch语句块捕获异常
 try{
     code
 }
 catch(ExceptionType e){
     handler for this type
 }

  如果在try语句块中的代码抛出了一个在catch子句中说明的异常类,那么

  1)程序将跳过try语句块的其他代码。

  2)程序将执行catch子句中的处理器代码

(5)异常-方法内外

  对于异常,可以在方法内部用try-catch语句块来捕获并处理,如果不想在方法内处理,可以在方法首部声明可能抛出的异常,将异常可能抛出的异常交给调用方法的代码去处理。总之,就是方法内用try-catch处理,方法外用throws抛出。

(6)捕获多个异常

 try{
     code
 }
 catch(FileNotFoundException | UnknowHostException e){
     ...
 }
 catch(IOException e){
     ...
 }

(7)finally

 try{
     ...
 }
 catch(IOException e){
     ...
 }
 finally{
     ...
 }

不管有没有异常发生,finally语句块中的代码都将执行。

try-catch、try-catch-finally、try-finally三种组合,1、3组合更常用

(8)带资源的try语句块

带资源的try块在退出时,会自动关闭资源,这样往往就可以省掉finally语句

 try(Scanner in = new Scanner(new FileInputStream(“文件路径”))){
     while(in.hasNext())
     System.out.println(in.next());
 }

注:╮(╯▽╰)╭本文大量参考《Java核心技术 卷I》

Java学习日记9-异常的更多相关文章

  1. Java学习日记基础篇(九) —— 集合框架,泛型,异常

    集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...

  2. 1.13(java学习笔记)异常机制

    异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ...

  3. Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征

    this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ ...

  4. Java学习日记之 Java-其他类型

    OK , 就绪, 第一篇博客开撸 ~ 先听了毕姥爷激情澎湃的其他类型 ,从这里开始入手吧 : (一)System类  System类代表系统类,系统的属性和方法都放在该类.System类是一个fina ...

  5. java学习面向对象之异常之二

    我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉. 捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式.具体格式是: try { //需要被检测的异常 } catch(异常类 变量) ...

  6. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  7. Java学习日记-2.5 关于0和无穷

    1. 无穷 Java中将无穷定义为浮点数,分为正负无穷,分别为POSITIVE_INFINITY和NEGATIVE_INFINITY 2. null null在java中可以理解为一个特殊的引用类型, ...

  8. Java学习日记-11 集合(1)

    Collection接口集合中存储的只是对象的引用,不是对象本身. 1.ArrayList<E>类1.1ArrayList和Collection的关系 public interface L ...

  9. Java学习日记-2 零零碎碎

    一.使用Scanner类进行控制台的输入 文档中Scanner类的定义为A simple text scanner which can parse primitive types and string ...

随机推荐

  1. 动态代理 Proxy InvocationHandler

      前奏 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常 ...

  2. Linux编程之定制带级别的log

    我的开发组长曾经说过这么一段话"一个优秀的程序员不在于他写代码有多快,也不在于他能不能实现这个模块的功能,要实现业务实现功能谁不会啊,重要的是他的解决能力,也就说当程序出现错误时你能不能够快 ...

  3. 分析器错误消息: 未能加载文件或程序集“System.WEB.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。

    分析器错误消息: 未能加载文件或程序集“System.WEB.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=3 ...

  4. 简单html以及css的用法

    我将利用三天的时间来完成制作京东首页的静态页面效果,其中包含的内容有html以及css. 1.在开发进行之前,首先要配置开发环境:我们需要安装sublime  webstorm  vscode  Hb ...

  5. CSS控制表单

    一个简单的网站注册页面制作. 创建CSS文件如下: @charset "utf-8"; /* CSS Document */ * { margin: 0px; padding: 0 ...

  6. css3中-webkit-text-size-adjust详解

    1.当样式表里font-size<12px时,中文版chrome浏览器里字体显示仍为12px,这时可以用 html{-webkit-text-size-adjust:none;} 2.-webk ...

  7. 下载文档时Safari浏览器下载后出现".html"问题

    下载代码是需要设置 Response.ContentType = "application/octet-stream", 不要设为application/x-msdownload, ...

  8. Foudation框架之一些常用结构体和常用类

    表示范围作用的结构体:NSRange:       有三种方式创建新的NSRange: 1.NSRange range:            range.location = 17;         ...

  9. 网络流转换为Byte数组

    /// <summary> /// 网络流转换为Byte数组 /// </summary> /// <param name="stream">& ...

  10. 通过dbcp链接池对数据库操作报 Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)--解决方案

    org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for ...