Java笔记8

目录

一、异常

1.try…catch

①Throwable类

②多catch并行处理

2.throw和throws关键字的使用

3.finally代码块

4.Runtime异常

编译异常 :

运行异常 :

常见的运行异常:

5.自定义异常

二、集合框架

1.集合框架由来

2.集合框架的继承体系

①Collection (集合) 接口  单列集合

②Map (映射键值对) 接口  双列集合

③Iterator迭代器接口

④泛型 Generic

⑤for(:)循环

3.Collection接口

①定义

②Collection接口的常用方法

 4.Iterator接口

①定义

②Iterator接口的抽象方法

②获取迭代器接口实现类

④迭代器的实现原理

⑤并发修改异常

⑥集合存储自定义对象并迭代

5.List接口

①特点

②List接口自己的方法 (带有索引)

③List集合的特有迭代器

6.List接口的实现类的数据结构

数组 :

链表

三、集合

1.ArrayList

①特点

②源码解析

2.LinkedList

①LinkedList集合的特点

②LinkedList集合特有方法

③源码解析

3.Set集合

①Set接口实现类HashSet类

③对象的哈希值

④String类的哈希值

 ⑤哈希值的相关问题

⑥哈希表的数据结构

⑦哈希表存储对象的过程

4.红黑树(Red-Black-Tree)

二叉树,本质就是链表

自然平衡二叉树

红黑树

①TreeSet集合使用

②TreeSet存储自定义对象

5.LinkedHashSet

6.Collections工具类


一、异常

1.try…catch

public static void main(String[] args) {
        int[] arr = {1};
        //try  catch异常处理
        try {
            int i = getNum(arr);
            System.out.println("i = " + i);
        }catch (Exception ex){
            System.out.println("异常被处理掉");
        }
        System.out.println(111);
    }

    public static int getNum(int[] arr){
        return arr[1] + 10;
    }

①Throwable类

public static void main(String[] args){
        int[] arr = {1};
        //try catch异常处理
        try{
            int i = getNum(arr);
            System.out.println("i=" + i);
        }catch (Exception ex){
            //Throwable类的异常信息的方法
            String message = ex.getMessage();//message=1
            System.out.println("message=" + message);

            String str = ex.toString();//str = java.lang.ArrayIndexOutOfBoundsException: 1
            System.out.println("str=" + str);
            /**
             * 控制台输出
             *  出现问题的异常类的类,错误的原因
             *  发生的代码行数
             */
            ex.printStackTrace();
        }

        System.out.println(111);
    }

    public static int getNum(int[] arr){
        return arr[1] + 10;
    }

②多catch并行处理

异常处理的代码中,try可以跟随多个catch

好处:不同的异常,可以区别对待,分开处理

注意:如果catch中的异常类没有关系,先写后写没有区别;catch中的异常类有继承关系,父类写在最下面

2.throw和throws关键字的使用

throw关键字 : 只能写在方法内部, 关键字的后面跟随对象的创建

throws关键字 : 只能写在方法的定义上,关键字后面跟随异常类名

