javaSE之异常详解(1)
javaSE之异常详解(1)
- 什么是异常
- 异常类new对象
- 没有new异常对象,JVM为毛会打印异常信息
- 异常继承结构之可处理异常
- Object
- 异常处理
- 欢迎光临我的博客:[昼白的小站](https://www.zhoubaiwl.club)
什么是异常
表面上:异常就是当你的程序有错误时给出的错误提示,比如当你写了个简单的程序
public class 异常 {public static void main(String[] args){int a = 10;int b = 0;int c = a/b;System.out.println("a"+"/"+"b"+"="+c);}
}
明显可以看出b是不能为0的,会报错,这个报错就是异常,结果如下
Exception in thread "main" java.lang.ArithmeticException: / by zeroat TestDay25.异常.main(异常.java:7)Process finished with exit code 1
其中的java.lang.ArithmeticException: / by zero
就是抛出的异常信息,由JVM打印输出
实际上:异常以类和对象形式存在,既然是类,就可以new异常对象
异常类在java.lang包下
异常类new对象
既然异常是类,那么就可以new对象,例子如下
NumberFormatException nfe = new NumberFormatException("数字格式化异常");System.out.println(nfe);
结果如下
java.lang.NumberFormatException: 数字格式化异常Process finished with exit code 0
没有new异常对象,JVM为毛会打印异常信息
如上面的那个简单的代码例子,当JVM执行 int c = a/b;时,检测到b为0,JVM会自动new当前情况所对应的异常对象,形参会传入"/ by zero",于是就出现了上面的结果
异常继承结构之可处理异常
Object
Object下有Throwable ( 可抛出的,是所有异常类的祖宗类,直接或间接继承)
Throwable下有两个分支:Error (不可处理,直接退出JVM)和Exception (可处理的)
Exception下有两个分支:
Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名编译时异常)。
详解:所有Exception的直接子类,都叫做编译时异常。编译时异常是在编译阶段发生的吗?不是。编译时异常是表示必须在编写程序的时候预先对这种异常进行处理,如果不处理编译器报错。编译时异常发生概率较高。编译时异常又诚称为受检异常,还有叫做受控异常。
RuntimeException:运行时异常。(在编写程序阶段程序员可以预先处理,也可以不管,都行)
详解:所有的RuntimeException及子类都属于运行时异常。运行时异常在编写程序阶段,你可以选择处理,也可以不处理。运行时异常发生概率较低。运行时异常还有另外一些名字;未受检异常,或者非受控异常。
编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。编译时异常因为什么而得名?
因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。
所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。
因为异常的发生就是new异常对象。
编译时异常和运行时异常的区别?
编译时异常一般发生的概率比较高。
举个例子:
你看到外面下雨了,倾盆大雨的。
你出门之前会预料到:如果不打伞,我可能会生病(生病是一种异常)。而且这个异常发生的概率很高,所以我们出门之前要拿一把伞。
"拿一把伞"就是对"生病异常"发生之前的一种处理方式。
对于一些发生概率较高的异常,需要在运行之前对其进行预处理。
运行时异常一般发生的概率比较低。
举个例子:
小明走在大街上,可能会被天上的飞机轮子砸到。被飞机轮子砸到也算一种异常。
但是这种异常发生概率较低。
在出门之前你没必要提前对这种发生概率较低的异常进行预处理。如果你预处理这种异常,你将活的很累。
假设你在出门之前,你把能够发生的异常都预先处理,你这个人会更加的安全,但是你这个人活的很累。
假设java中没有对异常进行划分,没有分为:编译时异常和运行时异常,所有的异常都需要在编写程序阶段对其进行预处理,将是怎样的效果呢?
首先,如果这样的话,程序肯定是绝对的安全的。
但是程序员编写程序太累,代码到处都是处理异常的代码。
编译时异常还有其他名字:
受检异常: CheckedException
受控异常
运行时异常还有其它名字:
未受检异常:UnCheckedException
非受控异常
再次强调:所有异常都是发生在运行阶段的。
异常处理
Java语言中对异常的处理包括两种方式:
第一种方式:在方法声明的位置上,使用throws关键字,抛给上一级。
谁调用我,我就抛给准。抛给上一级。
第二种方式:使用try . .catch语句进行异常的捕捉。
这件事发生了,谁也不知道,因为我给抓住了。
举个例子:
我是某集团的一个销售员,因为我的失误,导致公司损失了1000元,"损失1000元"这可以看做是一个异常发生了。
我有两种处理方式
第一种方式:我把这件事告诉我的领导【异常上抛】
第二种方式:我自己掏腰包把这个钱补上。【异常的捕捉】
思考:
异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式.
张三–>李四—>王五–>CEO
注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果。终止java程序的执行。
欢迎光临我的博客:昼白的小站
javaSE之异常详解(1)相关推荐
- Java异常详解及如何处理
来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...
- 【疑难杂症04】EOFException异常详解
[疑难杂症04]EOFException异常详解 参考文章: (1)[疑难杂症04]EOFException异常详解 (2)https://www.cnblogs.com/yiwangzhibujia ...
- 页错误 Page Fault /缺页异常 详解
目录 1. 第一部分:如果你看得懂 1.1 页错误定义 1.2 页错误的处理 2. 第二部分:如果你看不懂上面的,请看这里 2.1. 举例子(背景) 2.1.1 进程及页映射 ...
- JAVA基础——异常详解
阅读目录 一.异常简介 二.try-catch-finally语句 三.throw和throws关键字 四.java中的异常链 五.结束语 JAVA异常与异常处理详解 回到顶部 一.异常简介 什么是异 ...
- JavaSE学习笔记 详解Set集合中实现类:LinkedHashSet以及TreeSet
详解Set集合中实现类:LinkedHashSet以及TreeSet 1.LinkedHashSet概述 2.TreeSet概述 2.1 自然排序 2.1.1 TreeSet存储常见引用数据类型 2. ...
- 【javaSE】java异常详解
内容介绍 1 认识异常 1.1 初识异常 1.2 防御式编程 1.3 异常的好处 2 异常的用法 2.1 捕获异常 2.2 异常处理流程 2.3 抛出异常 2.4 异常说明 2.5 关于finally ...
- 【Java】“异常”详解
Java异常目录: 1.异常定义 2.异常的用法 2.1捕获异常 2.2 调用栈 定义 2.3 其他一些注意事项 3.异常处理流程 4. 抛出异常 5.异常说明 6. Java 异常体系 7.自定义异 ...
- php uncaught thrown,PHP异常详解
PHP的异常是什么? PHP 5 提供了一种新的面向对象的错误处理方法.异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 一般使用方法: [php] '.$this-& ...
- Java:如何正确地使用异常详解
概述: Java中的异常机制是一个好东西.不过好东西也要正确地使用才行,不然就会让我们错误地认识它.在错误地认识状况下,就会错误地使用.这样就成了一个恶性地循环了.这不是我们愿意看到的.不要以为我们已 ...
- php的异常详解,PHP5中的异常处理详解
〈?php class FileExistsException extends Exception{} //用于处理文件不存在异常的类 class FileOpenException extends ...
最新文章
- R将dataframe数据保存为csv文件
- C++之queue模板类
- 本人制作的股票技术分析软件正式开源(.net wpf)
- android 之Activity间的相互跳转(通过intent构造函数)
- 多线程断点续传下载软件-闪电下载2009
- python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别
- set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家
- 使用svm 对参数寻优的时候出现错误
- Milvus加入LF AI孵化,立志成为最流行的AI数据平台
- C# WinForm捕获全局异常
- Hadoop原理之checkpoint机制
- 英语面试自我介绍范文(二)
- 永远不会被杀的***捆绑机
- ML学习分享系列(1)_计算广告小窥[上]
- inv在线计算机,INV3062A
- 微信CRM系统对客户关系管理有什么好处?
- 计算机图像分析系统属于,智能图像分析系统
- iOS小技能:地址选择器(支持省份,省市,省市区,支持显示上一次选择的地址)
- 生而强悍的iQOO如何在安卓手机阵营成功跑出?
- 无线运动耳机品牌排行榜前十名,目前最火爆的六款运动耳机推荐
热门文章
- 【美】纳西姆·尼古拉斯·塔勒布 - 随机漫步的傻瓜(2013年7月8日)
- 【读书分享】《解忧杂货店》东野圭吾
- oracle异常策略,oracle segmentation fault错误
- Linux ssh 文件 authorized_keys 和 known_hosts
- 对隐秘的角落电视剧的感悟以及认识
- Swagger Error Missing required property: responses ✖ Swagger Error Additional properties not allowe
- 阳春三月,再送32本书,快来快来!
- PowerVR 6系列架构分析
- scrapy--Rule()与LinkExtractor()函数理解
- D-Feet的复杂类型使用攻略(DBUS)