摘要:
第二十一章 数组 数组特性 将数组和其他类型的集合区分开来的原因有三:效率,类型,保存基本数据类型的能力。在 Java 中,使用数组存储和随机访问对象引用序列是非常高效的。数组是简单的线性序列,这使得对元素的访问变得非常快。然而这种高速也是有代价的,代价就是数组对象的大小是固定的,且在该数组的生存期 阅读全文
摘要:
第二十章 泛型 多态的泛化机制: 将方法的参数类型设为基类; 方法以接口而不是类作为参数; 使用泛型; 泛型实现了参数化类型 简单泛型 Java 泛型的核心概念:你只需告诉编译器要使用什么类型,剩下的细节交给它来处理。 钻石写法: GenericHolder<Bob> h3 = new Generi 阅读全文
摘要:
SpringBoot集成Swagger 1. 引入依赖 2. 配置类 2.1. 配置WebMvc 2.2. 配置Swagger 3. 常用注解 3.1. @Api 用于声明类,属性tags提供说明 3.2. @ApiOperation 用于声明方法,属性value提供说明 3.3. @ApiPara 阅读全文
摘要:
第十九章 类型信息 RTTI (RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息。 Java 主要有两种方式在运行时识别对象和类信息: 1. “传统的” RTTI:假定我们在编译时已经知道了所有的类型; 2. “反射”机制:允许我们在运行时发现和使 阅读全文
摘要:
第十八章 字符串 +的重载与StringBuilder 用于 的`+ += java.lang.StringBuilder`类进行了优化。 是Java SE5引入的,在这之前用的是 。后者是 线程安全 的,因此开销也会大些。使用StringBuilder进行字符串操作更快一点。 可以用JDK自带的 阅读全文
摘要:
Lombok常用注解 稳定功能 val 只能用于局部变量,声明的局部变量为 final // 用于局部变量 val j = 2; val map = new HashMap<Integer, String>(); // 用于for-each for (val entry : map.entrySet 阅读全文
摘要:
第十七章 文件 在 Java7 中对 文件的操作 引入了巨大的改进。这些新元素被放在 包下面,过去人们通常把 中的 理解为 即新的io,现在更应该当成是 非阻塞io(io就是input/output输入/输出)。 文件操作的两个基本组件: 1. 文件或者目录的路径; 2. 文件本身。 文件和目录路径 阅读全文
摘要:
第十六章 代码校验 你永远不能保证你的代码是正确的,你只能证明它是错的。 测试 测试覆盖率的幻觉 测试覆盖率,同样也称为代码覆盖率,度量代码的测试百分比。百分比越高,测试的覆盖率越大。 当分析一个未知的代码库时,测试覆盖率作为一个粗略的度量是有用的。如果覆盖率工具报告的值特别低(比如,少于百分之40 阅读全文
摘要:
第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的。 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pascal)。 基本异常 异常参数 所有标准异常类都有两个构造器:一个是无参构造器;另一个是接受字符串作为 阅读全文
摘要:
第十四章 流式编程 流的一个核心好处是,它使得程序更加短小并且更易理解。当 Lambda 表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体。流使得 Java 8 更具吸引力。 流式编程采用 内部迭代 。 流是 懒加载 的。 流支持 Java 8 采用的解决方 阅读全文