开发工具与关键技术:Eclipse、java
作者:奈何丶一梦
撰写时间:2020年11月8日
45.异常
概述:程序出现不正常情况。
Error:严重问题,不需要处理。
Exception:称为异常类,表示程序本身可以处理的问题。
RuntimeException:在编译期间是不检查的,出现问题后,需要我们回来修改代码。
非RuntimeException:编译期间就必须处理,否则程序不能通过编译,就更不能正常运行了。
1.JVN的默认处理方案
如果程序出了问题,我们没有处理,最终JVM会做默认处理。
- 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台。
- 程序停止运行
2.异常处理
如果程序出现问题,我们需要自己处理,有两种方案:
try ... catch ...
throws
1.异常处理之try … catch …
格式:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常处理代码;
}
执行流程:
- 程序从try里边的代码运行
- 出现异常,会自动生成一个异常类对象,该异常对象将被提交个Java运行时系统
- 当Java运行时系统接收到异常对象时,回到catch中去找匹配的异常类,找到后进行异常处理
- 执行完毕后,程序还可以继续往下执行
2.Throwable的成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
3.异常处理之throws
虽然我们通过try…catch…可以对异常进行处理,但并不是所有的情况我们都有权限进行异常的处理,也就是说,有些时候可能出现的异常是我们处理不了的,针对这种情况,Java提供了throws的处理方案
格式:throws 异常类名
。
注意:这个格式是跟在方法的括号后面的
编译时异常必须要进行处理,两种方案:try...catch...
或者throws
,如果采用throws方案,将来谁调用谁处理。
运行时异常可以不处理,出现问题后,需要回来修改代码。
3.编译时异常和运行时异常的区别
Java中的异常被分为两大类,编译时异常和运行时异常,也被称为受检异常和非受检异常,所有的RuntimeException类及其子类被称为运行时异常,其他异常都是编译时异常
- 编译时异常:必须显示处理,否则程序将发生错误,无法通过编译
- 运行时异常:无需显示处理,也可以和编译时异常一样处理
4.自定义异常
格式:
public class 异常类名 extends Exception{
无参构造
带参构造
}
例子:
public class ScoreException extends Exception{
public ScoreException(){}
public ScoreException(String message){
super(message);
}
}
throws和throw的区别
throws | throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示抛出异常 ,由该方法的调用者来处理 | 表示抛出异常,由方法体内的语句处理 |
表示出现异常的一种可能性,并不一定会发生这些异常 | 执行throw一定抛出了某种异常 |
46.集合进阶
集合类的特点:提供一种存储空间可变的存储类型,存储数据量可以随时发生改变。
体系结构:
1.Collection
概述:
- 是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
- JDK不提供此接口的任何直接实现,它提供了更具体的子接口(如Set和List)实现
创建Collection集合的对象
- 多态的方式
- 具体的实现类ArrayList
1.Collection集合常用方法
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素 |
boolean remove(Object o) | 从集合中移除指定元素 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定元素 |
boolean isEmpth() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
2.Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
Iterator<>E iterator()
:返回此集合中元素的迭代器,通过集合的iterator()方法得到- 迭代器是通过集合的
iterator()
方法得到的,所以说它是依赖与集合存在的
Iterator中的常用方法
E next()
:返回迭代中的下一元素boolean hasNext()
:如果迭代具有更多的元素 ,则返回true
遍历例子:
public static void mian(String[] args){
Collection<String> c=new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
Iterator<String> it=c.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s);
}
}
2.List
概述:
- 有序集合(也称为序列),用户可以精确控制列表每个元素的 插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素。
- 与Set集合不同,列表通常允许重复的元素。
1.List集合特点
- 有序:存储和取出的元素顺序一致
- 可重复:存储的元素可以重复
2.List集合的特有方法
方法名 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引的元素,返回被修改的元素 |
E get(int index) | 返回指定索引的元素 |
3.ListIterator列表迭代器
- 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
- 用于允许程序员沿任意一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
4.ListIterator中的常用方法
E next()
:返回迭代中的下一元素boolean hasNext()
:如果迭代具有更多的元素,则返回trueE previous()
:返回列表中的上一元素boolean hasPrevious()
:如果此列表迭代器在相反方向遍历列表时有更多的元素,则返回truevoid add(E e)
:将指定的元素插入列表
5.增强for循环
简化数组和Collection集合的遍历
- 实现Iterable接口接口的类允许其对象成为增强for语句的目标
- 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
格式:
for(元素数据类型 变量名 :数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
例子:
int[]={1,2,3,4,5,6};
for(int i :arr){
System.out.println(i);
}
5.数据结构
数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合,通常情况下,精心选择的数据结构可以带来更高的运行或存储效率
1.常见的数据结构之栈
一端开口称为栈顶,一端封闭称为栈底,数据进入栈模型的过程称为:压/进栈,数据离开栈模型的过程称为:弹/出栈,栈是一种先进后出的模型,例如:杯子
2.常见的数据结构之队列
一端开口为后端,一端开头为前端,数据从后端进入队列模型的过程称为:入队列,数据从端离开队列模型的过程称为:出队列,例如:管道
队列是一种数据先进先出的模型
3.常见数据结构之数组
数组是一种查询快,增删慢的数据结构
- 查询数据通过索引定位,查询任意数据耗时相同,查询速度快;
- 删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低;
- 添加数据时,添加数据后的每个数据后移,再添加元素,添加效率低;
4.常见数据结构之链表
- 链表是一种增删快的模型(对比数组)
- 链表是一种查询慢的模型(对比数组)
5.常见数据类型之哈希表
- JDK8之前,底层采用数组+链表实现,可以说是一个元素为链表的数组
- JDK8以后,在长度比较长的时候,底层实现了优化
6.List集合子类的特点
List集合常用子类:ArrayList、LinkedList
- ArrayList:底层数据结构是数组,查询快增删慢
- LinkedList:底层数据结构是链表,查询慢增删快
7.LinkedList集合的特有功能
方法名 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |