19.异常处理(新年快乐啊)
作者:互联网
1.抛出异常throw
断言略
对可恢复的错误不能使用断言,而应该抛出异常;
断言很少被使用,更好的方法是编写单元测试。
1.1 概念
当使用方法时,需要告诉调用者出错的信息。我们这时候可以使用throw
1.2举例
需求:编写一个通过数组下标获取数组,如果下标越界,在控制台打印“亲,下标越界了”,如果数组为空,在控制台打印“亲,你的数组为空!!!” ;
public static int getIndexArray( int[] arr,int index) {
if(arr == null) {
//
throw new NullPointerException("亲,你的数组为空了!!!");
}
if( index < 0 || index > (arr.length-1) ) {
throw new ArrayIndexOutOfBoundsException("亲,你的下标越界了!!!");
}
return arr[index];
}
执行:
public static void main(String[] args) throws ParseException {
int[] arr = null;
int i = getIndexArray(arr,2);
}
结果:
public static void main(String[] args) throws ParseException {
int[] arr = {1,2,3};
int i = getIndexArray(arr,3);
}
2. 捕获异常try…catch...finally(可选择)
throws描述:
如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
在方法声明中用 throws 子句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
Throws 举例:
需求: 定义读取log.txt,如果文件不存在就抛给调用者,让调用者处理文件不存在的异常。
public static void read(String fileName) throws FileNotFoundException {
if(!"log.txt".equals(fileName)) {
throw new FileNotFoundException();
}
}
调用:
public static void main(String[] args) throws FileNotFoundException {
read("111");
}
举例:
Exception in thread "main" java.io.FileNotFoundException
at cn.hzat.Demo1.read(Demo1.java:24)
at cn.hzat.Demo1.main(Demo1.java:20)
注意字符串判断!!
//需求: 定义读取log.txt,如果文件不存在就抛给调用者,让调用者处理文件不存在的异常。
public void read(String fileName) {
/*
不推荐使用
if(!fileName.equals("log.txt")) {
}
*/
// 如果传的文件不是log.txt 说明读取日子文件失败
if(!"log.txt".equals(fileName)) {
}
}
3. 声明异常throws
使用情况说明:如果异常出现的话,会立刻终止程序,所以我们得处理异常,如果我们不想终止可以自己处理异常
4.throw和throws
package com.hzit.demo1;
import java.io.FileNotFoundException;
/**
*
* throw: 作用在方法里面 如果抛出运行时期异常,调用者不要处理 并且不要配合throws使用
* 如果抛出编译时期异常,需要配合throws使用 ,调用者必须处理
* throws: 作用在方法上 抛出异常 调用者必须处理 可以单独使用
* 面试题
*
*/
public class TextLoad {
// * 定义读取log.txt,如果文件不存在就抛给调用者,让调用者处理文件不存在的异常。
public void loadFile(String fileName) throws FileNotFoundException {
if(!"log.txt".equals(fileName)){
// throw 编译时期异常,告诉调用报错,调用必须处理
throw new FileNotFoundException("找不到对应的文件。");
}
}
public void loadFile1(String fileName) throws FileNotFoundException {
return;
}
}
package com.hzit.demo1;
import java.io.FileNotFoundException;
/**
* 定义读取log.txt,如果文件不存在就抛给调用者,让调用者处理文件不存在的异常。
*
*
* throws FileNotFoundException
* : 当前代码处理不了 交给调用者进行处理
*
* throws 当你抛给jvm处理的时候 程序断开,后面的代码不会执行
*/
public class Demo2 {
public static void main(String[] args) throws FileNotFoundException { // 继续抛异常,交给jvm处理
TextLoad textLoad = new TextLoad();
textLoad.loadFile("XXX");
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
}
}
package com.hzit.demo1;
import java.io.FileNotFoundException;
/**
* 定义读取log.txt,如果文件不存在就抛给调用者,让调用者处理文件不存在的异常。
*
*
* throws FileNotFoundException
* : 当前代码处理不了 交给调用者进行处理
*
* throws 当你抛给jvm处理的时候 程序断开,后面的代码不会执行
*
* try{
* // 存放可能会出现异常的代码 不管有没有发送异常都会执行
* } catch (FileNotFoundException e) {
* // 发送异常会执行的的代码,如果代码没问题 , 不会执行
* }
*
*
*
*/
public class Demo3 {
public static void main(String[] args) { // 继续抛异常,交给jvm处理
TextLoad textLoad = new TextLoad();
try {
textLoad.loadFile("log.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
System.err.println("代码出错");
}finally {
// 不管异常是否发送都会执行的代码
System.out.println("我一定会执行!!!!");
}
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
System.out.println("代码......");
}
}
System.err.println();
5.常见异常举例
越界
空指针异常---null不能调用API
/0
标签:新年快乐,调用者,FileNotFoundException,19,public,println,异常,throws 来源: https://blog.csdn.net/computer408/article/details/122761445