目录

异常分类:

区别:

异常产生过程的解析:

异常的处理:

抛出异常thorw关键字

Objects非空判断

声明异常throws

捕获异常try...catch

Throwable类中定义了3个异常处理的方法:

多个异常捕获:

finally代码块:

子父类的异常:


概念:程序执行过程中,出现非正常的情况,最终会导致JVM的非正常停止

在java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理

异常并不是语法错误,语法错误,编译不通过,不会产生字节码文件,根本不能运行

异常体系:

异常的根类(所有异常和错误的超类)java.lang.Throwable。其下有两个子类,java.lang.Error(错误)与java.lang.Exception(异常)。

异常分类:

Exception:编译期异常:进行编译(写代码)java程序出现的问题

RuntimeExcetion:运行期异常,java程序运行过程中出现的问题

Error:错误

区别:

异常处理掉后程序可以继续执行,错误必须修改源代码后程序才可以继续执行

异常产生过程的解析:

public static int getElement(int[] arr,int index){int ele=arr[index];return ele;
}int[]arr={1,2,3};
int e=getElement(arr,0);//1
int e=getElemnet(arr,3);//数组越界异常

1.JVM会根据异常产生的原因创建一个异常对象,包含异常产生的内容,原因和位置

2.在getElement方法中,没有异常处理逻辑(try-catch),那么JVM就会把异常对象抛出给方法的调用者main方法来处理这个异常

3、main方法接受到了异常对象,main方法也没有异常的逻辑处理,继续吧对象抛出给JVM处理

4、JVM接受到了异常对象,(1)把异常对象(内容,原因,位置)以红色字体打印在控制台

(2)JVM会终止当前正在执行的java程序(中断处理)

异常的处理:

抛出异常thorw关键字

使用throw关键字在指定的方法中抛出指定的异常

throw new xxxException("异常产生的原因");

注意:

1、throw关键字必须写在方法的内部

2、throw关键字后边new的对象必须是Excetion或者Exception的子类对象

3、throw关键字抛出指定的异常对象,就必须处理这个异常对象

  throw关键字后边创建的是RuntimeException或者是RuntimeException子类对象,可以不处理,默认交给JVM处理

  throw关键字后边创建的是编译异常(写代码时报错),就必须处理这个异常,要么throws,要么try....catch

public static int getElement(int[] arr,int index){对传递过来的参数数组,进行合法性校验如果数组arr的值是NULL,那么就抛出空指针异常,告知方法的调用者"传递的数组值是null"
if(arr==null){throw new NullPointerExcetion("传递的数组的值是null");//运行期异常
}
if(index<0||index>arr.length-1){throw new ArrayIndexOutofBoundsException("传递的索引超出了数组的使用范围");//运行期异常
int ele=arr[index];
return ele;
}
int []arr=null;
int  e=getElement(arr,0);
sout(e);
}

Objects非空判断

Objects是null-save(空指针安全的)或null-tolerant(容忍空指针的),在它的源码中,对象为null的情况进行了抛出异常操作

Objects类中的静态方法:

public static <T> T requireNonNull(T obj):查看指定引用对象是不是Null

public static <T> T requireNonNull(T obj):查看指定引用对象不是null
{if(obj==null){throw new NullPointerExcetion();return obj;}
}ObJects.requireNonNull(null,"传递的对象是空")

声明异常throws

异常处理的第一种方式,把异常对象声明抛出给方法的调用者处理

格式:

修饰符 返回值 方法名(参数列表) throws AAAException,BBBException{

throw new AAAException("1");

throw new BBBException("2");

}

注意:

(1)throws关键字必须写在方法声明处

(2)throws关键字后面声明的异常必须是Exception或者Exception的子类

(3)方法内部如果抛出了多个异常,那么throws后面必须也声明多个异常

如果抛出的多个异常对象有子父类关系,那么直接声明父类异常即可

(4)调用了一个声明抛异常的方法,就出是必须处理声明的异常

使用throws交给方法的调用者处理,或者使用try..catch自己处理异常

