Java SE8 程式設計(第3版)英文版

Java SE8 程式設計(第3版)英文版

《Java SE8 程式設計(第3版)英文版》是2016年4月電子工業出版社出版的圖書,作者是【美】Paul Deitel(保羅·戴特爾), Harvey Deitel(哈維·戴特爾)。

內容簡介

《Java SE8 程式設計(第3版)英文版》沿用了Deitel特色的“程式實況解說”,深入探討了Java程式語言和JavaAPI。通過完整的語法著色、代碼高亮、逐行代碼的演練和程式輸出,全面地介紹了測試程式的概念。《Java SE8 程式設計(第3版)英文版》中首先介紹了使用早期Java類和對象的方法,然後迅速轉移到更高級的主題,包括GUI、圖形、異常處理、Lambda表達式、數據流、功能接口、對象序列化、並發性、泛型、泛型集合、JDBC等。《Java SE8 程式設計(第3版)英文版》包含數百個完整的Java可運行示例、數千行成熟的Java代碼,總結出許多程式開發技巧,幫助你建立強大的應用程式。

《Java SE8 程式設計(第3版)英文版》適合具有一定高級語言編程背景的程式設計師閱讀。

《Java SE8 程式設計(第3版)英文版》沿用了Deitel特色的“程式實況解說”,深入探討了Java程式語言和JavaAPI。通過完整的語法著色、代碼高亮、逐行代碼的演練和程式輸出,全面地介紹了測試程式的概念。《Java SE8 程式設計(第3版)英文版》中首先介紹了使用早期Java類和對象的方法,然後迅速轉移到更高級的主題,包括GUI、圖形、異常處理、Lambda表達式、數據流、功能接口、對象序列化、並發性、泛型、泛型集合、JDBC等。《Java SE8 程式設計(第3版)英文版》包含數百個完整的Java可運行示例、數千行成熟的Java代碼,總結出許多程式開發技巧,幫助你建立強大的應用程式。

《Java SE8 程式設計(第3版)英文版》適合具有一定高級語言編程背景的程式設計師閱讀。

圖書目錄

1 Introduction to Java and Test-Driving a Java Application

1.1 Introduction

1.2 Object Technology Concepts

1.2.1 The Automobile as an Object

1.2.2 Methods and Classes

1.2.3 Instantiation

1.2.4 Reuse

1.2.5 Messages and Method Calls

1.2.6 Attributes and Instance Variables

1.2.7 Encapsulation and Information Hiding

1.2.8 Inheritance

1.2.9 Interfaces

1.2.10 Object-Oriented Analysis and Design (OOAD)

1.2.11 The UML (Unified Modeling Language)

1.3 Open Source Software

1.4 Java

1.5 A Typical Java Development Environment

1.6 Test-Driving a Java Application

1.7 Software Technologies

1.8 Keeping Up-to-Date with Information Technologies

2 Introduction to Java Applications; Input/Output and Operators

2.1 Introduction

2.2 Your First Program in Java: Printing a Line of Text

2.3 Modifying Your First Java Program

2.4 Displaying Text with printf

2.5 Another Application: Adding Integers

2.6 Arithmetic

2.7 Decision Making: Equality and Relational Operators

2.8 Wrap-Up

3 Introduction to Classes, Objects, Methods and Strings

3.1 Introduction

3.2 Instance Variables, set Methods and get Methods

3.2.1 Account Class with an Instance Variable, a set Method and a get Method

3.2.2 AccountTest Class That Creates and Uses an Object of Class Account

3.2.3 Compiling and Executing an App with Multiple Classes

3.2.4 Account UML Class Diagram with an Instance Variable and set and get Methods

3.2.5 Additional Notes on Class AccountTest

3.2.6 Software Engineering with private Instance Variables and public set and get Methods

3.3 Primitive Types vs. Reference Types

3.4 Account Class: Initializing Objects with Constructors

3.4.1 Declaring an Account Constructor for Custom Object Initialization

3.4.2 Class AccountTest : Initializing Account Objects When They’re Created

3.5 Account Class with a Balance; Floating-Point Numbers

3.5.1 Account Class with a balance Instance Variable of Type double

3.5.2 AccountTest Class to Use Class Account

3.6 Wrap-Up

4 Control Statements: Part 1; Assignment, ++ and -- Operators

4.1 Introduction

4.2 Control Structures

4.3 if Single-Selection Statement

4.4 if … else Double-Selection Statement

4.5 Student Class: Nested if … else Statements

4.6 while Repetition Statement

4.7 Counter-Controlled Repetition

4.8 Sentinel-Controlled Repetition

4.9 Nested Control Statements

4.10 Compound Assignment Operators

4.11 Increment and Decrement Operators

4.12 Primitive Types

4.13 Wrap-Up

5 Control Statements: Part 2; Logical Operators

5.1 Introduction

5.2 Essentials of Counter-Controlled Repetition

5.3 for Repetition Statement

5.4 Examples Using the for Statement

5.5 do … while Repetition Statement

5.6 switch Multiple-Selection Statement

5.7 Class AutoPolicy Case Study: String s in switch Statements

5.8 break and continue Statements

5.9 Logical Operators

5.10 Wrap-Up

6 Methods: A Deeper Look

6.1 Introduction

6.2 Program Modules in Java

6.3 static Methods, static Fields and Class Math

6.4 Declaring Methods with Multiple Parameters

