1 volatile是什么? 它是Java提供的一种轻量级的同步机制。与synchronized修饰方法,代码块不同,volatile只用来修饰变量。并且与synchroni...
1 volatile是什么? 它是Java提供的一种轻量级的同步机制。与synchronized修饰方法,代码块不同,volatile只用来修饰变量。并且与synchroni...
可变参数方法可以接收0个或多个指定类型的参数,被应用于需要一个方法带有n个入参的场景。如下面这个求和方法: 使用可变参数可能遇到的问题 对于入参校验不够优雅,且要到运行时才能...
重载是实现多态非常重要的手段之一,但是在使用重载时,往往也容易出现预料之外的结果,因此在使用重载,尤其是方法的重载时要尤其的谨慎。 使用方法重载可能带来的问题 方法的重载和继...
谨慎地选择方法的名称。方法的名称应遵照标准命名习惯,应当是易于理解、风格一致的。这一点我目前的习惯是对于方法使用动宾短语,对于变量使用形容词+名词。当然选词时应该尽量贴近业务...
当我们在设计一个不可变类,要注意保证它的组件也是不可变的,因此要进行保护性拷贝。尤其是类的可变组件是来自于客户端时,尽管我们可以跟客户端约定不会修改这些组件,但是都不如保护性...
这部分内容跟《程序员修炼之道》中契约式编程的前置校验的思想很是相像。在方法的入口处添加校验可以实现fail early, 避免一些报错或计算出错误的结果。同时,主动的检验参数...
Stream提供了parallel 方法,可以简单的实现并行处理。但是想要真的利用stream 写出出正确快速的实现,还是有很多地方要注意的。 安全问题:当我们在使用stre...
在编写返回元素的序列的方法时,客户端有时会希望将返回结果当做Stream 处理,有时希望将它用于迭代,为了尽量兼顾两者,在返回元素序列的方法时应该优先返回Collection...
我深怕自己本非美玉,故而不敢加以刻苦琢磨,却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为伍。于是我渐渐地脱离凡尘,疏远世人,结果便是一任愤懑与羞恨日益助长内心那怯弱的自尊心...
感觉这节的内容主要是在讲“在stream中避免使用forEach来执行计算,应该使用无副作用的函数对象”。stream是把处理数据的函数构造成一系列的变形,每一级结果都尽可能...
本章节介绍了stream 特性。stream 也是java8的新特性,可以简化串行或并发的大批量操作。 书中提到,过度使用stream或使用不当会造成可读性,不过可能因为st...
Java8在提供了lambda 的同时也提供了标准的函数接口,在java.util.function 中提供了大量的标准函数接口。只要标准的函数接口能够满足需求,通常应该优先...
lambda 是java 把针对函数式方法提供的语法糖,而方法引用则是在lambda的基础上进一步简化了函数式方法的引用。使用方法引用得到的代码更加简洁,在方法命名恰当的前提...
本节作者主要是介绍了lambda 的来历、优势以及使用时的一些注意事项。 来历:在java8之前,创建函数对象都是通过匿名类。但是匿名类的代码太过繁琐,从编写和可读性上都不便...
定义类型有两种方式:一种是注解,这个之前已经提到过。另一种是标记接口(不含方法声明的接口)如Serializable: 将其作为标记来使用的好处是,可以在方法签名中要求类包含...
@Override 是java中提供的仅仅作用于方法的注解,其意为该方法复写了父类或实现了接口中的方法。 对于子类中的方法,如果不使用@Override 注解,在方法签名和入...
这部分内容利用JUNIT 中的测试方法来说明注解优于命名模式。命名模式是依赖于对于方法的命名在实现约定,如在JUNIT4之前对于测试方法的约定是以test 结尾的方法。命名模...