1.体系结构
java.lang.Object
|----java.lang.Throwable
|-------java.lang.Error:错误,java程序对此无能为力,不显式的处理
|-------java.lang.Exception:异常。需要进行处理
|------RuntimeException:运行时异常
|-----ArrayIndexOutOfBoundsException/NullPointerException/ArithmeticException/ClassCastException
|------非RuntimeException:编译时异常 2.因为java程序分为javac.exe和java.exe两个过程,在每个过程中,都有可能出现异常。故分为编译时异常、运行时异常
2.1 对于运行时异常比较常见,可以不显式的来处理。
2.2 对于编译时异常,必须要显式的处理
编译时异常,不是说有异常才处理,而是存在异常的隐患,必须在编译前,提示程序,万一出现异常,如何处理! 2.如何处理异常?
java 中的“抓抛模型”
* 1."抛":当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并
* 将此对象抛出。(自动抛出 / 手动抛出)
* >一旦抛出此异常类的对象,那么程序就终止执行
* >此异常类的对象抛给方法的调用者。
* 2."抓":抓住上一步抛出来的异常类的对象。如何抓?即为异常处理的方式
* java 提供了两种方式用来处理一个异常类的对象。
* 处理的方式一:
* try{
* //可能出现异常的代码
* }catch(Exception1 e1){
* //处理的方式1
* }catch(Exception2 e2){
* //处理的方式2
* }finally{
* //一定要执行的代码
* }
* 注:1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用
* 2.finally是可选的。
* 3.catch语句内部是对异常对象的处理:
* >getMessage(); printStackTrace();
* 4.可以有多个catch语句,try中抛出的异常类对象从上往下去匹配catch中的异常类的类型,一旦满足
* 就执行catch中的代码。执行完,就跳出其后的多条catch语句
* 5.如果异常处理了,那么其后的代码继续执行。
* 6.若catch中多个异常类型是"并列"关系,孰上孰下都可以。
* 若catch中多个异常类型是"包含"关系,须将子类放在父类的上面,进行处理。否则报错!
* 7.finally中存放的是一定会被执行的代码,不管try中、catch中是否仍有异常未被处理,以及是否有return语句。
* 8.try-catch是可以嵌套的。
处理方式二:
在方法的声明处,显式的使用throws + 异常类型
public void method1() throws Exception1 e1,Exception2 e2{
//可能出现异常(尤其是编译时异常,一定要处理)
} public void method2() throws Exception1 e1,Exception2 e2{
method1();
} public void method3(){
try{
method2();
}catch(Exception1 e1){
System.out.println(e1.getMessage());
}catch(Exception2 e2){
System.out.println(e2.getMessage());
} } public static void main(String[] args){
对象1.method3();//不会再出现上述的Exception1和Exception2的异常!
}
3.如何手动的抛出一个异常?
在方法的内部,可以使用 throw + 异常类对象,来手动的抛出一个异常! //比较两个圆的半径的大小。
public int compareTo(Object obj) throws Exception{
if(this == obj){
return 0;
}
else if(obj instanceof Circle){
Circle c = (Circle)obj;
if(this.radius > c.radius){
return 1;
}else if(this.radius == c.radius){
return 0;
}else{
return -1;
}
}else{
//return -2;
//手动的抛出一个异常
//throw new Exception("传入的类型有误!");
//throw new String("传入的类型有误!");
throw new MyException("传入的类型有误!");
}
}
4.如何自定义一个异常类?
>手动的抛出一个异常,除了抛出的是现成的异常类的对象之外,还可以抛出一个自定义的异常类的对象!
>如何自定义一个异常类呢?
//1.自定义的异常类继承现有的异常类
//2.提供一个序列号,提供几个重载的构造器
public class MyException extends Exception{ static final long serialVersionUID = -70348975766939L; public MyException(){ }
public MyException(String msg){
super(msg);
}
}
5.“5个关键字搞定异常处理!” 其中,要区分:throw与throws的区别?

java异常的 理解的更多相关文章

  1. 对Java异常的理解

    JAVA小白手写总结 提示:本篇简单列举了一些Java中的异常与异常处理 前言 提示:很多小伙伴们都会问到,什么是异常呢,又该怎么解决呢? 下面我们就从下面的一个案例中切入今天的内容. 提示:以下是本 ...

  2. java异常常见面试问题

    java异常常见面试问题 一.java异常的理解 异常主要是处理编译期不能捕获的错误.出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性. 处理过程:产生异常状态时,如果当前的conte ...

  3. 全面理解Java异常的运行机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

  4. 全面理解java异常机制

    在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大V,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...

  5. Java基础 -- 深入理解Java异常机制

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  6. 深入理解java异常【绝对经典,推荐最少看五遍】

    http://blog.csdn.net/hguisu/article/details/6155636 补充:检查异常(checkedException)与运行异常,什么时候throw,什么时候thr ...

  7. 对Java中的异常的理解

    1.What is exception in Java? Java使用异常描述程序中可能出现的不正常情况.这个不正常可以是java认为的不正常,也可以是你主观上的出乎意料(自定义异常).总而言之,异常 ...

  8. JAVA 异常分类与理解

    摘自CSDN:::::http://blog.csdn.net/hguisu/article/details/6155636 1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了 ...

  9. 加深理解Java异常概念并熟记5个最常见的运行时异常

    加深理解Java异常概念并熟记5个最常见的运行时异常 说明Error与Exception的联系和区别有哪些? 列举最常见的5个运用时异常. 1.Error和Exception的联系和区别: Error ...

随机推荐

  1. 二进制安装kubernetes(六) kube-proxy组件安装

    Kube-Proxy简述 参考文献: https://ywnz.com/linuxyffq/2530.html 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtabl ...

  2. 超详细 DNS 协议解析

    尽人事,听天命.博主东南大学研究生在读,热爱健身和篮球,正在为两年后的秋招准备中,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 C ...

  3. 一些CTF题目--20/9/3

    1. 看源码 POST方法.Extract覆盖. 直接url ?参数不行,因为POST参数不在URL上,GET参数才在 Burpsuite抓包,改成  pass=1&thepassword_1 ...

  4. C++11特性-右值引用

    什么是左值,什么是右值 常见的误区有 = 左边的是左值,右边的是右值. 左值:具有存储性质的对象,即lvalue对象,是指要实际占用内存空间.有内存地址的那些实体对象,例如:变量(variables) ...

  5. 牛客网多校第5场 H subseq 【树状数组+离散化】

    题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...

  6. C++ part7

    1.C++ 继承和组合 类的组合和继承一样,是复用的重要方式. 要优先使用组合而不是继承. 原因: 组合是黑箱复用,对局部类的内部细节不可见:继承是白箱复用,父类的内部细节可见,破坏封装性. 继承在编 ...

  7. 卧槽,sql注入竟然把我们的系统搞挂了

    前言 最近我在整理安全漏洞相关问题,准备在公司做一次分享.恰好,这段时间团队发现了一个sql注入漏洞:在一个公共的分页功能中,排序字段作为入参,前端页面可以自定义.在分页sql的mybatis map ...

  8. Keras 报错: Error when checking target: expected dense_4...

    笔者此处是一个回归任务, 最后一层是: ... pred = Dense(1)(x) 在最后一个Dense层前加上x = Flatten()(x)即可.

  9. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛

    #1235 : New Teaching Buildings 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 Thanks to the generous finance ...

  10. Apple Watch Series 6 字母图案 (图解教程)

    Apple Watch Series 6 字母图案 (图解教程) Apple Watch Series 6 自定义文字 如何开启 字母图案 solution 1 选择 彩色 表盘️ PS: 该复杂功能 ...