精华内容
下载资源
问答
  • 主要为大家推荐了Java程序员到架构师自学书籍,帮助大家不断提高自己的专业水平,感兴趣的小伙伴们可以参考一下
  • Java自学书籍Top 10

    2020-09-01 14:08:20
    主要为大家推荐了Java书籍Top 10,是由Java Inside推荐的十本不错的Java书籍,感兴趣的小伙伴们可以参考一下
  • JAVA程序员必看的15本书-JAVA自学书籍推荐.docx
  • 我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。一、Java...

     作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。
    一、Java编程入门类
      对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
    1、《Java编程思想》
      在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它 对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太 厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
    2、《Agile Java》中文版
      这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但 是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的 过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还 有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握 Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
      虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点,我自己也准备有空的时候翻翻这本书,学习学习。
    二、Java编程进阶类
      打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
    1、《重构 改善既有代码的设计》
      这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。
    2、《测试驱动开发 by Example》
      本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。
    三、Java架构师之路
      到这个阶段,应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是可能还缺乏对应用软件整体架构的把握,现在就是迈向架构师的第一步。
    1、《Expert One-on-One J2EE Design and Development》
      这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。
    2、《Expert One-on-One J2EE Development without EJB》
      这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。
      以上两本书都是Rod Johnson的经典名著,Java架构师的必读书籍。在所推荐的这些书籍当中,是看过的最仔细,最认真的书,当时读这本书几乎是废寝忘食的一气读完的, 有小时候挑灯夜读金庸武侠小说的劲头,书中所讲内容和自己的经验知识一一印证,又被无比精辟的总结出来,读完这本书以后,有种被打通经脉,功力爆增的感 觉。
      但是后来看过一些其他人的评价,似乎阅读体验并没有那么high,也许是因为每个人的知识积累和经验不同导致的。那个时候刚好是经验知识积累已经足够丰富,但是还没有系统的整理成型,让这本书一梳理,立刻形成完整的知识体系了。
    3、《企业应用架构模式》
    Martin的又一本名著,但这本书只是泛泛的看了一遍,并没有仔细看。这本书 似乎更适合做框架的人去看,例如如果打算自己写一个ORM的话,这本书是一定要看的。但是做应用的人,不看貌似也无所谓,但是如果有空,还是推荐认真看 看,会让知道框架为什么要这样设计,这样的层次可以晋升到框架设计者的角度去思考问题。Martin的书向来都是推崇,但是从来都没有像Rod Johnson的书那样非常认真去看。
    4、《敏捷软件开发原则、模式与实践》
      Uncle Bob的名著,敏捷的经典名著,这本书比较特别,与其说是讲软件开发过程的书,不如说讲软件架构的书,本书用了很大篇幅讲各种面向对象软件开发的各种模式,个人以为看了这本书,就不必看GoF的《设计模式》了。
    四、软件开发过程
      了解软件开发过程不单纯是提高程序员个人的良好编程习惯,也是增强团队协作的基础。
    1、《UML精粹》
    UML其实和软件开发过程没有什么必然联系,却是软件团队协作沟通,撰写软件文档需要的工具。但是UML真正实用的图不多,看看这本书已经足够了,完全没有必要去啃《UML用户指南》之类的东西。要提醒大家的是,这本书的中译本翻译的非常之烂,建议有条件的看英文原版。
    2、《解析极限编程 拥抱变化》XP
      这是Kent Beck名著的第二版,中英文对照。没什么好说的,必读书籍。
    3、《统一软件开发过程》UP
      其实UP和敏捷并不一定冲突,UP也非常强调迭代,测试,但是UP强调的文档和过程驱动却是敏捷所不取的。不管怎么说,UP值得去读,毕竟在中国真正接受敏捷的企业很少,还是需要用UP来武装一下自己的,哪怕是披着UP的XP。
    4、《敏捷建模》AM
    Scott Ambler的名著,这本书非常的progmatic,告诉怎么既 敏捷又UP,把敏捷和UP统一起来了,又提出了很多progmatic的建议和做法。可以把《解析极限编程拥抱变化》、《统一软件开发过程》和《敏捷建 模》这三本书放在一起读,看XP和UP的不同点,再看AM是怎么统一XP和UP的,把这三种理论融为一炉,形成自己的理论体系,那么也可以去写书了。
    五、软件项目管理

      如果突然被领导提拔为项目经理,而完全没有项目管理经验,肯定会心里没底;如果觉得自己管理项目不善,很想改善项目管理能力,那么去考PMP肯定是远水不解近渴的。
    1、《快速软件开发》
      这也是一本名著。可以这样说,有本书在手,就有了一个项目管理的高级参谋给 你出谋划策,再也不必担心自己不能胜任的问题了。这本书不是讲管理的理论的,在实际的项目管理中,讲这些理论是不解决问题的,这本书有点类似于“软件项目 点子大全”之类的东西,列举了种种软件项目当中面临的各种问题,以及应该如何解决问题的点子,只需要稍加变通,找方抓药就行了。
    六、总结
      在这份推荐阅读书籍的名单中,没有列举流行的软件框架类学习书籍,例如Struts,Hibernate,Spring之类,也没有列举AJAX方面的书籍。是因为这类书籍容易过时,而上述的大半书籍的生命周期都足够长,值得去购买和收藏。
    【二.Java书籍Top 10】
    下面是Java Inside上推荐的十本不错的Java书籍。
    1)Java Language Specification, Third Edition (by James Gosling)
    本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南。如果你想知道语言之构造的精确含义,本书是最好的资源。

    2)Effective Java , Second Edition (by Joshua Bloch)
    本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。.
    本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。…

    3)Java Concurrency in Practice (by Brian Goetz)
    随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序取得了显著的进步,提高了Java虚拟机的性能,提高了并发类的可伸缩性,并加入了丰富的新并发构建块。在本书中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,同时,还阐释了创造它们的原因,及其背后的设计模式。 本书既能够成为读者的理论支持,又可以作为构建可靠的,可伸缩的,可维护的并发程序的技术支持。本书并不仅仅提供并发API的清单及其机制,本书还提供了设计原则,模式和思想模型,使我们能够更好地构建正确的,性能良好的并发程序。
    本书的读者是那些具有一定Java编程经验的程序员、希望了解Java SE 5,6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。

    4)Java Puzzles: Traps, Pitfalls and Corner Cases (by Joshua Bloch)
    Java教父的又一经典名著–Java Puzzlers,Amazon五星图书。认为你到底有多了解Java?你是一个代码神探吗?你是否曾经花费过数天时间去追踪一个由Java或其类库的陷阱和缺陷而导致的bug?你喜欢智力测验吗?那么这本书正好适合你!

    5)Thinking in Java (by Bruce Eckel)
    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。
    从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。


    6)Better, faster, lighter Java (by Justin Gehtland, Bruce A. Tate)
    Java的开发者正深陷于复杂性的泥沼中而无法自拔。我们的经验和能力正接近极限,程序员为了编写支持所选框架的程序所花的时间比解决真正问题的时间要多得多。我们不禁要问,有必要把Java搞得这么复杂吗?.
    答案是否定的。本书给你指引了一条出路。无论是维护应用程序,还是从头开始设计,你都能够超越成规,并大幅精简基本框架、开发过程和最终代码。你能重新掌握一度失控的J2EE应用程序。..
    在本书中,原作者Bruce A.Tate与Justin Gehtland将循序渐进、娓娓道来。首先,他们列出了五项基本法则。他们展示了如何构建简单、解耦的代码,并告诉你如何选择技术。他们还对两种被广泛运用的开源程序如何迎合这些概念进行了剖析。最后,作者还将利用这些基本概念构建一个简单但内涵丰富的应用程序来解决现实世界中所遇到的问题。

    7)Core Java (vol. 1, 2) (by Cay S. Horstmann, Gary Cornell)
    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。.
    全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。

    8) The Java Virtual Machine Specification (by Tim Linholm, Frank Yellin)
    如果你需要了解Java虚拟机的byte code,或者是一些编译方面的东西,这本书绝对让你得偿所愿。其不但包含了机器码的规范说明,同时它也是Java编译器和运行环境的规格说明书。


    9)Robust Java: Exception Handling, Testing, and Debugging (by Stephen Stelting)
    处理异常涉及开发、设计和体系结构等方面的知识。本书共分3个部分。
      第Ⅰ部分介绍Java异常的产生机理和用法,介绍一些最佳实践,讲述各类异常处理使用的一般API和技术。
      第Ⅱ部分阐述可测试性设计,介绍故障模式分析,讨论常见API的异常及起因,分析J2EE体系结构和分布式API的异常模式。
      第Ⅲ部分讨论在软件开发周期执行异常和错误处理,分析软件体系结构、设计模式、测试和调试,列举成熟的设计模式,介绍处理策略对系统体系结构的影响,讲述如何构建健壮系统。

    10)Java Code Convention
    最后一本当然是Java编码规范,这是由Sun公司官方出品的。这也是每个程序员为了得供程序的易读性,可维护性需要知道的。

    【三.Java 专业人士必备的书籍】
    每个程序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书籍应该是 Java 语言程序员的书架上必备的。书很贵,所以我有意将这份列表弄得很短,仅限于重要书籍。
    Thinking in Java (Bruce Eckel)
    Thinking in Java, 3rd edition (Bruce Eckel; Prentice Hall PTR,2002 年)
    Java 编程思想:第3版 (陈昊鹏 等译; 机械工业出版社,2005 年)
    Eckel 的书对于学习如何在 Java 语言环境中使用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概念。文字出自一个并不认为 Java 技术总是正确答案的人,所以相当地实用。Eckel 具有多种语言的大量经验,还有用面向对象方式进行思考的扎实技能。本书将这些技能放到实用的 Java 语言环境中。他还在写一本新书,名为 Thinking in Enterprise Java
    Effective Java (Joshua Bloch)
    Effective Java: Programming Language Guide(Joshua Bloch; Addison-Wesley,2001 年)
    Effective Java 中文版 (潘爱民 译; 机械工业出版社,2003 年)
    本书是理解优秀 Java 程序设计原则的最佳书籍。大多数材料从其他的 “学习 Java ” 的书中根本找不到。例如,Bloch 书中关于覆盖equals() 这一章是我读过的最好的参考资料之一。他也在书中包括了很实用的建议:用接口替代抽象类和灵活使用异常。Bloch 是 Sun 公司 Java 平台库的架构师,所以他透彻地了解这门语言。事实上,他编写了该语言中大量有用的库。本书必读!
    The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
    The Java Programming Language(Ken Arnold,James Gosling,David Holmes; Addison-Wesley,2000 年)
    Java 编程语言(第 3 版) (虞万荣 等译,中国电力出版社,2003 年)
    这也许是能弄到的最好的 Java 入门读物。它并不是一个标准规范,而是一本介绍每门语言特性的可读书籍。这本书在严谨性和教育性方面权衡得很好,能够让懂编程的人迅速被 Java 语言(和其丰富的类库)所吸引。
    Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)
    Concurrent Programming in Java: Design Principles and Patterns, 2nd edition(Doug Lea; Addison-Wesley,1999 年)
    Java 并发编程—设计原则与模式(第二版) (赵涌 等译,中国电力出版社,2004 年)
    不是每个开发人员都需要如此细致地了解并发性,也不是每个工程师都能达到本书的水准,但却没有比本书更好的关于并发性编程的概述了。如果您对此感兴趣,请从这里开始。Lea 是 SUNY 的一名专业程序员,他的和并发性有关的作品和想法都包含在了 JDK 5.0 规范(引自 JSR166)中,所以您大可放心,他所说的关于有效使用 Java 语言的建议是值得一听的。他是一个很善于沟通的人。
    Expert One-On-One J2EE Design and Development (Rod Johnson)
    Expert One-On-One J2EE Design and Development(Rod Johnson)
    WROX: J2EE 设计开发编程指南 (魏海萍 译,电子工业出版社,2003 年)
    对于刚接触 J2EE 的人来说,这是唯一的一本如实反映这项技术的书。本书收录了多年的成功经验和失败经验,不同于其他许多作者,Johnson 乐于将失败的经验公诸于众。J2EE 常常都被过度使用。Johnson 的书能帮您避免这一点。
    Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)
    Refactoring: Improving the Design of Existing Code(Martin Fowler,Kent Beck,John Brant,William Opdyke,Don Roberts; Addison-Wesley,1999 年)
    重构:改善既有代码的设计(中文版) (侯捷 等译,中国电力出版社 ,2003 年)
    Fowler 写了几本现已出版的最流行的编程书,包括 Analysis Patterns。他的关于重构 的书是这一主题的基本书籍。重构代码是被程序员忽略的训练,但却是程序员最直观的想法。重构是在不改变代码结果的前提下改进现有代码的设计。这是保持代码整洁的最佳方式,用这种方法设计的代码总是很容易修改。什么时候进行重构呢?当代码“散发出味道”时。Fowler 的书里满是 Java 语言代码的例子。许多 Java 语言集成开发环境(IDE)(包括了 IBM 的 Eclipse)都将 Fowler 的重构包含了进去,每一个都使用他的重构名命名,所以熟悉如extract method 等重构方法还是很值得的。
    Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)
    Design Patterns: Elements of Reusable Object Oriented Software(Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides; Addison-Wesley,1997 年)
    设计模式:可复用面向对象软件的基础 (李英军 等译,机械工业出版社 ,2005 年)
    这是一本在专业程序员圈子里更为有名的书,基于作者共同的绰号,这本书被认为是 “四人帮(GOF)之书”。模式是思考和解决普通编程问题时可以重用的方式。学习模式是一门学科。使用好模式(或知道什么时候 使用模式)是一项技能。忽略模式则是错误的。书中所有的例子都以 C++ 表示,但 Java 语言是从那里诞生的,让 Java 语言程序员由此联系到如何在 Java 语言中实现这些模式相对简单一些。熟悉模式并了解如何使用好模式使编程更加简单。这使得和其他程序员交流也更简单,因为在针对通用问题的通用解决方案中,模式是描述解决方案中彼此协作的大量相关编程概念的快捷方式。一些更为通用的方式,如工厂方法 则是普便存在的,甚至存在于 Java 语言本身。关于明智使用模式的这个主题,也可以阅读 Joshua Kerievsky 的 Refactoring to Patterns,该书称可以让代码来告诉您何时实现模式。
    Patterns of Enterprise Application Architecture (Martin Fowler)
    Patterns of Enterprise Application Architecture(Martin Fowler; Addison-Wesley,2002 年)
    企业应用架构模式 (王怀民 等译,机械工业出版社 ,2004 年)
    比起小型、一次性项目来说,企业开发当然代表了更大的挑战。那并不意味着企业开发带来的所有挑战都是新挑战。事实上有些时候,这项开发已经 是以前完成过的了。Fowler 做了很多个这样的项目。他的书提到了一些通用解决方案,并提供了关于使用、折中和可选方案的指导。Fowler 在书中包含了一些熟悉的模式,如模型视图控制器(MVC),他也提供了一些您也许不了解的模式,如处理 Web 站点上特定页面请求或行为请求的 Page Controller 模式。正如您对待大多数模式一样,一旦您读过许多模式,您就会认为 “我已经知道那个模式了” 。也许是这样,但有一个用来引用模式的通用表达方式还是很有帮助的。在有多个组件(由不同人开发)的大型项目中,该类引用是一项很好的帮助。
    UML Distilled (Martin Fowler)
    UML Distilled: A Brief Guide to the Standard Object Modeling Language(Martin Fowler; Addison-Wesley 2003 年)
    UML精粹:标准对象语言简明指南(第3版) (徐家福 译,清华大学出版社 ,2005 年)
    对于专业的程序员来说,UML 是一门很重要的通用可视化沟通语言,但是它被过度使用和草率地滥用了。您无需对使用 UML 沟通了解太多。Martin 对 UML 的提炼为您提供了最核心的东西。事实上,前后的封页提供了常规基础上可能使用到的所有东西。该书中 UML 例子的代码都是 Java 代码。
    Test-Driven Development: By Example (Kent Beck)
    Test-Driven Development: By Example(Kent Beck; Addison-Wesley 2002 年)
    测试驱动开发(中文版) (崔凯 译,中国电力出版社 ,2004 年)
    测试优先编程将使编程发生革命性变化,能助您成为更好的程序员。在写代码之前编写测试开始很难,但却是一项威力强大的技能。通过优先编写测试,可使代码更加简单,并确保从一开始它就能工作(Beck 实践着他提倡的测试优先,与人合写了 JUnit,这是 Java 语言最流行的测试框架)。Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用测试优先进行 思考(这也许是许多程序员首先遇到的障碍)。
    The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)
    The Pragmatic Programmer: From Journeyman to Master(Andrew Hunt 和 David Thomas; Addison-Wesley 1999 年)
    程序员修炼之道——从小工到专家 (马维达 译,电子工业出版社 ,2004 年)
    做一个纯粹的面向对象开发人员有其优势所在。在当今复杂的社会中,作为 Java 语言开发人员,为完成任务常要妥协。Hunt 和 Thomas 探讨了如何不将真正重要的东西妥协掉而完成任务。这不是一本关于 Java 语言的书,而是 Java 语言开发人员重要的思想读物。例如,我认为没从“要解决问题,而不是推卸责任”这句忠言中受益的程序员,不能像个自豪的艺术家一样在他的杰作上签上大名。
    Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)
    Peopleware: Productive Projects and Teams(Tom DeMarco,Timothy Lister; Dorset House,1999 年)
    人件(第2版) (UMLChina 翻译组 译,清华大学出版社 ,2003 年)
    这份列表中的其他所有书籍都至少和技术有些相关。这本书却不是。在所有技术行话和首字母缩略词的海洋中,有时软件开发人员和经理们会忘记:是 制造了软件。DeMarco 和 Lister 向我们提醒了这一事实,也向我们提醒了形成这一区别的原因。这不是一本关于一门特定编程语言的书籍,但却是每个 Java 语言程序员都应该读的书。关于 “累死程序员如何让经理们适得其反” 还有许多其他的好书,但这是最好的一本。
    【四.推荐给初级Java程序员的3本进阶书 】
    原作者在这篇文章中介绍3本不错的技术书籍。作者认为这些书籍对新手或者学生而言尤其有帮助。通过一些基础性的教程入门后,我们可以使用Java做基础性的编程。然而,当我们需要从初级提升更高的一个层次时,大多数的人却不知道从何入手。一些好的书籍在这个阶段可以很好地帮助初级开发人员。
    《Head First设计模式》
    这本书介绍 GoF 常用设计模式的方式引人入胜。如果只看封面很难看出来这是一本技术书籍,更不用说这本技术书籍介绍的还是面向对象编程的一些很有用的技巧。这本书采用 Kathy Sierra 式编写风格:虽然她的博客已经关了,但是还是能从前面这个链接看到一些她的文章,建议读一读。如果你周围有人认为设计模式没有什么用处,这本书倒是能够让他们改变看法。个人而言,我认为经典的 GoF 手册是一个很好的参考,但它并不是专为新手准备的。因此强烈推荐在校生(包括那些不清楚组合模式是什么的程序员们)阅读此书。
    书中介绍的设计模式是程序开发中比较基本的编程模式,也是面向对象编程的程序员应该了解和掌握的。接下来要介绍的这本书则更偏向于Java语言本身,这也是我日常使用的编程语言。
    《Effective Java中文版》第二版
    每个Java程序员的书桌上都应该放有这本书。让我们先了解下作者:
    Joshua Bloch是Google公司的首席Java设计师,并且也是一位Jolt 奖获得者。他之前是Sun的一位杰出工程师(distinguished engineer),也是Transarc公司的一个资深系统设计师。Bloch主导了众多基于Java平台的软件系统的设计和实现,包括JDK5.0的功能加强以及获得过奖项的Java集合框架的设计实现。他同时也参与编写了《Java解惑 | Java Puzzlers》 和《Java并发编程实战 | Java Concurrency in Practice》这两本技术书。
    就凭“Java集合框架开发者”这个称号,我们就应该认真听取这位值得尊敬的程序员的建议。这些建议在这本书中组织成78个点:读者可以按照自己的速度进行阅读。

     

    • 在复写equals和hashcode方法时,我们应该遵循什么规则?
    • 不可变类(immutable class)是什么?
    • 在特定的情况下,应当选用哪种最相关的异常类型?运行时异常(Runtime exception)还是可捕获异常(checked exception)?
    • 对于一个托管语言(managed language,详细请参考 wiki介绍),如何在混淆编译时保留(preserve)类的成员?

    上面所有的问题(也包括其他74个)都有实用主义者Joshua Bloch的详细解释。读完这本书,程序员应该能意识到使用Findbugs、Checkstyle这些工具的必要性了。
    《Java并发编程实战》
    一年前我正努力在做 UI 开发工作时(在Eclipse 插件中使用SWT/JFace,其他一些项目则使用Swing ),就看了这本书。那时,我想了解如何实现一个快速响应的UI,从而能给用户更好的使用体验。我知道自己写线程安全的代码是非常复杂的,尽管运行时间长的操作通常是一个独立的线程。UI开发和多核系统应用开发是学习如何开发线程安全的软件系统的一个很好的理由。
    这本书的作者如下:Brian Goetz,Joshua Bloch(又出现这位大牛了,我们刚提到过,还记得吗?), Doug Lea(java.util.concurrent包的开发者), David Holmes,Tim Peierls 和Joseph Bowbeer

     

     

    这本书的风格非常直接,有的代码在非线程安全的环境下表现不错,可一旦到了线程安全的环境下就变得十分的危险。接着,这本书介绍了基本的保证线程安全的机制:同步机制,volatile关键字等。本书还有对java.util.concurrent接口的介绍,你可以根据自己的需要来选择适合的并发集合类。这本书也介绍了程序运行时的错误管理,以及如何测试代码是否是线程安全的。而且书中还提供了说明性的注释(Annotation)(下载),这些注释通过了FindBugs的检查!

     

    以上内容转载自 https://blog.csdn.net/xufei512/article/details/70241041,若涉及侵权,请联系删除!

     

    展开全文
  • JAVA程序员必看的15本书-JAVA自学书籍推荐      作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术...

    文章原地址

    JAVA程序员必看的15本书-JAVA自学书籍推荐

    
        作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。
    一、Java编程入门类
      对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
    1、《Java编程思想》
      在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它 对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太 厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
    2、《Agile Java》中文版
      这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但 是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的 过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还 有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握 Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
      虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点,我自己也准备有空的时候翻翻这本书,学习学习。
    二、Java编程进阶类
      打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
    1、《重构 改善既有代码的设计》
      这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。
    2、《测试驱动开发 by Example》
      本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。
    三、Java架构师之路
      到这个阶段,应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是可能还缺乏对应用软件整体架构的把握,现在就是迈向架构师的第一步。
    1、《Expert One-on-One J2EE Design and Development》
      这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。
    2、《Expert One-on-One J2EE Development without EJB》
      这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。
      以上两本书都是Rod Johnson的经典名著,Java架构师的必读书籍。在所推荐的这些书籍当中,是看过的最仔细,最认真的书,当时读这本书几乎是废寝忘食的一气读完的, 有小时候挑灯夜读金庸武侠小说的劲头,书中所讲内容和自己的经验知识一一印证,又被无比精辟的总结出来,读完这本书以后,有种被打通经脉,功力爆增的感 觉。
      但是后来看过一些其他人的评价,似乎阅读体验并没有那么high,也许是因为每个人的知识积累和经验不同导致的。那个时候刚好是经验知识积累已经足够丰富,但是还没有系统的整理成型,让这本书一梳理,立刻形成完整的知识体系了。
    3、《企业应用架构模式》
    Martin的又一本名著,但这本书只是泛泛的看了一遍,并没有仔细看。这本书 似乎更适合做框架的人去看,例如如果打算自己写一个ORM的话,这本书是一定要看的。但是做应用的人,不看貌似也无所谓,但是如果有空,还是推荐认真看 看,会让知道框架为什么要这样设计,这样的层次可以晋升到框架设计者的角度去思考问题。Martin的书向来都是推崇,但是从来都没有像Rod Johnson的书那样非常认真去看。
    4、《敏捷软件开发原则、模式与实践》
      Uncle Bob的名著,敏捷的经典名著,这本书比较特别,与其说是讲软件开发过程的书,不如说讲软件架构的书,本书用了很大篇幅讲各种面向对象软件开发的各种模式,个人以为看了这本书,就不必看GoF的《设计模式》了。
    四、软件开发过程
      了解软件开发过程不单纯是提高程序员个人的良好编程习惯,也是增强团队协作的基础。
    1、《UML精粹》
    UML其实和软件开发过程没有什么必然联系,却是软件团队协作沟通,撰写软件文档需要的工具。但是UML真正实用的图不多,看看这本书已经足够了,完全没有必要去啃《UML用户指南》之类的东西。要提醒大家的是,这本书的中译本翻译的非常之烂,建议有条件的看英文原版。
    2、《解析极限编程 拥抱变化》XP
      这是Kent Beck名著的第二版,中英文对照。没什么好说的,必读书籍。
    3、《统一软件开发过程》UP
      其实UP和敏捷并不一定冲突,UP也非常强调迭代,测试,但是UP强调的文档和过程驱动却是敏捷所不取的。不管怎么说,UP值得去读,毕竟在中国真正接受敏捷的企业很少,还是需要用UP来武装一下自己的,哪怕是披着UP的XP。
    4、《敏捷建模》AM
    Scott Ambler的名著,这本书非常的progmatic,告诉怎么既 敏捷又UP,把敏捷和UP统一起来了,又提出了很多progmatic的建议和做法。可以把《解析极限编程拥抱变化》、《统一软件开发过程》和《敏捷建 模》这三本书放在一起读,看XP和UP的不同点,再看AM是怎么统一XP和UP的,把这三种理论融为一炉,形成自己的理论体系,那么也可以去写书了。
    五、软件项目管理

      如果突然被领导提拔为项目经理,而完全没有项目管理经验,肯定会心里没底;如果觉得自己管理项目不善,很想改善项目管理能力,那么去考PMP肯定是远水不解近渴的。
    1、《快速软件开发》
      这也是一本名著。可以这样说,有本书在手,就有了一个项目管理的高级参谋给 你出谋划策,再也不必担心自己不能胜任的问题了。这本书不是讲管理的理论的,在实际的项目管理中,讲这些理论是不解决问题的,这本书有点类似于“软件项目 点子大全”之类的东西,列举了种种软件项目当中面临的各种问题,以及应该如何解决问题的点子,只需要稍加变通,找方抓药就行了。
    六、总结
      在这份推荐阅读书籍的名单中,没有列举流行的软件框架类学习书籍,例如Struts,Hibernate,Spring之类,也没有列举AJAX方面的书籍。是因为这类书籍容易过时,而上述的大半书籍的生命周期都足够长,值得去购买和收藏。
    【二.Java书籍Top 10】
    下面是Java Inside 上推荐的十本不错的Java书籍。
    1)Java Language Specification, Third Edition ( by James Gosling)
    本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南。如果你想知道语言之构造的精确含义,本书是最好的资源。

    2)Effective Java , Second Edition ( by Joshua Bloch)
    本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。.
    本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。…

    3)Java Concurrency in Practice ( by Brian Goetz)
    随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序取得了显著的进步,提高了Java虚拟机的性能,提高了并发类的可伸缩性,并加入了丰富的新并发构建块。在本书中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,同时,还阐释了创造它们的原因,及其背后的设计模式。 本书既能够成为读者的理论支持,又可以作为构建可靠的,可伸缩的,可维护的并发程序的技术支持。本书并不仅仅提供并发API的清单及其机制,本书还提供了设计原则,模式和思想模型,使我们能够更好地构建正确的,性能良好的并发程序。
    本书的读者是那些具有一定Java编程经验的程序员、希望了解Java SE 5,6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。

    4)Java Puzzles: Traps, Pitfalls and Corner Cases ( by Joshua Bloch)
    Java教父的又一经典名著–Java Puzzlers,Amazon五星图书。认为你到底有多了解Java?你是一个代码神探吗?你是否曾经花费过数天时间去追踪一个由Java或其类库的陷阱和缺陷而导致的bug?你喜欢智力测验吗?那么这本书正好适合你!

    5)Thinking in Java ( by Bruce Eckel)
    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。
    从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。


    6)Better, faster, lighter Java ( by Justin Gehtland, Bruce A. Tate)
    Java的开发者正深陷于复杂性的泥沼中而无法自拔。我们的经验和能力正接近极限,程序员为了编写支持所选框架的程序所花的时间比解决真正问题的时间要多得多。我们不禁要问,有必要把Java搞得这么复杂吗?.
    答案是否定的。本书给你指引了一条出路。无论是维护应用程序,还是从头开始设计,你都能够超越成规,并大幅精简基本框架、开发过程和最终代码。你能重新掌握一度失控的J2EE应用程序。..
    在本书中,原作者Bruce A.Tate与Justin Gehtland将循序渐进、娓娓道来。首先,他们列出了五项基本法则。他们展示了如何构建简单、解耦的代码,并告诉你如何选择技术。他们还对两种被广泛运用的开源程序如何迎合这些概念进行了剖析。最后,作者还将利用这些基本概念构建一个简单但内涵丰富的应用程序来解决现实世界中所遇到的问题。

    7)Core Java (vol. 1, 2) ( by Cay S. Horstmann, Gary Cornell)
    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。.
    全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。

    8) The Java Virtual Machine Specification ( by Tim Linholm, Frank Yellin)
    如果你需要了解Java虚拟机的byte code,或者是一些编译方面的东西,这本书绝对让你得偿所愿。其不但包含了机器码的规范说明,同时它也是Java编译器和运行环境的规格说明书。


    9)Robust Java: Exception Handling, Testing, and Debugging ( by Stephen Stelting)
    处理异常涉及开发、设计和体系结构等方面的知识。本书共分3个部分。
      第Ⅰ部分介绍Java异常的产生机理和用法,介绍一些最佳实践,讲述各类异常处理使用的一般API和技术。
      第Ⅱ部分阐述可测试性设计,介绍故障模式分析,讨论常见API的异常及起因,分析J2EE体系结构和分布式API的异常模式。
      第Ⅲ部分讨论在软件开发周期执行异常和错误处理,分析软件体系结构、设计模式、测试和调试,列举成熟的设计模式,介绍处理策略对系统体系结构的影响,讲述如何构建健壮系统。

    10)Java Code Convention
    最后一本当然是Java编码规范,这是由Sun公司官方出品的。这也是每个程序员为了得供程序的易读性,可维护性需要知道的。

    【三.Java 专业人士必备的书籍】
    每个程序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书籍应该是 Java 语言程序员的书架上必备的。书很贵,所以我有意将这份列表弄得很短,仅限于重要书籍。
    Thinking in Java (Bruce Eckel)
    Thinking in Java, 3rd edition (Bruce Eckel; Prentice Hall PTR,2002 年)
    Java 编程思想:第3版 (陈昊鹏 等译; 机械工业出版社,2005 年)
    Eckel 的书对于学习如何在 Java 语言环境中使用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概念。文字出自一个并不认为 Java 技术总是正确答案的人,所以相当地实用。Eckel 具有多种语言的大量经验,还有用面向对象方式进行思考的扎实技能。本书将这些技能放到实用的 Java 语言环境中。他还在写一本新书,名为 Thinking in Enterprise Java
    Effective Java (Joshua Bloch)
    Effective Java: Programming Language Guide (Joshua Bloch; Addison-Wesley,2001 年)
    Effective Java 中文版 (潘爱民 译; 机械工业出版社,2003 年)
    本书是理解优秀 Java 程序设计原则的最佳书籍。大多数材料从其他的 “学习 Java ” 的书中根本找不到。例如,Bloch 书中关于覆盖equals() 这一章是我读过的最好的参考资料之一。他也在书中包括了很实用的建议:用接口替代抽象类和灵活使用异常。Bloch 是 Sun 公司 Java 平台库的架构师,所以他透彻地了解这门语言。事实上,他编写了该语言中大量有用的库。本书必读!
    The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
    The Java Programming Language (Ken Arnold,James Gosling,David Holmes; Addison-Wesley,2000 年)
    Java 编程语言(第 3 版) (虞万荣 等译,中国电力出版社,2003 年)
    这也许是能弄到的最好的 Java 入门读物。它并不是一个标准规范,而是一本介绍每门语言特性的可读书籍。这本书在严谨性和教育性方面权衡得很好,能够让懂编程的人迅速被 Java 语言(和其丰富的类库)所吸引。
    Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)
    Concurrent Programming in Java: Design Principles and Patterns, 2nd edition (Doug Lea; Addison-Wesley,1999 年)
    Java 并发编程—设计原则与模式(第二版) (赵涌 等译,中国电力出版社,2004 年)
    不是每个开发人员都需要如此细致地了解并发性,也不是每个工程师都能达到本书的水准,但却没有比本书更好的关于并发性编程的概述了。如果您对此感兴趣,请从这里开始。Lea 是 SUNY 的一名专业程序员,他的和并发性有关的作品和想法都包含在了 JDK 5.0 规范(引自 JSR166)中,所以您大可放心,他所说的关于有效使用 Java 语言的建议是值得一听的。他是一个很善于沟通的人。
    Expert One-On-One J2EE Design and Development (Rod Johnson)
    Expert One-On-One J2EE Design and Development (Rod Johnson)
    WROX: J2EE 设计开发编程指南 (魏海萍 译,电子工业出版社,2003 年)
    对于刚接触 J2EE 的人来说,这是唯一的一本如实反映这项技术的书。本书收录了多年的成功经验和失败经验,不同于其他许多作者,Johnson 乐于将失败的经验公诸于众。J2EE 常常都被过度使用。Johnson 的书能帮您避免这一点。
    Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)
    Refactoring: Improving the Design of Existing Code (Martin Fowler,Kent Beck,John Brant,William Opdyke,Don Roberts; Addison-Wesley,1999 年)
    重构:改善既有代码的设计(中文版) (侯捷 等译,中国电力出版社 ,2003 年)
    Fowler 写了几本现已出版的最流行的编程书,包括 Analysis Patterns。他的关于 重构 的书是这一主题的基本书籍。重构代码是被程序员忽略的训练,但却是程序员最直观的想法。重构是在不改变代码结果的前提下改进现有代码的设计。这是保持代码整洁的最佳方式,用这种方法设计的代码总是很容易修改。什么时候进行重构呢?当代码“散发出味道”时。Fowler 的书里满是 Java 语言代码的例子。许多 Java 语言集成开发环境(IDE)(包括了 IBM 的 Eclipse)都将 Fowler 的重构包含了进去,每一个都使用他的重构名命名,所以熟悉如 extract method 等重构方法还是很值得的。
    Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)
    Design Patterns: Elements of Reusable Object Oriented Software (Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides; Addison-Wesley,1997 年)
    设计模式:可复用面向对象软件的基础 (李英军 等译,机械工业出版社 ,2005 年)
    这是一本在专业程序员圈子里更为有名的书,基于作者共同的绰号,这本书被认为是 “四人帮(GOF)之书”。模式是思考和解决普通编程问题时可以重用的方式。学习模式是一门学科。使用好模式(或知道什么时候 使用模式)是一项技能。忽略模式则是错误的。书中所有的例子都以 C++ 表示,但 Java 语言是从那里诞生的,让 Java 语言程序员由此联系到如何在 Java 语言中实现这些模式相对简单一些。熟悉模式并了解如何使用好模式使编程更加简单。这使得和其他程序员交流也更简单,因为在针对通用问题的通用解决方案中,模式是描述解决方案中彼此协作的大量相关编程概念的快捷方式。一些更为通用的方式,如 工厂方法 则是普便存在的,甚至存在于 Java 语言本身。关于明智使用模式的这个主题,也可以阅读 Joshua Kerievsky 的 Refactoring to Patterns,该书称可以让代码来告诉您何时实现模式。
    Patterns of Enterprise Application Architecture (Martin Fowler)
    Patterns of Enterprise Application Architecture (Martin Fowler; Addison-Wesley,2002 年)
    企业应用架构模式 (王怀民 等译,机械工业出版社 ,2004 年)
    比起小型、一次性项目来说,企业开发当然代表了更大的挑战。那并不意味着企业开发带来的所有挑战都是新挑战。事实上有些时候,这项开发 已经 是以前完成过的了。Fowler 做了很多个这样的项目。他的书提到了一些通用解决方案,并提供了关于使用、折中和可选方案的指导。Fowler 在书中包含了一些熟悉的模式,如模型视图控制器(MVC),他也提供了一些您也许不了解的模式,如处理 Web 站点上特定页面请求或行为请求的 Page Controller 模式。正如您对待大多数模式一样,一旦您读过许多模式,您就会认为 “我已经知道那个模式了” 。也许是这样,但有一个用来引用模式的通用表达方式还是很有帮助的。在有多个组件(由不同人开发)的大型项目中,该类引用是一项很好的帮助。
    UML Distilled (Martin Fowler)
    UML Distilled: A Brief Guide to the Standard Object Modeling Language (Martin Fowler; Addison-Wesley 2003 年)
    UML精粹:标准对象语言简明指南(第3版) (徐家福 译,清华大学出版社 ,2005 年)
    对于专业的程序员来说,UML 是一门很重要的通用可视化沟通语言,但是它被过度使用和草率地滥用了。您无需对使用 UML 沟通了解太多。Martin 对 UML 的提炼为您提供了最核心的东西。事实上,前后的封页提供了常规基础上可能使用到的所有东西。该书中 UML 例子的代码都是 Java 代码。
    Test-Driven Development: By Example (Kent Beck)
    Test-Driven Development: By Example (Kent Beck; Addison-Wesley 2002 年)
    测试驱动开发(中文版) (崔凯 译,中国电力出版社 ,2004 年)
    测试优先编程将使编程发生革命性变化,能助您成为更好的程序员。在写代码之前编写测试开始很难,但却是一项威力强大的技能。通过优先编写测试,可使代码更加简单,并确保从一开始它就能工作(Beck 实践着他提倡的测试优先,与人合写了 JUnit,这是 Java 语言最流行的测试框架)。Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用测试优先进行 思考(这也许是许多程序员首先遇到的障碍)。
    The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)
    The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt 和 David Thomas; Addison-Wesley 1999 年)
    程序员修炼之道——从小工到专家 (马维达 译,电子工业出版社 ,2004 年)
    做一个纯粹的面向对象开发人员有其优势所在。在当今复杂的社会中,作为 Java 语言开发人员,为完成任务常要妥协。Hunt 和 Thomas 探讨了如何不将真正重要的东西妥协掉而完成任务。这不是一本关于 Java 语言的书,而是 Java 语言开发人员重要的思想读物。例如,我认为没从“要解决问题,而不是推卸责任”这句忠言中受益的程序员,不能像个自豪的艺术家一样在他的杰作上签上大名。
    Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)
    Peopleware: Productive Projects and Teams (Tom DeMarco,Timothy Lister; Dorset House,1999 年)
    人件(第2版) (UMLChina 翻译组 译,清华大学出版社 ,2003 年)
    这份列表中的其他所有书籍都至少和技术有些相关。这本书却不是。在所有技术行话和首字母缩略词的海洋中,有时软件开发人员和经理们会忘记:是 制造了软件。DeMarco 和 Lister 向我们提醒了这一事实,也向我们提醒了形成这一区别的原因。这不是一本关于一门特定编程语言的书籍,但却是每个 Java 语言程序员都应该读的书。关于 “累死程序员如何让经理们适得其反” 还有许多其他的好书,但这是最好的一本。
    【四.推荐给初级Java程序员的3本进阶书 】
    原作者在这篇文章中介绍3本不错的技术书籍。作者认为这些书籍对新手或者学生而言尤其有帮助。通过一些基础性的教程入门后,我们可以使用Java做基础性的编程。然而,当我们需要从初级提升更高的一个层次时,大多数的人却不知道从何入手。一些好的书籍在这个阶段可以很好地帮助初级开发人员。
    《Head First设计模式
    这本书介绍 GoF 常用设计模式 的方式引人入胜。如果只看封面很难看出来这是一本技术书籍,更不用说这本技术书籍介绍的还是面向对象编程的一些很有用的技巧。这本书采用 Kathy Sierra 式编写风格:虽然她的博客已经关了,但是还是能从前面这个链接看到一些她的文章,建议读一读。如果你周围有人认为设计模式没有什么用处,这本书倒是能够让他们改变看法。个人而言,我认为经典的 GoF 手册是一个很好的参考,但它并不是专为新手准备的。因此强烈推荐在校生(包括那些不清楚组合模式是什么的程序员们)阅读此书。
    书中介绍的设计模式是程序开发中比较基本的编程模式,也是面向对象编程的程序员应该了解和掌握的。接下来要介绍的这本书则更偏向于Java语言本身,这也是我日常使用的编程语言。
    《Effective Java中文版》第二版
    每个Java程序员的书桌上都应该放有这本书。让我们先了解下作者:
    Joshua Bloch是Google公司的首席Java设计师,并且也是一位Jolt 奖获得者。他之前是Sun的一位杰出工程师(distinguished engineer),也是Transarc公司的一个资深系统设计师。Bloch主导了众多基于Java平台的软件系统的设计和实现,包括JDK5.0的功能加强以及获得过奖项的Java集合框架的设计实现。他同时也参与编写了《Java解惑 | Java Puzzlers》 和《Java并发编程实战 | Java Concurrency in Practice 》这两本技术书。
    就凭“Java集合框架开发者”这个称号,我们就应该认真听取这位值得尊敬的程序员的建议。这些建议在这本书中组织成78个点:读者可以按照自己的速度进行阅读。
    • 在复写equals和hashcode方法时,我们应该遵循什么规则?
    • 不可变类(immutable class)是什么?
    • 在特定的情况下,应当选用哪种最相关的异常类型?运行时异常(Runtime exception)还是可捕获异常(checked exception)?
    • 对于一个托管语言(managed language,详细请参考 wiki介绍),如何在混淆编译时保留(preserve)类的成员?
    上面所有的问题(也包括其他74个)都有实用主义者Joshua Bloch的详细解释。读完这本书,程序员应该能意识到使用Findbugs 、Checkstyle 这些工具的必要性了。
    《Java并发编程实战
    一年前我正努力在做 UI 开发工作时(在Eclipse 插件中使用SWT/JFace,其他一些项目则使用Swing ),就看了这本书。那时,我想了解如何实现一个快速响应的UI,从而能给用户更好的使用体验。我知道自己写线程安全的代码是非常复杂的,尽管运行时间长的操作通常是一个独立的线程。UI开发和多核系统应用开发是学习如何开发线程安全的软件系统的一个很好的理由。
    这本书的作者如下:Brian Goetz ,Joshua Bloch(又出现这位大牛了,我们刚提到过,还记得吗?), Doug Lea (java.util.concurrent包的开发者), David Holmes ,Tim Peierls 和Joseph Bowbeer

    这本书的风格非常直接,有的代码在非线程安全的环境下表现不错,可一旦到了线程安全的环境下就变得十分的危险。接着,这本书介绍了基本的保证线程安全的机制:同步机制,volatile关键字等。本书还有对java.util.concurrent接口的介绍,你可以根据自己的需要来选择适合的并发集合类。这本书也介绍了程序运行时的错误管理,以及如何测试代码是否是线程安全的。而且书中还提供了说明性的注释(Annotation)(下载),这些注释通过了FindBugs的检查! 

    展开全文
  • java学习书籍

    2017-08-07 08:52:30
    it就是不断充实自己
  • 卧槽!java自学书籍

    2021-05-25 13:10:44
    Java 很好的在用户空间实现了开发工具包,并在内核空间提供系统调用来支持多线程编程,Java 支持了丰富的类库 java.util.concurrent 和跨平台的内存模型,同时也提高了开发人员的门槛,并发一直以来是一个高阶的...

    前言

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜我错过了,我用这五年时间和很多程序员一样在困惑和迷茫中找不到出路!

    路其实一直都在那里,只是我们看不到而已!

    以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考和程序及程序员职业生涯相关的问题,最后发现,影响我们走入今天的困局的竟然是一些我们常常挂在嘴边的话。

    并发历史

    在计算机最早期的时候,没有操作系统,执行程序只需要一个过程,那就是从头到尾依次执行。任何资源都会为这个程序服务,这必然就会存在 浪费资源 的情况。

    这里说的浪费资源指的是资源空闲,没有充分使用的情况。

    操作系统为我们的程序带来了 并发性,操作系统使我们的程序同时运行多个程序,一个程序就是一个进程,也就相当于同时运行了多个进程。

    操作系统是一个并发系统,并发性是操作系统非常重要的特征,操作系统具有同时处理和调度多个程序的能力,比如多个 I/O 设备同时在输入输出;设备 I/O 和 CPU 计算同时进行;内存中同时有多个系统和用户程序被启动交替、穿插地执行。操作系统在协调和分配进程的同时,操作系统也会为不同进程分配不同的资源。

    操作系统实现多个程序同时运行解决了单个程序无法做到的问题,主要有下面三点

    • 资源利用率,我们上面说到,单个进程存在资源浪费的情况,举个例子,当你在为某个文件夹赋予权限的时候,输入程序无法接受外部的输入字符,只能等到权限赋予完毕后才能接受外部输入。综合来讲,就是在等待程序时无法执行其他工作。如果在等待程序的同时可以运行另一个程序,那么将会大大提高资源的利用率。(资源并不会觉得累)因为它不会划水~
    • 公平性,不同的用户和程序对于计算机上的资源有着同样的使用权。一种高效的运行方式是为不同的程序划分时间片使用资源,但是有一点需要注意,操作系统可以决定不同进程的优先级,虽然每个进程都有能够公平享有资源的权利,但是每次前一个进程释放资源后的同时有一个优先级更高的进程抢夺资源,就会造成优先级低的进程无法获得资源,久而久之会导致进程饥饿。
    • 便利性,单个进程是无法通信的,通信这一点我认为其实是一种避雷针策略,通信的本质就是信息交换,及时进行信息交换能够避免信息孤岛,做重复性的工作;任何并发能做的事情,顺序编程也能够实现,只不过这种方式效率很低,它是一种 阻塞式 的。

    但是,顺序编程(也称为串行编程)也不是一无是处的,串行编程的优势在于其直观性和简单性,客观来讲,串行编程更适合我们人脑的思考方式,但是我们并不会满足于顺序编程,we want it more!!! 。资源利用率、公平性和便利性促使着进程出现的同时也促使着线程的出现。

    如果你还不是很理解进程和线程的区别的话,那么我就以我多年操作系统的经验(吹牛逼,实则半年)来为你解释一下:进程是一个应用程序,而线程是应用程序中的一条顺序流

    线程会共享进程范围内的资源,例如内存和文件句柄,但是每个线程也有自己私有的内容,比如程序计数器、栈以及局部变量。下面汇总了进程和线程共享资源的区别

    线程被描述为一种轻量级的进程,轻量级体现在线程的创建和销毁要比进程的开销小很多。

    注意:任何比较都是相对的。

    在大多数现代操作系统中,都以线程为基本的调度单位,所以我们的视角着重放在对线程的探究。

    线程

    优势和劣势

    合理使用线程是一门艺术,合理编写一道准确无误的多线程程序更是一门艺术,如果线程使用得当,能够有效的降低程序的开发和维护成本。

    在 GUI 中,线程可以提高用户界面的响应灵敏度,在服务器应用程序中,并发可以提高资源利用率以及系统吞吐率。

    Java 很好的在用户空间实现了开发工具包,并在内核空间提供系统调用来支持多线程编程,Java 支持了丰富的类库 java.util.concurrent 和跨平台的内存模型,同时也提高了开发人员的门槛,并发一直以来是一个高阶的主题,但是现在,并发也成为了主流开发人员的必备素质。

    虽然线程带来的好处很多,但是编写正确的多线程(并发)程序是一件极困难的事情,并发程序的 Bug 往往会诡异地出现又诡异的消失,在当你认为没有问题的时候它就出现了,难以定位 是并发程序的一个特征,所以在此基础上你需要有扎实的并发基本功。那么,并发为什么会出现呢?

    为什么是并发

    计算机世界的快速发展离不开 CPU、内存和 I/O 设备的高速发展,但是这三者一直存在速度差异性问题,我们可以从存储器的层次结构可以看出

    CPU 内部是寄存器的构造,寄存器的访问速度要高于高速缓存,高速缓存的访问速度要高于内存,最慢的是磁盘访问。

    程序是在内存中执行的,程序里大部分语句都要访问内存,有些还需要访问 I/O 设备,根据漏桶理论来说,程序整体的性能取决于最慢的操作也就是磁盘访问速度。

    因为 CPU 速度太快了,所以为了发挥 CPU 的速度优势,平衡这三者的速度差异,计算机体系机构、操作系统、编译程序都做出了贡献,主要体现为:

    • CPU 使用缓存来中和和内存的访问速度差异
    • 操作系统提供进程和线程调度,让 CPU 在执行指令的同时分时复用线程,让内存和磁盘不断交互,不同的 CPU 时间片 能够执行不同的任务,从而均衡这三者的差异
    • 编译程序提供优化指令的执行顺序,让缓存能够合理的使用

    我们在享受这些便利的同时,多线程也为我们带来了挑战,下面我们就来探讨一下并发问题为什么会出现以及多线程的源头是什么

    笔者福利

    以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

    有了这个,面试踩雷?不存在的!

    需要这套“面试宝典”的,点击这里即可免费获取!回馈粉丝,诚意满满!!!




    807)]
    [外链图片转存中…(img-bgEW5X42-1621919430808)]
    [外链图片转存中…(img-6QY1pPzL-1621919430809)]

    展开全文
  • 你会看到重复键入的C-a什么也不做,而重复键入的M-a则会移动一个以上的句子。 光标在文本中的位置也叫“点(point)”。在段落里,光标标示出了点在屏幕上文本里的位置。 下面是简单的光标移动命令的总结,包括单词和...

    你会看到重复键入的C-a什么也不做,而重复键入的M-a则会移动一个以上的句子。

    光标在文本中的位置也叫“点(point)”。在段落里,光标标示出了点在屏幕上文本里的位置。

    下面是简单的光标移动命令的总结,包括单词和句子的移动命令:

    C-f      向前移动一个字符。

    C-b      向后移动一个字符。

    M-f      向前移动一个单词。

    M-b      向后移动一个单词。

    C-n      移动到下一行。

    C-p      移动到上一行。

    C-a      移动到行首。

    C-e      移动到行尾。

    M-a      向前移动到句子的开头。

    M-e      向后移动到句子的末尾。

    >> 试着对每一个命令都实践几次,它们都是经常要用到的命令。

    另外两个重要的光标移动命令是M-<(Meta小于),它移动光标到整个文本的开头,M-> (Meta大于)它移动光标到整个文本的末尾。

    在多数终端上,“<”在逗号的上面,所以你必须用Shift键来输入它。在这些终端上,你也必须用Shift键来输入M-<;没有Shift键,你可以输入M-逗号。

    >> 现在就试试M-<,移动到本教程的开头,然后再用C-v移回这里。 现在就试试M->,移动到本教程的末尾,然后再用M-v移回这里。

    你也可以用方向键来移动光标,如果你的终端有方向键的话。我们建议学习C-b, C-f,C-n和C-p有三个原因。第一,它们能在所有类型的终端上工作。第二,你获得了使用Emacs的锻炼,你将会发现输入这些CTRL加字符比按方 向键要快(因为你不必把你的手从键盘上移开)。第三,一旦你养成了使用这些CTRL加字符的命令的习惯,你就能一样容易的学习其他高级的光标移动命令。

    大多数Emacs命令接收一个数字参数;对大多数命令来说,这表示命令重复的次数。输入重复命令次数的方法是在输入命令之前按C-u和数 字。如果你有META(或EDIT或 ALT)键,则有另一种方法输入数字参数:在按住META键的时候输入数字,我们建议学习C-u方法,因为它能在任何终端上工作。

    例如,C-u 8 C-f 向前移动8个字符。

    >> 试着使用带数字参数的C-n或C-p,只用一个命令就把光标移动到与本行相邻的 行上。

    绝大多数命令把数字参数当作重复次数,但也有几个例外。C-v和M-v就是。当给出一个参数,只是上滚或下滚数字指定的行数而不是屏数。比如,C-u 4 C-v滚动4行屏幕。

    >> 现在试试 C-u 8 C-v。

    这将使屏幕滚动8行,如果你想往回滚动的话,键入一个带参数的M-v。

    如果你正在使用X窗口,在Emacs窗口的左手边有一个叫做滚动条的矩形区域。你能通过用鼠标点击滚动条来滚动文本。

    >> 试着在滚动条顶部的高亮区域点击中键。这将使文本滚动,滚动的位置取决于 你点击的长短。

    >> 试着按住鼠标中键上移或下移鼠标,你将看到当你移动鼠标时文本会上下滚动。

    *** 当EMACS挂起时(WHEN EMACS IS HUNG)

    ------------------------------------------------------------------

    **

    当Emacs停止响应你的命令时,你能用C-g把它安全的停止。当一个命令执行了太长的时间时你可以用C-g把它终止。

    你也可以用C-g来取消数字参数和输入后又不想执行的命令。

    >> 键入C-u 100 产生一个值为100的数字参数,然后按C-g。再按C-f。它只会移动 一个字符,因为你用C-g取消了参数。

    如果错误的输入了一个,你能用C-g消掉它。

    *** 禁止命令(DISABLED COMMAND)

    ----------------------------------------------------

    **

    一些Emacs命令是“禁止”的,所以新手不会因偶然而执行它。

    如果你键入了一个禁止命令,Emacs会显示一条消息说明这条命令是干什么的,并且问你是否需要执行它。

    如果你真的想要执行,敲空格键继续。通常,如果你不想执行禁止命令,用“n”来回答。

    >> 输入:(一条禁止命令),然后用n来回答。

    *** 窗口(WINDOWS)

    -----------------------------

    **

    Emacs 能有好几个窗口,每一个显示自己的文本。我们将在后面解释怎样对多窗口操作。现在我们要解释怎样去除多余的窗口屏回到基本的单窗口编辑状态。这是一个例子:

    C-x 1 一个窗口(也就是除去其他所有的窗口)。

    因为Control-x跟了数字1。C-x 1使包含光标的窗口占满整个屏幕,屏删除其他所有窗口。

    >> 把光标移动本行并输入 C-u 0 C-l。

    >> 键入Control-h k Control-f。 看这个窗口如何缩小,并在按Control-f的时候出现了一个新的文档窗口。

    >> 键入C-x 1 并且看到那个文档窗口消失了。

    *** 插入和删除(INSERTING AND DELETING)

    ---------------------------------------------------------------

    **

    如果你要插入文本,只须输入文本。输入的字符你能见到,比如A,7,*等等。Emacs 会立即把它们插入。键入(回车键)插入一个换行符。

    你能用删除你输入的最后一个字符。就是键盘上标着“Del”的键。在某些情况下,“Backspace”键作用和一样,但不总是这样!

    通常,立即删除光标前面的那个字符。

    >> 输入几个字符,然后用删除它们。不必担心这个文件回被改变;你不会 替换主教程。这只是你的个人拷贝。

    当一行文本太长而超过屏幕宽度时,这一行会在屏幕的下一行被“继续”。文本的右边会有一个反斜杠“\”表示它被继续。

    >> 插入文本直到最右边,然后再插入。你将看到一个继续了的行。

    >> 使用删除文本直到行的长度在屏幕的宽度以内。继续的行将会消失。

    你能像删除其他任何字符一样删除换行符。删除两个行间的换行符会使它们合并为一行。如果这一行很长屏幕显示不下的话,将会用一个继续的行来表示。

    >> 把光标移动到一行的开头按这将使本行和上一行合为一行。

    >> 按重新插入你删除的换行符。

    记住大多数的Emacs命令能接收一个重复次数。这包括文本字符,把一个文本字符重复的插入几次。

    >> 键入这个-- C-u 8 * 来插入 ********

    你现在已经学习了Emacs的大多数输入和排错的方法。你也能一样的删除单词或行。这是删除操作的摘要:

         删除光标前面的字符

    C-d               删除光标后面的字符

    M-  除去光标前面的单词

    M-d               除去光标后面的单词

    C-k               除去从光标位置到行尾的内容

    M-k             除去到当前句子的末尾

    注意比较,C-d与M,M-d和C-f,M-f(不是一个控制字符,但不用担心)。C-k和M-k就象C-e,M-e。

    当你一次除去不止一个字符时,Emacs将保存着这些文本,所以你可以恢复它们。恢复那些被除去的文本称作“拉(yanking)”。你能在除去文本的同一地方拉回它们,或是在文本的其他地方。你能对文本拉上几次以产生它们的多个拷贝,拉的命令是 C-y。

    注意“除去(killing)”与“删除(Deleting)”之间的区别,被除去的东西能被拉回来,而被删除的不能。通常除去能除去很多的文本屏保存,而删除只能除去一个字符,或是空行或空格,并且不保存。

    >> 把光标移到一个空行的开头,键入C-k除去这一行。

    >> 按第二次C-k,你将看到剩下的空行也被除去了。

    注意单个的C-k除去行的内容,第二个C-k除去行本身,并且使后面的所有行上移。特别要注意数字参数:它除去很多行和它们的内容,这不仅仅是重复。C-u 2 C-k 除去两行和它们剩下的空行;而按两次C-k并不会这样做。

    要在当前光标处找回上次被除去的文本;按C-y

    >> 试一试,用C-y把文本拉回来。

    把C-y考虑为你把某人从你这里拿走的东西再拿回来。注意你如果在一行上按了几次 C-y,所有被除去的文本是存在一起的,所以按一次C-y将拉回全部的行。

    >> 现在就试一下,按几次C-k。 现在找回被除去的文本;

    >> 按C-y。然后把光标下移几行再按一次C-y,你现在会看到怎样拷贝这些文本。

    当你要拉回一些被除去的文本该怎样做呢?C-y只能拉回最近被除去的文本。但以前的文本并没有消失。你能用M-y来恢复它。当你用C-y拉 回最近被除去的文本后,换成 M-y可以拉回以前被除去的文本。键入一次又一次的M-y可以拉回更早以前被除去的文本。当你找到要寻找的文本,不必做任何事来保持它,只须离开拉文本的 地方继续你的编辑。

    如果你M-y了足够多的次数,你会回到开始点(最近被除去的)。

    >> 除掉一行,移开,再除掉另一行。 然后用C-y拉回第二行。 然后换成M-y拉回被除掉的第一行。 再按一次M-y看看得到了什么。继续按直到拉回被除去的第二行;然后再做几次。 如果原意的话,你可以给M-y加正的或负的数字参数。

    *** 撤销(UNDO)

    --------------------

    **

    如果你对文本作了一些改动,然后又发现这样做是错误的,你能用撤销命令,C-x u 撤销这些改变。

    通常,一次C-x u撤销一个改变;如果你在一行上重复几次C-x u,就会重复几次撤销操作。

    但有两个例外:不改变文本的操作(包括光标移动和滚屏命令)不算在内;只能处理20 次。

    >> 用C-k除去这一行,然后按C-x u 它将重现出来。

    C-_是一个可选择的撤销命令;它所作的工作和C-x u 完全一样,只是更容易输入。 C-_的缺点是有些键盘上没有它,这就是为什么还提供C-x u的原因。在某些终端上你可以按住CTRL的时候再敲/来输入C-_。C-_或C-x u把数参数字当作重复次数。

    *** 文件(FILES)

    -------------------

    **

    为了永久保存你编辑的文本,你必须把它放到一个文件里。否则当你退出Emacs的时候它就会消失。你通过“查找(finding)”文件,把你编辑的内容放到文件里。(也称为 “访问(visiting)文件”)。

    (译注:为了保持与原文的一致性,把find译为“查找”,但是这里和后面出现的 “查找文件”指的都是打开文件的意思。)

    查找(finding)一个文件意味着你在Emacs里看文件的内容,在多数情况下,也就是你在编辑它。但是,你用Emacs对它作的改变 并不是永久行的,除非你“保存(saving)” 它。所以你可以避免把一个改了一半的文件留在系统上。甚至你保存了文件,Emacs也会把原始文件换个名字保留下来,以防过后你发现对文件的改动是错误 的。

    如果你观察屏幕的你将看见一个开始和结尾都是破折号的行,并且以“–😗*-- TUTORIAL”或之类的东西开始。屏幕的这部分通常显示你正在访问的文件的名字。现在,一个叫做“TUTORAL”的文件,它是你的Emacs教程的 个人拷贝。当你用Emacs 查找一个文件,文件名会出现在同样的位置。

    查找和保存文件命令不像前面学的那些命令。它们都以字符Control-x开始。以 Control-x起头的是一个完整的命令系列;它们中的许多都是对文件,缓冲,和相关的东西进行操作的。这些命令有两个,三个或四个字符长。

    关于查找文件命令的另一件事是你必须给出你需要的文件的文件名。我们说这个命令 “从终端读取一个参数”。(在这种情况下,参数是文件的名字);当你键入命令C-x C-f后,Emacs会提示你输入文件的名字。你输入的文件名会出现在屏幕底部的行上。这个底部的行称为微型缓冲(minibuffer)用于这类较短的 输入。你能用Emacs本身的编辑命令来编辑文件名。

    当你正在输入文件名(或其他任何微型缓冲区输入),你能用命令C-g来取消。

    >> 键入命令C-x C-f,然后输入C-g。这将取消微型缓冲,也取消了C-x C-f命令所使 用的微型缓冲,所以你不查找任何文件。

    当你输完文件名后用来结束。然后C-x C-f开始工作,并开始寻找你所选择的文件。当C-x C-f命令结束后微型缓冲区也消失了。

    过一小会儿文件的内容就会显示在屏幕上,然后你就能对它进行编辑了。当想永久保留你的改动时用命令:

    C-x C-s     保存文件(save the file)。

    这个操作会把Emacs里的文本拷贝到文件里。在你第一次作的时候,Emacs把原始文 件改为一个新名字以使它不至于丢失。新名字是在原来名字的后面加一个“~”。

    保存结束后,Emacs打印出被写的文件的文件名。你应当经常的保存,万一系统崩溃 的话你不至于丢失太多的工作。

    >> 键入C-x C-s来保存你的教程的拷贝。屏幕的底部会打印出“Wrote…TUTORIAL”。

    注意:在某些系统上,输入C-x C-s 会把屏幕冻结住使你从Emacs看不到更多的输出。这 表示这个操作系统的“特性”叫做“控制流程”,它拦截了C-x不让它到达Emacs那里。 要使屏幕解冻,输入C-q,然后看Emacs手册里的“Spontaneous Entry to Incremental Search”一节,按上面的建议来对付这种“特性”。

    你能查找一个已存在的文件,来查看它或编辑它。你也可以查找一个尚未存在的文件。这是 Emacs:里创建文件的方法:查找文件,将会出现一个空白,然后插入文件的文本。当你 “保存(saving)”的时候,Emacs将会用你插入的文本创建文件。从那时候起,你可以认为你在编辑一个存在的文件了。

    *** (缓冲)BUFFERS

    --------------------------

    **

    如果你用C-x C-f查找第二个文件,第一个文件仍然留在Emacs里。你可以再用C-x C-f查找一次来切换回去。用这种方法你在Emacs里有很多文件。

    >> 输入C-x C-f foo 来建立一个名为foo的文件。然后插入一些文本,编辑它,并 用C-x C-s来保存“foo”。 最后输入C-x C-f TUTORIAL以回到本教程。

    Emacs把每个文件的文本都保存在一个叫“缓冲(buffer)”的东西里。查找(打开)一个文件就会在Emacs里产生一个新的缓冲。要看你当前运行的Emacs里存在的缓冲列表,输入:

    C-x C-b     列出缓冲(list buffers)

    >> 输入 C-x C-b

    观察每个缓冲都有一个名字,它可能也有一个它所保存的文件的文件名。一些缓冲不对应文件。比如,叫“*Buffers List*”的缓冲没有任何文件。这个缓冲只包含由C-x C-b产生的缓冲列表。你在Emacs窗口里看到的任何文本都是某个缓冲的一部分。

    >> 输入 C-x 1 消除缓冲列表。

    如果你对一个文件的文本作了改动,然后查找另一个文件,第一个文件并不保存。它的改变保存在Emacs里,在那个文件的缓冲里。被建立或编 辑的第二个文件的缓冲并不影响第一个的。这一点很有用,但这也意味着要有一个便捷的方法来保存第一个文件的缓冲。如果要用 C-x C-f切换回去只是为了按C-x C-s保存它将会是一件令人讨厌的事。所以我们用

    C-x s     保存缓冲(save the buffer)

    C-x s 向你询问每个改动过但未存盘的缓冲,对每个这样的缓冲都询问是否保存。

    >> 插入一行文本,然后按C-x s。 将会问你是否保存叫TUTORIAL的缓冲。 输入“y”来回答是。

    *** 扩展命令集(EXTENDING THE COMMAND SET)

    -----------------------------------------------------------------------

    **

    有太多的Emacs命令,大大超过了Contorl和meta加上字符所能表示的数量。Emacs用X(扩展 eXtand)命令来解决这个问题。有两种风格:

    C-x     字符扩展,后跟一个字符。

    M-x     名字命令扩展,后跟一个长名字。

    这些命令通常有用,但不如你已经学过的那些命令使用的频繁。你已经见过了它们中的两个:文件命令C-x C-f 用于查找和C-x C-s用于保存。

    另一个例子是结束Emacs的命令C-x C-c(不必担心你所作的改动会丢失,在退出Emacs 之前,C-x C-c会提示你保存每一个改动过的文件)。

    C-z命令用于*临时*退出Emacs,所以你能回到原来运行的Emacs里。在允许这样做的系统上,C-z把Emacs“挂起”;就是说回到外壳(shell)下,但并不破坏运行的Emacs。在大多数外壳上,你能用‘fg’命令或‘%emacs’来继续Emacs。

    在不支持挂起的系统上,C-z建立一个子外壳(subshell)运行于Emacs下以使你能运行其他程序然后回到Emacs;这并不是真 正的“退出”Emacs。在这种情况下,通常从子外壳回到Emacs的外壳命令是‘exit’。 有很多C-x 命令,这是已学过的一个列表:

    C-x C-f     查找文件

    C-x C-s     保存文件

    C-x C-b     缓冲列表

    C-x C-c     退出Emacs

    C-x u     撤销操作

    被称作扩展命令的命令的使用频率都不太高。或者是只在某些模式下使用。一个例子是替换字符串的命令,它在全文里把字符串替换为其他的。当你 键入M-x, Emacs会在屏幕的底部提示你输入命令;在这种情况下,是“replace-string”。比如输入“repl s”, Emacs会把命令补全。用来结束命令。

    替换字符串命令要求两个参数–要被替换的字符串和用来替换的字符串。你必须用 来结束两个参数。

    >> 把光标移上两行,然后输入M-x repl schangedaltered 。 注意现在这一行改变了:你把光标初始位置后的所有单词c-h-a-n-g-e-d替换为了 “altered”

    *** 自动保存(AUTO S***E)

    ------------------------------------

    **

    当你改动了一个文件还未存盘的话,所作的改动也许会由于系统崩溃而丢失。为防止这种情况发生,Emacs在编辑时为每个文件提供了“自动保 存(auto save)”。自动保存的文件的文件名前后都有一个#号;例如,如果你编辑的文件名叫“hello.c”,自动保存的文件的文件名就叫 “#hello.c#”。当你正常的保存了文件后,Emacs会删除这个自动保存的文件。如果遇到死机,你能打开那个文件后按M-x recover file来恢复你的编辑,(是你编辑的文件而不是自动保存的文件)。当提示确认时,输入yes 来继续恢复自动保存的数据。

    *** 回显区域(ECHO AREA)

    ------------------------------------

    **

    如果Emacs发现你输入命令的速度很慢的话它会在屏幕底部为你显示出来,这个区域叫 “回显区域”。

    *** 模式行(MODE LINE)

    ---------------------------------

    **

    回显区域上面的一行称为“模式行(mode line)”。模式行显示与下面类似的东西:

    –**-Emacs: TUTORIAL (Fundamental)–L670–58%----------------

    这一行给出了有关你在编辑的文件和Emacs状态的有用信息。

    你已经知道了文件名意味着什么。–NN%–指出你现在在文本里的位置;它意味着上面还有NN%的文本。如果是在文件的开头,会用 --Top-- 来代替–0%–。如果是在行的末尾,会显示–Bot–。如果你正在看的文本内容很少,可以全部显示在屏幕上,模式行会说 --All–。

    前面的星号表示你已经改动过文本了。一旦你保存了文件或打开了一个新文件,模式行的这部分就不是星号而是破折号了。

    模式行上括号里的部分是现在的编辑模式。现在是缺省的基本(Fundamental)模式。它是 “主模式(major mode)”的一种。

    Emacs有很多不同的主模式。有些意味着不同的语言或不同的文本。如Lisp模式(Lisp mode),文本模式(text mode)等等。在任何时候有且只能有一种主模式被激活。并且它的名字会出现在现在显示“Fundamental”的位置上。

    每一个主模式都有些自己的命令。就象不同的编程语言的注释看起来不同一样。每种主模式插入的注释也不同。可以用扩展命令切换进某种主模式。例如,M-x fundamental-mode 是切换进基本模式。

    >> 输入 M-x text-mode

    不必担心,没有命令会给Emacs带来很大改变。但是你可以看到现在M-f和M-b把省略号当作单词的一部分。而先前,在基本模式里,M-f 和M-b把省略号当成当成分隔符。

    主模式通常作诸如此类微小的变化:大多数命令在每个主模式里作“同样的工作”,但又有些微小的不同。

    要观看关于你现在的主模式的文档,按C-h m。

    >> 键入C-u C-v一次和多次使本行接近屏幕的顶端。

    >> 输入C-h m ,看看文本模式和基本模式有些什么不同。

    >> 按C-x 1 从屏幕上关掉这个文档。

    主模式之所以叫做主模式是因为也存在从模式,从模式与主模式完全不同。每个从模式可以自己打开或者关闭,独立于所有其他从模式,也独立于你的主模式。所以你可以不用从模式或者同时用很多种从模式。

    有一种从模式很有用,特别是在编辑英文文本时。它是自动填充模式(auto fill mode)。当这个模式打开的时候,当输入的文本过宽的时候就会自动折行。

    你能用M-x auto-fill-mode来打开自动填充模式。如果此模式已经打开M-x auto- fill-mode则把它关闭。我们把这叫做切换开关。

    >> 输入M-x auto-fill-mode。然后插入一些“asdf”直到看到这行被分为两行。你必须在中间放一些空格,只有到空格的时候才会换行。

    通常边界宽度是70,但你能用带数字参数的C-x f 命令来改变它。

    >> 键入带参数20的C-x。(C-u 20 C-x f) 然后输入一些文本看现在每行只有20个字符了。然后用C-x f把它改回70。

    如果你在一个段落的中间产生了改变,自动填充模式将不会重新填充。要想重新填充段落,当光标在段落里的时候按M-q。

    >> 把光标移到上一段按 M-q。

    *** 搜索(SEARCHING)

    -----------------------------

    **

    Emacs 能朝前和朝后搜索字符串(指相邻的一些字符或单词)。搜索是一个移动光标的操作,它把光标移动到字符串出现的下一个地方。

    Emacs 的搜索命令和其他大多数编辑器不同,它是“增量式(incremental)”的,这意味着搜索在你键入字符串时就开始了。

    开始一个向前搜索的命令是C-s,C-r是往回搜索。但等等,先别忙。

    当你输入C-s是你将注意到在回显区域会出现一个字符串“I-search”。这告诉你Emacs开始了一个增量搜索,并在等待你输入要搜索的东西。结束查询。

    >> 现在键入C-s开始一个搜索。慢慢的输入单词‘cousor’,在输入每一个字母的时候停顿一 下,注意看光标发生了什么。

    >> 再输入一次C-s,来搜索“cursor”出现的下一个地方。

    >> 现在输入四次看看光标移到了哪里。

    >> 输入结束搜索。

    看到发生什么了吗?在Emacs的增量搜索里,你输入多少字符串它就试着搜索这些字符出现的地方。到字符串出现的下一个地方,只须再按一次 C-s。要搜索的字符串不存在的话,Emacs 会发出蜂鸣并告诉你当前的搜索“失败(failing)”,按 C-g 也是终止搜索。

    注意:在某些系统上,输入 C-s 会把屏幕冻结住使你从Emacs看不到更多的输出。这 表示这个操作系统的“特性”叫做“控制流程”,它拦截了C-s不让它到达Emacs那里。 要使屏幕解冻,输入C-q,然后看Emacs手册里的“Spontaneous Entry to Incremental Search”一节,按上面的建议来对付这种“特性”。

    如果你在搜索的过程里按了,你将注意到要搜索的字符串的最后一个字符会被删除并且光标会回到上一个被搜索到的 地方。比如,假设你键入了“c”,将会搜索“c”第一次出现的地方。然后如果你键入“u”,光标将移到“ cu”第一次出现的地方。现在键入。这将从搜索的字符串里把“u”删掉,这时光标回到“c”第一次出现的地方。

    如果你在搜索时按了Control或meta键加字符(少数几个少数命令例外,如C-s和C-r),搜索将被终止。

    C-s向当前光标的后面搜索字符串出现的地方。如果你需要搜索前面文本里的东西,用C-r来代替。我们所介绍的C-s的每个特性C-r也支持,除了方向相反。

    *** 多窗口(MULTIPLE WINDOWS)

    ------------------------------------------------

    **

    Emacs有一个非常好的特性是能同时在屏幕上显示不止一个的窗口。

    >> 把光标移到本行上按C-u 0 C-l。

    >> 现在按C-x 2,它把屏幕分裂成两个窗口,每个窗口都显示本教程。光标在上面的窗口里。

    >> 按C-M-v 滚动到下面的窗口里。(如果你没有一个真正的Meta键,那么按ESC C-v)

    >> 按 C-x o (“o” 指 “其他(other)”) 把光标移到到下面的窗口里。

    >> 用 C-v 和 M-v 滚动下面窗口里的文本。 在上面的窗口里看本教程。

    >> 再次按 C-x o 使光标回到上面的窗口里。 现在光标象以前一样在上面的窗口里了。

    你能一直用C-x o在窗口间切换。每个窗口都有它自己的光标位置,但仅有一个窗口能显示活动的光标。所有的编辑命令都发生在那个显示光标的窗口上。我们把这个窗口叫做“选中窗口( selected window)”。

    当你在一个窗口里编辑文本,而用另一个窗口作参考时命令C-M-v非常有用。你总是能把光标留在所编辑的地方,而用C-M-v来翻阅另一窗口。

    C-M-v 是 CONTROL-META 加字符的一个例子。 如果你有一个真正的META 键,你能同时按住 CTRL 和 META 再按“v”来输入C-M-v。CTRL 和 META 谁先按谁后按无所谓。

    如果你没有一个真正的META 键, 你可以用 ESC 来代替。这时候次序是有关系的: 你必须让 ESC 跟在 CTRL-v后面; 否则 CTRL-ESC v 将不工作。 这是因为 ESC 是一个有意义的字符而不是一个修饰字符。

    >> 输入 C-x 1 (在上面的窗口里) 以消除下面的窗口。

    (如果你在下面的窗口里键入C-x 1,将会把上面的窗口去掉。可以把这个命令看作是“只保留你现在在的那个窗口。)

    你不必一定要在两个窗口里显示同样的缓冲。如果你在一个窗口里键入C-x C-f查找文件,另一个窗口的内容不会改变。你能独立的在每个窗口里查找文件。

    这是让两个窗口显示不同内容的另一种方法:

    >> 在你输入的文件名后再输入C-x 4 C-f,然后用结束。会看到指定的文件出现在下面 的窗口里。光标也在那里面。

    >> 键入C-x o 回到上面的窗口,然后输入C-x 1删掉下面的窗口。

    *** 递归编辑层(RECURSIVE EDITING LEVELS)

    ----------------------------------------------------------------

    **

    有时候你会进入“递归编辑层(recursive editing level)”。由模式行上的方括号指示。它在主模式名的括号外面。例如你也许会看到(Fundamental)变成了[(Fundamental)]。

    要退出递归编辑层,按ESC ESC ESC。这是一个通用的退出命令,你也可以用它除去额外的窗口,或者退出微型缓冲。

    >> 输入 M-x 进入一个微型缓冲; 然后用 ESC ESC ESC 离开。

    你不能用C-g来退出递归编辑层。这是因为C-g只能取消在递归编辑层里面的命令。

    *** 获取更多的帮助(GETTING MORE HELP)

    --------------------------------------------------------------

    **

    在本教程里我们试着为你开始使用Emacs提供了足够多的信息。但是有关Emacs的信息实在是太多以至于不能全部都在这里说明。但是,你 还应该学习更多有关Emacs的东西,因为它另外还有很多有用的特性。Emacs提供了很多读取有关命令的文档的命令。这些“帮助”命令都以 Control-h开头,叫做“帮助字符”。

    为了使用帮助特性,输入字符C-h,然后再输入一个字符来说明你需要哪种帮助。如果你真的不知道,输入C-h ? 然后 Emacs会告诉你它能给你什么样的帮助。如果你输入了C-h 又觉得不需要任何帮助,你可以用C-g来取消它。

    (在有的地方,C-h的作用被改变了。如果按C-h在屏幕的底部没有出现有关帮助的信息的话,试试用F1和M-x help RET来代替。)

    最基本的帮助特性是C-h c。输入C-h,然后是字符 c,然后输入一个命令字符和序列;然后 Emacs 会显示这个命令的简洁的描述。

    >> 输入 C-h c Control-p.

    显示的消息看起来会象这样:

    C-p runs the command previous-line

    这告诉你“功能的名字”。功能的名字主要用于对Emacs的功能扩充和定制。但因为功能的名字指出了命令的用途,所以最好不要改动它。

    C-h c后面可跟多字符命令,比如 C-x C-s 和 (如果你没有 META 或者 EDIT 或者 ALT 键) v 。

    要获取有关命令的更多信息,用C-h k 代替 C-h c。

    >> 输入 C-h k Control-p.

    这将在一个Emacs窗口里显示命令的文档。当你读完后可以用C-x 1除去帮助文本。如果不想马上离开,你可以一边编辑一边参考帮助文本,然后再按C-x 1。

    这是一些有用的 C-h 选项:

    C-h f     描述一个功能,在你输入了这个功能的名字后。

    >> 输入 C-h f previous-line。 将打印出C-p命令所实现的所有功能。

    C-h a     命令查找。输入一个关键字,Emacs将列出所有名字里有这个关键字的命令。 包括所有以Meta-x开始的命令。对有些命令,C-h a 也将列出实现同一功能的 几个命令序列。

    >> 输入 C-h a file.

    这将在窗口里显示所有名字里有单词“file”的M-x命令。

    >> 输入 C-M-v 来滚动帮助窗口,做上几次。

    >> 输入 C-x 1 来删除帮助窗口。

    Emacs 启动:

    直接打emacs, 如果有X-windows就会开视窗. 如果不想用X 的版本,

    就用 emacs -nw      (No windows)起动.

    符号说明

    C-X 表示按住CTRL键, 然後按X, 再把CTRL, X一起放开.

    M-X         META                 META

    在没有META键的电脑上, M-X 等於先按 ESC键, 接著按 X键.

    Sun上面META键就是菱形的那个键.

    有些系统META键就是ALT键.(或者某一边的ALT键)

    C-X或 M-X的X没有大小写分别.

    Emacs按键命令基本上是一串C-和M-组成的.

    超过两个以上的按键命令, Emacs会在萤幕最下面一行显示你按过什麽.

    这一行叫作mini buffer

    结束Emacs按 C-x C-c

    取消执行 C-g

    有些Emacs命令会跑很久, 可以用C-g中断之. 按错键也可以按C-g取消.

    上下移动   C-p 向上 (previous line) C-n向下(next line)

    左右移动   C-f 向右 (forward) C-b 向左 (backward)

    其实Emacs内部没有行的概念, 把一篇文章放在一个大buffer

    里面, 所以C-f (forward)就是向档尾移动, C-b (backward)

    是移回去的意思, 一次一个字.

    翻页  下一页 C-v (view next screen)

    上一页 M-v

    翻页时,上一页末尾会留一点在萤幕最上面,以维持连续性.

    Emacs在游标接近萤幕最下方时会自动跳半页, 把档案往前挪一点,

    方便阅读.

    重画萤幕 C-L

    Emacs里面游标的专有名词叫point. point == 游标目前的 点

    游标一次跳一个字(word) M-f  往後跳 M-b

    注意 C-f 与 M-f, C-b 与 M-b的对称性.

    移到行头 C-a  行尾 C-e

    移到句首 M-a  到句尾 M-e

    (M-a 到上一个句点後面,一个句子的起头.

    M-e 到句点後面)

    移到档头 M-< 档尾 M->

    删除游标目前指的/後面的字 C-d

    前面的字 DEL  (Delete键)

    DEL的正名叫Rubout (Rub out)

    M-DEL 往回删一个字(word)

    M-d

    《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

    【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

    往前删 (游标後面)

    C-k   删至行尾 (kill)

    M-k   删到一句子结尾(删到句点) (kill)

    注意Backspace = C-h 在Emacs下是help的意思

    後面有(kill)的, 表示此删除的动作是kill, 不太等於delete.

    emacs会把kill掉的东西放到kill ring去, 算是一种暂存的地方,

    以後可以叫出来.见 yank说明.

    Undo: C-x u

    C-_ 等於 C-x u    有些DEC终端机, C-/就是C-_

    有时等於C-Shift- -

    重复执行

    举例, 向右移 8个字, C-u 8 C-f

    C-u 在Emacs里是蛮特别的,用来设定一些引数(argument/repeat count)

    给其後的命令.

    C-u 2 0 C-n 向下移 20行

    有一个特别的例外, C-u 3 C-v 不是翻三页, 而是整个萤幕向上移三行.

    据说这比较有意义.

    C-u 1 0 C-x u   UNDO 10次

    给C-L一个引数会怎麽样:

    C-u 0 C-l 会重画萤幕,并且把目前的行移到萤幕第一行.

    另外, C-u 100   等於 M-100

    C-u 数字  等於 M-数字

    X windows 下,

    C-left C-right 一次移一个字(word).

    C-up C-down 移动一段 (paragraphs/C语言的话是block)

    Home = C-a

    End = C-e

    C-Home = M-<

    C-end = M->

    PgUp PgDn = M-v C-v

    设定重覆次数更加简单,

    比如要向右移10个字 C-1 C-0 right-arrow

    就是按住CTRL, 然後打10就对了, 比 C-u 1 0 简单.

    Mouse中键用来选取有hi-light的地方.

    右键是menu-button

    如果不小心按两次ESC, 等於 M-ESC,  会有一个讯息跑出来

    说你按到一个被disable的命令. 这是高级指令, 作者认为

    初学者用不道,所以会问你要不要启动它, 一般回答no.

    如果某一行太长, 萤幕显示不下, Emacs会在萤幕最右边打个$,

    表示此行未完,右边还有.

    把一行拆成两行: 在想拆处按Enter即可.

    合并两行为一行: 在行尾按C-d (或行首按DEL)

    Yank: 吐出被删掉的(killed)东西.

    只要用kill (C-k, M-k等) 删除, 超过一个字的资料,

    emacs就会把它存起来, 然後C-y 可以把它叫出来.

    功能跟Cut & Paste一样. Kill 和delete不一样, 只有被

    kill掉的东西才能用yank吐回来.

    游标在同一地方不动, 连续kill掉的资料会被当成一次kill掉的,

    yank时会一起回来.

    被Kill掉的资料是放在称作 kill ring的资料结构上面, ring就是个圆圈,

    被kill掉的东西会依序摆在圆圈上. yank 会放回最近一次kill掉的资料.

    如果不是你想要的话, 用M-y 可以换.  (M-y就是告诉emacs, 不对不对,

    我不是要这一个,换前一个给我).

    M-y 要紧接在C-y之後.

    拷贝文字的方法== 连续 C-k 几次,  把要拷贝的行全部删掉,

    然後按 C-y 弄回来. 再到想复制的地方按一次C-y, 就成了.

    把要拷贝的资料kill掉在yank回来好像很笨. 是有比较文明的

    方法, 那就是M-w, 不过较麻烦.

    首先,要先设标记. Mark 用 C-SPC 或 C-@ 设. 然候

    把游标移到另一端, 按 M-w 就可以把 mark 到 point间的

    字存到kill ring上. point 就是游标的意思.

    Emacs不会把Mark起来的地方用highlight表示, 除非在X下.

    在X下, 可以用M-w 来拷贝用滑鼠反白的文字.

    kill & yank 就是 cut & paste的意思.

    以上大部份指令对Bash的命令列编辑也有效

    档案操作

    读档: Emacs术语叫 finding a file.

    C-x C-f 然後在mini-buffer输入档名. 输入档名时, SPC键有

    auto-complete的功能,或者会秀出到目前为止档名前几

    个字和输入一样的. (TAB键也有类似功能)

    C-x C-f 叫 find-file

    C-x C-s 存档 (save current file, save current buffer)

    C-x s   存所有的档

    C-x i   插入档案  把另外的档案的内容读入目前编辑区内

    视窗

    Emacs把档案读进来,存在buffer中.

    我们透过window来看/编辑buffer.

    两个视窗会把萤幕切成两部份, 他们可以同时显示

    相同的, 或不同的档案.

    对初学者而言, 最需要的是记住怎样让不想要的视窗消失:

    C-x 0 关掉目前的视窗

    C-x 1 会让目前的视窗占满整个萤幕 (One Window),

    取消/关掉其他的视窗.

    Emacs里面有许多功能都会开一个小视窗来和使用者沟通, 显示讯息.

    有时候不会自动消失很讨厌, C-x 1 就很有用.

    另一个功能是如何跳到另一个视窗.

    C-x o  (other-window)

    C-x 2 把目前的视窗切成两个 (水平分割)

    C-x 3                      (垂直分割)

    C-x 4 是一串与视窗有关的指令.

    C-x 4 是一串与视窗有关的指令.

    C-x 5 则是扩展到X的视窗, 称为frame.

    C-x 5 2 就是再开另一个X视窗 (frame).

    多档编辑

    C-x C-b 看目前有那些buffer (buffer就是emacs放开起的档案的地方).

    C-x b 然後在minibuffer输入buffer的名字,可以切换编辑buffer.

    TAB键也有作用. 有些内部的buffer (就是没有档案的buffer),

    是用*开头和结束, 这个也要打, 如*scratch*

    最候提醒:

    C-x 1 可以把多馀的视窗关掉.

    Emacs扩充指令

    前面介绍的emacs按键大部份都是C- 或者 M-的形式.

    这是最简单的按法, 由一对按键构成一个指令.

    Emacs的按键可以超过2个以上. 如 C-x 1 或 C-x C-b.

    一般超过一个按键组合的命令都是用C-x 开头.

    另外你也可以直接下命令. 按 M-x 之後就可以打一个Emacs命

    令来执行. 一般这些命令名字都很长, 不过都不常用. 等一下

    我们会介绍一些. 还有介绍怎麽把这些命令设成按键指令.

    C-x C-c 就是结束Emacs. 不过一般Emacs很笨重, 一旦起动就不轻易

    退出. 所以比较常用的是C-z

    C-z 把Emacs暂停, 回到命令列. 当你下次再需要编辑时,打fg %emacs

    就可以把Emacs唤醒.

    在X下, C-z会把emacs缩成icon

    mode line

    emacs编辑画面由 编辑区(buffer) 状态列 (modeline) 和对话区 (minibuffer)

    构成. 这里解释 modeline 显示的讯息.

    以下是个范例:

    –**-XEmacs: xemacs.qs      (Fundamental)----74%-------

    由後面往前解释, 74% 表示游标的位置.

    (Fundamental)表示编辑模式.这是最原始的模式. 编辑不同种类的文章

    可能希望用不同的模式, 比如说C-mode, lisp-mode, tex-mode, text-mode

    等等. 在不同模式下可能多一些按键出来. 举例text-mode.

    M-x text-mode

    可以切入text-mode, 这是一般人编辑文字使用的模式. 和Fundamental mode

    没什麽差异. 不过游标移动时, Emacs对一个字的定义就有所不同, 因而

    M-f M-b 等移动一个字, 一个段落的指令就可能会停在标点符号的前面.

    此时状态列变为… (Text)----70%—

    以上说的是Major mode. 另外还有minor mode, 其实就是一些额外的功能.

    比如说, M-x auto-fill-mode 则状态列显示 (Text Fill).

    auto-fill就是自动断行, 让文章每行固定有70个字.

    M-X fundamental-mode 可以变回来.

    这里要说明一下, emacs在 minibuffer下有auto-completion的功能,

    也就是打M-x fund 然後按 SPC, 它会自动补全 fundamental-mode,

    不用全打. 如果有两个以上的选择, 它会告诉你. 这个功能对

    find-file (C-x C-f)等等档案编辑功能也有效. 前面提过.

    最後解释两个**号. 右边的*表示文章被修改过了.

    左边的* 表示这个编辑区(buffer)可以修改.

    有一些emacs的buffer是read-only buffer, 就会标成%

    %%表示档案是read-only.

    C-x C-q 可以解开read-only的锁定, 无论如何你要改这个编辑区.

    这是个toggle指令, 如果原来是可以修改的, C-x C-q会把它切成

    read-only.

    Search

    没有Search 功能的编辑器简直就是小朋友的玩具. Search

    是一项很重要的功能, 所以emacs也提供的很完善.

    C-s

    C-r

    M-x re-search-forward

    M-x re-search-backward

    M-x search-forward

    M-x search-backward

    以上这些指令是基本的search指令. C-s, C-r是increamental search,

    就是你打字的同时, emacs就直接帮你找. 一个是forward, 一个是backward.

    找到了怎麽办? 按C-g可以取消搜寻, 跳回原来的位置. 按Enter就让游标

    停在找到的地方 – 此时minibuffer显示:Mark saved where search started

    什麽意思? 就是isearch帮你在原来的位置设了一个mark, 然後把point

    (cursor) 移到新的位置.

    想跳回去原先的地方?

    C-x C-x 就可以了.(exchange-point-and-mark)

    C-u C-SPC 可以依序跳回前几次设mark的地方.

    (C-SPC是设mark, 给它一个argument, 就是反动作)

    (还记不记得C-u 可以给後面的指令设一些参数.

    有些指令拿这个参数来当作repeat count,

    有些指令就只拿来当作on/off, true/false, set/clear而已)

    M-x re-search-forward可以让你用regular expression搜寻.

    M-x search-forward则没有increamental的功能.

    另外一个指令, 作用和grep很像:

    M-x occure

    和search相提并论的就是replace.

    M-x replace 然後按 SPC, 就知道了.

    Emacs的设定:

    Emacs的设定档是 $HOME/.emacs

    你应该多少知道, emacs是用lisp写成的编辑器, .emacs档也都是

    要用lisp的语法设定. emacs用的lisp称为elisp, 和一般的lisp差一点点.

    有一个info page, emacs-lisp-intro, 深入浅出的介绍emacs lisp.

    如果你还不会, 不懂programming, 强烈建议你看这份文件. 如果你

    会texinfo, 你可以把它很漂亮的印出来. (内容一点点而已, 两三

    天就看完了)

    如果你把.emacs搞砸了, 进emacs很奇怪, 怎麽办?

    1. 用 vi 改 .emacs :>

    2. emacs -q 进 emacs

    Major Modes

    一般常见的emacs major mode有

    fundamental-mode

    展开全文
  • 资源为JAVA自学教程的PPT,定位为入门级菜鸟,PPT内容几乎涵盖JAVA语言的全部语法与应用,适合自学简单容易,另PPT上附有代码解释。
  • JAVA程序员必看的15本书-JAVA自学书籍推荐 (转)

    万次阅读 多人点赞 2017-02-07 14:43:39
    我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识。 一、Java...
  • 时间是一项重要的资源,本书籍帮您回避那些分心的事情,内容讲的非常详细,实战内容丰富
  • 机械转行java自学经历,零基础学java,血泪总结的干货 据说,再恩爱的夫妻,一生中都有100次想离婚的念头和50次想掐死对方的冲动。 求职路上亦是如此,打开这篇文章,相信你也有转行的想法。和身边的朋友聊过,...
  • 我的 Java 自学之路

    万次阅读 多人点赞 2018-07-29 14:53:19
    其实在转正之后我就想抽个时间好好的梳理一下我的 Java 上车之路 ,但是一直拖到现在 ,因为有学弟问到 ,所以也就给了我动力 。毕竟答应了人家的事要做到 。 首先要有相应的背景介绍 ,不然说个毛线啊 ,大家不在...
  • 无论你是大学生还是在职人员,想学Java时,都会面临两个选择,自学或者报班。报班通常太费钱,时间又不自由;自学又不知道如何下手,担心自己坚持不下来。怎么办?我们先分析一下自学和培训班的优点。我们先讲自学...
  • Sunil Sahu 自学 Java 该项目包含 Self Learn Java Book 示例的源代码。 书籍主题 介绍 Java 执行环境 入门 Java基础 类和对象 处理字符串 处理日期和时间 重要课程 面向对象编程 异常处理 Collections Framework...
  • 借名人名言给大家推荐一些对java学习有用的经典书籍,对程序员来说,我觉得最佳学习方式还是看书,看视频花费时间太长,而阅读博客则不够系统。 对java初学者最好的方式就是找到一本经典的好书,然后啃完它。当然,...
  • 有没有靠谱的Java自学资料推荐? 怎样让自己看到进步,坚持下来? …… 以上问题,课程中我都会呕心给你梳理答案,赶快开始学习吧。 什么人适合自学Java 在自学前你可能会因为自身的条件有很多困惑和疑虑,不清楚...
  • 《阿里巴巴Java开发手册(正式版)》(V1.2.0版)更新(V1.2.0版)《阿里巴巴Java开发手册(正式版)》 - 知乎专栏 这篇最新版本不只是规范汇聚了阿里,更有广大知乎程序猿、工程师、研发网友的智慧结晶。 有关...
  • 说到学Java,许多初学者都会有的问题,到底是自学还是报培训班呢? 很多纠结的同学心里都会想,自学省钱,要是我坚持不下来呢?去培训班要是学出来找不到工作呢? 下面我来说说我的看法 自学还是报班这个是和...
  • Java初学者的常见问题 我自己学Java也有一段时间了,期间我同样也学过python等一些编程语言,回想起刚开始学编程语言那段时间真的是一段悲伤历史啊~~!!! 下面直接进入正题,罗列出初学者常见的一些问题 1. 刚开始学Java...
  • Java自学历程

    2021-09-01 16:07:34
    对嵌入式,深度学习处于了解水平,Python语言基本应用,正在学习Java及后端知识 互联网实习项目/获奖经历 无 二. 学习规划 学习目标(理想目标) 做出入门级别出彩的项目 广泛...
  • 用我的亲身经历来告诉你如何自学Java

    千次阅读 多人点赞 2020-07-27 20:52:10
    在我的另一篇博文——【一年总结】记我的大一生活中,我其实已经谈过了我的大一经历,但是对于我自学Java的地方往往都是一笔带过的,因为那篇博文主要是想记录我那时所思所想,表达的主要是一种情感,而非“攻略”。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,230
精华内容 6,892
关键字:

java自学书籍

java 订阅