java学习之旅(day.12)
异常机制(Exception)
异常指程序运行中出现的不期而至的各种状况
异常分类:
- 检查性异常:用户输入错误引起的异常
- 运行时异常:写的时候未报错,但一运行就会报错,
- 错误(error):错误不是异常,而实脱离程序员控制的问题,错误在代码中通常被忽略。如:当栈溢出时,一个错误就发生了,但在编译时是检查不到的
异常体系结构
java把异常当作对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类
javaAPI中定义的异常分为2大类:错误(error)和异常(Exception)

Error:
- Error类对象有java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关
- java虚拟机运行错误(Virtual MachineError),当JVM不再有执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,java虚拟机JVM一般会选择线程终止
- 发生在虚拟机试图执行应用时发生的错误,如:类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况
Exception
- 在Exception分支中有一个重要的子类RuntimeException(允许是异常)如:

捕获和抛出异常
异常处理的5个关键字
try catch finally throw(手动抛出异常) throws(方法抛出异常)
package com.exception;
public class Test {
public static void main(String[] args) {
int a=1;
int b=0;
//怎么捕获异常并返回一些信息
try {//打try后自动生成的代码块,try可以监控区域
//假设可以明显的判断下面第二行错误
if(b==0){//可以选择主动抛出异常throw
throw new ArithmeticException();//通过throw关键字new一个异常,主动抛出异常,但是这个主动抛出异常只在方法中使用,见Test3
}
new Test().a();
System.out.println(a/b);
}catch(Throwable e){//catch(ArithmeticException e){//catch捕获异常,ArithmeticException是异常的类型
System.out.println("程序出现异常,变量b不能为0");//可以写多个catch,捕获多个异常,层层递进,但根据图123大的要在下方,如throwable应在最下
}finally{//最后处理善后工作。程序出不出异常都会执行finally
System.out.println("finally");
}
//finally可以不要,try catch必须要有
}
//再写个方法a中调用b,b中调用a
public void a() {
b();
}
public void b(){
a();
}
}
===================================================
package com.exception;
public class Test2 {
public static void main(String[] args) {
int a=1;
int b=0;
try {
System.out.println(a/b);//选中当前这行代码,ctrl alt+t 选try catch finally会自动生成trycatch语句
} catch (Exception e) {
e.printStackTrace();//打印错误的栈信息
} finally {
}
}
}
==================================================
package com.exception;
public class Test3 {
public static void main(String[] args) {
//调用下面的test方法
try {
new Test3().test(1,0);//直接使用匿名内部类.test,并传参数a=1,b=0
} catch (ArithmeticException e) {
e.printStackTrace();
} finally {
}
}
//定义一个方法,在方法中使用主动抛出
//假设这个方法中处理不了这个异常,还可以直接往外抛(在方法上抛出异常)
public void test(int a,int b) throws ArithmeticException{//但是这样的话需要将其捕获
if(b==0) {
throw new ArithmeticException();//主动抛出异常一般在方法中使用
}
//System.out.println(a/b);方法体用不用无所谓
}
}
/*
package com.exception;
public class Test3 {
public static void main(String[] args) {
//调用下面的test方法
new Test3().test(1,0);//直接使用匿名内部类.test,并传参数a=1,b=0
}
//定义一个方法,在方法中使用主动抛出
public void test(int a,int b){
if(b==0) {
throw new ArithmeticException();//主动抛出异常一般在方法中使用
}
//System.out.println(a/b);方法体用不用无所谓
}
}
*/
自定义异常
用的并不多,了解
使用java内置的异常类可以描述在编程时出现的大部分异常情况,除此外,用户还可以自定义异常,用户自定义异常只需要继承Exception类即可
自定义异常步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
- 在出现异常方法的调用使用者中捕获并处理异常
package com.exception.demo02;
//自定义的异常类
public class MyException extends Exception{
//传递数字>10就抛出异常
private int detail;
//构造器
public MyException(int a) {
this. detail=a;
}
//用toString打印上面的信息
//异常的打印信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
package com.exception.demo02;
//写一个测试类,测试下刚写的异常
public class Test {
//要先写一个可能存在异常的方法
static void test(int a) throws MyException{
System.out.println("传递的参数为:"+a);
if (a>10){
throw new MyException(a);
/* try {
throw new MyException(a);//抛出,只写这一句会报错要么在下一行用捕获,要么用throws抛出
} catch (MyException e) {
e.printStackTrace();
}
*/
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(101);
} catch (MyException e) {
System.out.println("MyException=>"+e);
}
}
}

java学习之旅(day.12)的更多相关文章
- Java学习之旅开篇:运行机制及环境搭建
在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- Java学习之旅基础知识篇:数组及引用类型内存分配
在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- 第一篇,java学习之旅
在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...
- Java学习之旅(一):探索extends
鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...
- 我的java学习之旅--一些基础
(因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...
- Java学习之旅(二):生病的狗1(逻辑推导)
前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...
- ASP.NET Core on K8S学习之旅(12)Ingress
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Ingress Kubernetes对外暴露Service主要有三种方 ...
- java学习之旅
jar文件其实就是一个压缩包,里面包含很多class文件(一个class文件是一个类的字节码).方便在网络上传输.可以规定版本号,更容易进行版本控制. var只能在方法内使用,不能用于定义成员变量. ...
随机推荐
- #树形dp#B 预算缩减
题目 给定一棵树,你需要删去一些边(可以不删),使得剩下的图中每个点所在的连通块大小都\(\geq k\). 求删边的方案数,对\(786433\)取模.两种方案不同,当且仅当存在一条边在一个方案中被 ...
- HMS Core助力开发者打造高品质游戏,共创智玩新生态
2021年8月1日,华为HMS Core.Sparkle游戏应用创新沙龙在上海举行.会上,华为HMS Core团队与游戏行业开发者围绕3D图形渲染.网络加速.精准运营等多个话题,探讨了游戏应用开发技术 ...
- 在HarmonyOS上使用ArkUI实现计步器应用
介绍 本篇Codelab使用ArkTS语言实现计步器应用,应用主要包括计步传感器.定位服务和后台任务功能: 1. 通过订阅计步器传感器获取计步器数据,处理后显示. 2. 通过订阅位置服务获取位 ...
- redis 简单整理——pipeline[十]
前言 简单整理一下pipeline. 正文 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间). pipeline它能将一组R ...
- springboot多模块项目启动经历
springboot多模块使用 @ 目录 springboot多模块使用 前言 大佬把项目权限给我了,我就先下下来看看学习一下 一.识别 二.maven配置 1.安装maven 三.加载刷新 总结 前 ...
- Flutter笔记-基础组件
图片和Icon 加载网络图片以及本地图片 Image( image: NetworkImage( "https://img-s-msn-com.akamaized.net/tenant/am ...
- 对中间件概念的理解,如何封装 node 中间件
一.是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享.功能共享的目的 在 ...
- 纯CSS实现带小三角提示框
要实现在页面上点击指定元素时,弹出一个信息提示框.在前面的文章中,我们已经简单介绍了如何使用纯 CSS 创建一个三角形.本文在此基础上,记录如何使用 CSS 创建带三角形的提示框. 实现的原理是创建一 ...
- JVM简明笔记2:运行时数据区
1 内存布局总体结构 根据 JVM 规范,JVM 内存共分为虚拟机栈(Virtual Machine Stacks).堆(Heap).方法区(Method Area).程序计数器(Program Co ...
- Oracle ORA-12725 unmatched parentheses in regular expression
Oracle ORA-12725 unmatched parentheses in regular expression 简单来说就是正则表达式中的括号问题 这种一般就可以锁定使用正则的函数,例如 r ...