异常

1.什么是异常?

Exception

  • 异常是指程序在运行过程中出现的不期而至的各种状况

  • 异常发生在程序运行期间,它影响了正常程序执行流程

通俗易懂的表达就是,程序在发生意料之外或者拿到的不是想要的时候导致程序不能往下执行的情况就叫异常。

在Java编程学习中我们也经常会碰到许许多多的异常

package pro;

public class Test {
public static void main(String[] args){
int[] sum = new int[3];
System.out.println(sum[3]); //ArrayIndexOutOfBoundsException!!
System.out.println(11/0);//ArithmeticException
}
}

3.异常的简单分类

  • 检查性异常

    • 在编译的时候能发现的异常
  • 运行时异常
    • 编译时发现不了的异常只会在运行时出错
  • 错误:不是异常
    • 脱离程序员控制的问题,错在代码中通常被忽略

4.异常处理框架

Java中把异常当中对象来处理,提出异常处理框架的思想

RuntimeException:一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能的考虑避免这类异常的发生

Error和Exception的区别:Error错误是灾难性的致命的错误,当JVM遇到此类错误时,JVM一把会选择终止线程;而Exception通常情况下可以被程序处理的,并且在程序中应该尽可能的去处理这些异常

5.Java的异常处理机制

  • 抛出异常
  • 处理异常

异常处理的五个关键字:try、catch、finally、throw、throws

package pro;

public class Test {
public static void main(String[] args){
int[] sum = new int[3]; try { //监控资源区域
System.out.println(sum[3]);
}catch (ArrayIndexOutOfBoundsException e){ //catch 异常捕获
System.out.println("亲,您的数组越界了");
}finally{ //finally 无论怎么样都会执行 处理善后工作
System.out.println("end.");
} }
}

异常处理也支持多个catch形式

        try { 

        }catch (){ //异常3

        }catch(){ //异常2

        }catch(){ //异常1

        }finally{         

        }

如上代码,程序在没捕获到异常3就会捕获异常2,如果还没捕获异常2就会捕获异常1;因此,我们应该把大的异常写下面小的异常写下面(范围大小)

6.主动抛出异常

我们可以在try监控区域,通过throw直接抛出异常

package pro;

public class Test {
public static void main(String[] args){
new Test().test(1,0);
} public void test(int a,int b){
if(b == 0){
throw new ArithmeticException();
}
} }

在方法中捕获了异常我们可以通过throws从方法中抛出到上一级

package pro;

public class Test {

    public static void main(String[] args){
try {
new Test().test(1,0);
} catch (ArithmeticException e) {
System.out.println("出错啦!!!");
}
} public void test(int a,int b) throws ArithmeticException{
if(b == 0){
throw new ArithmeticException();
}
} }

7.自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分的异常情况。

大Java还是给程序员提供了自定义异常类,只需要继承Exception即可

自定义一个异常类

package pro;

public class MyException extends Exception{

    int a = 10;

    public MyException(int b){
this.a = b;
} //返回异常信息到catch的e
public String toString(){
return "Hello Wrold!!";
}
}

通过异常类自定义异常

package pro;

public class Test {

    public static void main(String[] args){
try {
new Test().test(5,21);
}catch (MyException e){
System.out.println("lala:"+e);
}
} public void test(int a,int b) throws MyException{ if(b != 10){
throw new MyException(a);
} } }

零基础入门学习JAVA课堂笔记 ——DAY08的更多相关文章

  1. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  2. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  3. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  4. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  5. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  9. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  10. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

随机推荐

  1. Serverless 应用托管助力企业加速创新

    作者: 熊峰 | 阿里云技术专家 云原生时代的 Serverless 应用托管架构 回顾过去十年,数字化转型将科技创新与商业元素不断融合.重构,重新定义了新业态下的增长极.商业正在从大工业时代的固化范 ...

  2. java字符串与json互转

    开发中经常遇到将字符串转成json和字符串转成json属组的方法,网上搜到的方法,好多都是不好用的,今天这里记录一下方便自己今后查看,也提供给需要的人. 依赖: <!-- 处理json --&g ...

  3. node做服务器

    // 用于创建网站服务器的模块 const http = require('http'); // 创建web服务器,app对象就是网站服务器对象 const app = http.createServ ...

  4. windows10测试时如何构造大图片(如超过8M+的图片)

    1.原图片(大小40k) 2. 选怎一个容量大的文件如视频文件8M+ 3.使用copy命令进行扩容(cmd命令行操作): copy test01.jpg /b + 8M.MP4 test01_8M.j ...

  5. Go 标准库 net

    本篇文章主要介绍 Go 标准库中的 net 包,通过一个小例子介绍常用的 net 包函数/方法 Listen,Accept 和 Dial 等. 1. net 简介 Go 官网对 net 包的定义如下: ...

  6. SV OOP-2

    静态变量 继承性(Inheritance) 抽象类和虚方法virtual methods 多态(Ploymorphism) 通过基类的变量可以使用子类的对象 基类中定义的virtual functio ...

  7. 04-Verilog基础_3

    Module Module是verilog中的关键字,是对电路建模的最小单元.verilog中构建一个电路,对于一个硬件进行描述在module中进行. 半加器 module half_adder(S, ...

  8. MyBatis02:CRUD操作

    CRUD操作 namespace 这个是命名空间,不可缺少,更不能写错 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的全限定类名,完整包名,必须一致! Select(用于查 ...

  9. 给Hexo博客文章加密

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 原文地址 这是个啥 首先, 这是 Hexo 生态圈中 最好的 ...

  10. Redis不同版本性能研究

    Redis不同版本性能研究 背景 前期同事遇到了一个大key的慢查询. 前提条件是: 一个 60万key的环境里面. 有一个 260万元素的set类型的key 产品经常会进行 smember key ...