Java学习日记9-异常
异常(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-异常的更多相关文章
- Java学习日记基础篇(九) —— 集合框架,泛型,异常
集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...
- 1.13(java学习笔记)异常机制
异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ...
- Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征
this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ ...
- Java学习日记之 Java-其他类型
OK , 就绪, 第一篇博客开撸 ~ 先听了毕姥爷激情澎湃的其他类型 ,从这里开始入手吧 : (一)System类 System类代表系统类,系统的属性和方法都放在该类.System类是一个fina ...
- java学习面向对象之异常之二
我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉. 捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式.具体格式是: try { //需要被检测的异常 } catch(异常类 变量) ...
- java学习面向对象之异常之一
一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...
- Java学习日记-2.5 关于0和无穷
1. 无穷 Java中将无穷定义为浮点数,分为正负无穷,分别为POSITIVE_INFINITY和NEGATIVE_INFINITY 2. null null在java中可以理解为一个特殊的引用类型, ...
- Java学习日记-11 集合(1)
Collection接口集合中存储的只是对象的引用,不是对象本身. 1.ArrayList<E>类1.1ArrayList和Collection的关系 public interface L ...
- Java学习日记-2 零零碎碎
一.使用Scanner类进行控制台的输入 文档中Scanner类的定义为A simple text scanner which can parse primitive types and string ...
随机推荐
- Android上传文件到服务器(转)
Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...
- HDU5327
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; int ...
- 织梦dede自定义内容分页,datalist运用实例
在/plus文件夹中新建一个ceshi.php文件..<?php require(dirname(__FILE__)."/../include/common.inc.php" ...
- 抓取锁的sql语句-第五次修改
CREATE OR REPLACE PROCEDURE SOLVE_LOCK AS V_SQL VARCHAR2(3000); --定义 v_sql 接受抓取锁的sql语句V_SQL02 VARCHA ...
- ajax无刷新方式收集表单并提交表单
ajax无刷新方式收集表单有两种方式, 一个是使用html5的FormData.一个是传统的方式. 一,FormData,在主流的浏览器中可以用,IE不好用啊. 另外,FormData使用有两个条件, ...
- (转)C++静态库与动态库
本文出自 http://www.cnblogs.com/skynet/p/3372855.html 吴秦 什么是库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不 ...
- [C++] namespace相关语法
本段测试代码包括如下内容: (1) 如何访问namespace中声明的名称:(2) namespace导致的相关冲突:(3) namespace可嵌套:(4) 可以在namespace中使用using ...
- 如何用angularjs制作一个完整的表格之二__表格分页功能
接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获 ...
- 封装兼容性添加、删除事件的函数 addEventListener与removeEventListener
var Event = { addHandler: function (oElement, sEvent, fnHandler) { oElement.addEventListener ? oElem ...
- JavaScript学习 常用的对话框函数
JavaScript提供了三个很不错的对话框函数,使用这三个函数可以很方便的显示一个对话框: 一.alert(); <script type="text/javascript" ...