6.5 Notes on Declaring and Using Methods

6.6 Argument Promotion and Casting

6.7 Java API Packages

6.8 Case Study: Secure Random-Number Generation

6.9 Case Study: A Game of Chance; Introducing enum Types

6.10 Scope of Declarations

6.11 Method Overloading

6.12 Wrap-Up

7 Arrays and ArrayLists

7.1 Introduction

7.2 Arrays

7.3 Declaring and Creating Arrays

7.4 Examples Using Arrays

7.4.1 Creating and Initializing an Array

7.4.2 Using an Array Initializer

7.4.3 Calculating the Values to Store in an Array

7.4.4 Summing the Elements of an Array

7.4.5 Using Bar Charts to Display Array Data Graphically

7.4.6 Using the Elements of an Array as Counters

7.4.7 Using Arrays to Analyze Survey Results

7.5 Exception Handling: Processing the Incorrect Response

7.5.1 The try Statement

7.5.2 Executing the catch Block

7.5.3 toString Method of the Exception Parameter

7.6 Case Study: Card Shuffling and Dealing Simulation

7.7 Enhanced for Statement

7.8 Passing Arrays to Methods

7.9 Pass-By-Value vs. Pass-By-Reference

7.10 Case Study: Class GradeBook Using an Array to Store Grades

7.11 Multidimensional Arrays

7.12 Case Study: Class GradeBook Using a Two-Dimensional Array

7.13 Variable-Length Argument Lists

7.14 Using Command-Line Arguments

7.15 Class Arrays

7.16 Introduction to Collections and Class ArrayList

7.17 Wrap-Up

8 Classes and Objects: A Deeper Look

8.1 Introduction

8.2 Time Class Case Study

8.3 Controlling Access to Members

8.4 Referring to the Current Object’s Members with the this Reference

8.5 Time Class Case Study: Overloaded Constructors

8.6 Default and No-Argument Constructors

8.7 Notes on Set and Get Methods

8.8 Composition

8.9 enum Types

8.10 Garbage Collection

8.11 static Class Members

8.12 static Import

8.13 final Instance Variables

8.14 Time Class Case Study: Creating Packages

8.15 Package Access

8.16 Using BigDecimal for Precise Monetary Calculations

8.17 Wrap-Up

9 Object-Oriented Programming: Inheritance

9.1 Introduction

9.2 Superclasses and Subclasses

9.3 protected Members

9.4 Relationship Between Superclasses and Subclasses

9.4.1 Creating and Using a CommissionEmployee Class

9.4.2 Creating and Using a BasePlusCommissionEmployee Class

9.4.3 Creating a CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy

9.4.4 CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy Using protected Instance Variables

9.4.5 CommissionEmployee – BasePlusCommissionEmployee Inheritance Hierarchy Using private Instance Variables

9.5 Constructors in Subclasses

9.6 Class Object

9.7 Wrap-Up

10 Object-Oriented Programming: Polymorphism and Interfaces

10.1 Introduction

10.2 Polymorphism Examples

10.3 Demonstrating Polymorphic Behavior

10.4 Abstract Classes and Methods

10.5 Case Study: Payroll System Using Polymorphism

10.5.1 Abstract Superclass Employee

10.5.2 Concrete Subclass SalariedEmployee

10.5.3 Concrete Subclass HourlyEmployee

10.5.4 Concrete Subclass CommissionEmployee

10.5.5 Indirect Concrete Subclass BasePlusCommissionEmployee

10.5.6 Polymorphic Processing, Operator instanceof and Downcasting

10.6 Allowed Assignments Between Superclass and Subclass Variables

10.7 final Methods and Classes

10.8 A Deeper Explanation of Issues with Calling Methods from Constructors

10.9 Creating and Using Interfaces

10.9.1 Developing a Payable Hierarchy

10.9.2 Interface Payable

10.9.3 Class Invoice

10.9.4 Modifying Class Employee to Implement Interface Payable

10.9.5 Modifying Class SalariedEmployee for Use in the Payable Hierarchy

10.9.6 Using Interface Payable to Process Invoice s and Employees Polymorphically

10.9.7 Some Common Interfaces of the Java API

10.10 Java SE 8 Interface Enhancements

10.10.1 default Interface Methods

10.10.2 static Interface Methods

10.10.3 Functional Interfaces

10.11 Wrap-Up

11 Exception Handling: A Deeper Look

11.1 Introduction

11.2 Example: Divide by Zero without Exception Handling

11.3 Exception Handling: ArithmeticExceptions and InputMismatchExceptions

11.4 When to Use Exception Handling

11.5 Java Exception Hierarchy

11.6 finally Block

11.7 Stack Unwinding and Obtaining Information from an Exception Object 322

11.8 Chained Exceptions

11.9 Declaring New Exception Types

11.10 Preconditions and Postconditions

11.11 Assertions

11.12 try -with-Resources: Automatic Resource Deallocation

11.13 Wrap-Up

12 Swing GUI Components: Part

12.1 Introduction

12.2 Java’s Nimbus Look-and-Feel

12.3 Simple GUI-Based Input/Output with JOptionPane

12.4 Overview of Swing Components

12.5 Displaying Text and Images in a Window

12.6 Text Fields and an Introduction to Event Handling with Nested Classes

12.7 Common GUI Event Types and Listener Interfaces

12.8 How Event Handling Works

12.9 JButton

12.10 Buttons That Maintain State

