Java2精要_java知识精要(二)

集合

Iterable v.s. Iterator

两者都是接口,在Collection继承的是Iterable。

Iterable表达了集合具备迭代访问的能力,而Iterator表示实现,可以从小到大也可以从大到小。

https://zhuanlan.zhihu.com/p/52366312

另外,我们在遍历集合时,尽量用iterator这种方式,可以在遍历中,修改集合,参考

使用Iterator需注意两点:a. 获取到Iterator变量后,仅能遍历一遍; b. itr.next()后,仅能删itr.remove()一次。

Comparable v.s. Comparator

https://www.cnblogs.com/skywang12345/p/3324788.html

new 父类构造器(实参列表) or 实现接口() {

...

}

new Comparator(){

public int compare(E o1, E o2){

}

}

泛型

应该将List看做一个具体类型,不真实存在的逻辑类型

List l1 = new ArrayList();

List l2 = new ArrayList();

System.out.println(l1.getClass() == l2.getClass() );

结果?

因此,类的static成员是不可以使用类型参数的。

public class R{

static T info; //错误

static void test(T msg); // 错误

}

二维泛型只能一层层具体化

List> list = new ArrayList>();

?, ? extends type, ? super type

a. 通配符与继承关系

List与 List之间无继承关系。

void test(List l)传入List将编译报错

通配符、通配符上下限都可以理解为对继承关系的补充。

void test(List> l)函数可以接收List, List等

void test(List extends Numbers> l)函数可以接收List, List等。

b. 理解下列代码,其中Rect为Shape子类

void addRect(List extends Shape> shapes){

shapes.add(0, new Rect());

}

异常

异常设计目的是让业务逻辑与异常处理逻辑分离。

​java程序运行过程中出现异常时,系统自动生成一个异常对象,该对象被提交给java运行时;

​Java运行时收到异常对象后,寻找合适的catch块,如果未找到,Java程序退出。

try...catch...finally

finally代码块一定会被执行,除非try or catch中调用了System.exit

try or catch中的return, throw将在finally代码块之后执行

int funcA() {

int len = 0;

try {

Class clazz = Class.getName("com.holidays");

return len;

} catch (Exception ex) {

ex.printStackTrace();

return len;

} finnally {

len = 10; // 注意try or catch中已经调用return,返回值已经准备好,此处再对len赋值没有意义。但是如果此处是return 10,那么还是会返回10

}

}

void funcB() {

System.out.println(funcA()); // 打印出0

}

异常体系

Throwable

-> Error

-> Exception

-> RuntimeException

-> others... :checked异常必须显示处理

如果接口中定义的方法抛出了异常,子类override时,可以抛出该异常或其子异常 或者不抛出;如果override的父类方法没有抛出异常,子类不可以抛出

try with resource

try (

// open resource,此处定义的局部变量在try块中可见

// 此处resource需要是AutoClosable

) {

// 业务逻辑

} catch () {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值