猜你喜欢
Effective Java(第3版)(英文版)

Effective Java(第3版)(英文版)

书籍作者:Joshua ISBN:9787121342608
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5523
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

  自从Java 6发布之后,Java又有了翻天覆地的变化。本书涵盖了Java 7、Java 8和Java 9中语言和库的各种新特性。让你能够深入了解Java平台的细微之处。通过对每一个项目的全面描述和解释,告诉你应该做什么、不应该做什么,以及为什么要这样做。

作者简介

  Joshua Bloch是Java 集合框架创办人,领导了很多 Java 平台特性的设计和实现,包括 JDK 5.0 语言增强以及屡获殊荣的 Java 集合框架。2004年6月他离开了SUN公司并成为 Google 的首席 Java 架构师。此外他还因为《Effective Java》一书获得著名的 Jolt 大奖。

编辑推荐
适读人群 :计算机专业学生、Java从业者等。

√经典原味,EffectiveJava升级版
√Google首席Java架构师倾情力作
√涵盖Java7、Java8和Java9中的各种新特性

前言

  1997年,Java还年轻时,JamesGosling(Java之父)称它为“蓝领的语言”(bluecollarlanguage),以此来表达它“十分简单”[Gosling97]。几乎与此同时,BjarneStroustrup(C++之父)将C++称为“多范式语言”(multi-paradigmlanguage),“故意和那些只能用单一方式编写程序的语言区别开来”[Stroustrup95]。Stroustrup警告说:
  Java相对的简单性——和大多数新语言一样——一部分是因为错觉,另一部分是因为它的不完整性。随着时间的推移,Java的规模和复杂性将显著增长。它的规模将增加两到三倍,相关的扩展和库也会不断增加。
  现在,20年过去了,公平来讲,Gosling和Stroustrup都是正确的。Java现在变得复杂且庞大,从并行执行、迭代,到日期和时间表示法都有多个抽象。
  虽然我的热情随着平台的发展已经冷却,但我仍然喜欢Java,鉴于其规模和复杂性的增长,我们迫切需要一个最新的最佳实践指南,这就是本书写作的目的。我希望这个版本能够在延续旧版本理念的前提下满足大家新的需求。
  小很美,简单却不易。
  圣何塞,加利福尼亚
  2017年11月
  附言:
  如果我没有提及最近占据我大量时间去践行的业内最佳实践,那将是我的疏忽。自20世纪50年代这个行业诞生以来,我们可以自由地重新实现彼此的API。这种做法是计算机技术迅速成功的关键。我以实际行动致力于维护这种自由[CompSci17],我希望你能加入进来。保留彼此可以重新实现API的权利,这对于维持行业健康发展至关重要。
  致谢
  感谢第1版和第2版的读者用你们的热情来接纳这本书,将它的理念铭记于心,并且让我知道它对你们的工作有那么多积极的影响。感谢众多的讲师在你们的课程中使用这本书,感谢众多的工程师团队采用这本书。
  感谢Addison-Wesley和Pearson团队在高强度的工作压力下依旧善良、专业、耐心、优雅。在整个过程中,我的编辑GregDoench一直保持镇定:他是一位好编辑,同时也是一名优雅的绅士。为了这个项目他恐怕生了不少白发,在此我向他道歉。我的项目经理JulieNahil和我的项目编辑DanaWilson像我期望的那样勤奋、准时、有条理、友好。我的文字编辑KimWimpsett一丝不苟且极有品味。
  我再次拥有了梦寐以求的审校团队,在此致以我诚挚的谢意。几乎检查了每一章的核心团队包括:CindyBloch、BrianKernighan、KevinBourrillion、JoeBowbeer、WilliamChargin、JoeDarcy、BrianGoetz、TimHalloran、StuartMarks、TimPeierls,以及YoshikiShibata。其他审校包括:MarcusBiel、DanBloch、BethBottos、MartinBuchholz、MichaelDiamond、CharlieGarrod、TomHawtin、DougLea、AlekseyShipil?v、LouWasserman,以及PeterWeinberger。这些审校人员提出了很多建议,大大提升了本书的品质,也避免了很多尴尬的错误。
  另外,要专门感谢WilliamChargin、DougLea和TimPeierls。他们是本书很多理念的“扩音器”。William、Doug和Tim孜孜不倦地为本书付出了他们的时间和智慧。
  最后,感谢我的妻子CindyBloch一直鼓励我写作、阅读了所有的原始文档、编写了索引,并一直帮助我处理这个项目中会出现的各种事情,以及在我写作时包容我。

目录

