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支持索引,故可采用倒着遍历 或者每次循环最后让循环变量回退一位即可。

相关推荐
王中阳Go2 小时前
09 Go Eino AI应用开发实战 | Hertz Web 框架搭建
人工智能·后端·go
Gu_yyqx2 小时前
Maven进阶
java·maven
小肖爱笑不爱笑2 小时前
JavaScript
java·javascript·json·web
专注于大数据技术栈2 小时前
java学习--String和StringBuffer互转
java·学习
waper972 小时前
nohup java -jar启动jar包错报错 地址已在使用
java·开发语言·jar
無量2 小时前
ConcurrentHashMap实现原理
java·后端
Selegant2 小时前
Kubernetes + Helm + ArgoCD:打造 GitOps 驱动的 Java 应用交付流水线
java·kubernetes·argocd
ShadowSmartMicros2 小时前
java调用milvus数据库
java·数据库·milvus
禾高网络2 小时前
互联网医院系统,互联网医院系统核心功能及技术
java·大数据·人工智能·小程序