12.10.1 JCheckBox

12.10.2 JRadioButton

12.11 JComboBox ; Using an Anonymous Inner Class for Event Handling

12.12 JList

12.13 Multiple-Selection Lists

12.14 Mouse Event Handling

12.15 Adapter Classes

12.16 JPanel Subclass for Drawing with the Mouse

12.17 Key Event Handling

12.18 Introduction to Layout Managers

12.18.1 FlowLayout

12.18.2 BorderLayout

12.18.3 GridLayout

12.19 Using Panels to Manage More Complex Layouts

12.20 JTextArea

12.21 Wrap-Up

13 Graphics and Java 2D

13.1 Introduction

13.2 Graphics Contexts and Graphics Objects

13.3 Color Control

13.4 Manipulating Fonts

13.5 Drawing Lines, Rectangles and Ovals

13.6 Drawing Arcs

13.7 Drawing Polygons and Polylines

13.8 Java 2D API

13.9 Wrap-Up

14 Strings, Characters and Regular Expressions

14.1 Introduction

14.2 Fundamentals of Characters and Strings

14.3 Class String

14.3.1 String Constructors

14.3.2 String Methods length , charAt and getChars

14.3.3 Comparing Strings

14.3.4 Locating Characters and Substrings in Strings

14.3.5 Extracting Substrings from Strings

14.3.6 Concatenating Strings

14.3.7 Miscellaneous String Methods

14.3.8 String Method valueOf

14.4 Class StringBuilder

14.4.1 StringBuilder Constructors

14.4.2 StringBuilder Methods length , capacity , setLength and ensureCapacity

14.4.3 StringBuilder Methods charAt , setCharAt , getChars and reverse

14.4.4 StringBuilder append Methods

14.4.5 StringBuilder Insertion and Deletion Methods

14.5 Class Character

14.6 Tokenizing String s

14.7 Regular Expressions, Class Pattern and Class Matcher

14.8 Wrap-Up

15 Files, Streams and Object Serialization

15.1 Introduction

15.2 Files and Streams

15.3 Using NIO Classes and Interfaces to Get File and Directory Information

15.4 Sequential-Access Text Files

15.4.1 Creating a Sequential-Access Text File

15.4.2 Reading Data from a Sequential-Access Text File

15.4.3 Case Study: A Credit-Inquiry Program

15.4.4 Updating Sequential-Access Files

15.5 Object Serialization

15.5.1 Creating a Sequential-Access File Using Object Serialization

15.5.2 Reading and Deserializing Data from a Sequential-Access File

15.6 Opening Files with JFileChooser

15.7 (Optional) Additional java.io Classes

15.7.1 Interfaces and Classes for Byte-Based Input and Output

15.7.2 Interfaces and Classes for Character-Based Input and Output

15.8 Wrap-Up

16 Generic Collections

16.1 Introduction

16.2 Collections Overview

16.3 Type-Wrapper Classes

16.4 Autoboxing and Auto-Unboxing

16.5 Interface Collection and Class Collections

16.6 Lists

16.6.1 ArrayList and Iterator

16.6.2 LinkedList

16.7 Collections Methods

16.7.1 Method sort

16.7.2 Method shuffle

16.7.3 Methods reverse , fill , copy , max and min

16.7.4 Method binarySearch

16.7.5 Methods addAll , frequency and disjoint

16.8 Stack Class of Package java.util

16.9 Class PriorityQueue and Interface Queue

16.10 Sets

16.11 Maps

16.12 Properties Class

16.13 Synchronized Collections

16.14 Unmodifiable Collections

16.15 Abstract Implementations

16.16 Wrap-Up

17 Java SE 8 Lambdas and Streams

17.1 Introduction

17.2 Functional Programming Technologies Overview

17.2.1 Functional Interfaces

17.2.2 Lambda Expressions

17.2.3 Streams

17.3 IntStream Operations

17.3.1 Creating an IntStream and Displaying Its Values with the forEach Terminal Operation

17.3.2 Terminal Operations count , min , max , sum and average

17.3.3 Terminal Operation reduce

17.3.4 Intermediate Operations: Filtering and Sorting IntStream Values

17.3.5 Intermediate Operation: Mapping

17.3.6 Creating Streams of int s with IntStream Methods range and rangeClosed

17.4 Stream<Integer> Manipulations

17.4.1 Creating a Stream<Integer>

17.4.2 Sorting a Stream and Collecting the Results

17.4.3 Filtering a Stream and Storing the Results for Later Use

17.4.4 Filtering and Sorting a Stream and Collecting the Results

17.4.5 Sorting Previously Collected Results

17.5 Stream<String> Manipulations

17.5.1 Mapping String s to Uppercase Using a Method Reference

17.5.2 Filtering String s Then Sorting Them in Case-Insensitive Ascending Order

17.5.3 Filtering String s Then Sorting Them in Case-Insensitive Descending Order

17.6 Stream<Employee> Manipulations

17.6.1 Creating and Displaying a List<Employee>

17.6.2 Filtering Employee s with Salaries in a Specified Range

17.6.3 Sorting Employee s By Multiple Fields

17.6.4 Mapping Employee s to Unique Last Name String s

17.6.5 Grouping Employee s By Department

17.6.6 Counting the Number of Employee s in Each Department

17.6.7 Summing and Averaging Employee Salaries

17.7 Creating a Stream<String> from a File