1Introduction1
2CreatingandDestroyingObjects5
Item1:Considerstaticfactorymethodsinsteadofconstructors5
Item2:Considerabuilderwhenfacedwithmanyconstructorparameters10
Item3:Enforcethesingletonpropertywithaprivateconstructororanenumtype17
Item4:Enforcenoninstantiabilitywithaprivateconstructor19
Item5:Preferdependencyinjectiontohardwiringresources20
Item6:Avoidcreatingunnecessaryobjects22
Item7:Eliminateobsoleteobjectreferences26
Item8:Avoidfinalizersandcleaners29
Item9:Prefertry-with-resourcestotry-finally.34
3MethodsCommontoAllObjects37
Item10:Obeythegeneralcontractwhenoverridingequals37
Item11:AlwaysoverridehashCodewhenyouoverrideequals50
Item12:AlwaysoverridetoString55
Item13:Overrideclonejudiciously58
Item14:ConsiderimplementingComparable66
4ClassesandInterfaces73
Item15:Minimizetheaccessibilityofclassesandmembers73
Item16:Inpublicclasses,useaccessormethods,notpublicfields78
Item17:Minimizemutability80
Item18:Favorcompositionoverinheritance87
Item19:Designanddocumentforinheritanceorelseprohibitit93
Item20:Preferinterfacestoabstractclasses99
Item21:Designinterfacesforposterity104
Item22:Useinterfacesonlytodefinetypes.107
Item23:Preferclasshierarchiestotaggedclasses109
Item24:Favorstaticmemberclassesovernonstatic112
Item25:Limitsourcefilestoasingletop-levelclass115
5Generics.117
Item26:Don’tuserawtypes117
Item27:Eliminateuncheckedwarnings.123
Item28:Preferliststoarrays126
Item29:Favorgenerictypes.130
Item30:Favorgenericmethods135
Item31:UseboundedwildcardstoincreaseAPIflexibility139
Item32:Combinegenericsandvarargsjudiciously.146
Item33:Considertypesafeheterogeneouscontainers151
6EnumsandAnnotations157
Item34:Useenumsinsteadofintconstants.157
Item35:Useinstancefieldsinsteadofordinals168
Item36:UseEnumSetinsteadofbitfields169
Item37:UseEnumMapinsteadofordinalindexing.171
Item38:Emulateextensibleenumswithinterfaces176
Item39:Preferannotationstonamingpatterns180
Item40:ConsistentlyusetheOverrideannotation.188
Item41:Usemarkerinterfacestodefinetypes191
7LambdasandStreams193
Item42:Preferlambdastoanonymousclasses193
Item43:Prefermethodreferencestolambdas197
Item44:Favortheuseofstandardfunctionalinterfaces199
Item45:Usestreamsjudiciously203
Item46:Preferside-effect-freefunctionsinstreams210
Item47:PreferCollectiontoStreamasareturntype.216
Item48:Usecautionwhenmakingstreamsparallel222
8Methods227
Item49:Checkparametersforvalidity227
Item50:Makedefensivecopieswhenneeded231
Item51:Designmethodsignaturescarefully236
Item52:Useoverloadingjudiciously238
Item53:Usevarargsjudiciously245
Item54:Returnemptycollectionsorarrays,notnulls247
Item55:Returnoptionalsjudiciously249
Item56:WritedoccommentsforallexposedAPIelements254
9GeneralProgramming261
Item57:Minimizethescopeoflocalvariables261
Item58:Preferfor-eachloopstotraditionalforloops264
Item59:Knowandusethelibraries267
Item60:Avoidfloatanddoubleifexactanswersarerequired270
Item61:Preferprimitivetypestoboxedprimitives273
Item62:Avoidstringswhereothertypesaremoreappropriate276
Item63:Bewaretheperformanceofstringconcatenation279
Item64:Refertoobjectsbytheirinterfaces280
Item65:Preferinterfacestoreflection282
Item66:Usenativemethodsjudiciously.285
Item67:Optimizejudiciously286
Item68:Adheretogenerallyacceptednamingconventions289
10Exceptions293
Item69:Useexceptionsonlyforexceptionalconditions293
Item70:Usecheckedexceptionsforrecoverableconditionsandruntimeexceptionsforprogrammingerrors296
Item71:Avoidunnecessaryuseofcheckedexceptions298
Item72:Favortheuseofstandardexceptions.300
Item73:Throwexceptionsappropriatetotheabstraction.302
Item74:Documentallexceptionsthrownbyeachmethod.304
Item75:Includefailure-captureinformationindetailmessages.306
Item76:Striveforfailureatomicity308
Item77:Don’tignoreexceptions310
11Concurrency311
Item78:Synchronizeaccesstosharedmutabledata311
Item79:Avoidexcessivesynchronization317
Item80:Preferexecutors,tasks,andstreamstothreads323
Item81:Preferconcurrencyutilitiestowaitandnotify325
Item82:Documentthreadsafety330
Item83:Uselazyinitializationjudiciously333
Item84:Don’tdependonthethreadscheduler336
12Serialization339
Item85:PreferalternativestoJavaserialization339
Item86:ImplementSerializablewithgreatcaution343
Item87:Considerusingacustomserializedform346
Item88:WritereadObjectmethodsdefensively353
Item89:Forinstancecontrol,preferenumtypestoreadResolve359
Item90:Considerserializationproxiesinsteadofserializedinstances363
ItemsCorrespondingtoSecondEdition367
References.371
Index377

标签
Java