try catch finally
异常的捕获和处理需要采用 try 和 catch 来处理,具体格式如下:
try {
}catch(OneException e) {
}catch(TwoException e) {
}finally {
}
try 中包含了可能产生异常的代码
catch 可以有一个或多个,catch 中是需要捕获的异常
当 try 中的代码出现异常时,出现异常下面的代码不会执行,马上会跳转到相应的catch 语句块中,如果没有异常不会跳转到 catch 中
finally 表示,不管是出现异常,还是没有出现异常,finally 里的代码都执行,finally 和 catch可以分开使用,但 finally 必须和 try 一块使用
final和finally的区别
final 关键字
final修饰的类无法继承
final修饰的方法无法覆盖
final修饰的变量不能重新赋值。
finally 关键字
和try一起联合使用。
finally语句块中的代码是必须执行的。
声明异常
在方法定义处采用 throws 声明异常,如果声明的异常为受控异常,那么调用方法必须处理此异常
import java.io.*;
public class demo1 {
public static void main(String[] args)
//throws FileNotFoundException, IOException { //可以在此声明异常,这样就交给 java 虚拟机处理了,不建议这样使用
throws Exception { //可以采用此种方式声明异常,因为 Exception 是两个异常的父类
/*
//分别处理各个异常
try {
readFile();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
*/
//可以采用如下方式处理异常
//因为 Exception 是 FileNotFoundException 和 IOException 的父类
//但是一般不建议采用如下方案处理异常,粒度太粗了,异常信息
//不明确
/*
try {
readFile();
}catch(Exception e) {
e.printStackTrace();
}
*/
readFile();
}
private static void readFile() throws FileNotFoundException,IOException { //声明异常,声明后调用者必须处理
FileInputStream fis = null;
try {
fis = new FileInputStream("test.txt");
}finally {
fis.close();
}
}
}
如何手动抛出异常
public class Test08 {
public static void main(String[] args) {
int ret = method1(1000, 10);
if (ret == -1) {
System.out.println("除数为 0");
}
if (ret == -2) {
System.out.println("被除数必须为 1~100 之间的数据");
}
if (ret == 1) {
System.out.println("正确");
}
//此种方式的异常处理,完全依赖于程序的返回
//另外异常处理和程序逻辑混在一起,不好管理
//异常是非常,程序语句应该具有一套完成的异常处理体系
}
private static int method1(int value1, int value2){
if (value2 == 0) {
return -1;
}
if (!(value1 >0 && value1<=100)) {
return -2;
}
int value3 = value1/value2;
System.out.println("value3=" + value3);
return 1;
}
}
throws 关键字和 throw 关键字在使用上的几点区别如下:
- throw 关键字用在方法内部,只能用于抛出一种异常,用来抛出方法中的异常。
- throws 关键字用在方法声明上,可以抛出多个异常,用来标识该方法可能抛出的异常列表。一个方法用 throws
标识了可能抛出的异常列表,调用该方法的方法中必须包含可处理异常的代码,否则也要在方法签名中用 throws 关键字声明相应的异常。
常见异常
ClassCastException(类转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)