编辑推荐
内容全面本书将Java语言作为大学生的计算机程序设计入门语言,不仅详细介绍语言本身,而且介绍面向对象的设计思想和编程方法、UML建模语言、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架等实用开发技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是,不仅要使读者掌握Java语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。
深入浅出针对初学者和自学读者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言娓娓道来。读者还可以通过配套的《Java语言程序设计学生用书》(ISBN:9787302288275),在实践中达到对内容的深入理解和熟练掌握。
立体配套为了方便教师备课,本书配有电子教案(PPT文件)。清华大学学堂在线上有与之配套的MOOC课程。
内容简介
本书将Java语言作为大学生的计算机程序设计入门语言,特色是内容全面、深入浅出、立体配套。本书详细介绍了Java语言以及面向对象的设计思想和编程方法、UML建模语言、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架等实用开发技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是不仅要使读者掌握Java语言,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。本书适合作为大专院校“Java语言程序设计”课程教材或Java爱好者入门的自学教材。
作者简介
郑莉,清华大学计算机科学与技术系教授;国家精品资源共享课负责人;北京市计算机教育研究会副理事长。全国高等学校计算机教育研究会常务理事。全国高等院校计算机基础教育研究会常务理事;文科计算机基础教学指导分委员会专家;ISO国际标准组织专家及标准编辑;全国信息技术标准化技术委员会教育技术分技术委员会委员兼秘书长。主要从事计算机教育及教育信息化研究,主持和参加多项国家863、支撑计划课题和教育部课题
目录
第1章 Java语言基础知识1
1.1 Java语言与面向对象的程序设计1
1.1.1 面向对象的程序设计思想1
...
1.6.4 数组的引用24
1.6.5 多维数组26
1.7 本章小结28
习题28
...
第12章 JSP程序设计399
12.1 JSP简介399
12.1.1 什么是JSP程序399
12.1.2 JSP语法概述401
12.1.3 JSP内置对象405
12.1.4 一个简单的JSP程序408
12.2 JSP与JavaBean412
...
前言/序言
一、 版次说明
本书第1版于2006年出版。第2版是在第1版的基础上,广泛听取了读者和同行的建议,参考了最新的资料,增加了Java 5及Java 6语言的新内容,并根据作者本人在授课过程中的经验而形成的。
二、 本书的作者及编写背景
这是一本面向广大初学者的入门教材,是本系列《C++语言程序设计》的姊妹篇,该书自1999年第1版出版以来,已经出版了4版,在清华大学等数十所大学的不同专业中使用,取得了良好的教学效果。与《C++语言程序设计》一样,本书同样是基于作者多年来在清华大学讲授“Java语言程序设计”的经验,以及作者本人的研究和开发经验编写的。本书的主要作者均为讲授“Java语言程序设计”课程教授,参与编写的其他作者均为该课程助教。
Java语言是应用最广泛的面向对象的程序设计语言之一。面向对象的程序设计方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体--对象。对同类型对象抽象出其共性,形成类。这样,程序模块间的关系简单,程序模块的独立性、数据的安全性具有良好的保障,通过继承与多态性,使程序具有很高的可重用性,使得软件的开发和维护都更为方便。
面向对象方法的出现,实际上是程序设计方法发展的一个返璞归真过程。软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法。
除了面向对象以外,Java语言的另一个突出特点是与平台无关,可以实现一次编写、各处运行。因此Java被广泛用于网络应用程序开发,以及各种电器设备的嵌入系统。
从语法上看,Java语言与C++语言一样,都是以C语言的语法为基础。那么,学习Java语言是否应该首先学习C语言呢?不是的,虽然Java语言借鉴了C语言的语法,但是Java本身是一个完整的程序设计语言,而且它与C语言的程序设计思想是完全不同的。因此,Java语言是可以作为程序设计的入门语言来学习的,这正是本书的定位。学习本书并不要求读者有C语言基础,但是有一定基础的读者学习起来会感觉更容易。
三、 本书的特色
本书的特色是内容全面、深入浅出、立体配套。
本书将Java语言作为大学生的计算机程序设计入门语言,不仅详细介绍语言本身,而且介绍面向对象的设计思想和编程方法、UML建模语言、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架等实用开发技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是,不仅要使读者掌握Java语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。当然,要达到能够描述较复杂的问题域还需要学习面向对象的软件工程课等其他课程。
针对初学者和自学读者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言娓娓道来。读者还可以通过配套的《Java语言程序设计学生用书》,在实践中达到对内容的深入理解和熟练掌握。
为了方便教师备课,本书配有《Java语言程序设计教师用书》,包括电子教案(PPT文件)、教学要点、考试样题等。
四、 内容摘要
...
作 者2011年5月 于清华大学
《深入理解Java:从原理到实践》 前言 在瞬息万变的软件开发领域,Java语言凭借其跨平台性、强大的生态系统和卓越的性能,始终占据着核心地位。无数开发者在这门语言的指引下,构建了从小型应用到大型企业级系统的各种解决方案。然而,仅仅掌握Java的语法和API,往往不足以应对日益复杂的开发挑战。真正能够脱颖而出的开发者,需要深入理解Java语言的底层机制、内存模型、并发原理,以及如何有效地利用其丰富的特性来编写高效、健壮、可维护的代码。 《深入理解Java:从原理到实践》正是一本致力于弥合理论与实践鸿沟的著作。它并非仅仅罗列API或语法糖,而是带领读者一同探索Java的“幕后故事”,从JVM的运作方式到垃圾回收的精妙算法,从线程模型的演进到并发安全的保障机制,深入剖析Java的核心竞争力所在。我们相信,只有真正理解了“为什么”和“怎么样”,才能在面对实际问题时,做出最明智、最高效的决策。 本书旨在为有一定Java基础的开发者提供一个深入学习的平台。无论您是希望提升现有Java技能,还是准备迎接更高级别的技术挑战,本书都将是您宝贵的参考。我们将以清晰的逻辑、严谨的论述、丰富的示例,引导您逐步构建对Java语言更深层次的认知。 第一部分:Java虚拟机(JVM)深度解析 Java的灵魂在于其虚拟机。理解JVM的内部运作,是掌握Java精髓的第一步。本部分将带领读者深入JVM的世界,揭开其神秘面纱。 JVM的内存区域划分: 我们将详细介绍JVM内存模型,包括程序计数器、虚拟机栈、本地方法栈、方法区(元空间)和堆。理解每个区域的作用、生命周期以及它们之间的关系,对于解决内存溢出、内存泄漏等问题至关重要。我们将深入探讨堆的年轻代、老年代、永久代(或元空间)的垃圾回收机制,以及各个区域的存储内容。 类加载机制: Java程序的执行离不开类加载。本部分将详细讲解Java的类加载过程,包括加载、验证、准备、解析和初始化这五个阶段。我们将分析自定义类加载器的工作原理,以及它们在实现热部署、代码加密等场景下的应用。同时,也会探讨类加载器的双亲委派模型,理解其如何保证类的唯一性,以及可能出现的安全风险。 字节码与指令集: Java源代码被编译成平台无关的字节码。本部分将介绍Java字节码的结构,以及JVM解释器和即时编译器(JIT)的工作原理。我们将剖析一些常见的字节码指令,帮助读者理解Java代码在JVM中的具体执行过程。通过了解字节码,开发者可以更深入地理解一些语言特性的实现细节,并进行性能优化。 垃圾回收(GC)算法与策略: 垃圾回收是Java自动内存管理的核心。本部分将深入讲解主流的垃圾回收算法,如标记-清除、标记-整理、复制算法。我们将详细分析Serial、Parallel、CMS、G1、ZGC、Shenandoah等不同垃圾收集器的特点、优缺点以及适用场景。通过理解GC的工作原理和调优参数,开发者可以有效地控制GC的停顿时间,提升应用程序的性能和响应速度。 JVM性能监控与调优: 了解JVM的运行状态是进行性能调优的基础。本部分将介绍多种JVM性能监控工具,如JConsole、VisualVM、MAT、JProfiler等,并演示如何使用它们来分析内存使用、线程状态、GC情况等。我们将结合实际案例,讲解常见的JVM性能瓶颈及其解决方法,指导读者如何通过调整JVM参数来优化内存、CPU等资源的使用效率。 第二部分:Java并发编程深度探索 在现代多核处理器环境下,并发编程是提升应用性能和响应能力的关键。Java提供了强大的并发支持,但理解其底层机制是写出安全高效并发代码的前提。 线程的生命周期与管理: 本部分将详细介绍Java线程的各个生命周期状态(新建、就绪、运行、阻塞、终止),以及线程之间的状态转换。我们将讲解如何创建和管理线程,包括Thread类、Runnable接口、线程池的使用。特别会深入探讨线程的同步机制,如synchronized关键字、wait()、notify()、notifyAll()方法,理解它们在线程协作中的作用。 Java内存模型(JMM): JMM定义了Java虚拟机中数据共享的规则,是理解并发编程的基础。本部分将详细阐述JMM的六条指令,以及它如何规范了多线程环境下的可见性、原子性和有序性问题。我们将深入讲解happens-before原则,它是判断Java程序顺序执行的依据,也是确保并发程序正确性的关键。 并发工具类与并发集合: Java的`java.util.concurrent`包提供了丰富的并发工具类,极大地简化了并发编程的难度。本部分将详细介绍AQS(AbstractQueuedSynchronizer)框架,它是许多高并发同步工具(如ReentrantLock、Semaphore、CountDownLatch)的基础。我们将深入讲解各种并发锁(公平锁、非公平锁、重入锁、读写锁),以及CountDownLatch、CyclicBarrier、Semaphore、Phaser等同步器在多线程协作场景下的应用。同时,也会介绍ConcurrentHashMap、CopyOnWriteArrayList等并发集合类,理解它们如何解决多线程访问集合类时的线程安全问题。 线程安全与死锁、活锁: 编写线程安全的程序是并发编程的核心挑战。本部分将系统地讲解线程安全的设计原则,包括互斥、同步、不可变性等。我们将深入分析死锁产生的条件、检测方法和避免策略,并提供实际的死锁案例和解决方案。此外,也会探讨活锁、饥饿等并发问题,帮助读者全面理解并发程序中的潜在风险。 CompletableFuture与响应式编程: 随着异步和响应式编程的兴起,CompletableFuture为Java的异步编程提供了一种声明式、流畅的方式。本部分将详细介绍CompletableFuture的创建、组合、转换和异常处理,以及它如何帮助我们构建非阻塞、高吞吐量的应用程序。我们将探讨CompletableFuture在现代微服务架构和响应式应用开发中的优势。 第三部分:Java高级特性与设计模式 Java语言不断发展,引入了许多强大的高级特性,极大地提升了开发效率和代码质量。结合经典的设计模式,能够帮助开发者构建更具可维护性、可扩展性的系统。 Lambda表达式与函数式接口: Lambda表达式是Java 8引入的革命性特性,它极大地简化了代码编写,并为函数式编程奠定了基础。本部分将详细讲解Lambda表达式的语法、使用场景,以及函数式接口的概念。我们将演示如何利用Lambda表达式来简化集合操作、事件处理等,并探索Stream API的强大功能。 Stream API与并行流: Stream API提供了一种声明式、函数式的处理数据集合的方式。本部分将深入讲解Stream API的中间操作(如filter, map, sorted)和终端操作(如forEach, collect, reduce),以及它们如何实现高效的数据处理。我们将重点介绍并行流的概念,以及如何利用多核处理器来加速数据处理。 Optional类: Optional类是Java 8引入的另一个重要特性,它旨在解决NullPointerException问题,并提供一种更安全、更具表达力的方式来处理可能为空的值。本部分将详细讲解Optional的创建、获取、转换和组合,以及它如何帮助开发者编写更健壮的代码。 注解(Annotation)与反射(Reflection): 注解提供了一种元数据的方式,可以在代码中嵌入额外的信息。反射机制允许程序在运行时检查、修改其自身的结构。本部分将深入讲解Java内置注解和自定义注解的创建与使用,以及反射在动态代理、框架开发等领域的应用。我们将探讨注解处理器如何实现代码生成和编译时检查。 设计模式精讲: 本部分将精选并深入讲解一些在Java开发中至关重要的设计模式,包括但不限于: 创建型模式: 工厂方法、抽象工厂、单例模式、建造者模式。 结构型模式: 适配器模式、装饰器模式、代理模式、外观模式。 行为型模式: 策略模式、观察者模式、模板方法模式、责任链模式。 我们将结合Java语言的特性,深入剖析每个模式的意图、优缺点、适用场景,并提供清晰的代码示例,帮助读者理解如何在实际项目中有效地运用设计模式来提升代码质量和系统架构。 第四部分:Java性能优化与最佳实践 成为一名优秀的Java开发者,不仅在于理解语言本身,更在于能够写出高效、可维护的代码,并具备解决实际问题的能力。 代码性能分析与优化技巧: 本部分将回归到代码层面,讲解如何通过代码审查、性能分析工具(如Profiler)来发现代码中的性能瓶颈。我们将分享一系列实用的代码优化技巧,包括选择合适的数据结构、优化循环、减少对象创建、避免不必要的计算等。 异常处理的最佳实践: 健壮的异常处理是保证程序稳定运行的关键。本部分将深入探讨Java的异常体系,讲解Checked Exception和Unchecked Exception的区别,以及何时应该捕获、抛出或重新抛出异常。我们将提供异常处理的最佳实践,指导读者如何编写清晰、有意义的异常信息,以及如何设计合理的异常处理策略。 字符串处理的性能考量: 字符串是Java中最常用的数据类型之一。本部分将深入分析String、StringBuilder和StringBuffer的性能差异,以及在不同场景下的使用建议。我们将讲解字符串常量池的工作原理,以及如何通过优化字符串操作来提升程序性能。 Java 8+新特性在实践中的应用: 除了Lambda和Stream,Java 8及以后版本还引入了许多其他重要的新特性,如模块化(Project Jigsaw)、新的日期时间API、VarHandle等。本部分将介绍这些新特性,并探讨它们在实际开发中的应用价值,以及如何利用它们来改进代码。 高质量Java代码的构建: 本部分将总结并提炼出构建高质量Java代码的通用原则和最佳实践,包括命名规范、代码可读性、注释的重要性、单元测试的价值、代码重构的策略等。我们将强调“健壮性、可读性、可维护性、可扩展性”是衡量代码质量的四大基石。 结语 《深入理解Java:从原理到实践》是一段探索Java语言深邃之处的旅程。我们相信,通过对JVM、并发、高级特性和设计模式的深入剖析,以及对性能优化和最佳实践的探讨,您将能够建立起对Java语言更加全面、深刻的理解。这不仅仅是知识的积累,更是能力的飞跃。愿本书成为您在Java技术道路上,迈向更高层次的有力支撑。 让我们一起,用深入的理解,去创造卓越的软件。