17.8 Generating Streams of Random Values

17.9 Lambda Event Handlers

17.10 Additional Notes on Java SE 8 Interfaces

17.11 Java SE 8 and Functional Programming Resources

17.12 Wrap-Up

18 Generic Classes and Methods

18.1 Introduction

18.2 Motivation for Generic Methods

18.3 Generic Methods: Implementation and Compile-Time Translation

18.4 Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type

18.5 Overloading Generic Methods

18.6 Generic Classes

18.7 Raw Types

18.8 Wildcards in Methods That Accept Type Parameters

18.9 Wrap-Up

19 Swing GUI Components: Part

19.1 Introduction

19.2 JSlider

19.3 Understanding Windows in Java

19.4 Using Menus with Frames

19.5 JPopupMenu

19.6 Pluggable Look-and-Feel

19.7 JDesktopPane and JInternalFrame

19.8 JTabbedPane

19.9 BoxLayout Layout Manager

19.10 GridBagLayout Layout Manager

19.11 Wrap-Up

20 Concurrency

20.1 Introduction

20.2 Thread States and Life Cycle

20.2.1 New and Runnable States

20.2.2 Waiting State

20.2.3 Timed Waiting State

20.2.4 Blocked State

20.2.5 Terminated State

20.2.6 Operating-System View of the Runnable State

20.2.7 Thread Priorities and Thread Scheduling

20.2.8 Indefinite Postponement and Deadlock

20.3 Creating and Executing Threads with the Executor Framework

20.4 Thread Synchronization

20.4.1 Immutable Data

20.4.2 Monitors

20.4.3 Unsynchronized Mutable Data Sharing

20.4.4 Synchronized Mutable Data Sharing—Making Operations Atomic

20.5 Producer/Consumer Relationship without Synchronization

20.6 Producer/Consumer Relationship: ArrayBlockingQueue

20.7 (Advanced) Producer/Consumer Relationship with synchronized , wait , notify and notifyAll

20.8 (Advanced) Producer/Consumer Relationship: Bounded Buffers

20.9 (Advanced) Producer/Consumer Relationship: The Lock and Condition Interfaces

20.10 Concurrent Collections

20.11 Multithreading with GUI: SwingWorker

20.11.1 Performing Computations in a Worker Thread: Fibonacci Numbers

20.11.2 Processing Intermediate Results: Sieve of Eratosthenes

20.12 sort / parallelSort Timings with the Java SE 8 Date/Time API

20.13 Java SE 8: Sequential vs. Parallel Streams

20.14 (Advanced) Interfaces Callable and Future

20.15 (Advanced) Fork/Join Framework

20.16 Wrap-Up

21 Accessing Databases with JDBC

21.1 Introduction

21.2 Relational Databases

21.3 A books Database

21.4 SQL

21.4.1 Basic SELECT Query

21.4.2 WHERE Clause

21.4.3 ORDER BY Clause

21.4.4 Merging Data from Multiple Tables: INNER JOIN

21.4.5 INSERT Statement

21.4.6 UPDATE Statement

21.4.7 DELETE Statement

21.5 Setting up a Java DB Database

21.5.1 Creating the Chapter’s Databases on Windows

21.5.2 Creating the Chapter’s Databases on Mac OS X

21.5.3 Creating the Chapter’s Databases on Linux

21.6 Manipulating Databases with JDBC

21.6.1 Connecting to and Querying a Database

21.6.2 Querying the books Database

21.7 RowSet Interface

21.8 PreparedStatement s

21.9 Stored Procedures

21.10 Transaction Processing

21.11 Wrap-Up

22 JavaFX GUI

22.1 Introduction

22.2 JavaFX Scene Builder and the NetBeans IDE

22.3 JavaFX App Window Structure

22.4 Welcome App—Displaying Text and an Image

22.4.1 Creating the App’s Project

22.4.2 NetBeans Projects Window—Viewing the Project Contents

22.4.3 Adding an Image to the Project

22.4.4 Opening JavaFX Scene Builder from NetBeans

22.4.5 Changing to a VBox Layout Container

22.4.6 Configuring the VBox Layout Container

22.4.7 Adding and Configuring a Label

22.4.8 Adding and Configuring an ImageView

22.4.9 Running the Welcome App

22.5 Tip Calculator App—Introduction to Event Handling

22.5.1 Test-Driving the Tip Calculator App

22.5.2 Technologies Overview

22.5.3 Building the App’s GUI

22.5.4 TipCalculator Class

22.5.5 TipCalculatorController Class

22.6 Wrap-Up

23 ATM Case Study, Part 1: Object-Oriented Design with the UML

23.1 Case Study Introduction

23.2 Examining the Requirements Document

23.3 Identifying the Classes in a Requirements Document

23.4 Identifying Class Attributes

23.5 Identifying Objects’ States and Activities

23.6 Identifying Class Operations

23.7 Indicating Collaboration Among Objects

23.8 Wrap-Up

24 ATM Case Study Part 2: Implementing an Object-Oriented Design

24.1 Introduction

24.2 Starting to Program the Classes of the ATM System

24.3 Incorporating Inheritance and Polymorphism into the ATM System

24.4 ATM Case Study Implementation

24.4.1 Class ATM

24.4.2 Class Screen

24.4.3 Class Keypad

24.4.4 Class CashDispenser

24.4.5 Class DepositSlot

24.4.6 Class Account

