在Java 8中,添加了函数式接口(functional interface),Lambda表达式和方法引用(method reference),使得创建函数对象(function object)变得更加容易.还有 Stream API为处理数据元素序列提供类库级别的支持. 第42条:Lambda匿名类 以前,用带有单个抽象方法的接口作为函数类型(function type),它们的实例称为函数对象(function object),表示函数或者要采取的动作.JDK1.1开始,创建函数对象的主要…
Java支持两种引用类型的特殊用途的系列:一种称为枚举类型(enum type)的类和一种称为注解类型(annotation type)的接口. 第34条:用enum代替int常量 枚举是其合法值由一组固定的常量组成的一种类型,例如一年中的季节,太阳系中的行星. 在将枚举类型添加到该语言之前,表示枚举类型的常见模式是声明一组名为int的常量,每个类型的成员都有一个常量. int枚举模式的技术有许多缺点.不具有类型安全性,也没有描述性可言. Java提供了一种避免int和String枚举模式的所有…
第 26 条:请不要使用原生态类型 声明中具有一个或多个类型参数的类或者接口,就是泛型(generic). 例如List接口只有单个类型参数E, 表示列表的元素类型.这个接口全称List<E>,泛型类和接口统称为泛型(generic type). 每一种泛型都定义一个原生态类型(raw type),即不带任何实际类型参数的泛型名称. 它的存在主要是为了兼容泛型之前的代码.   如果使用原生态类型,就失去了泛型在安全性和描述性方面的优势. 如果使用像List这样的原生态类型,就会失掉类型安全性,…
第 15 条: 使类和成员的可访问性最小化 软件设计基本原则:信息隐藏和封装. 信息隐藏可以有效解耦,使组件可以独立地开发.测试.优化.使用和修改.   经验法则:尽可能地使每个类或者成员不被外界访问. 对于成员(属性.方法.嵌套类和嵌套接口),有四种可能的访问级别,在这里,按照可访问性从小到大列出: private —— 该成员只能在声明它的顶层类内访问. default (package-private) —— 成员可以从被声明的包中的任何类中访问.从技术上讲,如果没有指定访问修饰符(接口成…
  第 1 条:用静态工厂方法代替构造器 对于类而言,获取一个实例的方法,传统是提供一个共有的构造器. 类可以提供一个公有静态工厂方法(static factory method), 它只是一个返回类的实例的静态方法. 示例:Boolean的装箱类,将boolean基本类型值转换成一个Boolean对象引用 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 静态工厂方法与构造…
第 10 条:覆盖equals时请遵守通用约定 在不覆盖equals方法下,类的每个实例都只与它自身相等. 类的每个实例本质上都是唯一的. 类不需要提供一个”逻辑相等(logical equality)”的测试功能. 父类已经重写了 equals 方法,并且父类的行为完全适合于该子类. 类是私有的或包级私有的,并且可以确定它的 equals 方法永远不会被调用. 什么时候需要覆盖equals方法?  如果一个类包含一个逻辑相等( logical equality)的概念——此概念有别于对象同一性…
1. 如果对象是不可变的(immutable),它就始终可以被重用. (1) 特别是String类型的对象. String str1 = new String("str"); // 创建许多不必要的实例 String str2 = "str"; // "str"其本身是一个String实例,对于所有同一台虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就会被重用 (2) 同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方…
学完java有一段时间了,一直没有做对应的总结,总认为有一种缺憾.从这篇博客開始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,基本的目的是扫盲.原来仅仅是听说过java,如今自己真正開始学习了,看完了第一集视频之后,问自己,你知道java是什么吗?问完之后才发现一无所知,上完查一查,简单了解一下,给自己扫盲. 介绍 知道java是一种可跨平台应用软件的面向对象的程序设计语言,就能够了. 组成 Java由四方面组成:java编程语言,java类文件…
类有多个可选参数的解决方案: 1. 重叠构造器模式可行,但是当有许多参数的时候,客户端代码会很难编写,并且仍然较难以阅读. 2. JavaBeans模式,调用一个无参构造器来创造对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数. 缺点:构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态.阻止了把类做成不可变的可能,需要程序员确保线程安全. 3. Builder模式,模拟了具名的可选参数. 模式 优 劣 重叠构造器 写法最简单 多参数时候难读.难…
工具类(utility class)不希望被实例化,比如只包含静态方法和静态域的类.为了这个目的,需要让这个类包含一个私有构造器. // 私有构造器示例 public class UtilityClass { // 为该类不能被实例化.子类化添上注释 private UtilityClass() { // 避免不小心在类的内部调用构造器 throw new AssertionError(); } } 其他不可行方法和理由: 1. 将类写成抽象类:可被子类化,甚至误导用户子去继承这个类. 2. 不…