1.try catch finally 语句
- 异常的处理在有返回值的条件下,返回一个特殊的值代表情况不对
- 可以认为finally语句会在方法返回后,后面的方法开始前
- 无论是因为return结束还是因为异常结束,finally都会执行
- finally里面最后不要有return语句
- finally里面给return用的变量赋值没有任何作用
1 | package com.geekboys.exception; |
tyr finally语句
- finally里面的返回值语句,会打乱exception的传递
- finally里面给return用的变量赋值没用
1 | package com.geekboys.exception; |
catch多种异常
1 | private static void catchMultiNew() { |
2.自动回收资源的try语句
1 | package com.geekboys.exception; |
- 在try后面小括号中添加实现了 Autoclose的类 ,就会在出现异常的时候自动调close方法
3.Java中常见的异常
1.unchecked
- NullPointerException
- 空指针异常
- IndexOutOfBoundsException
- 索引越界异常
- ClassCastException
- 两种不同的类的引用之间相互赋值 (强转)
2.Checked
- ClassNotFounException
- IOException
4.Collection类族简介
- 数据结构就是组织数据的方式
- 数组就是一种最基本的数据结构,编程语言本身就支持
- 计算机中基础的数据结构就是List Set Queue Map,高级一点的有Tree heap,这些数据结构需要代买来实现,这些实现也是一个个类,只是专注的问题更加抽象和通用
- Collection代表一堆元素,翻译为集合
- Collection接口的继承者 和他们的实现构成了我们所谓的Collection类族
5.Collection中的List(上)
- List代表有顺序的一组元素,中文一般翻译为链表
- List类继承自Collection
1 | package com.geekboys.learnlist.mylist; |
- 自己实现
1 | package com.geekboys.learnlist.mylist; |
7.Collection 中的Set
- Set代表一个元素不重复的集合,也就是说 ,Set中的元素两两不相等
- Java中Set的最常用的实现类: HashSet
- 顾名思义是使用了元素的hash值 做去重
- hashCode和equals符合这样一个约定:equals返回true,hashcode必须相等。
- 很多Java类 库 中的代码都是按照这种约定使用这两个方法,比如HashSet。这也就是卫生么我们要求如果 一个类覆盖了hashCode方法 就一定要覆盖equals方法 ,并保证 方法的实现符合上述约定
8.范型简析(下)
- 泛型的引文名叫做generics,一系列和泛型相关的名词都是以generic为前缀:比如generic Method Generic Types
- 使用泛型可以让List里面只有一种元素
- 范型的语法就是在支持范型的类型上,给出类型的定义
- List接口是支持范型的,类型就是List里允许的元素的类型
- 创建List实例和引用的时候,都可以指定范型对应的类型
- 不指定就是Object
- 在指定为String后,如果尝试增加非String类型的元素,会报错
9.范型简析()
- 告诉编译器帮我们检查类型是否匹配,类型是什么不重要,一样才重要
- 在使用的地方悄悄的帮我们做类型的强制转换
- 对于一个方法来说,我们并没有使用<>来确定类型,在调用方法前接受返回值是啥类型,方法中的范型就是啥类型
- 使用范型强转报错 实际上是再 调用的地方
- 如果范型信息缺失了,编译器也无法帮忙检查出类型不匹配只会 给出unchecked警告
10.再探范型
泛型类型不可以调用方法,因为不知道什么类型,如果需要使用某个类的方法,则需要给定类型的范围
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package com.geekboys.learngenerics.define;
import com.geekboys.learngenerics.ext.GrandParent;
public class MyGenericClassBounded<MyType extends GrandParent> {
private MyType myType;
public MyGenericClassBounded(MyType myType) {
this.myType = myType;
myType.getNum();
}
public void setMyType(MyType myType) {
this.myType = myType;
}
}范型的深水区:协变与逆变
协变和逆变是范型中比较绕的点,java对协变和逆变的支持是为了支持范围更广的参数类型
协变和逆变是针对引用类型的,可以用在返回值类型,参数类型,等引用类型上。创建对象的时候不能使用协变和逆变
写入使用逆变,读取使用协变
1 | package com.geekboys.learngenerics; |