零基础入门学习JAVA课堂笔记 ——DAY08
异常
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的更多相关文章
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 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封装 ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- 深度学习降噪专题课:实现WSPK实时蒙特卡洛降噪算法
大家好~本课程基于全连接和卷积神经网络,学习LBF等深度学习降噪算法,实现实时路径追踪渲染的降噪 本课程偏向于应用实现,主要介绍深度学习降噪算法的实现思路,演示实现的效果,给出实现的相关代码 线上课程 ...
- 为R Markdown配置TinyTex编译环境
技术背景 在前面一篇博客中,我们介绍了一些关于在Windows系统上安装R Studio来编写R Markdown,最后编译成Beamer的演示文档的过程.而在Windows系统的使用过程中发现,编译 ...
- 07-verilog & sytem verilog
一.数据类型 二值逻辑变量 bit 不赋值的时候,变量初始默认为0 x或z的值会转变为0 bit vector--bit矢量 bit [msb,lsb] variable_name = [initia ...
- 0xGame 2023【WEEK2】Crypto全解
中间的那个人 题目信息 from secret import flag from Crypto.Util.number import * from Crypto.Cipher import AES f ...
- SpringMVC01——回顾MVC
1.1什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据.显示分离的方法来组织代码. MVC主要作用是降低了视图 ...
- [转帖]linux设置page cache大小,Linux Page Cache调优在Kafka中的应用
本文首发于 vivo互联网技术 微信公众号 链接: 作者:Yang Yijun 本文主要描述Linux Page Cache优化的背景.Page Cache的基本概念.列举之前针对Kafka的 IO ...
- [转帖]全表扫描却产生大量db file sequential read一例
老熊 Oracle性能优化 2012-05-23 开发人员在进行新系统上线前的数据校验测试时,发现一条手工执行的SQL执行了超过1小时还没有返回结果.SQL很简单: SELECT * FROM MOB ...
- [转帖]AF_UNIX 本地通信
文章目录 一.AF_UNIX 本地通信 1. Linux进程通信机制 2. socket本地域套接字AF_UNIX 3. demo示例 二.AF_INET域与AF_UNIX域socket通信原理对比 ...
- [转帖]《Linux性能优化实战》笔记(一)—— 平均负载
最近在看极客时间的<Linux性能优化实战>课程,记录下学习内容. 一. 平均负载(Load Average) 1. 概念 我们都知道uptime命令的最后三列分别是过去 1 分钟.5 分 ...
- [转帖]echo 输出不换行-e \c
http://www.my889.com/i/1952 在shell中,echo输出会自动换行.有时候在循环中不希望echo输出换行.代码实现如下: 1 echo -e " \c" ...