• java知识精要(二)


    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 () {
    
        }
    
  • 相关阅读:
    07.进程管理+作业控制+文件查找与压缩+文件压缩与打包+tar打包解包+NFS
    反转数字
    取出列表中第N大的数
    nginx负载均衡
    DNS解析
    浅谈Http长连接和Keep-Alive以及Tcp的Keepalive
    django_orm操作
    多线程下的单例模式
    装饰器实现单例模式
    Django model 中的 class Meta 详解
  • 原文地址:https://www.cnblogs.com/holidays/p/java_cookbook2.html
Copyright © 2020-2023  润新知