【11-Ⅱ】Head First Java 学习笔记

HeadFirst Java

本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。

第一章 Java入门
第二章 面向对象
第三章 变量
第四章 方法操作实例变量
第五章 程序实战
第六章 Java函数库
第七章 继承与多态
第八章 深入多态
第九章 构造器与垃圾收集器
第十章 数字与静态
第十一章 异常处理


前言

七八九章是Java中较新的知识点,这部分也是区别于C比较有趣的地方!建议大家多多回顾。不多废话,我们进入今天的正题。异常处理,也是Java中比较新的内容。
啥是异常?程序出现异常情况呗!你在想不对啊,编译器不是已经保证程序的正确性了吗?其实通过前文的学习我们知道,编译器保证的是编译期的一些安全问题,比如类型安全问题。在JVM运行期,还是会有其他错误、异常的。有些错误异常来自程序错误,在开发阶段我们就可以避免(数组越界),有些则得编写异常处理程序,比如预期某些文件在特定目录,但实际执行时,又找不到文件?

异常处理说的是:我们无法保证程序不会有异常,当在编写可能有异常的方法时,我们需要有处理异常状况的程序。接下来通过创建一个MIDI音乐播放器来介绍这一部分。这一直涉及到本章与后续两章内容!当然对于这一部分,我并不重点学习,对于本书,更侧重Java基础的学习,项目相关的API只做了解。
本章分为两小节介绍~
以下是第二小节。

try/catch块

调用风险方法时,需要在try中调用,且方法若没有成功执行,即执行过程中一旦抛出异常,调用方会马上捕捉,并跳转到调用方catch块。
在这里插入图片描述

finally块

  • 无论如何都会执行的部分,即将重要的清理程序部分集中在该块中,不用在try\catch中重复写
  • 如果try或catch有return指令,finally还是会执行,流程会先跳到finally再回到return指令!

练习:
如果String test=“yes”;如何输出呢?
在这里插入图片描述

处理多重异常

方法可以抛出多个异常,声明也必须含有全部可能的异常。(逗号分割;有共同父类的,声明父类即可)

异常是多态的

异常也是对象,只是可以被抛出。所以异常也可以通过多态方式引用!

  • 方法只需要声明父类
  • catch块不用对每个做处理,只要少数catch即可处理所有异常

注意catch块的顺序!不能把大篮子放在前面!一方面没有意义,一方面不会通过编译——JVM只会从头开始找到第一个符合范围的异常处理块。

不处理异常——duck it

让调用方法的程序来catch异常,而不是把调用放在try/catch块中。
做法:即表示你还会丢出这个异常,即方法声明会丢出异常
过程:方法抛出异常,立即从栈中取出;丢给栈顶方法,若此时栈顶方法(调用方)是ducker,又会被取出,继续把异常丢给栈

若连Main都duck掉异常,会怎么样呢?以下是具体的例子!
在这里插入图片描述
在这里插入图片描述
注意运行期的异常不应该duck掉哦,应该可以通过修正程序逻辑避免!

总结

对于异常,两种处理方法
1.处理,try/catch
2.duck,声明
在这里插入图片描述

回到音乐播放程序

涉及这块的具体内容,就不多讲,大家有兴趣可以看书P339
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vlan的学习笔记2(vlan间通信)

1.使用路由器的物理接口 原理:在二层交换机上配置VLAN,每个VLAN单独使用一个交换机接口与路由器互联。路由器使用两个物理接口,分别作为VLAN 10及VLAN 20内PC的默认网关,使用路由器的物理接口实现VLAN之间的通信。 实验1&#x…

EasyCVR视频汇聚平台无法自动播放视频的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流…

手撕sql面试题:根据分数进行排名,不使用窗口函数

