JAVA -- 07

系统温习------黑马程序员Java+AI智能辅助编程全套视频教程

异常

异常代表程序出现的问题。

Java异常体系:

Error:代表系统级别错误。

Exception:异常,代表程序可能出现的问题,通常用Exception以及它的孩子来封装程序出现的问题。

运行时异常 :RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常。

编译时异常编译阶段就会出现错误提醒。提醒程序员这里的程序很容易出错。

异常的基本处理:

抛出异常(throws):在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。

捕获异常(try...catch):直接捕获程序出现的异常。

异常的作用:

异常用来定位程序bug的关键信息。

可以作为方法内部的一种特殊返回值 ,以便通知上层调用者,方法的执行问题。

一定要有返回值,但是返回又没有意义,此时可以返回一个异常给上层调用者,返回的异常还能告知上层调用者执行成功与否。

自定义异常:java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。

1、继承Exception类做父类

2、重写Exception的构造器

3、哪里需要用这个异常返回,哪里就throw。

1、继承RuntimeException类做父类

2、重写RuntimeException的构造器

3、哪里需要用这个异常返回,哪里就throw。

异常的处理方案:

方案一:底层异常层层往上抛出最外层集中捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示。

方案二:最外层捕获异常后,尝试重新修复

泛型

定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>)称为泛型类、泛型接口、泛型方法,它们统称为泛型。

作用:泛型提供了在编译阶段约束所能操作的数据类型 ,并自动进行检查 的能力。这样可以避免强制类型转换,及其可能出现的异常。

本质:把具体的数据类型作为参数传给类型变量。

泛型类:

修饰符 class 类名<类型变量,类型变量,...>{ }

泛型接口:

修饰符 interface 接口名<类型变量,类型变量,...>{ }

类型变量建议用大写英文字母,常见的有E、T、K、V。

泛型方法:

修饰符 <类型变量,类型变量,...> 返回值类型 方法名(形参列表){ }

方法参数可以接一切类型

返回值不需要强制类型转换

通配符:就是"?",可以在**"使用泛型"的时候代表一切类型**。E、T、K、V在定义泛型的时候使用。

泛型的上下限:

泛型上限:?extends Car:?能接收的必须是Car或者其子类。

泛型下限:?super Car:?能接收的必须是Car或者其父类。

泛型不支持基本类型,只能支持对象类型(引用数据类型)。

原因è泛型擦除:泛型工作在编译阶段,等编译后泛型就没用了 ,所以泛型在编译后都会被擦除所有类型会恢复成Object类型

基本类型的数据 è 对象数据 (包装类)

包装类把基本类型的数据包装成对象的类型

valueOf方法已经提前在缓存数组中封装好了-128到127的所有对象,这些对象是共享的,拿的都是同一个对象。

自动装箱:基本数据类型可以自动转换为包装类型。

自动拆箱:包装类型可以自动转换为基本数据类型。

包装类具备的其他功能:

基本类型的数据转换成字符串类型

字符串类型的数值转换成数值本身对应的真实值

集合框架

集合体系结构:Collection(单列集合) Map(双列集合)

Collection每个元素只包含一个值;Map每个元素包含两个值(键值对)。

List系列集合的特点:添加的元素是有序、可重复、有索引

Set系列集合的特点:添加的元素无序、不重复、无索引

Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。

toArray()默认转成的是Object类型的数组,而将其转为字符串数组需要添加参数:(String[ ]::new).

Collection集合的遍历方式:

①迭代器遍历。迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。

Collection集合获取迭代器的方法

Iterator迭代器中的常用方法

②增强for循环

格式:for(元素的数据类型 变量名 :数组或者集合){

}

增强for可以用来遍历集合或者数组

增强for遍历集合,本质是迭代器遍历集合的简化写法

③Lambda表达式

并发修改异常问题:遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。

解决并发修改异常问题的方案:

①如果集合支持索引 ,可以使用for循环遍历每删除数据后做i-- ;或者可以倒着遍历 ;②可以使用迭代器遍历 ,并用迭代器提供的删除方法删除数据

增强for循环/Lambda遍历均不能解决并发修改异常问题 ,因此它们只适合做数据的遍历,不适合同时做增删操作。

List集合特有的方法:List集合支持索引。

ArrayList与LinkedList底层采用的数据结构不同应用场景不同

ArrayList底层是基于数组 存储数据的。LinkedList底层是基于链表存储数据的。

数组的特点:

查询速度快(根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同。

增删数据效率低:后面很多的数据需要前移。

ArrayList在第一次添加数据前,内部的数组长度为0;在第一次添加数据时扩容,扩容到10。元素加满后二次增长,增长的长度是老容量的1.5倍。

LinkedList底层原理:基于链表存储数据。

链表的特点:链表中的数据是一个一个独立的结点组成 的,结点在内存中是不连续 的,每个结点包含数据值和下一个结点的地址

查询慢,无论查询哪个数据都要从头开始找 ;链表增删相对快

LinkedList基于双链表 实现。特点:对首尾元素进行增删改查的速度极快。

LinkedList新增了很多首尾操作的特有方法。

LinkedList的应用场景之一:设计队列(队列只在首尾增删元素)

LinkedList的应用场景之一:设计栈(栈仅在首部增删数据)

ArrayList适用于查询比较多,增删相对少的业务场景。

LinkedList适用于查询比较少,增删相对多的业务场景。

电影信息管理模块

每部电影都是一个电影对象,设计电影类

需要定义一个电影操作类,其对象专门用于处理电影数据的业务。

操作类中需要定义一个集合存放全部的电影对象

电影操作类中有一个初始化菜单界面的启动方法;各项业务通过switch分支语句分割开来,用户通过输入指令执行特定业务。各项业务为独立功能应单独写各个方法。 注意封杀明星这项业务涉及到并发修改异常 ,本项目中集合采用ArrayList支持索引,故可采用倒着遍历 或者每次循环最后让循环变量回退一位即可。

相关推荐
枫叶落雨22220 小时前
ShardingSphere 介绍
java
GetcharZp20 小时前
告别 TCP 握手延迟!让你的 Go 服务瞬间拥抱 HTTP/3 时代
后端
花花鱼20 小时前
Spring Security 与 Spring MVC
java·spring·mvc
oak隔壁找我20 小时前
SpringBoot 将项目打包成 Fat JAR(肥包),核心原理
后端
言慢行善21 小时前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星21 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟21 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z21 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可21 小时前
Java 中的实现类是什么
java·开发语言