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<E>(){
public int compare(E o1, E o2){
}
}
- 集合
集合需多用用
优先队列用法
Queue用法:实例化用的是LinkedList
List的sort实现及使用,Comparator实现为内部静态类
泛型
应该将List<E>看做一个具体类型,不真实存在的逻辑类型
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass() );
结果?
因此,类的static成员是不可以使用类型参数的。
public class R<T>{
static T info; //错误
static void test(T msg); // 错误
}
二维泛型只能一层层具体化
List<List<Integer>> list = new ArrayList<List<Integert>>();
?, ? extends type, ? super type
a. 通配符与继承关系
List<Object>与 List<String>之间无继承关系。
void test(List<Object> l)传入List<String>将编译报错通配符、通配符上下限都可以理解为对继承关系的补充。
void test(List<?> l)函数可以接收List<Integer>, List<String>等
void test(List<? extends Numbers> l)函数可以接收List<Integer>, List<Double>等。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 () {
}
最新文章
- hierarchyid
- linux下dos环境和unix环境转换
- 走进异步编程的世界 - 开始接触 async/await
- 【leetcode❤python】 225. Implement Stack using Queues
- Java模板引擎 HTTL
- 7件你不知道但可以用CSS做的事
- poj1328
- Java小例子——穷举质数,求平方和,求质因子。
- struts2 修改action的后缀
- Java中json工具对比分析
- 小A项目为什么加班
- 《编程简介(Java) &;#183;10.3递归思想》
- 怎么写cookie
- cuda学习笔记——deviceQuery
- Japanese Learning - Words and Sentences 1
- ●POJ 1873 The Fortified Forest
- Error: listen EADDRINUSE :::3000
- Innodb日志与事务
- python-flask-路由匹配源码分析
- Cobbler自动装机--2