分享一道面试题: 有一个分数表id 是该表的主键。该表的每一行都包含了一场考试的分数。Score 是一个有两位小数点的浮点值。 以下是表结构和数据: Create table Scores ( id int(11) NOT NULL AUTO_INCREMENT, score DECIMAL(3,2), PRIMARY KEY…

Git和SVN有什么区别?

Git和SVN都是版本控制系统,它们都是用来帮助团队协同开发,管理代码版本的。但是,git和svn在实现方式,使用方法,特性等方面都存在一些差异 分布式 vs 集中式 这是二者之间最大的区别。Git是分布式版本控制系统&#xff…

Java23种设计模式-结构型模式之桥接模式

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 通常以下角色: 角色1.抽象类(Abstraction):定义抽象接口。 角色2.扩展抽象类(Refin…

通过nrm管理源地址

安装nrm npm install -g nrm版本及帮助 Options:-V, --version 查看版本号-h, --help 帮助命令如下图 常用命令 Commands:ls 全部注册数据源列表current [options] 显示当前使用的…

ICCV2023人脸识别TransFace论文及代码学习笔记

论文链接:https://arxiv.org/pdf/2308.10133.pdf 代码链接:GitHub - DanJun6737/TransFace: Code of TransFace 背景 尽管ViTs在多种视觉任务中展示了强大的表示能力,但作者发现,当应用于具有极大数据集的人脸识别场景时&#…

SpringMVC 源码剖析

SpringMVC 源码剖析 0 从源码角度分析SpringMVC执行流程 // 前端控制器,SpringMVC最核心的类 public class DispatcherServlet extends FrameworkServlet {// 前端控制器最核心的方法,这个方法是负责处理请求的,一次请求,调用一次…

C语言趣味代码(三)

这一篇主要围绕写一个程序---寻找数字 来写,在这篇我会详细和大家介绍基本实现以及它的改良版,还有相关知识的拓展,干货绝对满满。 1. 寻找数字 在这一主题下,我们会编写一些代码,来锻炼玩家的反应力,同时…

【python源码解析】深入 Pandas BlockManager 的数据结构和初始化过程

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Vue2学习笔记(尚硅谷天禹老师)

目录 一、入门案例 二、模板语法 三、数据绑定 四、el和data的两种写法 五、MVVM模型 六、Object.defineproperty方法 七、Vue中响应式原理 八、数据代理 九、methods配置项 十、Vue中的事件处理 十一、Vue中的键盘事件 十二、计算属性 十三、监视属性watch 十四、绑定Class样式…

数据库构建中的三范式设计(附SQL实例说明)

数据库构建中的三范式(附SQL实例说明) 设计数据库时遵循三范式(1NF、2NF、3NF)是关系型数据库设计中用于减少数据冗余、提高数据一致性的理论基础。 第一范式:任何一张表必须有主键,每个字段原子性不可再分…

主控制文件(项目的开始)食用顺序_3

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 该文档 如有更新 会直接修改此文档 目前版本 2024.4.23 本项目需求 控制文件 尽量不修改 代码要简介快速 控制文件代码如下 from flask import Flask, request# 三种事件扩展包 自行创建 import Group # 群聊事…

玩转微服务-SonarQube

这里写目录标题 第一节 SonarQube1.1 简介1.2 四个组成部分1.2.1 SonarQube服务器1.2.2 SonarQube数据库1.2.3 插件1.2.4 Scanner 1.3 工作流程 第二节 SonarQube的安装2.1 安装2.2 插件 第三节 P3C规范3.1 简介3.2 SonarQube 配置 P3C规范3.3 IDEA配置 P3C规范 第四节 Maven项…

Mybatis-动态SQL

黑马程序员JavaWeb开发教程 文章目录 一、Mybatis-XML映射文件1、XML映射文件&#xff08;1&#xff09;规范&#xff08;2&#xff09;MybatisX 二、Mybatis-动态SQL-if1、动态SQL2、 标签<if><where>3、示例 三、Mybatis-动态SQL-foreach根据 id 批量删除员工1、…

踩坑npm install qrcodejs2和crypto-js

在VSCode输入以下命令时&#xff1a; npm run dev 报错找不到crypto-js依赖。 通过以下命令安装crypto-js依赖。 npm install --save crypto-js 然后再次运行启动命令继续报错&#xff0c;这次报错找不到qrcodejs2依赖&#xff0c;通过以下命令安装qrcodejs2依赖&#xff…

iOS - 多线程-atomic

文章目录 iOS - 多线程-atomic1. 源码分析1.1 get方法1.2 set方法 2. 一般不使用atomic的原因 iOS - 多线程-atomic atomic用于保证属性setter、getter的原子性操作&#xff0c;相当于在getter和setter内部加了线程同步的锁可以参考源码objc4的objc-accessors.mm它并不能保证使…

刚刚,ChatGPT重大更新!GPT-4更加聪明,已成毕业论文撰写润色修改最佳利器!

今天ChatGPT Plus版本做了升级。GPT-4增强了记忆功能&#xff0c;能够通过你的多次对话了解你的意图&#xff0c;并提供合适的回应&#xff0c;总结一句话就是&#xff1a;更加懂你&#xff01; ChatGPT到底能干什么&#xff1f;我简单总结一下&#xff1a; 翻译&#xff1a;中…

电商技术揭秘三十一:智能风控与反欺诈技术

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘二十八&#xff1a;安全与合规性保障 电商技术揭秘二十九&#xff1a;电商法律合规浅析 电商技术揭秘三十&#xff1a;知识产权保…

C++必修:从C到C++的过渡(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 缺省参数 1.1. 缺省参数的使用 缺省参数是声明或定义函数时为函数的参数指定…