预计阅读时间:10分钟 Joshua Bloch大神在《Effective Java》中明确表达过的观点:使用枚举实现单例的方法虽然还没有广泛采用,但是单元素的枚举类型已经成为实现Singleton...有,可以使用枚举的方式,Joshua Bloch大神也在《Effective Java》中明确支持此种方式,如下: public enum Singleton { INSTANCE;...不止简单,还成功避免了上述问题,而且能保证在反序列化的时候不会生成新的实例对象,以下是枚举方式反编译(使用javap命令)的字节码: javap Singleton.class Compiled from...如上,会报错,而且目前没有任何方法能绕过该限制,以下是jdk的newInstance方法的源代码,如果是ENUM类型则不允许使用反射(红色标注部分),看到这里大家应该明白为什么枚举方式能保证单例实例的安全...这种方式是Effective Java作者Josh Bloch 大神提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,所以极力大家写单例时使用此种方式 End
,而这个音效的大小有50M(假设),加载一次需要 2s ?左右的时间。你在测试的过程中发现,每次人物?...扯远了,我们要谈的还是单例的问题。缓存的内容其实就是对资源的合理利用,比如我们将一些大对象或者频繁的 IO 操作内容保存(缓存)在一个对象中。...依据:Joshua Bloch "Effective Java, Second Edition", p. 283-284 DCLSingleton current = dclSingleton...枚举(推荐使用) public enum EnumIvoryTower { /** * 实例 */ INSTANCE; } 这种方法是一个叫做 Joshua Bloch...优点:资源的合理分配和利用 缺点:违反了单一职责原则 简单说说 Joshua Bloch 《Effective Java》、Effective 系列图书作者。
在本文中,我想向您介绍Joshua Bloch写的“Effective Java”。...这些东西在很大程度上独立于我们使用的框架。...Joshua Bloch, Java Collections Framework 的主要作者之一,当然可以称得上是世界级的。 他还编制了一份清单,列出了在编写Java时值得考虑的90个项目。...那么微服务呢在过去两年的职业生涯中,我一直在使用Spring Boot和基于Grails的微服务。...总结 Joshua Bloch的《Effective Java》是我读过的关于Java的最好的书之一。虽然总是追求最新的和最令人兴奋的新框架和体系结构,但有时放慢速度是好的。
方法结束后,该块将立即立即变为未使用状态,用作下一个方法使用。 与堆内存分配,栈内存的大小要小一点。 Java程序中的堆空间和栈内存分配 让我们用一个简单的程序来了解堆和交替的内存使用情况。...在第1行找到main()方法后,Java Runtime创建的堆内存将被main()线程中方法使用。 我们在第2行创建原始局部变量,因此将其创建并存储在main()方法的栈内存中。...如果您对Java编码技巧与实践更感兴趣,请阅读Joshua Bloch撰写的《Effective Java 中文 第三版》 ,这是值得深读的一本书。...堆内存由应用程序的所有部分使用,而堆栈内存仅由一个执行线程使用。 在内存中创建对象时,它始终存储在堆空间中,并存储到包含该对象的引用中。内存仅包含本地原始变量和堆空间中对象的引用变量。...堆中存储的对象可以分区访问,而其他线程则不能访问分区内存。 堆栈中的内存管理是以后进先出(LIFO)的方式完成的,而堆内存中的内存管理更复杂,因为它是全局使用的。
小伙伴们好呀,我是 小羊 ,今天来和大家分享下 《Effective Java》这本书的 第2章 —— 创建和销毁对象 。一共有 9 点,一起看看叭~1....如果构造器有很多参数,建议用 builder 去创建对象这个就是 建设者模式 的使用了,下面是作者 Joshua Bloch 在 GitHub 仓库给的例子package effectivejava.chapter2...用 枚举或者私有构造器 来强化 单例属性这个就差不多在说 单例模式 了可以看看之前的文章: 一文带你看遍单例模式的八个例子,面试再也不怕被问了 (我都忘光了)这两个也是作者 Joshua Bloch 在...,可以看看 4ye 之前写的四种引用类型在Springboot中的使用 ,看看 Springboot 和线程池是如何巧妙用上 软引用和弱引用 的。...Joshua Bloch 的 GitHub 地址https://github.com/jbloch/effective-java-3e-source-code/tree/master/src/effectivejava
编辑:小虾米 夏沫 本文根据网上的参考资料以及自己的学习经验总结整理而成,旨在给大家做一个参考,希望大家在工作、学习中遇到相关的问题之后能从这些参考书中获得帮助。...Daniel Liang) 【译 者】戴开宇 【出版社】机械工业出版社 Effective Java中文版 【中文名】Effective Java中文版(第2版) 【英文名】Effective Java...(Second Edition) 【作 者】Joshua Bloch 【译 者】杨春花 / 俞黎敏 【出版社】机械工业出版社 Java程序员修炼之道 【中文名】Java程序员修炼之道 【英文名】..., and Corner Cases 【作 者】Joshua Bloch 【译 者】陈昊鹏 【出版社】人民邮电出版社 3 JVM 深入理解Java虚拟机 【作 者】周志明 【出版社】机械工业出版社...in Practice 【作 者】Brian Goetz / Tim Peierls / Joshua Bloch / Joseph Bowbeer / David Holmes / Doug Lea
Array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用。...由于数组本质上是静态的,即一旦创建后就无法更改数组的大小,因此,如果需要一个可以调整自身大小的数组,则应使用ArrayList。这是Array和ArrayList之间的根本区别。...好了,您可以查看《Effective Java》中内容,在其中可以声明一个像E []这样的副本,然后使用类型转换。...如果您对Java编码技巧与实践更感兴趣,请阅读Joshua Bloch撰写的《Effective Java 中文 第三版》 ,这是值得深读的一本书。...尽管ArrayList确实提供了size()方法,该方法告诉给定时间点存储在ArrayList中的对象数量。size()始终与length不同,这也是ArrayList的容量。
最近在看一本书 Java与模式,里面提了一句不建议使用常量接口,甚至举了个java源码的反例, 蛋疼的是没有说为什么? 查了网上一圈发现他们也是知道怎么做而不知道为什么这么做。...这个应该很少人遇到过,不过这是 Effective Java 里面说的。...Effective Java 作者 大佬的原话 According to Joshua Bloch, author of "Effective Java": The constant interface...第三 基于数据只暴露给相应的类的原则,一个类实现一个常量接口,可能只需要其中几个常量,而得到了更多无用的常量, 所以,使用常量接口的时候都是 import static const.valueAAA...总结 接口是定义类型的,而不应该用于导出常量。常量接口不建议使用,应使用常量类。
《Effective Java中文版》第二版 每个Java程序员的书桌上都应该放有这本书。...让我们先了解下作者: Joshua Bloch是Google公司的首席Java设计师,并且也是一位Jolt 奖获得者。...上面所有的问题(也包括其他74个)都有实用主义者Joshua Bloch的详细解释。读完这本书,程序员应该能意识到使用Findbugs、Checkstyle这些工具的必要性了。 ?...《Java并发编程实战》 一年前我正努力在做 UI 开发工作时(在Eclipse 插件中使用SWT/JFace,其他一些项目则使用Swing ),就看了这本书。...UI开发和多核系统应用开发是学习如何开发线程安全的软件系统的一个很好的理由。 这本书的作者如下:Brian Goetz,Joshua Bloch(又出现这位大牛了,我们刚提到过,还记得吗?)
2、Joshua Bloch ——Collections 框架 早在1996年,适逢Java刚刚崭露头角。...JDK1.1中的java.math、1.4中的assertions,还有大家所熟识的Collections Framework皆是Joshua一手打造。...Java风雨十年,从JDK 1.1到J2SE 5.0,Joshua实在功不可没。...Joshua对Java的贡献还不止于JDK,提起他的大作《Effective Java》(AddisonWesley, 2001),相信Java粉丝们一定耳熟能详。...《Effective JAVA》这本Java经典之作的作者Joshua Bloch便在书中特别感谢Doug Lea是此书中许多构想的共鸣板,感谢Doug Lea大方分享丰富而又宝贵的知识。
这是我读到的第一本Head First系列的书,也是第一本面向对象的书,在此之前,我不知道如何使用抽象类和接口,我也不知道为什么组合比接口要好。...但是Joshua Bloch是个例外,他的写作风格被部分程序员都适用。...虽然现代的框架如Spring已经确保你在框架的层次接触到这些J2EE设计模式,譬如Spring MVC确保了MVC的使用,它也同时使用了前端控制器(DipatcherServlet)和视图解析器(ViewResolver...除了以上的五本书,你可以看看Joshua Bloch的Effective Java第二版以及Head first object oriented analysis and design,你能知道更多面相对象的理论以及如何应用在...Java编程中。
Joshua Bloch : Java 2 元勋 文/莫映 早在1996年,适逢Java刚刚崭露头角,年内好事连连。...正是在Java技术如火如荼、大展拳脚的背景之下,Joshua Bloch来到了Sun,开始了他带领Java社区步入”迦南美地”的漫长历程。 很快,他被从安全组调入核心平台组,从事底层API设计。...Joshua对Java的贡献还不止于JDK,提起他的大作《Effective Java》(Addison Wesley, 2001),相信Java粉丝们一定耳熟能详。...该书对Java社群的影响,犹如C++社群中的《Effective C++》。Joshua对JCP的贡献也不小。...希望Joshua依然能继续”摩西未尽的事业”,以他的影响力推动Java社群继续前行。据称,《Effective Java》的下一版会加入Java 5.0的部分,让我们翘首以待吧。
Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,...当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降...补充:关于equals和hashCode方法,很多Java程序都知道,但很多人也就是仅仅知道而已,在Joshua Bloch的大作《Effective Java》(很多软件公司,《Effective Java...实现高质量的equals方法的诀窍包括:1. 使用==操作符检查"参数是否为这个对象的引用";2. 使用instanceof操作符检查"参数是否为正确的类型";3....不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor。...大家可能了解到它的原理,甚至看过它的源码;但是就像我一样,大家可能对它的作用存在误解。现在问题来了,jdk为什么要提供java线程池?使用java线程池对于每次都创建一个新Thread有什么优势?...直到前段时间我看到一篇Neal Gafter(和Joshua Bloch合著了《Java Puzzlers》,现任职于微软,主要从事.NET语言方面的工作)的访谈,里面有这么一段谈话(http://www.infoq.com...因为jvm会为每个线程分配一定内存(JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K,也可以通过jvm参数-Xss来设置),所以当线程数达到一定数量时就报了该error。...ThreadStackSize ThreadStackSize:线程栈的大小,JDK5.0以后每个线程堆栈大小默认为1M,以前每个线程堆栈大小为256K;可以通过jvm参数-Xss来设置;注意-Xss是
Effective Java 尽管 Java 没有什么出色的入门书籍,但这不代表 Java 没有出色的必读书籍。...Effective Java 是我读过的最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的 Java 特性给出了充满洞察力的建议,以至于 Java 之父 James Gosling...深入理解 Java 虚拟机(第2版) 非常优秀且难得的国产佳作,系统的介绍了 Java 虚拟机和相关工具,并给出了一些调优建议; Java 程序员修炼之道 在这本书之前,并没有一本 Java 书籍系统详细的介绍...,以及如何编写正确的并发程序; Java Puzzlers 包含了大量的 Java 陷阱——以至于读这本书时我说的最多的一个词就是 WTF,这本书的意义在于它是一个 反模式 大全, Effective...更有意思的是,这两本书的作者都是 Joshua Bloch 。 软件开发者路线图 是一本优秀且实用的程序员职业规划手册。这本书由若干个模式组成,每个模式都对应于程序员职业生涯中的特定阶段。
* 同时,对singleton对象使用volatile关键字进行限制,保证其对所有线程的可见性,并且禁止对其进行指令重排序优化。 * 在单例中new的情况非常少,绝大多数都是可以并行的读操作。...因此在加锁前多进行一次null检查就可以减少绝大多数的加锁操作,执行效率提高的目的也就达到了 * 注意:双重检查锁法,不能在jdk1.5之前使用, * 而在Android平台上使用就比较放心了,一般...Java - Joshua Bloch](https://www.amazon.cn/dp/B01DPUXUWG/ref=sr_1_2?...ie=UTF8&qid=1486966767&sr=8-2&keywords=Effective+Java)提倡的方式, * 使用枚举,除了线程安全和防止反射强行调用构造器之外,还提供了自动序列化机制...* 因此,Effective Java 推荐尽可能地使用枚举来实现单例。 * 注意:枚举,虽然Effective Java中推荐使用,但是在Android平台上却是不被推荐的。
比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。...代码实践 Joshua Bloch, Effective Java 2nd Edition p.18 单元素枚举是使用单例模式最佳的实践....---- 典型应用 项目中记录日志的类 数据库连接 我们使用的操作系统的文件管理器 ---- 实际应用 java.lang.Runtime#getRuntime() java.awt.Desktop#getDesktop...() java.lang.System#getSecurityManager() ---- 结论 有类本身控制创建和销毁,违反了单一职责原则 鼓励使用全局共享实例,防止该对象使用的对象和资源被解除分配。...---- 参考文献 Design Patterns: Elements of Reusable Object-Oriented Software Effective Java (2nd Edition)
单例模式网址 Singleton pattern - wikipedia 单例模式定义 在一个系统中,一个类只有一个实例化的对象。...其中变量 instance 是 volatile 的,1.4及更早的Java中,volatile关键字的实现会导致双重检查加锁的失效。...: 在类加载之后、被任何线程使用之前,static 的变量 INSTANCE 就已经定义好。...Static block initialization 在static代码块中创建新实例,同Eager initialization。...The enum way In the second edition of his book Effective Java, Joshua Bloch claims that "a single-element
在这篇文章中,我将为你推荐一些优秀的书籍,帮助你在Java后端领域迈向更高的台阶。 基础知识篇 1....《Java编程思想》这本经典著作由Bruce Eckel所著,深入浅出地介绍了Java编程的基本思想和核心概念。适合初学者和有一定经验的开发者阅读,有助于构建扎实的Java基础。 2....《Effective Java》Joshua Bloch的这本书探讨了Java编程的最佳实践,从代码风格到性能优化,都有详细的讲解。它是提升编程技能和代码质量的必读之作。 架构与设计篇 3....《Spring实战》这本书由Craig Walls编写,详细介绍了Spring框架的各个模块和使用方法。Spring在Java后端开发中广泛应用,掌握它能够帮助你更高效地构建应用。...在Java后端领域,持续学习和提升是不可或缺的一部分。通过阅读这些优秀的书籍,你能够扎实自己的基础,了解架构设计的原则,优化性能,掌握进阶技能。
1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。...那些拥有Java1.4或更早版本的开发背景的人都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便。 泛型防止了那种情况的发生。...它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。 2. Java的泛型是如何工作的 ? 什么是类型擦除 ?...关键仍然是使用泛型类型来代替原始类型,而且要使用JDK中采用的标准占位符。 7. 编写一段泛型程序来实现LRU缓存? 对于喜欢Java编程的人来说这相当于是一次练习。...这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为
领取专属 10元无门槛券
手把手带您无忧上云