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 () { }

java知识精要(二)的更多相关文章

  1. java知识精要(一)

    一.java数组 (疯狂java讲义 第4.5 ~ 4.6章节) 1) 声明形式: type[] arrayName; 推荐方式 type arrayName[]; 2) 初始化: 方式一: type ...

  2. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...

  3. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  4. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  5. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  6. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

  7. Java知多少(14)数组

    如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java ...

  8. Java知多少(34)final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...

  9. Java知多少(84)图形界面之布局设计

    在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: FlowLayout, ...

随机推荐

  1. Android根据加速度和地磁场传感器实现自动对焦

    在相机预览开始后新建AutoFocusManage对象即可,传入context和camera. 注意,在停止预览或者关闭相机时需调用方法中unregisterListener方法. 目前实现是当前方向 ...

  2. 【LG2154】[SDOI2009]虔诚的墓主人

    [LG2154][SDOI2009]虔诚的墓主人 题面 洛谷 题解 如果您没有看懂题,请反复阅读题面及样例 可以发现,对于某一个点,它的答案就是上下左右几个组合数乘起来. 这样直接做复杂度显然爆炸,考 ...

  3. jstl的if标签和forEach标签的解析

    今天上午学习了jstl的if标签和forEach标签(其它标签用的很少,所以没讲,只讲了这两个标签),然后通过代码练习了一下,现在总结. 首先导入包,从Apache的网站下载JSTL的JAR包.进入 ...

  4. docker安装 与 基本配置

    1.安装docker #yum remove docker \ docker-common \ container-selinux \ docker-selinux \ docker-engine \ ...

  5. 阿里云ECS服务器相关配置以及操作---上(初学者)

    最近买了一台阿里云的ECS服务器 linux系统 centos镜像,把我相关的一些操作记录下来,供大家参考,不足之处欢迎指正. 首先买的过程就不用介绍了,根据自己的实际需要选择自己想要的配置,点击付钱 ...

  6. spring boot整合H2数据库

    一.背景: .H2数据库是一个开源的关系型数据库.H2是一个嵌入式数据库引擎,采用java语言编写,不受 平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群. ...

  7. Java基础 awt Button 点击按钮后在控制台输出文字

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  8. java http get/post请求

    一.http get/post请求 /** * @Description httpPost请求 */ public static String httpPost(String url, String ...

  9. 爬虫中采集动态HTML介绍

    JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言.它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网 ...

  10. android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    //android Studio  keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件 遇到这个问题好久了,一直没解决今天搜集了大量的资料,有的说什么Java没配置好,不是扯犊子吗 ...