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 ...
随机推荐
- UIView不能使用UITableView的Static表格的解决方法
在UIView中嵌入一个Container,用Container来包含UITableViewController即可,到storyboard上显示如下:
- 进阶篇,第二章:MC与Forge的Event系统
<基于1.8 Forge的Minecraft mod制作经验分享> 这一章其实才应该是第一章,矿物生成里面用到了Event的一些内容.如果你对之前矿物生成那一章的将算法插入ORE_GEN_ ...
- SGU 199 - Beautiful People 最长上升子序列LIS
要邀请n个人参加party,每个人有力量值strength Si和魅力值 beauty Bi,如果存在两人S i ≤ S j and B i ≥ B j 或者 S i ≥ S j and B i ≤ ...
- .net框架介绍
.net 一般指 .net Framework框架,是一种平台,一种技术 C# 是一种编程语言,可以开发基于.net平台的应用 Java 既是一种技术,也是一种语言 .net可以开发桌面应用程序 ...
- MemCachedClient数据写入的三个方法
set方法 1 将数据保存到cache服务器,如果保存成功则返回true 2 如果cache服务器存在同样的key,则替换之 3 set有5个重载方法,key和value是必须的参数,还有过期时间,h ...
- Android LayoutInflater和findViewById 源码详解
LayoutInflater大家很熟悉,简单点说就是布局文件XML解析器,setContentView函数也是调用了LayoutInflater 用法: View view = LayoutInfla ...
- 关于NSURL的一些属性的记录
关于NSURL的一些属性的记录 NSLog(@"%@", request.URL.absoluteString); NSLog(@"%@", request.U ...
- NSString&NSMutableString常用操作梳理(转)
作者:弦苦 授权本站转载. 上一篇梳理了NSArray&NSMutableArray常用操作,这次来梳理一下Objective-C中每天都要用到的字符串处理类——NSString. Objec ...
- 爬虫爬oj用户头像
import requests import Queue import urllib import urllib2 import re import requests alreadyImg = set ...
- Qt中如何在QCursor移动的时候不触发moveEvent
有时候有这样的需求,比如想对全局光标进行一次setPos(),但这个时候又不想触发消息队列触发mouseMoveEvent,这个时候就可以这么做. myWidget->clearFocus(); ...