24.4.7 Class BankDatabase

24.4.8 Class Transaction

24.4.9 Class BalanceInquiry

24.4.10 Class Withdrawal

24.4.11 Class Deposit

24.4.12 Class ATMCaseStudy

24.5 Wrap-Up

A Operator Precedence Chart

B ASCII Character Set

C Keywords and Reserved Words

D Primitive Types

E Using the Debugger

E.1 Introduction

E.2 Breakpoints and the run , stop , cont and print Commands

E.3 The print and set Commands

E.4 Controlling Execution Using the step , step up and next Commands

E.5 The watch Command

E.6 The clear Command

E.7 Wrap-Up

F Using the Java API Documentation

F.1 Introduction

F.2 Navigating the Java API

G Creating Documentation with javadoc

G.1 Introduction

G.2 Documentation Comments

G.3 Documenting Java Source Code

G.4 javadoc

G.5 Files Produced by javadoc

H Unicode®

H.1 Introduction

H.2 Unicode Transformation Formats

H.3 Characters and Glyphs

H.4 Advantages/Disadvantages of Unicode

H.5 Using Unicode

H.6 Character Ranges

I Formatted Output

I.1 Introduction

I.2 Streams

I.3 Formatting Output with printf

I.4 Printing Integers

I.5 Printing Floating-Point Numbers

I.6 Printing Strings and Characters

I.7 Printing Dates and Times

I.8 Other Conversion Characters

I.9 Printing with Field Widths and Precisions

I.10 Using Flags in the printf Format String

I.11 Printing with Argument Indices

I.12 Printing Literals and Escape Sequences

I.13 Formatting Output with Class Formatter

I.14 Wrap-Up

J Number Systems

J.1 Introduction

J.2 Abbreviating Binary Numbers as Octal and Hexadecimal Numbers

J.3 Converting Octal and Hexadecimal Numbers to Binary Numbers

J.4 Converting from Binary, Octal or Hexadecimal to Decimal

J.5 Converting from Decimal to Binary, Octal or Hexadecimal

J.6 Negative Binary Numbers: Two’s Complement Notation

K Bit Manipulation

K.1 Introduction

K.2 Bit Manipulation and the Bitwise Operators

K.3 BitSet Class

L Labeled break and continue Statements

L.1 Introduction

L.2 Labeled break Statement

L.3 Labeled continue Statement

M UML 2: Additional Diagram Types

M.1 Introduction

M.2 Additional Diagram Types

N Design Patterns

N.1 Introduction

N.2 Creational, Structural and Behavioral Design Patterns

N.2.1 Creational Design Patterns

N.2.2 Structural Design Patterns

N.2.3 Behavioral Design Patterns

N.2.4 Conclusion

N.3 Design Patterns in Packages java.awt and javax.swing

N.3.1 Creational Design Patterns

N.3.2 Structural Design Patterns

N.3.3 Behavioral Design Patterns

N.3.4 Conclusion

N.4 Concurrency Design Patterns

N.5 Design Patterns Used in Packages java.io and java.net

N.5.1 Creational Design Patterns

N.5.2 Structural Design Patterns

N.5.3 Architectural Patterns

N.5.4 Conclusion

N.6 Design Patterns Used in Package java.util

N.6.1 Creational Design Patterns

N.6.2 Behavioral Design Patterns

N.7 Wrap-Up

Index

作者簡介

Paul Deitel,Deitel & Associates有限公司的CEO兼CTO,畢業於麻省理工學院,主修信息技術。他獲得了Java認證程式設計師和Java認證開發員稱號,並且是一名Oracle Java冠軍程式設計師。在Deitel & Associate有限公司工作的過程中,他已經為世界各地的客戶提供了數百節編程課程,這些客戶包括思科、IBM、西門子、Sun Microsystems、戴爾、Fidelity、甘迺迪航天中心、美國國家強風暴實驗室、白沙飛彈試驗場、Rogue Wave Software、波音公司、SunGard Higher Education、北電網路公司、彪馬、iRobot、Invensys等。他和本書的合著者Harvey M. Deitel博士是全球暢銷程式語言教材、專業書籍和視頻的作者。

Harvey Deitel 博士,Deitel & Associates有限公司的董事長和首席戰略官,在計算機領域擁有50多年的經驗。Deitel博士獲得了麻省理工學院電子工程專業的學士和碩士學位,並獲得了波士頓大學的數學博士學位。他擁有豐富的大學教學經驗,在1991年與兒子Paul Deitel創辦Deitel & Associates有限公司之前,他是波士頓大學計算機科學系的主任並獲得了終身任職權。Deitel的出版物獲得了國際上的認可,並被翻譯為日語、德語、俄語、西班牙語、法語、波蘭語、義大利語、簡體中文、繁體中文、韓語、葡萄牙語、希臘語、烏爾都語和土耳其語出版。Deitel博士為很多大公司、學術研究機構、政府機關和軍方提供了數百場專業編程講座。

推薦序

從1995年Java 1.0版本發布以來我就一直迷戀它,這種迷戀讓我逐漸成為了Java開發人員、作家、演講者、老師和Oracle Java技術大使。在這個過程中,我一直很榮幸能將Paul Deitel稱為我的同事,並經常使用和推薦他的Java書籍。這些Java書籍的很多版次都被證明是學習專業課程不可或缺的教科書,所以我們一直使用它們來講授Java 程式語言。