public static void main(String[] args) {
       /**
         *   getArea()调用方法,方法上有异常
         *   只能处理,不处理编译失败
         *   在main的方法上加throws 异常没有处理,交给JVM处理
         *   try catch处理
         */
    try {
        int area = getArea(-10);
        System.out.println(area);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
     * 功能: 计算正方形的面积
     * 需要参数 : 边长
     * 语法 : 方法的内部出现了异常,必须在方法定义上暴露
     */
public static int getArea(int length) throws  Exception{
    if (length <= 0)
        //数据错误,导致后面的计算不能进行
        //内部出现问题
        throw new Exception("边长不存在");
    return length * length;
}

3.finally代码块

finally代码块跟随try ... catch使用,也有跟随try使用,finally代码块里面的程序,无论是否出现异常,都会执行,必须执行,结束JVM了,finally不执行

作用:主要用于释放资源

public static void main(String[] args) {
    try {
        int[] arr = {1};
        System.out.println(arr[0]);
    }catch (Exception ex){
        ex.printStackTrace();
    }finally {
        //后期用于资源的释放
        System.out.println("这里的代码,必须执行");
    }
}

4.Runtime异常

        异常的父类是Exception,Exception类的子类RuntimeException,凡是RuntimeException和他的所有子类,都称为运行异常,非子类的称为编译异常Exception异常

编译异常 :

方法出现编译异常,调用者必须处理,否则编译失败.处理方式可以是try catch或者是throws都可以

运行异常 :

方法出现运行异常,方法的定义上,不需要throws声明,调用者也不需要处理这个异常

常见的运行异常:

NullPointerException空指针

IndexOutOfBoundsException越界异常

ClassCastException类型强制

IllegalArgumentException无效的参数异常

5.自定义异常

自定义异常,入伙,继承Exception或者RuntimeException

只有Exception和他的子类,才具有可抛出性

自定义的类中,构造方法,super调用父类构造方法,传递异常信息

自定义的异常类:

        成绩负数的异常

        自定义异常信息 : 继承父类 RuntimeException 带有String类型的构造方法 (String 异常信息)

public class ScoreException extends RuntimeException{
    public ScoreException(String s){
        super(s);
    }
}
public static void main(String[] args) {
       // int[] arr = {1};
        //System.out.println(arr[2]);
        int avg = getAvg(-100,2);
        System.out.println("avg = " + avg);
    }

    /**
     * 计算成绩的平均分
     */
    public static int getAvg(int math,int chinese){
        //判断成绩的数值
        if ( math < 0 || chinese < 0)
            //手动抛出,自己定义的异常
            throw new ScoreException("成绩不存在");

        return  (math + chinese) / 2;
    }

二、集合框架

1.集合框架由来

①集合本质上是存储对象的容器

数组也能存储对象,数组弊端就是定长

③解决数组的问题,开发出来集合框架,集合框架无需考虑长度

④集合和数组的区别与共同点

        集合,数组都是容器,都可以存储数据

        集合只存储引用数据类型,不存储基本数据类型

        数组可以存储基本类型,也可以存储引用类型

        数组定长,集合容器变成

数据多了存数组,对象多了存集合

2.集合框架的继承体系

①Collection (集合) 接口  单列集合

List (列表) 接口

        ArrayList (数组列表) 实现类

        LinkedList (链表) 实现类

        Vector(数组列表) 实现类,过时了

Set (集) 接口

        HashSet(哈希表) 实现类

        LinkedHashSet(链表哈希表) 实现类,继承HashSet

        TreeSet(红黑树) 实现类

②Map (映射键值对) 接口  双列集合

  - HashMap(哈希表) 实现类

    - LinkedHashMap(链表哈希表) 实现类,继承HashMap

  - TreeMap(红黑树) 实现类

  - Hashtable(哈希表) 实现类,过时

    - Properties(哈希表)实现类, 继承Hashtable

  - ConCurrentHashMap (哈希表) 线程相关

③Iterator迭代器接口

④泛型 Generic

  - 写法

  - 泛型类,泛型方法,泛型接口,泛型限定,泛型通配符

⑤for(:)循环

3.Collection接口

①定义

是所有单列集合的顶级接口,任何单列集合都是他的子接口,或者是实现类, 该接口中定义的方法,是所有单列集合的共性方法

Collection<E>  尖括号就是泛型,E我们要写,集合存储的数据类型

②Collection接口的常用方法

方法的定义

方法作用

boolean add(E)

元素添加到集合

void clear()

清空集合容器中的元素

boolean contains(E)

判断元素是否在集合中

boolean isEmpty()

判断集合的长度是不是0,是0返回true

int size()

返回集合的长度,集合中元素的个数

boolean remove(E)

移除集合中指定的元素,移除成功返回true

T[] toArray(T[] a)

集合转成数组

 4.Iterator接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值