零基础入门学习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 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- 在Winform系统开发中,对表格列表中的内容进行分组展示
在我们开发Winform界面的时候,有时候会遇到需要对一些字段进行一些汇总的管理,如果在列表中能够对表格列表中的内容进行分组展示,将比较符合我们的预期,本篇随笔介绍在Winform开发中如何利用Dev ...
- 机器学习-线性分类-支持向量机SVM-合页损失-SVM输出概率值-16
目录 1. SVM概率化输出 2. 合页损失 1. SVM概率化输出 标准的SVM进行预测 输出的结果是: 是无法输出0-1之间的 正样本 发生的概率值 sigmoid-fitting 方法: 将标准 ...
- centos7使用nginx+uwsgi部署python django项目
在django框架中,我们一般直接通过python manage.py runserver来启动提供服务,但是如果生产环境此方法不可行,而且容易导致异常退出,于是需要借助uwsgi来作为守护进程. 操 ...
- [转帖]datax安装+配置+使用文档
1 DataX离线同步工具DataX3.0介绍 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hiv ...
- [转帖]Docker容器无法访问网络问题(网段冲突)
近日在使用docker在腾讯云服务器上部署项目 运行容器时死活访问不了网络,不论是外网还是内网. 最后找到原因是docker容器ip网段与服务器内网ip网段冲突导致的 使用此命令查看到 ifconfi ...
- [转帖]centos7离线安装postgresql13
https://www.cnblogs.com/summer-88/p/15341918.html 在一台可以联网的centos上安装postgresql源 yum install -y https: ...
- [转帖]Fiddler抓取Chrome浏览器访问baiud.com报NET::ERR_CERT_COMMON_NAME_INVALID
错误现象 解决方法: 1.Chrome浏览器地址栏中输:chrome://net-internals/#hsts 2.在Query HSTS/PKP domain处搜索www.baidu.com网站, ...
- 【转帖】Linux性能优化(一)——stress压力测试工具
https://blog.csdn.net/a642960662/category_11641226.html 一.stress简介 1.stress简介 stress是Linux的一个压力测试工具, ...
- SAP FICO 前台财务过账、预制功能分开
最近遇到一个变态要求,FB01 等涉及过账功能 要求根据'权限'判断用户是否有过账的功能.以下实现会有遗漏场景: 实现:hide 'SAVE'按钮 (ok_code = 'BU'). 根据状态栏设置' ...
- echarts第二次渲染不出来的原因
场景描述 echarts主要用于数据可视化展示 有些时候,我们可能会根据不同的条件,在页面上进行显示和隐藏. 比如说:页面最初展示了数据,当我点击不同的按钮的时候. echarts会对应的展示或者隐藏 ...