我認為這本書是很好的資源,一方面是因為它徹底而深入地覆蓋了Java概念,另一方面是因為它對有效軟體開發進行了必不可少的概念和實踐的處理。

本書第3版最讓我感到興奮的一些特性如下:

·用一章專門介紹了Java Lambda表達式和流。首先簡單地介紹了函式式編程,接著介紹了Java Lambda表達式,以及如何使用流在集合上執行函式式編程任務。

·本書從第一版就開始處理並發問題,而多核架構的出現讓這個問題變得越來越重要。本書的並發性一章中包含一些定時示例(使用Java SE 8中引入的新日期/時間API類),這些示例表現出多核帶來的性能提升(相對於單核)。

·JavaFX是Java的GUI/圖形/多媒體技術的進一步發展,因此我很高興能夠看到Deitel以“程式實況解說”的教學方式來介紹JavaFX。

感謝Paul Deitel和Harvey Deitel的這本書為軟體開發人員提供了良好的資源。

James L. Weaver

Oracle公司Java技術大使

圖書前言

歡迎閱讀本書。本書將向軟體開發人員介紹最先進的計算技術。

我們專注於軟體工程的最佳實踐。本書沿用了Deitel特色的“程式實況解說”——用可以在Windows、Linux和OS X最新版本中運行的完整代碼(而不是代碼片段)來解釋相關概念。每個完整的代碼示例都伴隨著現場樣例執行。

編輯推薦

本書適合具有高級語言編程背景的程式設計師閱讀。本書的特色是具有以下模組化結構。

圖書目錄

·第1章 Java簡介和一個Java應用程式的測試驅動

·第2章 Java應用程式簡介、輸入/輸出和運算符

·第3章 類、對象、方法和字元串的簡介

其他編程基礎

·第4章 控制語句第一部分:賦值、++和--運算符

·第5章 控制語句第二部分:邏輯運算符

·第6章 方法:更深入的探討

·第7章 數組和ArrayList

·第14章 字元串、字元和正則表達式

·第15章 檔案、流和對象序列化

面向對象編程

·第8章 類和對象:更深入的探討

·第9章 面向對象編程:繼承

·第10章 面向對象編程:多態和接口

·第11章 異常處理:更深入的探討

Swing和JavaFX圖形用戶界面、Java2D圖形

·第12章 Swing GUI組件第一部分

·第13章 圖形、Java 2D

·第19章 Swing GUI組件第二部分

·第22章 JavaFX GUI

泛型集合、Lambdas和流

·第16章 泛型集合

·第17章 Java SE 8 Lambdas和流

·第18章 泛型類和方法

並發/資料庫

·第20章 並發

·第21章 使用JDBC訪問資料庫

面向對象設計

·第23章 ATM案例學習第一部分:使用UML的面向對象設計

·第24章 ATM案例學習第二部分:面向對象設計的實現

新特性

本書在前兩版基礎上所做的更新如下。

·在Java SE 7或者Java SE 8中都很容易使用。本書是隨著Java SE 8的發布一起出版的。為了滿足不同讀者的需求,我們為對Java SE 7、Java SE 8或者對兩者都感興趣的專業人員設計了本書。我們將在第17章介紹Java SE 8特性。

·Java SE 8 Lambdas、流、具有默認和靜態方法的接口。Java SE 8中最顯著的新特性是Lambdas和輔助技術。在第17章你將會看到,使用Lambdas和流的函式式編程可以幫助你更快速、更簡潔地編程。與以前的技術編寫程式相比,函式式編程的bug更少且更容易並行化(可以在多核系統上獲得性能提升)。你將會看到,函式式編程讓面向對象編程更具吸引力。

·Java SE 7的try-with-resources語句和AutoClosable接口。當你用自動關閉AutoClosable對象的try-with-resources語句使用這些對象時,它們會減少資源泄露的可能性。在本書中,我們使用try-with-resources和AutoClosable對象作為第15章的開頭。

·Java安全性。

要了解關於CERT的更多內容,請閱讀“Java安全編程”部分。

·Java NIO API。我們更新了第15章的檔案處理示例,以便使用Java NIO(新IO)API特性。

·Java文檔。我們在本書中提供了Java文檔的連結,你可以從這些文檔中了解更多關於我們介紹的各種主題的相關信息。

Swing和JavaFX GUI、Java 2D圖形

·Swing GUI和Java 2D圖形。我們會在第12章和第19章討論Java的Swing GUI。Swing目前處於維護模式——Oracle已經停止其開發,接下來只會提供bug修復,然而它仍然是Java的一部分,而且仍被廣泛使用。行業中大多數基於GUI的遺留代碼都是使用的Swing GUI。我們會在第13章討論Java 2D圖形。

·JavaFX GUI。JavaFX是Java的GUI、圖形和多媒體技術的進一步發展。在第12章我們用的是Java FX 2.2(Java SE 7),使用的是Scene Builder——一種快速方便地創建JavaFX GUI的拖放工具。它是一個獨立的工具,你既可以單獨使用它,也可以在Java IDE中使用它。

並發

·最佳多核性能的並發。我們非常有幸邀請《Java並發編程實戰》(Addison-Wesley)的合著者Brian Goetz作為我們的審稿人員。我們使用Java SE 8技術更新了第20章。我們增加了一個使用Java SE 8日期/時間API的parallelSort vs. sort示例,用於對每個操作計時並演示parallelSort在多核系統上的性能提高。我們還包含了使用時間/日期API的Java SE 8並行和序列流處理示例來顯示性能提升。最後,我們添加了一個Java SE 8 CompletableFuture示例,它比較了長時間計算的串列和並行執行的相對性能。

