java知识精要(一)

集合

  1. Iterable v.s. Iterator

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

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

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

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

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

  2. Comparable v.s. Comparator

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

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

    ...

    }

new Comparator<E>(){
public int compare(E o1, E o2){
}
}
  1. 集合

    集合需多用用

    优先队列用法

    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>>();
  1. ?, ? 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程序退出。

  1. 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
}
  1. 异常体系

    Throwable

    -> Error

    -> Exception

    -> RuntimeException

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

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

  2. try with resource

    try (
// open resource,此处定义的局部变量在try块中可见
// 此处resource需要是AutoClosable
) {
// 业务逻辑
} catch () { }

最新文章

  1. hierarchyid
  2. linux下dos环境和unix环境转换
  3. 走进异步编程的世界 - 开始接触 async/await
  4. 【leetcode❤python】 225. Implement Stack using Queues
  5. Java模板引擎 HTTL
  6. 7件你不知道但可以用CSS做的事
  7. poj1328
  8. Java小例子——穷举质数,求平方和,求质因子。
  9. struts2 修改action的后缀
  10. Java中json工具对比分析
  11. 小A项目为什么加班
  12. 《编程简介(Java) &amp;#183;10.3递归思想》
  13. 怎么写cookie
  14. cuda学习笔记——deviceQuery
  15. Japanese Learning - Words and Sentences 1
  16. ●POJ 1873 The Fortified Forest
  17. Error: listen EADDRINUSE :::3000
  18. Innodb日志与事务
  19. python-flask-路由匹配源码分析
  20. Cobbler自动装机--2

热门文章

  1. python使用jieba实现中文文档分词和去停用词
  2. Xcode9/iOS 11 无线调试方法
  3. mac 安装注册Charles
  4. [Beta]Scrum Meeting#7
  5. 混合高斯分布与 EM 算法
  6. js控制网页窗口一打开就自动全屏
  7. 为什么&ldquo;四年一闰、百年不闰、四百年又闰&rdquo;及 判断闰年的方法
  8. shell整数与小数比较,小数之间比较的方法【转】
  9. python安装 werkzeug
  10. PL/SQL【32位】连接Oracle 11g【64位】