throw 关键词
作用:可以使用throw关键字在指定的方法中抛出指定的异常
使用格式:throw new XXXException(“异常产生的原因”);
注意:1、throw 关键字必须写在方法内部
2、throw关键字后面new的对象必须是Exception或者时Exception的子类对象
3、throw关键字抛出指定的异常对象我们就必须处理这个对象
throw关键字后面创键的是RuntiamException或者是RuntaimException的子类对象,我们可以不用处理,默认交给JVM处理
(打印异常对象,中断程序)
throw关键字后面创建的是编译异常(写代码时报错,我们就必须处理这个异常,要么throw,要么try…catch)
public class demoException {
public static void main(String[] args) {
int [] arr=null;
int a=getElement(arr,0);
System.out.println(a);
}
/*定义一个方法,获取数组指定索引的元素
参数;interesting【】 arr ,int index
以后工作中我们必须对方法传递过来的参数进行合法校验
如果参数不合法,那么我们就必须使用抛出的异常方方式告知方法的调用者,传递的参数有问题*/
public static int getElement(int[] arr,int index){
if (arr==null){
throw new NullPointerException("传递的数组的值是null");
}
int ele=arr[index];
return ele;
}
}
Objects类中的静态方法判断非空
Objects类中的静态方法判断非空
public static requireNoNull(T obj):查看指定引用是不是null
源码:public static T requireNoNull(T obj){
if(obj==null)
throw new NullPointerException();*
return obj;
}
public class demo02 {
public static void main(String[] args) {
method(null);
}
public static void method(Object obj){
Objects.requireNonNull(obj,"传递的对象是null");
}
}
throw关键字:异常处理的第一种方式
hrow关键字:异常处理的第一种方式,交给别人处理
作用:当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象
可以使用throw关键字处理异常对象,会把异常对象声明抛给方法的调用处理者(自己不处理,给别人处理),最终交给JVM
处理–>中断处理。
使用格式:在声明是使用
修饰符 返回值类型 方法名(参数列表) throw AAAException,BBBException…{
throw new AAAException(“产生原因”)
throw new BBBException(“产生原因”)
。。。
}
注意:1、throw关键字必须写在方法申明处
2、throw关键字后面的异常必须是Exception或者是exception的子类
3、方法内部如果抛出了多个异常对象,那么throw后面也必须申明多个异常即可
如果抛出了多个异常对象是父子类关系,那么我们可以直接声明父类异常即可
4、调用一个声明抛出异常的方法,我们就必须的处理声明的异常,要么继续使用
throw声明抛出,交给方法调用者处理,最终交给JVM
要么try…catch自己处理异常
public class demoThrow {
public static void main(String[] args) throws FileNotFoundException,IOException{
readFile("C:\\a.txt");
}
/*定义一个方法,对传递的文件路径进行合法性判断
如果路径不是C:\a.txt那么我们就要抛出文件找不到异常对象
告知调用者
注意:FileNotFoundException是编译异常,抛出异常就必须处理这个异常
可以使用throw继续声明抛出FileNotFoundException,让方法调用者处理*/
public static void readFile(String filename) throws FileNotFoundException,IOException{
if (!filename.equals("c:\\a.txt")){
throw new FileNotFoundException("传递的文件路径不是C:\\a.txt");
}/*如果传递路径不是。txt结尾
那么我们就抛出IO异常对象,告知方法调用者,文件后缀名不对*/
if (!filename.endsWith(".txt")){
throw new IOException("文件的后缀名不对");
}
System.out.println("路径没有问题,读取文件");
}
}
捕获异常try…catch
try…catch:异常处理的第二种方式,自己处理异常
格式:try{
可能产生的异常
}catch(定义一个异常变量,用来接收try中抛出的异常对象){
异常处理的逻辑异常对象之后怎么处理异常对象
一般在工作种,会把异常的信息记录到一个日志中
}
…
catch(异常类名 变量名){//catch可以有多个
。。。。
}
注意:1、try中可能会抛出对个异常对象,那么就可以使用多个catch来处理这些异常对象
2、如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕catch中的处理逻辑
继续执行try…catch之后的代码
如果try…catch中没有产生异常,那么就不会执行catch中异常的处理逻辑,执行完try中的代码,
继续执行try…catch之后的菜吗
import java.io.IOException;
public class demo02Exception {
public static void main(String[] args) {
try{//可能产生的异常
readFile("c:\\a.txt");
}catch(IOException e){//try中抛出什么异常,catch就定义什么异常变量用来接收这个异常对象
//异常处理逻辑,异常对象之后怎么处理异常对象
System.out.println("catch-传递的文件后缀不是。txt");
}
System.out.println("后续代码");
}
public static void readFile(String fileName)throws IOException {
if (!fileName.endsWith(".txt")){
throw new IOException("文件的后缀名不对");
}
System.out.println("路径没有问题,读取文件");
}
}
Throwable 类中定义了三个异常处理的方法
String getMessage()返回此throwable的简短miaosh
String toString()返回throwable的详细消息字符串
void printStackTrace()JVM打印异常对象,默认此方法,打印的异常信息最全面
try{//可能产生的异常
readFile("c:\\a.txt");
}catch(IOException e){//try中抛出什么异常,catch就定义什么异常变量用来接收这个异常对象
//异常处理逻辑,异常对象之后怎么处理异常对象
System.out.println("catch-传递的文件后缀不是。txt");
e.getMessage();//String getMessage()返回此throwable的简短miaosh
e.toString();// String toString()返回throwable的详细消息字符串
e.printStackTrace();// void printStackTrace()JVM打印异常对象,默认此方法,打印的异常信息最全面
}
finally关键字使用方法
finally只能使用在和try一起使用,无论有没有异常它都会执行
try{//可能产生的异常
readFile("c:\\a.txt");
}catch(IOException e){//try中抛出什么异常,catch就定义什么异常变量用来接收这个异常对象
//异常处理逻辑,异常对象之后怎么处理异常对象
System.out.println("catch-传递的文件后缀不是。txt");
}finally {//无论是否出现异常这个代码块都会执行
System.out.println("资源释放");
}
finally避免写return语句,因为得出的只会只是return值