·SwingWorker類。我們使用SwingWorker類來創建多執行緒用戶界面。

·並發是一個挑戰。存在著多種並發特性。我們指出了大多數開發人員應該使用的特性,並提出了那些應該留給專家使用的特性。

獲取正確的貨幣金額

·貨幣金額。為了方便,我們在前面的章節中使用double類型來表示貨幣金額。由於double類型可能會導致錯誤的貨幣計算,因此我們使用更複雜的BigDecimal類來表示貨幣金額。我們會在第8章和第22章介紹BigDecimal類。

對象技術

·面向對象編程。我們使用早期的對象方法來回顧第1章中對象技術的基本概念和術語。讀者會在第3章開發第一個自定義類和對象。

·早期對象的真實案例研究。早期的類和對象表示主要由Account、Student、AutoPolicy、Time、Employee、GradeBook、洗牌和發牌的案例研究組成,並逐漸引入更深入的面向對象概念。

·繼承、接口、多態和組合。我們使用一系列真實的案例研究來說明這些面向對象概念,並解釋了要創建優質的應用程式首先應該選擇哪個概念。我們還會討論Java SE 8對接口概念的改進。

·異常處理。在本書的前幾章就包含了基本的異常處理,然後我們在第11章介紹了更深入的異常處理。異常處理對於創建“任務關鍵”和“業務關鍵”的應用程式來說非常重要。程式設計師需要關注的是:“當我調用用於完成工作的組件出現問題時會發生什麼?該組件如何表示它出現了問題?”要使用一個Java組件,你不僅需要知道該組件在“事情順利進展”時的行為,還要知道當“事情無法順利進展”時該組件會拋出哪種異常。

·Array和ArrayList類。第7章包含了Array類(其中包含用於執行常見數組操作的方法)和ArrayList類(它實現了動態分配數組的數據結構)。這符合在學習如何定義自己的類的同時,使用現有的類進行大量練習的理念。

·案例研究:開發一個ATM的面向對象設計和Java實現。第23章和第24章包含使用UML(Unified Modeling Language,統一建模語言;為面向對象系統建模的行業標準圖形化語言)來進行面向對象設計的案例研究。我們設計並實現了一個簡單的自動取款機(ATM)軟體。我們分析了一個指定如何構建系統的典型需求文檔,確定了實現該系統所需要的類,包括這些類需要擁有的屬性和這些類需要表現出的行為,並指定了這些類如何互動才能滿足系統需求。我們根據設計創建出一個完整的Java實現。我們的一些Java專業課程的參與者經常說這是讓他們頓悟的時刻——這個案例研究幫助他們將所有內容聯繫起來,並讓他們真正了解了基於Java的面向對象編程。

泛型集合

·泛型集合表示。我們從第7章的泛型類ArrayList開始介紹。而第16~18章提供了對泛型集合更深入的處理——顯示如何使用Java API的內置集合。我們介紹了如何實現泛型方法和類。而Lambdas表達式和流(第17章介紹)尤其適用於泛型集合。

資料庫

·JDBC。第21章涵蓋了JDBC,並使用了Java DB資料庫管理系統。本章介紹了結構化查詢語句(SQL),它主要由一個面向對象的案例研究組成,這個案例研究是開發一個由資料庫驅動的、用於說明預處理語句的通訊錄。

Java編程

人們很難創建出可以抵抗病毒、蠕蟲和其他惡意軟體攻擊的、具有工業強度的系統。如今,通過網際網路,這類攻擊瞬間就可以在全球範圍內造成影響。從開發周期的開始就將軟體安全性考慮進來,可以大大減少漏洞。我們在討論和代碼示例中包含了各種Java安全編碼實踐。

人們創建了CERT Coordination Center來分析和及時應對攻擊。CERT(Computer Emergency Response Team,計算機安全應急回響組)是一個由政府資助的組織,位於卡內基梅隆大學軟體工程研究所。CERT會發布和推廣各種流行程式語言的安全編碼標準,以幫助軟體開發人員實現具有工業強度的系統,從而避免會造成開放式系統受到攻擊的編程實踐。

我們要感謝Robert C. Seacord,他是CERT的安全編程管理員和卡內基梅隆大學計算機科學系的副教授。Seacord先生是我們C11 for Programmers一書的技術評審,他從安全形度審查了我們的C語言程式,並建議我們遵守CERT C語言安全編程標準。這方面的經驗還對我們在C++11 for Programmers和本書中使用的編碼實踐產生了影響。

教學方法

本書包含數百個完整的可運行示例。我們強調的是程式的清晰性,並專注於構建工程設計良好的軟體。

語法著色。為了增加可讀性,我們為代碼添加了語法陰影,這類似於大多數IDE和代碼編輯器給代碼的語法添加顏色。我們採用的語法著色約定是:

注釋用常規字型表示。

關鍵字用粗字型表示。

常量和字面值用比關鍵字稍淺一點的黑體字來表示。

所有的其他代碼用黑體表示。

代碼高亮顯示。在每個原始碼程式中,關鍵代碼段都被加了一個灰色的矩形框。

