Java 读书笔记 (十五) Java 异常处理
捕获异常
使用try 和catch关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch 代码块中的代码称为保护代码 ,使用try/catch的语法如下:
try
{
//程序代码
} catch(ExceptionName e1)
{
//Catch块
}
Catch语句包含要捕获异常类型的声明,当保护代码块中发生一个异常时,try后面的catch块就会被检查。
如果发生的异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样。
实例:
下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第三个元素的时候就会抛出一个异常.
//文件名: ExcepTest.java
import java.io.*;
public class ExcepTest{ public static void main(String args[]){
try{
int a[] = new int[2];
System.out.println("Access element three :"+a[3]);
} catch (ArrayIndexOutofBoundsException e){
System.out.println("Exception thrown :"+e);
}
System.out.println("Out of the block");
}
} /*以上代码编译执行输出结果:
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block
多重捕获块
一个try代码块后面跟随多个catch代码块的情况就叫多重捕获。
try{
//程序代码
} catch(异常类型1 异常的变量名1){
//程序代码
} catch(异常类型2 异常的变量名2){
//程序代码
} catch(异常类型3 异常的变量名3){
//程序代码
}
可以在try语句后面添加任意数量的catch块。
如果保护代码中发生异常,异常被抛给第一个catch块。
如果抛出异常的数据类型与ExceptionType1匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个catch块。
如此,直到异常被捕获或者通过所有的catch块。
finally 关键字
finally 关键字用来创建在try代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在finally代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在catch代码块最后,语法如下 :
// finally 在try 语句中是不是相当于if...else语句中的else?
try{
//程序代码
}catch(异常类型1 异常的变量名1){
//程序代码
}catch(异常类型2 异常的变量名2) {
//程序代码
} finally{
//程序代码
}
注意事项:
- catch不能独立于try 存在
- 在try/catch后面添加finally 块并非强制性要求的
- try代码后不能既没catch块也没finally 块
- try,catch,finally 块之间不能添加任何代码
// 是不是try后面可以直接跟finally,没有catch?
通用异常
在Java中定义了两种类型的异常和错误。
- JVM(Java虚拟机)异常 :由JVN抛出的异常或错误。例如: NullPointerException类,ArrayIndexOutOfBoundsException类,ClassCastException类
- 程序级异常: 由程序或者API程序抛出的异常。例如IIIegalArgumentException类,IIIegalStateException类.
Java 读书笔记 (十五) Java 异常处理的更多相关文章
- Java学习笔记十五:Java中的成员变量和局部变量
Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...
- Java 读书笔记 (十六) Java 继承
例: 开发动物类,其中动物分别为企鹅以及老鼠,要求如下: 企鹅: 属性(姓名,id), 方法(吃,睡,自我介绍) 老鼠: 属性(姓名,id), 方法(吃,睡,自我介绍) 企鹅类: public cla ...
- Java 读书笔记 (十四) Java 方法
finalize() 方法 finalize() 用来清除回收对象. //为什么要回收内存?怎样写可以避免内存过多占用?什么时候需要手动回收内存? protected void finalize() ...
- Java 读书笔记 (十二) Java Character 类
在实际开发过程中, 我们经常会遇到需要使用对象,而不是内置数据类型的情况. 为了解决这个问题, Java语言为内置数据类型char提供了包装类Character类. 可以使用Character的构造方 ...
- Java进阶(三十五)java int与integer的区别
Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- Java 读书笔记 (十) 循环
while循环 只要布尔表达式为true,循环就一直执行下去. public class Test( public static void main(String args[]){ int x=10; ...
- Effective Java 读书笔记(五):Lambda和Stream
1 Lamdba优于匿名内部类 (1)DEMO1 匿名内部类:过时 Collections.sort(words, new Comparator<String>() { public in ...
- Java进阶(四十五)java 字节流与字符流的区别
java 字节流与字符流的区别(转载) 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...
随机推荐
- PHP7开启Opcode开启强悍性能
鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启opcache: 记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, ...
- azkaban的安装部署
一.所需环境 1,JDK 2,HADOOP 4,mysql 3,HIVE 二.安装azkaban 1,安装git命令: yum install git 2,下载azkaban源码:git clone ...
- 使用IntelliJ IDEA的小技巧快乐编程(2)
前言 本篇介绍的技巧为IntelliJ IDEA中自动代码生成相关的技巧,合理的使用这些技巧将大大提高的你的编码效率 :) Trick 6. 使用模板代码 idea默认的提供了许多模板代码,你可以使用 ...
- Mybatis解决jdbc编程的问题
1.1.1 Mybatis解决jdbc编程的问题 1. 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ...
- 网易面经(Java开发岗)
网易面经(Java岗) 网易两面面经整理 岗位:我投递的是杭研所的Java开发岗位.行程:半天的时间南京=杭州之间穿行,单程2个小时,从杭州东站=网易大厦,单程1个小时(如果能买到城站高铁动车票可以从 ...
- orderBy新写法
通常,我们处理排序规则的处理方法是在sql 语句中order by create_time desc, 但是这时我们需要从控制器中一步步找到该方法,操作多. 我们试着将业务逻辑拆分到控制器 中, 把排 ...
- Ocelot中文文档-Qos服务质量
目前Ocelot支持一种QoS功能. 如果您希望在请求向下游服务时使用断路,则可以在ReRoute中进行设置. 这个功能使用了一个名为Polly的.NET库,这个库很棒,在这里可以找到它. 添加如下配 ...
- Yii2访问自定义模块下的controller
之前,由于所要访问的controller都是位于根目录下的controllers目录下,就像下面这样: 此时,我们可以直接通过 localhost/basic/web/index.php?r=dao/ ...
- MySQL技术内幕 InnoDB存储引擎(笔记)
1. InnoDB 体系架构 其中,后台程序主要负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据. 此外将已经修改的数据刷新到磁盘文件,同时保证在数据库发生异常的时候Innodb能恢复正常 ...
- Ubuntu16+pinpoint环境搭建
最近研究了pinpoint,稍后放上环境搭建教程,建议想学习搭建的同学记得参考pinpointGitHub