JAVA基础(九)

开发工具与关键技术: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的区别

throwsthrow
用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
表示抛出异常 ,由该方法的调用者来处理表示抛出异常,由方法体内的语句处理
表示出现异常的一种可能性,并不一定会发生这些异常执行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():如果迭代具有更多的元素,则返回true
  • E previous():返回列表中的上一元素
  • boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时有更多的元素,则返回true
  • void 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()从此列表中删除并返回最后一个元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值