使用字型突出顯示。為了便於參考,我們用粗體表示每個定義性出現的關鍵概念和索引的頁面引用。我們用加粗的Helvetica字型強調螢幕組件(例如,File選單)、用Lucida字型強調Java程式文本(例如,int x = 5;)。

目標。每章都包含一個Objectives(本章目標)列表。

插圖/圖。本書包含了大量的圖表、線條圖、UML圖、程式和程式輸出。

編程技巧。我們提供了編程技巧來幫助你關注程式開發的重要方面。這些技巧和實踐是我們在7年的編程和企業培訓經驗中積累的精華。最佳編程實踐

最佳編程實踐讓讀者關注那些有助於編寫更清晰、更易理解和維護的程式的技術。

常見編程錯誤

指出這些常見的編程錯誤可以減少讀者犯類似錯誤的可能性。

錯誤預防技巧

這些技巧包括揭露和刪除程式中bug的建議;大多數技巧描述的是如何預防將bug帶入Java程式中。

性能技巧

這些技巧強調的是如何讓程式運行得更快或者儘量減少它們占用的記憶體。

可移植性技巧

可移植性技巧可以幫助你編寫能夠在各種平台上運行的代碼。

軟體工程意見

軟體工程意見強調的是影響軟體系統(尤其是大型系統)構建的架構和設計問題。

外觀觀察

外觀觀察強調的是圖形用戶界面的約定。這些觀察可以幫助你設計具有吸引力的、對用戶友好的、符合行業標準的用戶界面。

索引。我們包含了大量的索引。我們使用加粗的頁號強調關鍵術語的定義性出現。

相關軟體

本書中需要的所有軟體都可以免費從網際網路上下載。參見後面的“閱讀本書之前的準備”部分來獲取每個下載的連結。

本書的大部分示例代碼都是用免費的Java Standard Edition Development Kit (JDK) 7編寫的。對於Java SE 8模組,我們使用的是OpenJDK的JDK 8早期試用版本。我們在第22章還使用了Netbeans IDE。要了解更多信息,請參見後面的“閱讀本書之前的準備”部分。

Java基礎:LiveLessons視頻培訓產品第二版的第I部分、第II部分、第III部分和第IV部分

我們的“Java基礎:LiveLessons視頻培訓產品第二版的第I部分、第II部分、第III部分和第IV部分”(2014年夏季)介紹了當你開始使用Java構建健壯且強大的軟體時所需要知道的內容。它包含了三十多個小時的與本書同步的專家培訓視頻。

致謝

我們要感謝Deitel & Associates有限公司的Abbey Deitel和Barbara Deitel為這個項目投入了大量時間。Abbey參與撰寫了本書的第1章和這篇前言,她和Barbara仔細研究了Java SE 8的新功能。

我們有幸與Prentice Hall/Pearson的出版專家團隊共同完成該項目。我們要感謝培生科技出版集團的主編Mark L. Taub 19年來給我們的指導和為此付出的精力。我們要感謝Carole Snyder招募了優秀的Java社區成員來進行審稿,並出色地完成了管理審稿過程的工作;感謝Chuti Prasertsith為本書設計的封面;感謝John Fuller管理本書的出版工作。

審稿人員

我們要感謝審稿人員對我們新版本付出的努力——優秀的Oracle團隊成員、Oracle Java冠軍程式設計師、其他行業的專家和學者。他們完成了對本書文本和程式的審查,並為提高本書的表述方式提供了無數建議。

第3版本審稿人員:Lance Andersen(Oracle公司)、Danny Coward博士(Oracle公司)、Brian Goetz(Oracle公司)、Evan Golub(馬里蘭大學)、Huiwei Guan博士(北岸社區學院計算機信息科學系教授)、Manfred Riem(Java Champion)、Simon Ritter(Oracle公司)、Robert C. Seacord(CERT,卡內基梅隆大學的軟體工程研究所)、Khallai Taylor(特里頓學院助理教授、孤星學院客座教授)、Jorge Vargas(Java Champion)、Johan Vos(LodgON、Oracle Java Champion)和James L. Weaver(Oracle公司,Pro JavaFX 2一書的作者)。

新版本的其他審稿人員:Soundararajan Angusamy(Sun Microsystems公司)、Joseph Bowbeer(顧問)、William E. Duncan(路易斯安那州立大學)、Diana Franklin(加州大學聖塔芭芭拉分校)、Edward F. Gehringer(北卡羅萊納州立大學)、Ric Heishman(喬治梅森大學)、Heinz Kabutz博士(JavaSpecialists.eu)、Patty Kraft(聖地亞哥州立大學)、Lawrence Premkumar(Sun Microsystems公司)、Tim Margush(阿克倫大學)、Sue McFarland Metzger(維拉諾瓦大學)、Shyamal Mitra(德克薩斯大學奧斯汀分校)、Peter Pilgrim(顧問)、Manjeet Rege博士(羅徹斯特理工學院)、Susan Rodger(杜克大學)、Amr Sabry(印第安納大學)、José Antonio González Seco(西班牙安達盧西亞議會議員)、Sang Shin(Sun Microsystems公司)、S. Sivakumar(Astra Infotech Private Limited公司)、Raghavan “Rags” Srinivas(Intuit)、Monica Sweat(喬治亞理工學院)、Vinod Varma(Astra Infotech Private Limited公司)和Alexander Zuev(Sun Microsystems公司)。

相關詞條

熱門詞條

聯絡我們