JavaSE学习笔记 Day17

JavaSE学习笔记 Day17

个人整理非商业用途,欢迎探讨与指正!!
« 上一篇


文章目录

  • JavaSE学习笔记 Day17
    • ···
    • 十五、异常
      • 15.1异常的概念
      • 15.2异常处理的重要性
      • 15.3Throwable类
      • 15.4Exception类
        • 15.4.1运行期异常
        • 15.4.2编译期异常
      • 15.5异常处理机制
        • 15.5.1抓
        • 15.5.2抓模型的细节
        • 15.5.3抛
          • 15.5.3.1throws
          • 15.5.3.2throw
          • 15.5.3.3抓抛的选取
          • 15.5.3.3为什么要手动的throw异常?
      • 15.6自定义异常
      • 15.7方法重写和重载中的异常
    • 十六、集合
      • 16.1集合的概念
      • 16.2单列集合
        • 16.2.1Collection接口
          • 16.2.1.1常用方法


···

十五、异常

15.1异常的概念

程序运行过程中出现的错误,称为异常

15.2异常处理的重要性

若异常不处理,那么就会中断JVM的运行.异常之后的代码不会再执行了

public class Demo01 {public static void main(String[] args) {
//		System.out.println(10 / 0);int[] arr = new int[0];
//		System.out.println(arr[0]);Object obj = "";
//		int i = (Integer) obj;String str = null;
//		System.out.println(str.length());set(str);System.out.println("我还能被执行了吗");}public static void set(String str) {System.out.println(str.length());}
}

15.3Throwable类

未抛出的,未测试的
是所有异常(Exception)和错误(Error)的父类
Throwable对象(子类对象)
 1.是由jvm在捕捉到异常信息是创建的
 2.是由throw创建

15.4Exception类

是java中所有异常的父类
java中所有的已知异常都是由Exception结尾的
 java中若发现两个中,一类内部包含另一个类的名字,那么被包含的类名往往就是父类/接口
  例如:ArrayIndexOutOfBoundsException的父类是IndexOutOfBoundsException

java中的异常可以为分两类:
 运行期异常:运行过程中可能会出现的异常
 编译期异常:编码过程中必须进行处理的异常

15.4.1运行期异常

运行期异常,可以不用处理,系统自动的交给jvm处理
运行期异常产生之后,异常之下的代码是无法执行的
运行期异常是偶然发生的,有可能的

常见的运行期异常
 RuntimeException:运行期异常,是所有的运行异常的父类
  AtithmeticException:数学异常,除0时会发生
  ClassCaseException:类型转换异常,向下造型时会发生
  IllegalArgumentExcepion:非法参数异常
   NumberFormatException:数字转换异常,字符串转换为数值时会发生
  IndexOutOfBoundsException:下标越界异常
   ArrayIndexOutOfBoundsException:数组下标越界异常,下标不在指定范围内
   StringIndexOutOfBoundsException:字符串下标越界异常
  NullPointerException:空值异常,使用null值打点调用时发生

15.4.2编译期异常

方法自带的异常(普通方法,构造方法)
编译期异常必须被处理,否则编码无法通过
除了运行期异常都是编译异常,都需要进行处理
常见的编译期异常
 SQLException:一切和SQL相关的java操作,都会抛出
 IOException:一切IO操作(磁盘的读写),都会抛出

public class Demo05 {public static void main(String[] args) throws SQLException {
//		两种处理方案:1.try/catchtry {test();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}
//		2.throwstest();}//	该方法自带编译异常,必须被处理public static void test() throws SQLException {}
}

15.5异常处理机制

java提供了两种异常处理机制:①抓②抛
 java中的异常处理抓抛模型

15.5.1抓

捕获异常,主动的去处理

语法:
 try{
  //可能会出现异常的代码
 }catch(异常对象 e){
  //当出现对应的异常对象时,执行的代码
 }…[多个catch]
  //可以有多个异常对象
 }finally{
  //无论有无异常产生都会执行的代码
 }

特点:
 try块不能独立使用,需要和catch或finally一起使用(多数情况下是三个块一起使用)

public class Demo06 {public static void main(String[] args) {System.out.println("我是main的开始");try {
//			try中的代码可能会有异常//System.out.println(10 / 0);//会产生一个异常对象,这个对象是JVM创建的(ArithmeticException)String str = null;System.out.println(str.length());
//			异常之下代码无法执行System.out.println("我是异常之下");}catch(ArithmeticException e/*类似于形参,捕获到的对象为e进行赋值*/) {System.out.println("这里是抓到数学异常进行的输出");}catch (NullPointerException e) {System.out.println("这里是抓到空值异常进行的输出");}finally {System.out.println("无论有无异常,都会执行");}//有了异常处理之后,不影响后续的代码执行了System.out.println("我是main的结尾");}
}
15.5.2抓模型的细节

抓取异常时,若有多个异常,会抓到第一个进行处理

public class Demo07 {public static void main(String[] args) {
//		抓到程序运行时的第一个异常try {System.out.println(10 / 0);String str = null;System.out.println(str.length());} catch (ArithmeticException e) {System.out.println("数学异常");} catch (NullPointerException e) {System.out.println("空值异常");}}
}

三个块往往是一起使用,try可以和catch或者finally单独使用

//		try和catch一起使用
try {} catch (Exception e) {// TODO: handle exception
}
//		try和finally一起使用
try {} finally {// TODO: handle finally clause
}

异常常用的方法

public class Demo09 {public static void main(String[] args) {
//		System.out.println(10 / 0);try {System.out.println(10 / 0);} catch (Exception e) {
//			异常处理机制是独立线程的
//			打印异常的堆栈信息e.printStackTrace();
//			异常的局部信息System.out.println(e.getMessage());}System.out.println("最后");}
}

捕获异常的顺序
 若异常之间有父子关系,优先于子异常,后捕获父异常
 没有父子关系的,顺序无所谓

try {} catch (NullPointerException e) {} catch (RuntimeException e) {} catch (Exception e) {} catch (Throwable e) {}//		同时抓捕多个异常,多个异常之间是没有关系的
try {} catch (NullPointerException e) {} catch (ArithmeticException e) {}try {} catch (NullPointerException|ArithmeticException e) {} 
15.5.3抛

被动处理

15.5.3.1throws

在方法的声明处使用throws关键字,表示当前方法携带异常
throws表示当前的异常不被处理,交给调用者,若在main中仍然throws交给JVM

public class Demo11 {public static void main(String[] args) throws Exception {
//		运行期可以不处理test01();
//		编译期异常被调用时,必须处理,处理方案:1抓 2抛
//		抓try {test02();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
//		抛test02();}
//	throws运行期异常
//	运行期异常,默认可以不被处理的public static void test01() throws RuntimeException {}
//	throws编译期异常
//	编译期异常是必须再次被处理的public static void test02() throws Exception {}
}
15.5.3.2throw

在方法内部抛出异常
 没有异常手动创建异常对象
 若throw的异常为运行期异常可以不处理,但为编译期异常必须处理

public class Demo12 {//	方法内部抛出运行期异常public static void test01() {
//		手动创建的throw new RuntimeException("我是异常");}//	方法内部抛出编译期异常,就必须处理掉public static void test02() throws Exception {
//		处理编译期异常:1.抓 2.抛
//		1.try {throw new Exception();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
//		2.throw new Exception();}public static void main(String[] args) {try {test01();} catch (RuntimeException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("结束");}
}
15.5.3.3抓抛的选取

能抓就抓,遇到异常我们首先都是主动抓取
但在程序设计时,接口中的抽象方法是无法被抓取的,选择抛

public interface MyInter {void add() throws SQLException;void del() throws SQLException;void up() throws SQLException;
}
15.5.3.3为什么要手动的throw异常?

场景:取钱时余额不足,用户名密码错误

public class Demo13 {double balance = 100000000;
//	取款public double getMoney(int balance) {if(balance < 0 ) {
//			某种程度上,throw new 异常可以代替returnthrow new RuntimeException("输入有误");}if(balance > this.balance) {throw new RuntimeException("余额不足");}return this.balance - balance;}public static void main(String[] args) {Demo13 d13 = new Demo13();//		d13.getMoney(-100);
//		d13.getMoney(100000001);System.out.println(d13.getMoney(10));}
}

15.6自定义异常

已知的异常种类是有限的,遇到问题了需要具体的异常信息,可以自定义异常
继承已知异常,添加对应的构造方法即可
自定义运行期异常继承RuntimeException
自定义编译期异常继承Exception

15.7方法重写和重载中的异常

重载和异常没有任何关系(同名不同参)
重写:
 和运行期异常没有关系
 编译期异常,子类抛出的异常不得宽于父类

public class Demo14 {public void test01() throws SQLException{}public void test02() throws Exception {}
}class A extends Demo14 {
//	不符合抛出异常的要求/*@Overridepublic void test01() throws Exception {// TODO Auto-generated method stub}*/
//	SQLNonTransientException是SQLException的子类@Overridepublic void test01() throws SQLNonTransientException {}@Overridepublic void test02() throws SQLException,IOException,Exception {}
}

十六、集合

16.1集合的概念

是对象的一种容器,用于存放对象
 之前的容器是数组,数组是定长的,数组没有api,数组只能存储单一的类型数据
集合有大量的api,集合中可以存放任意Object类型,长度是可变的
集合的分类:单列集合和双列集合

16.2单列集合

Collecion接口
 是所有单列集合的父接口,没有直接的实现类
 子接口:
  List接口:有序集合
  Set接口:无序集合
实现类:
 ArrayList,LinkedList,Vector是List的实现类
 HashSet,LinkedHashSet,TreeSet是Set的实现类

16.2.1Collection接口

单列集合的最顶级父接口
JDK中不直接提供此接口的实现类

16.2.1.1常用方法

add(E e):向集合中添加内容
clear():清空集合中的所有内容
contains(Object o):判断当前的集合中是否有参数的数据
isEmpty():判断集合中的内容是否为空
remove(Object o):移除指定的元素
size():返回集合中元素的个数
toArray():将集合转换为数组
addAll(Collection<? extends E> c):在一个集合中添加另一个集合 containsAll(Collection<?> c):判断一个集合中是否包含另一个集合
removeAll(Collection<?> c):从一个集合中移除另一个集合

public class Demo01 {public static void main(String[] args) {
//		集合中不能添加基本数据类型
//		创建Collection的对象Collection coll = new ArrayList();
//		添加方法coll.add("hello");coll.add(new Integer(10));coll.add(20);//Integer类型的coll.add("bmh");
//		可以直接被输出System.out.println(coll.toString());
//		判断某个对象是否在集合中System.out.println(coll.contains("hello"));
//		判断集合是否为空System.out.println(coll.isEmpty());
//		清空集合/*coll.clear();System.out.println(coll);*/
//		长度System.out.println(coll.size());
//		转换为数组Object[] array = coll.toArray();System.out.println(Arrays.toString(array));
//		删除coll.remove("hello");System.out.println(coll);//		添加一个集合Collection c = Arrays.asList(10,20,30);//可以将数值直接转换为集合的coll.addAll(c);System.out.println(coll);//		判断是否包含一个数组System.out.println(coll.containsAll(c));
//		移除某个集合coll.removeAll(c);System.out.println(coll);}
}

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

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

相关文章

Redis整合Lua脚本

文章目录 一、Lua介绍1.1 Lua特点 二、在Redis里调用lua脚本2.1 redis-cli 命令执行脚本2.2 eval命令执行脚本2.3 return返回脚本运行结果2.4 Redis和lua相关的命令2.5 观察lua脚本阻塞Redis 三、进阶3.1 参数传递KEYS和ARGV参数redis-cli --eval 和eval命令 3.2 流程控制分支语…

tp8 模型save保存方法 method not exist:think\db\Query->record

1.$schema 有一个字段存在&#xff0c;但是实际表中是缺少这个字段的 2.必填值&#xff0c;没有值

在 C++ 中局部变量和全局变量

在C中&#xff0c;局部变量和全局变量的地址值有以下区别&#xff1a; 存储位置&#xff1a; 局部变量&#xff1a;局部变量存储在栈&#xff08;stack&#xff09;上。每当函数被调用时&#xff0c;局部变量的存储空间会被分配&#xff0c;并在函数执行完毕后自动释放。全局变…

什么是关键词排名蚂蚁SEO

关键词排名是指通过搜索引擎优化&#xff08;SEO&#xff09;技术&#xff0c;将特定的关键词与网站相关联&#xff0c;从而提高网站在搜索引擎中的排名。关键词排名对于网站的流量和用户转化率具有至关重要的影响&#xff0c;因此它是SEO工作中最核心的部分之一。 如何联系蚂…

二叉树的最大深度(LeetCode 104)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;深度优先搜索GolangC 方法二&#xff1a;广度优先搜索GolangC 参考文献 1.问题描述 给定一个二叉树 root &#xff0c;返回其最大深度。 叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节…

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步&#xff1a;坐标导入第二步&#xff1a;创建SpringMVC容器的控制器类第三步&#xff1a;初始化SpringMVC环境&#xff0c;设定Spring加载对应的bean第四步&#xff1a;初始化Servlet容器&#xff0c;加载SpringMV…

AI电子秤---顶尖电子秤对接+AI服务

上文我们说道,要实现整个AI识别过程,我们需要电子秤+AI服务,本文将以顶尖OS2电子秤+某AI服务为例完成整个过程 1、电子秤通信 通常电子秤是以串口形式进行通信,这里需要注意的是,某些设备可能是有信号才进行数据通信,有些则可能是持续输出的,具体取决于对接电子秤品牌…

Leetcode sql50基础题最后的4题啦

算是结束了这个阶段了&#xff0c;之后的怎么学习mysql的方向还没确定&#xff0c;但是不能断掉&#xff0c;而且路是边走边想出来的。我无语了写完了我点进去看详情都不让&#xff0c;还得重新开启计划&#xff0c;那我之前的题解不都没有了&#xff01;&#xff01; 1.第二高…

软件测试的魅力何在?为什么很多人选择测试一行而不做开发?

术有专攻&#xff0c;开发和测试都有自己的技术栈领域&#xff0c;谁也代替不了谁。 接下来我就首先说说本人为什么不做开发&#xff0c;而是选择了测试&#xff1b;其次再谈谈测试的魅力。 问题1&#xff1a;为什么选择测试一行而不做开发&#xff1f; 个人工作12年&#xf…

《一书读懂物联网》前言

我们对知识的认知是有规律可循的&#xff0c;大都是从问题开始&#xff0c;对问题的界定、归纳等都是为解决知识增长或进化而服务的&#xff0c;正如波普尔知识进化图&#xff08;见图 i-1&#xff09;所示的那样。 科学始于问题&#xff0c;发现问题是科学知识增长的起点&…

软件开发模型

软件的“生命周期”一般分为6个阶段&#xff0c;即制定计划、需求分析、设计、编码、测试、运行和维护。在软件工程中&#xff0c;这个复杂的过程一般用软件开发模型来描述和表示。常见的软件开发模型有&#xff1a;以软件需求为前提的瀑布模型&#xff0c;渐进式开发模型(如螺…

华为OD机试 - 跳格子3(Java JS Python C)

题目描述 小明和朋友们一起玩跳格子游戏, 每个格子上有特定的分数 score = [1, -1, -6, 7, -17, 7], 从起点score[0]开始,每次最大的步长为k,请你返回小明跳到终点 score[n-1] 时,能得到的最大得分。 输入描述 第一行输入总的格子数量 n 第二行输入每个格子的分数 sc…

【C++】POCO学习总结(十九):哈希、URL、UUID、配置文件、日志配置、动态库加载

【C】郭老二博文之&#xff1a;C目录 1、哈希 1.1 说明 std::map和std::set 的性能是&#xff1a;O(log n) POCO哈希的性能比STL容器更好&#xff0c;大约快两&#xff1b; POCO中对应std::map的是&#xff1a;Poco::HashMap&#xff1b; POCO中对应std::set的是 Poco::Hash…

k8s-ingress 8

ExternalName类型 当集群外的资源往集群内迁移时&#xff0c;地址并不稳定&#xff0c;访问域名或者访问方式等会产生变化&#xff1b; 使用svc的方式来做可以保证不会改变&#xff1a;内部直接访问svc&#xff1b;外部会在dns上加上解析&#xff0c;以确保访问到外部地址。 …

AUTOSAR StbM模块的配置以及代码实现

AUTOSAR StbM模块的配置以及代码实现 1、AUTOSAR配置 2、StbM_Init 初始化各个变量。 3、StbM_MainFunction StbM_Rb_IsSyncTimeBase 同步的TimeBase的id范围是0-15 StbM_Rb_IsOffsetTimeBase offset的TimeBase的id范围是16-31 StbM_Rb_IsPureLocalTimeBase pure的Time…

接口自动化测试框架【AIM】

最近在做公司项目的自动化接口测试&#xff0c;在现有几个小框架的基础上&#xff0c;反复研究和实践&#xff0c;搭建了新的测试框架。利用业余时间&#xff0c;把框架总结了下来。 AIM框架介绍 AIM&#xff0c;是Automatic Interface Monitoring的简称&#xff0c;即自动化…

【华为数据之道学习笔记】5-8多维模型设计

多维模型是依据明确的业务关系&#xff0c;建立基于维度、事实表以及相互间连接关系的模型&#xff0c;实现多角度、多层次的数据查询和分析。如何设计出稳定、易扩展、高可用的数据模型来支持用户消费对数据主题联接至关重要。 多维模型设计有4个主要步骤&#xff0c;包括确定…

xv6 文件系统(下)

〇、前言 计算机崩溃后如何恢复&#xff0c;是一个很重要的话题。对于内存中的数据无关痛痒&#xff0c;开机后重新载入就能解决问题&#xff1b;但是对于持久化存储设备&#xff0c;当你尝试修改一个文件&#xff0c;突然断电当你重新打开文件后&#xff0c;这个文件的状态是…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十五:基础数据模块相关功能实现

一、本章内容 本章使用已实现的公共组件实现系统管理中的基础数据中的验证码管理、消息管理等功能。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址: 基于VUE3+Layui从头搭建通用后台管理系统合集-验证码功能实现 3.2 西瓜…

每日OJ题_算法_滑动窗口③_力扣1004. 最大连续1的个数 III

目录 力扣1004. 最大连续1的个数 III 解析代码 力扣1004. 最大连续1的个数 III 1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 …