异常机制(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类即可

自定义异常步骤:

  1. 创建自定义异常类
  2. 在方法中通过throw关键字抛出异常对象
  3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
  4. 在出现异常方法的调用使用者中捕获并处理异常
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)的更多相关文章

  1. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  2. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  3. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  4. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  5. 第一篇,java学习之旅

    在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...

  6. Java学习之旅(一):探索extends

    鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...

  7. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  8. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...

  9. ASP.NET Core on K8S学习之旅(12)Ingress

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Ingress Kubernetes对外暴露Service主要有三种方 ...

  10. java学习之旅

    jar文件其实就是一个压缩包,里面包含很多class文件(一个class文件是一个类的字节码).方便在网络上传输.可以规定版本号,更容易进行版本控制. var只能在方法内使用,不能用于定义成员变量. ...

随机推荐

  1. Mysql Order 排序的时候占用很长时间解决思路

    MySQL中的连表查询(JOIN)在进行ORDER BY排序时可能会变得很慢,尤其是当处理大量数据时.以下是一些优化策略,可以帮助减少排序操作的时间: 索引优化: 确保参与排序的列上有索引.如果排序的 ...

  2. 成长计划校园极客秀 | 玩转OpenHarmony开发智能煤气检测系统

    成果展示 1.整体展示 2.碰一碰无感配网 3.报警 简介 目前,煤气泄漏给居民生活带来伤害的事情仍时有发生,但我相信万物互联能够有效避免这种伤害,于是我基于OpenHarmony设计了一款煤气检测装 ...

  3. 组合数学——Min-Max容斥

    Min-Max 容斥,即 $$\max(S)=\sum_{T\in S,T\neq\emptyset}(-1)^{|T|-1}\min(T)$$ 接下来证明上面那个式子是对的.定义 \(S\) 中共有 ...

  4. 学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程

    Python 可以用于数据库应用程序.最流行的 NoSQL 数据库之一是 MongoDB MongoDB MongoDB 将数据存储在类似 JSON 的文档中,使数据库非常灵活和可扩展. 您可以在 M ...

  5. Docker学习路线1:介绍

    Docker是什么? Docker是一个开源平台,通过将应用程序隔离到轻量级.可移植的容器中,自动化应用程序的部署.扩展和管理.容器是独立的可执行单元,封装了运行应用程序所需的所有必要依赖项.库和配置 ...

  6. Maven——阿里云镜像

    <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots</mirro ...

  7. 格式化字符串走过的坑 pwn109

    格式化字符串走过的坑 pwn109 今天做的一道题有一个坑我调试半天终于打通了,格式化字符串的坑,确实不少,东西也比较多容易忘记,怎么说呢,功夫在平时,经验少了 老规矩先看一下保护 Full RELR ...

  8. MogDB/OpenGauss数据库中通过参数控制抓取慢sql

    MogDB/OpenGauss 数据库中通过参数控制抓取慢 sql 本文出处:https://www.modb.pro/db/221556 mogdb 数据库中可以通过打开相应的参数抓取慢 sql,该 ...

  9. VMware Workstation之虚拟机NAT模式

    [摘要] 三台虚拟机配置成NAT模式,实现三台虚拟机互通并可以访问互联网. 一.虚拟机配置为NAT,实现访问互联网和宿主机 1.虚拟网络编辑器配置 VMnat8为NAT的虚拟网卡,NAT模式可以基于D ...

  10. Java+HTML预习笔记_20140610

    1.HTML <img> 标签 HTML <img> 标签 实例 在下面的例子中,我们在页面中插入一幅 W3School 的工程师在上海鲜花港拍摄的郁金香照片: <img ...