public static void readFile(String fileName) throws FileNotFoundFile,IOException{if(!filename.equals("c:\\\\a.txt")){throw new FileNotFoundException("传递的文件路径出错");if(!fileName.endsWith("文件的后缀名不对")){throw new IOException("文件的后缀名不对");
}
}
publc static void main(String[] args)throws FileNotFoundException,IOexception{readFile("d://a.txt");readfile("c://a.xt");
}
FileNotFoundFile是IOException的子类可以只写IOExption

捕获异常try...catch

捕获异常:java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方法的处理

try{
编写可能会出现异常的代码
}
catch(定义一个异常变量,用来接受try中抛出的异常对象){处理异常的代码
//打印日志/打印异常信息/继续抛出异常
}

一般在工作中,会把异常的信息记录到一个日志中

1、try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象

2、如果try中产生了异常,那么就会执行catch中异常处理逻辑,然后执行catch之后的代码

3、如果try中没有异常,那么就不会执行catch中异常的处理逻辑,执行catch之后的代码

public static void readFile(String fileName) throws FileNotFoundFile,IOException{if(!filename.equals("c:\\\\a.txt")){throw new FileNotFoundException("传递的文件路径出错");if(!fileName.endsWith("文件的后缀名不对")){throw new IOException("文件的后缀名不对");
}
}
publc static void main(String[] args){
try{readFile("d://a.txt");readfile("c://a.xt");}catch(IOException e){
Sout(e.toString);//java.io.IOExcption:文件的后缀名不对
Sout(e.getMessage());//文件的后缀名不对
e.printStackTrace();//最全面....}
sout("后续代码");}

Throwable类中定义了3个异常处理的方法:

String getMessage():返回次throwable的简短描述

String toString():返回此throwable的详细消息字符串

void printStackTrace():JVM打印异常对象,默认此方法,打印的异常信息是最全面的

异常注意事项:

多个异常捕获:

(1)多个异常分别处理

2)多个异常一次捕获,多次处理

注意:

catch里面定义的异常变量,如果有子父类的关系,那么子类的异常变量必须写在上面,否则会报错

(3)多个异常一次捕获,一次处理

运行时异常可以被抛出可以不处理,即不捕获,也不声明抛出

默认交给虚拟机处理,终止程序

finally代码块:

无论是否出现异常都会执行

try{
编写可能会出现异常的代码
}
catch(定义一个异常变量,用来接受try中抛出的异常对象){处理异常的代码
//打印日志/打印异常信息/继续抛出异常
}
finally{}

注意:

1、finally不能单独使用,必须和try一起使用

2、finally一般用于资源释放(资源回收),无论程序是否出现异常,都要资源释放(IO)

3、如果finally有return语句,永远返回finally中的结果,避免该情况

子父类的异常:

注意:父类异常什么样,子类异常就什么样

【java笔记】异常处理相关推荐

  1. 6.4-全栈Java笔记:异常处理办法(下)

    自定义异常 在程序中,可能会遇到任何标准异常类都没有充分的描述清楚的问题,这种情况下可以创建自己的异常类. 从Exception类或者它的子类派生一个子类即可 . 习惯上,定义的类应该包含2个构造器: ...

  2. 【连载】Java笔记——欲品香醇先度根叶

    我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...

  3. 【连载】Java笔记——是了解咖啡小可爱的第一周呢

    我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...

  4. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin

    云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...

  5. 【java读书笔记】——java的异常处理

    程序在实际环境的执行过程中.安全成为须要首先考虑的重要因素之中的一个.这也是用户和程序猿最关心的问题.同一时候,Java语言健壮性也体如今了可以及时有效地处理程序中的错误.准确的说是Java的异常处理 ...

  6. 【Java笔记+踩坑】SpringBoot——基础

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  7. java笔记1/3 (B站hsp学java)

    JAVA基础 文章目录 JAVA基础 变量 整形(INT) 浮点型(float/double) 字符型(char) 布尔类型(boolean) 基础数据类型的转换 自动类型转换 强制类型转换 重载 可 ...

  8. Java笔记(学习中。。)

    Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...

  9. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  10. 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...

最新文章

  1. 基本数据结构篇(三万字总结)
  2. 代码 控制unity 暂停 编辑器_Unity3D 报错解决方案及常用功能收集
  3. 求根号m(巴比伦算法)
  4. 修改webpack配置,在react中使用less
  5. CentOS 6.2安装配置pacemaker
  6. eclipse中如何远程java debug配置
  7. matlab排序函数 下标,Matlab自带排序函数sort用法
  8. 脉冲触发器和边沿触发器的区别
  9. cnzz.php,CNZZ站长统计代码报错解决方法
  10. 密码应用安全性评估实施要点之三密钥管理要求与实现要点
  11. opencv边缘检测加提取(圆形和矩形)
  12. android wifi热点设置用户数,android 如何获取连接wifi热点的设备数量
  13. linux: It seems that scikit-learn has not been built correctly.
  14. MySQL顺序读写和随机读写磁盘_随机读写与顺序读写的深入理解
  15. 一个小游戏的代码(猜数字)
  16. JQ数据库查询时间转换
  17. ARM Cortex-M3内核结构
  18. (C语言详解)11-散列1 电话聊天狂人(小白实现详细解释)
  19. arm linux ip配置文件,手动修改ARM Linux的静态IP和用QT获取和修改IP
  20. 蓝汛之GPIO基本操作寄存器【篇】

热门文章

  1. Chapter 04-Using Conversion Functions and Conditional Expressions-Conditional Expressions
  2. Lansys PV 1.2 1CD(化工容器强度计算软件)
  3. 排序二叉树的插入、删除操作(递归方式)。
  4. SQLite 事务控制
  5. 短信猫软件的实现(C#)九7bitPDU的编码
  6. 判断操作系统多久没有任何操作.e
  7. UVA10880 Colin and Ryan【整除】
  8. UVA11554 Hapless Hedonism【数学计算+大数】
  9. CCF NOI1142 质数
  10. POJ NOI MATH-7656 李白的酒