Java: the comprehensive guide
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Buch |
Sprache: | English |
Veröffentlicht: |
Boston, MA
Rheinwerk
[2023]
|
Ausgabe: | 1st edition |
Schriftenreihe: | Rheinwerk computing
|
Schlagworte: | |
Online-Zugang: | Inhaltstext Inhaltsverzeichnis |
Beschreibung: | 1126 Seiten Illustrationen, Diagramme 25.4 cm x 17.8 cm |
ISBN: | 9781493222957 |
Internformat
MARC
LEADER | 00000nam a22000008c 4500 | ||
---|---|---|---|
001 | BV048861986 | ||
003 | DE-604 | ||
005 | 20240516 | ||
007 | t | ||
008 | 230315s2023 gw a||| |||| 00||| eng d | ||
015 | |a 22,N26 |2 dnb | ||
016 | 7 | |a 1260568296 |2 DE-101 | |
020 | |a 9781493222957 |c EUR 56.03 (DE), EUR 59.95 (DE) (freier Preis), EUR 61.70 (AT) (freier Preis), CHF 76.95 (freier Preis) |9 978-1-4932-2295-7 | ||
024 | 3 | |a 9781493222957 | |
028 | 5 | 2 | |a Bestellnummer: 459/22295 |
035 | |a (OCoLC)1376413937 | ||
035 | |a (DE-599)DNB1260568296 | ||
040 | |a DE-604 |b ger |e rda | ||
041 | 0 | |a eng | |
044 | |a gw |c XA-DE | ||
049 | |a DE-19 |a DE-29T |a DE-1102 |a DE-92 |a DE-573 | ||
084 | |a ST 250 |0 (DE-625)143626: |2 rvk | ||
084 | |8 1\p |a 004 |2 23sdnb | ||
100 | 1 | |a Ullenboom, Christian |e Verfasser |0 (DE-588)123404738 |4 aut | |
240 | 1 | 0 | |a Java ist auch eine Insel |
245 | 1 | 0 | |a Java |b the comprehensive guide |c Christian Ullenboom |
250 | |a 1st edition | ||
264 | 1 | |a Boston, MA |b Rheinwerk |c [2023] | |
300 | |a 1126 Seiten |b Illustrationen, Diagramme |c 25.4 cm x 17.8 cm | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
490 | 0 | |a Rheinwerk computing | |
650 | 0 | 7 | |a Java |g Programmiersprache |0 (DE-588)4401313-9 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Java Standard Edition 17 |0 (DE-588)1286419034 |2 gnd |9 rswk-swf |
653 | |a Computing Series | ||
689 | 0 | 0 | |a Java Standard Edition 17 |0 (DE-588)1286419034 |D s |
689 | 0 | 1 | |a Java |g Programmiersprache |0 (DE-588)4401313-9 |D s |
689 | 0 | |5 DE-604 | |
710 | 2 | |a Galileo Press Inc. |0 (DE-588)106510992X |4 pbl | |
856 | 4 | 2 | |m X:MVB |q text/html |u http://deposit.dnb.de/cgi-bin/dokserv?id=876285178bcc4a7486c864a5735f3b0f&prov=M&dok_var=1&dok_ext=htm |3 Inhaltstext |
856 | 4 | 2 | |m DNB Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=034127086&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
883 | 1 | |8 1\p |a vlb |d 20220622 |q DE-101 |u https://d-nb.info/provenance/plan#vlb |
Datensatz im Suchindex
_version_ | 1805071668806156288 |
---|---|
adam_text |
CONTENTS
AT
A
GLANCE
1
INTRODUCTION
.
43
2
IMPERATIVE
LANGUAGE
CONCEPTS
.
83
3
CLASSES
AND
OBJECTS
.
201
4
ARRAYS
AND
THEIR
AREAS
OF
USE
.
241
5
HANDLING
CHARACTERS
AND
STRINGS
.
287
6
WRITING
CUSTOM
CLASSES
.
369
7
OBJECT-ORIENTED
RELATIONSHIP
.
427
8
INTERFACES,
ENUMERATIONS,
SEALED
CLASSES,
RECORDS
.
483
9
THERE
MUST
BE
EXCEPTIONS
.
539
10
NESTED
TYPES
.
599
11
SPECIAL
TYPES
OF
JAVA
SE
.
615
12
GENERICS T
.
683
13
LAMBDA
EXPRESSIONS
AND
FUNCTIONAL
PROGRAMMING
.
731
14
ARCHITECTURE,
DESIGN,
AND
APPLIED
OBJECT
ORIENTATION
.
799
15
JAVA
PLATFORM
MODULE
SYSTEM
.
813
16
THE
CLASS
LIBRARY
.
835
17
INTRODUCTION
TO
CONCURRENT
PROGRAMMING
.
871
18
INTRODUCTION
TO
DATA
STRUCTURES
AND
ALGORITHMS
.
909
19
FILES
AND
DATA
STREAMS
.
969
20
INTRODUCTION
TO
DATABASE
MANAGEMENT
WITH
JDBC
.
1005
21
BITS
AND
BYTES,
MATHEMATICS
AND
MONEY
.
1011
22
TESTING
WITH
JUNIT
.
1067
23
THE
TOOLS
OF
THE
JDK
.
1091
CONTENTS
PREFACE
.
31
1
INTRODUCTION
43
1.1
HISTORICAL
BACKGROUND
.
43
1.2
ON
THE
POPULARITY
OF
JAVA:
THE
KEY
FEATURES
.
45
1.2.1
BYTECODE
.
46
1.2.2
EXECUTING
THE
BYTECODE
VIA
A
VIRTUAL
MACHINE
.
46
1.2.3
PLATFORM
INDEPENDENCE
.
46
1.2.4
JAVA
AS
A
LANGUAGE,
RUNTIME
ENVIRONMENT,
AND
STANDARD
LIBRARY
.
47
1.2.5
OBJECT
ORIENTATION
IN
JAVA
.
47
1.2.6
JAVA
IS
WIDESPREAD
AND
WELL
KNOWN
.
48
1.2.7
JAVA
IS
FAST:
OPTIMIZATION
AND
JUST-IN-TIME
COMPILATION
.
48
1.2.8
POINTERS
AND
REFERENCES
.
50
1.2.9
TAKE
OUT
THE
TRASH,
GARBAGE
COLLECTOR!
.
51
1.2.10
EXCEPTION
HANDLING
.
52
1.2.11
THE
RANGE
OF
LIBRARIES
AND
TOOLS
.
52
1.2.12
COMPARABLY
SIMPLE
SYNTAX
.
53
1.2.13
ABANDONING
CONTROVERSIAL
CONCEPTS
.
53
1.2.14
JAVA
IS
OPEN
SOURCE
.
54
1.2.15
WHAT
JAVA
IS
LESS
SUITABLE
FOR
.
55
13
JAVA
VERSUS
OTHER
LANGUAGES*
.
56
1.3.1
JAVA
AND
.
56
1.3.2
JAVA
AND
JAVASCRIPT
.
57
1.3.3
A
WORD
ABOUT
MICROSOFT,
JAVA,
AND
J++
.
57
1.3.4
JAVA
AND
.
58
1.4
FURTHER
DEVELOPMENT
AND
LOSSES
.
59
1.4.1
THE
DEVELOPMENT
OF
JAVA
AND
ITS
FUTURE
PROSPECTS
.
59
1.4.2
FEATURES,
ENHANCEMENTS,
AND
SPECIFICATION
REQUESTS
.
60
1.4.3
APPLETS
.
61
1.4.4
JAVAFX
.
61
1.5
JAVA
PLATFORMS
.
62
1.5.1
JAVA
PLATFORM,
STANDARD
EDITION
.
62
1.5.2
JAVA
PLATFORM,
MICRO
EDITION:
JAVA
FOR
THE
LITTLE
ONES
.
65
1.5.3
JAVA
FOR
THE
VERY,
VERY
LITTLE
ONES
.
65
1.5.4
JAVA
FOR
THE
BIG
ONES:
JAKARTA
EE
(FORMERLY
JAVA
PLATFORM,
ENTERPRISE
EDITION)
.
65
1.5.5
REAL-TIME
JAVA
.
66
CONTENTS
1.6
JAVA
PLATFORM,
STANDARD
EDITION,
IMPLEMENTATIONS
.
67
1.6.1
OPENJDK
.
67
1.6.2
ORACLE
JDK
.
68
1.7
INSTALLING
THE
JAVA
DEVELOPMENT
KIT
.
69
1.7.1
INSTALLING
ORACLE
JDK
ON
WINDOWS
.
70
1.8
COMPILING
AND
TESTING
THE
FIRST
PROGRAM
.
71
1.8.1
A
SQUARE
NUMBERS
PROGRAM
.
72
1.8.2
THE
COMPILER
RUN
.
73
1.8.3
THE
RUNTIME
ENVIRONMENT
.
74
1.8.4
COMMON
COMPILER
AND
INTERPRETER
ISSUES
.
74
1.9
DEVELOPMENT
ENVIRONMENTS
.
75
1.9.1
INTELLIJ
IDEA
.
76
1.9.2
ECLIPSE
INTEGRATED
DEVELOPMENT
ENVIRONMENT
.
80
1.9.3
NETBEANS
.
81
1.10
FURTHER
READING
.
81
2
IMPERATIVE
LANGUAGE
CONCEPTS
83
2.1
ELEMENTS
OF
THE
JAVA
PROGRAMMING
LANGUAGE
.
83
2.1.1
TOKENS
.
84
2.1.2
TEXT
ENCODING
BY
UNICODE
CHARACTERS
.
85
2.1.3
IDENTIFIERS
.
85
2.1.4
LITERALS
.
87
2.1.5
(RESERVED)
KEYWORDS
.
87
2.1.6
SUMMARY
OF
THE
LEXICAL
ANALYSIS
.
88
2.1.7
COMMENTS
.
89
2.2
FROM
CLASSES
TO
STATEMENTS
.
91
2.2.1
WHAT
ARE
STATEMENTS?
.
91
2.2.2
CLASS
DECLARATION
.
92
2.2.3
THE
JOURNEY
BEGINS
WITH
MAIN(STRING[])
.
93
2.2.4
THE
FIRST
METHOD
CALL:
PRINTLN(.)
.
93
2.2.5
ATOMIC
STATEMENTS
AND
STATEMENT
SEQUENCES
.
95
2.2.6
MORE
ABOUT
PRINT(.),
PRINTLN
(.),
AND
PRINTF(.)
FOR
SCREEN
OUTPUT
.
95
2.2.7
APPLICATION
PROGRAMMING
INTERFACE
DOCUMENTATION
.
97
2.2.8
EXPRESSIONS
.
98
2.2.9
EXPRESSION
STATEMENTS
.
98
2.2.10
FIRST
INSIGHTS
INTO
OBJECT
ORIENTATION
.
99
2.2.11
MODIFIERS
.
100
2.2.12
GROUPING
STATEMENTS
WITH
BLOCKS
.
101
2.3
DATA
TYPES,
TYPING,
VARIABLES,
AND
ASSIGNMENTS
.
102
2.3.1
OVERVIEW
OF
PRIMITIVE
DATA
TYPES
.
104
2.3.2
VARIABLE
DECLARATIONS
.
106
2.3.3
AUTOMATIC
TYPE
DETECTION
WITH
VAR
.
109
2.3.4
FINAL
VARIABLES
AND
THE
FINAL
MODIFIER
.
110
2.3.5
CONSOLE
INPUTS
.
110
2.3.6
TRUTH
VALUES
.
112
2.3.7
INTEGER
DATA
TYPES
.
112
2.3.8
UNDERSCORES
IN
NUMBERS
.
114
2.3.9
ALPHANUMERIC
CHARACTERS
.
115
2.3.10
THE
FLOAT
AND
DOUBLE
DATA
TYPES
.
115
2.3.11
GOOD
NAMES,
BAD
NAMES
.
117
2.3.12
NO
AUTOMATIC
INITIALIZATION
OF
LOCAL
VARIABLES
.
118
2.4
EXPRESSIONS,
OPERANDS,
AND
OPERATORS
.
119
2.4.1
ASSIGNMENT
OPERATOR
.
119
2.4.2
ARITHMETIC
OPERATORS
.
121
2.4.3
UNARY
MINUS
AND
PLUS
.
124
2.4.4
PREFIX
OR
POSTFIX
INCREMENT
AND
DECREMENT
.
124
2.4.5
ASSIGNMENT
WITH
OPERATION
(COMPOUND
ASSIGNMENT
OPERATOR)
.
126
2.4.6
RELATIONAL
OPERATORS
AND
EQUALITY
OPERATORS
.
128
2.4.7
LOGICAL
OPERATORS:
NOT,
AND,
OR,
AND
XOR
.
129
2.4.8
SHORT-CIRCUIT
OPERATORS
.
130
2.4.9
THE
RANK
OF
OPERATORS
IN
EVALUATION
ORDER
.
132
2.4.10
TYPECASTING
(CASTING)
.
135
2.4.11
OVERLOADED
PLUS
FOR
STRINGS
.
140
2.4.12
OPERATORS
MISSING*
.
141
2.5
CONDITIONAL
STATEMENTS
OR
CASE
DISTINCTIONS
.
142
2.5.1
BRANCHING
WITH
THE
IF
STATEMENT
.
142
2.5.2
CHOOSING
THE
ALTERNATIVE
WITH
AN
IF-ELSE
STATEMENT
.
145
2.5.3
THE
CONDITION
OPERATOR
.
148
2.5.4
THE
SWITCH
STATEMENT
PROVIDES
AN
ALTERNATIVE
.
151
2.5.5
SWITCH
EXPRESSIONS
.
157
2.6
ALWAYS
THE
SAME
WITH
LOOPS
.
160
2.6.1
THE
WHILE
LOOP
.
161
2.6.2
THE
DO-WHILE
LOOP
.
163
2.6.3
THE
FOR
LOOP
.
164
2.6.4
LOOP
CONDITIONS
AND
COMPARISONS
WITH
==
*
.
168
2.6.5
LOOP
TERMINATION
WITH
BREAK
AND
BACK
TO
TEST
WITH
CONTINUE
.
171
2.6.6
BREAK
AND
CONTINUE
WITH
LABELS*
.
174
2.7
METHODS
OF
A
CLASS
.
177
2.7.1
COMPONENTS
OF
A
METHOD
.
177
2,12
SIGNATURE
DESCRIPTION
IN
THE
JAVA
APPLICATION
PROGRAMMING
INTERFACE
DOCUMENTATION
.
179
2.7.3
CALLING
A
METHOD
.
180
2.7.4
DECLARING
METHODS
WITHOUT
PARAMETERS
.
181
2.7.5
STATIC
METHODS
(CLASS
METHODS)
.
182
2.7.6
PARAMETERS,
ARGUMENTS,
AND
VALUE
TRANSFERS
.
183
2.7.7
ENDING
METHODS
PREMATURELY
WITH
RETURN
.
185
2.7.8
UNREACHABLE
SOURCE
CODE
FOR
METHODS*
.
185
2.7.9
METHODS
WITH
RETURNS
.
186
2.7.10
OVERLOADING
METHODS
.
191
2.7.11
SCOPE
.
193
2.7.12
DEFAULT
VALUES
FOR
UNLISTED
ARGUMENTS*
.
195
2.7.13
RECURSIVE
METHODS*
.
195
2.7.14
TOWERS
OF
HANOI*
.
198
2.8
FURTHER
READING
.
200
3
CLASSES
AND
OBJECTS
201
3.1
OBJECT-ORIENTED
PROGRAMMING
.
201
3.1.1
WHY
OBJECT-ORIENTED
PROGRAMMING
AT
ALL?
.
202
3.1.2
WHEN
I
THINK
OF
JAVA,
I
THINK
OF
REUSABILITY
.
202
3.2
MEMBERS
OF
A
CLASS.
203
3.3
NATURAL
MODELING
USING
UNIFIED
MODELING
LANGUAGE*
.
204
3.4
CREATING
NEW
OBJECTS
.
206
3.4.1
CREATING
AN
INSTANCE
OF
A
CLASS
USING
THE
NEW
KEYWORD
.
206
3.4.2
DECLARING
REFERENCE
VARIABLES
.
207
3.4.3
LET
'
S
GET
TO
THE
POINT:
ACCESSING
OBJECT
VARIABLES
AND
METHODS
. 208
3.4.4
THE
CONNECTION
BETWEEN
NEW,
THE
HEAP,
AND
THE
GARBAGE
COLLECTOR
.
212
3.4.5
OVERVIEW
OF
POINT
METHODS
.
213
3.4.6
USING
CONSTRUCTORS
.
217
3.5
ZZZZZNAKE
.
218
3.6
TYING
PACKAGES,
IMPORTS,
AND
COMPILATION
UNITS
.
220
3.6.1
JAVA
PACKAGES
.
220
3.6.2
PACKAGES
IN
THE
STANDARD
LIBRARY
.
221
3.6.3
FULL
QUALIFICATION
AND
IMPORT
DECLARATION
.
221
3.6.4
REACHING
ALL
TYPES
OF
A
PACKAGE
WITH
TYPE-IMPORT-ON-DEMAND
.
223
3.6.5
HIERARCHICAL
STRUCTURES
ACROSS
PACKAGES
AND
MIRRORING
IN
THE
FILE
SYSTEM
.
224
3.6.6
THE
PACKAGE
DECLARATION
.
224
3.6.7
UNNAMED
PACKAGE
(DEFAULT
PACKAGE)
.
225
3.6.8
COMPILATION
UNIT
.
226
3.6.9
STATIC
IMPORT*
.
226
3.7
USING
REFERENCES,
DIVERSITY,
IDENTITY,
AND
EQUALITY
.
228
3.7.1
NULL
REFERENCES
AND
THE
QUESTION
OF
PHILOSOPHY
.
228
3.7.2
EVERYTHING
TO
NULL?
TESTING
REFERENCES
.
230
3.7.3
ASSIGNMENTS
WITH
REFERENCES
.
231
3.7.4
METHODS
WITH
REFERENCE
TYPES
AS
PARAMETERS
.
232
3.7.5
IDENTITY
OF
OBJECTS
.
236
3.7.6
EQUIVALENCE
AND
THE
EQUALS(.)
METHOD
.
237
3.8
FURTHER
READING
.
239
4
ARRAYS
AND
THEIR
AREAS
OF
USE
241
4.1
SIMPLE
FIELD
WORK
.
241
4.1.1
BASIC
COMPONENTS
.
242
4.1.2
DECLARING
ARRAY
VARIABLES
.
243
4.1.3
CREATING
ARRAY
OBJECTS
WITH
NEW
.
244
4.1.4 ARRAYS
WITH
{
CONTENTS
}
.
245
4.1.5
READING
THE
LENGTH
OF
AN
ARRAY
VIA
THE
OBJECT
VARIABLE
LENGTH
.
246
4.1.6
ACCESSING
THE
ELEMENTS
VIA
THE
INDEX
.
246
4.1.7
TYPICAL
ARRAY
ERRORS
.
248
4.1.8
PASSING
ARRAYS
TO
METHODS
.
250
4.1.9
MULTIPLE
RETURN
VALUES*
.
250
4.1.10
PREINITIALIZED
ARRAYS
.
251
4.2
THE
EXTENDED
FOR
LOOP
.
252
4.2.1
USING
ANONYMOUS
ARRAYS
IN
THE
EXTENDED
FOR
LOOP
.
253
4.2.2
EXAMPLE:
SEARCHING
ARRAYS
WITH
STRINGS
.
254
4.2.3
CREATING
RANDOM
PLAYER
POSITIONS
.
255
4.3
A
METHOD
WITH
A
VARIABLE
NUMBER
OF
ARGUMENTS
.
256
4.3.1
SYSTEM.OUT.PRINTF(.)
ACCEPTS
ANY
NUMBER
OF
ARGUMENTS
.
257
4.3.2
FINDING
THE
AVERAGE
OF
VARIABLE
ARGUMENTS
.
257
4.3.3
VARARG
DESIGN
TIPS*
.
259
4.4
MULTIDIMENSIONAL
ARRAYS*
.
259
4.4.1
NONRECTANGULAR
ARRAYS*
.
262
4.5
LIBRARY
SUPPORT
FOR
ARRAYS
.
264
4.5.1
CLONING
CAN
BE
WORTHWHILE:
PROPAGATING
ARRAYS
.
264
4.5.2
WHY
CAN
ARRAYS
"DO"
SO
LITTLE?
.
265
4.5.3
COPYING
ARRAY
CONTENTS
.
266
4.6
USING
THE
ARRAYS
CLASS
FOR
COMPARING,
FILLING,
SEARCHING,
AND
SORTING
.
267
4.6.1
STRING
REPRESENTATION
OF
AN
ARRAY
.
267
4.6.2
SORTING
.
268
4.6.3
PARALLEL
SORTING
.
269
4.6.4
COMPARING
ARRAYS
OF
PRIMITIVES
WITH
ARRAYS.EQUALS(.)
AND
ARRAYS.DEEPEQUALS(.)*
.
269
4.6.5
COMPARING
OBJECT
ARRAYS
USING
ARRAYS.EQUALS(.)
AND
ARRAYS.DEEPEQUALS(.)*
.
271
4.6.6
SEARCHING
DIFFERENCES
USING
MISMATCH
(.)*
.
272
4.6.7
FILLING
ARRAYS*
.
272
4.6.8
COPYING
ARRAY
SECTIONS*
.
273
4.6.9
BINARY
SEARCH*
.
275
4.6.10
LEXICOGRAPHIC
ARRAY
COMPARISONS
USING
COMPARE(.)
AND
COMPAREUNSIGNED(.)
.
276
4.6.11
ARRAYS
FOR
LISTS
WITH
ARRAYS.ASLIST(.):
CONVENIENT
FOR
SEARCHING
AND
COMPARING*
.
277
4.6.12
A
LONG
SNAKE
.
278
4.7
THE
ENTRY
POINT
FOR
THE
RUNTIME
SYSTEM:
MAIN(.)
.
281
4.7.1
CORRECT
DECLARATION
OF
THE
START
METHOD
.
281
4.7.2
PROCESSING
COMMAND
LINE
ARGUMENTS
.
282
4.7.3
THE
RETURN
TYPE
OF
MAIN(.)
AND
SYSTEM.EXIT(INT)*
.
283
4.8
FURTHER
READING
.
285
5
HANDLING
CHARACTERS
AND
STRINGS
287
5.1
FROM
ASCII
VIA
ISO-8859-1
TO
UNICODE
.
287
5.1.1
ASCII
.
287
5.1.2
ISO/IEC
8859-1
.
288
5.1.3
UNICODE
.
289
5.1.4
UNICODE
CHARACTER
ENCODING
.
291
5.1.5
ESCAPE
SEQUENCES
.
292
5.1.6
NOTATION
FOR
UNICODE
CHARACTERS AND
UNICODE
ESCAPES
.
292
5.1.7
JAVA
VERSIONS
GO
HAND
IN
HAND
WITH
THE
UNICODE
STANDARD*
.
294
5.2
DATA
TYPES
FOR
CHARACTERS
AND
STRINGS
.
295
5.3
THE
CHARACTER
CLASS
.
296
5.3.1
IS
THAT
SO?
.
296
5.3.2
CONVERTING
CHARACTERS
TO
UPPERCASE/LOWERCASE
.
298
5.3.3
FROM
CHARACTER
TO
STRING
.
299
5.3.4
FROM
CHARTO
INT:
FROM
CHARACTER
TO
NUMBER*
.
299
5.4
STRINGS
.
301
5.5
THE
STRING
CLASS
AND
ITS
METHODS
.
303
5.5.1
STRING
LITERALS
AS
STRING
OBJECTS
FOR
CONSTANT
STRINGS
.
303
5.5.2
CONCATENATION
WITH
+
.
303
5.5.3
MULTILINE
TEXT
BLOCKS
WITH
""
.
304
5.5.4
STRING
LENGTH
AND
TESTING
FOR
EMPTY
STRINGS
.
309
5.5.5
ACCESSING
A
SPECIFIC
CHARACTER
WITH
CHARAT(INT)
.
310
5.5.6
SEARCHINGFOR
CONTAINED
CHARACTERS
AND
STRINGS
.
311
5.5.7
THE
HANGMAN
GAME
.
314
5.5.8
GOOD
THAT
WE
HAVE
COMPARED
.
316
5.5.9
EXTRACTING
STRING
SECTIONS
.
320
5.5.10
APPENDING
STRINGS,
MERGING
STRINGS,
CASE
SENSITIVITY,
AND
WHITESPACE
.
325
5.5.11
SEARCHED,
FOUND,
AND
REPLACED
.
328
5.5.12
CREATING
STRING
OBJECTS
WITH
CONSTRUCTORS
AND
FROM
REPEATS*
.
330
5.6
MUTABLE
STRINGS
WITH
STRINGBUILDER
AND
STRINGBUFFER
.
333
5.6.1
CREATING
STRINGBUILDER
OBJECTS
.
334
5.6.2
CONVERTING
STRINGBUILDER
TO
OTHER
STRING
FORMATS
.
335
5.6.3
REQUESTING
CHARACTERS
OR
STRINGS
.
335
5.6.4
APPENDING
DATA
.
335
5.6.5
SETTING,
DELETING,
AND
REVERSING
CHARACTERS
AND
STRINGS
.
337
5.6.6
LENGTH
AND
CAPACITY
OF
A
STRINGBUILDER
OBJECT*
.
339
5.6.7
COMPARISON
OF
STRINGBUILDER
INSTANCES
AND
STRINGS
WITH
STRINGBUILDER
.
340
5.6.8
HASHCODE()
WITH
STRINGBUILDER*
.
342
5.7
CHARSEQUENCE
AS
BASE
TYPE
.
342
5.7.1
BASIC
OPERATIONS
OF
THE
INTERFACE
.
343
5.7.2
STATIC
COMPARE(.)
METHOD
IN
CHARSEQUENCE
.
344
5.7.3
DEFAULT
METHODS
IN
THE
CHARSEQUENCE
INTERFACE*
.
345
5.8
CONVERTING
PRIMITIVES
AND
STRINGS
.
345
5.8.1
CONVERTING
DIFFERENT
TYPES
TO
STRING
REPRESENTATIONS
.
345
5.8.2
CONVERTING
STRING
CONTENTS
TO
A
PRIMITIVE
VALUE
.
347
5.8.3
STRING
REPRESENTATION
IN
BINARY,
HEX,
AND
OCTAL
FORMATS*
.
349
5.8.4
PARSE*(.)
AND
PRINT*()
METHODS
IN
DATATYPECONVERTER*
.
353
5.9
CONCATENATING
STRINGS
.
353
5.9.1
CONCATENATING
STRINGS
WITH
STRINGJOINER
.
353
5.10
DECOMPOSING
STRINGS
.
355
5.10.1
SPLITTING
STRINGS
VIA
SPLIT(.)
.
356
5.10.2
YES
WE
CAN,
YES
WE
SCAN:
THE
SCANNER
CLASS
.
356
5.11
FORMATTING
OUTPUTS
.
360
5.11.1
FORMATTING
AND
OUTPUTTING
VIA
FORMAT()
.
361
5.12
FURTHER
READING
.
367
6
WRITING
CUSTOM
CLASSES
369
6.1
DECLARING
CUSTOM
CLASSES
WITH
MEMBERS
.
369
6.1.1
MINIMUM
CLASS
.
370
6.1.2
DECLARING
OBJECT
VARIABLES
.
370
6.1.3
DECLARING
METHODS
.
373
6.1.4
SHADOWED
VARIABLES
.
375
6.1.5
THE
THIS
REFERENCE
.
377
6.2
PRIVACY
AND
VISIBILITY
.
380
6.2.1
FOR
THE
PUBLIC:
PUBLIC
.
381
6.2.2
NOT
PUBLIC:
PASSWORDS
ARE
PRIVATE
.
381
6.2.3
WHY
NOT
FREE
METHODS
AND
VARIABLES
FOR
ALL?
.
383
6.2.4
PRIVATE
IS
NOT
QUITE
PRIVATE:
IT
DEPENDS
ON
WHO
SEES
IT*
.
383
6.2.5
DECLARING
ACCESS
METHODS
FOR
OBJECT
VARIABLES
.
384
6.2.6
SETTERS
AND
GETTERS
ACCORDING
TO
THE
JAVABEANS
SPECIFICATION
. 384
6.2.7
PACKAGE-VISIBILITY
.
386
6.2.8
VISIBILITY
SUMMARY
.
388
6.3
ONE
FOR
ALL:
STATIC
METHODS
AND
CLASS
VARIABLES
.
390
6.3.1
WHY
STATIC
MEMBERS
ARE
USEFUL
.
391
6.3.2
STATIC
MEMBERS
WITH
STATIC
.
392
6.3.3
USING
STATIC
MEMBERS
VIA
REFERENCES?*
.
393
6.3.4
WHY
CASE
SENSITIVITY
IS
IMPORTANT*
.
394
6.3.5
STATIC
VARIABLES
FOR
DATA
EXCHANGE*
.
395
6.3.6
STATIC
MEMBERS
AND
OBJECT
MEMBERS*
.
396
6.4
CONSTANTS
AND
ENUMERATIONS
.
397
6.4.1
CONSTANTS
VIA
STATIC
FINAL
VARIABLES
.
397
6.4.2
TYPE-UNSAFE
ENUMERATIONS
.
398
6.4.3
ENUMERATION
TYPES:
TYPE-SAFE
ENUMERATIONS
WITH
ENUM
.
400
6.5
CREATING
AND
DESTROYING
OBJECTS
.
405
6.5.1
WRITING
CONSTRUCTORS
.
405
6.5.2
RELATIONSHIP
OF
METHOD
AND
CONSTRUCTOR
.
406
6.5.3
THE
DEFAULT
CONSTRUCTOR
.
407
6.5.4
PARAMETERIZED
AND
OVERLOADED
CONSTRUCTORS
.
408
6.5.5
COPY
CONSTRUCTORS
.
410
6.5.6
CALLING
ANOTHER
CONSTRUCTOR
OF
THE
SAME
CLASS
VIA
THIS(.)
.
412
6.5.7
IMMUTABLE
OBJECTS
AND
WITHER
METHODS
.
414
6.5.8
WE
DON'T
MISS
YOU:
THE
GARBAGE
COLLECTOR
.
416
6.6
CLASS
AND
OBJECT
INITIALIZATION*
.
418
6.6.1
INITIALIZING
OBJECT
VARIABLES
.
418
6.6.2
STATIC
BLOCKS
AS
CLASS
INITIALIZERS
.
420
6.6.3
INITIALIZING
CLASS
VARIABLES
.
421
6.6.4
COMPILED
ASSIGNMENTS
OF
THE
CLASS
VARIABLES
.
421
6.6.5
INSTANCE
INITIALIZER
.
422
6.6.6
SETTING
FINAL
VALUES
IN
THE
CONSTRUCTOR
AND
STATIC
BLOCKS
.
425
6.7
CONCLUSION
.
426
7
OBJECT-ORIENTED
RELATIONSHIP
427
7.1
ASSOCIATIONS
BETWEEN
OBJECTS
.
427
7.1.1
ASSOCIATION
TYPES
.
427
7.1.2
UNIDIRECTIONAL
1-TO-L
RELATIONSHIP
.
428
7.1.3
BECOMING
FRIENDS:
BIDIRECTIONAL
1-TO-L
RELATIONSHIPS
.
429
7.1.4
UNIDIRECTIONAL
1-TO-N
RELATIONSHIPS
.
431
7.2
INHERITANCE
.
436
7.2.1
INHERITANCE
IN
JAVA
.
437
7.2.2
MODELING
EVENTS
.
438
7.2.3
THE
IMPLICIT
BASE
CLASS
JAVA.LANG.OBJECT
.
440
7.2.4
SINGLE
AND
MULTIPLE
INHERITANCE*
.
440
7.2.5
DO
CHILDREN
SEE
EVERYTHING?
THE
PROTECTED
VISIBILITY
.
441
7.2.6
CONSTRUCTORS
IN
INHERITANCE
AND
SUPER(.)
.
442
7.3
TYPES
IN
HIERARCHIES
.
447
7.3.1
AUTOMATIC
AND
EXPLICIT
TYPECASTING
.
447
7.3.2
THE
SUBSTITUTION
PRINCIPLE
.
450
7.3.3
TESTING
TYPES
WITH
THE
INSTANCEOF
OPERATOR
.
452
7.3.4
PATTERN
MATCHING
FOR
INSTANCEOF
.
455
7.4
OVERRIDING
METHODS
.
457
7.4.1
PROVIDING
METHODS
IN
SUBCLASSES
WITH
A
NEW
BEHAVIOR
.
457
7.4.2
WITH
SUPER
TO
THE
PARENTS
.
461
7.5
TESTING
DYNAMIC
BINDINGS
.
463
7.5.1
BOUND
TO
TOSTRING()
.
463
7.5.2
IMPLEMENTING
SYSTEM.OUT.PRINTLN(OBJECT)
.
465
7.6
FINAL
CLASSES
AND
FINAL
METHODS
.
466
7.6.1
FINAL
CLASSES
.
466
7.6.2
NON-OVERRIDABLE
(FINAL)
METHODS
.
466
7.7
ABSTRACT
CLASSES
AND
ABSTRACT
METHODS
.
468
7.7.1
ABSTRACT
CLASSES
.
468
7.7.2
ABSTRACT
METHODS
.
470
7.8
FURTHER
INFORMATION
ON
OVERRIDING
AND
DYNAMIC
BINDING
.
476
7.8.1
NO
DYNAMIC
BINDING
FOR
PRIVATE,
STATIC,
AND
FINAL
METHODS
.
476
7.8.2
COVARIANT
RETURN
TYPES
.
476
7.8.3
ARRAY
TYPES
AND
COVARIANCE*
.
477
7.8.4
DYNAMIC
BINDING
EVEN
WITH
CONSTRUCTOR
CALLS*
.
478
7.8.5
NO
DYNAMIC
BINDING
FOR
COVERED
OBJECT
VARIABLES*
.
480
7.9
A
PROGRAMMING
TASK
.
482
8
INTERFACES,
ENUMERATIONS,
SEALED
CLASSES,
RECORDS
483
8.1
INTERFACES
.
483
8.1.1
INTERFACES
ARE
NEW
TYPES
.
483
8.1.2
DECLARING
INTERFACES
.
484
8.1.3
ABSTRACT
METHODS
IN
INTERFACES
.
484
8.1.4
IMPLEMENTING
INTERFACES
.
485
8.1.5
A
POLYMORPHISM
EXAMPLE
WITH
INTERFACES
.
487
8.1.6
MULTIPLE
INHERITANCE
WITH
INTERFACES
.
488
8.1.7
NO
RISK
OF
COLLISION
WITH
MULTIPLE
INHERITANCE*
.
491
8.1.8
EXTENDING
INTERFACES:
SUBINTERFACES
.
493
8.1.9
CONSTANT
DECLARATIONS
FOR
INTERFACES
.
494
8.1.10
SUBSEQUENT
IMPLEMENTATION
OF
INTERFACES*
.
494
8.1.11
STATIC
PROGRAMMED
METHODS
IN
INTERFACES
.
495
8.1.12
EXTENDING
AND
MODIFYING
INTERFACES
.
497
8.1.13
DEFAULT
METHODS
.
498
8.1.14
DECLARING
AND
USING
EXTENDED
INTERFACES
.
500
8.1.15
PUBLIC
AND
PRIVATE
INTERFACE
METHODS
.
503
8.1.16
EXTENDED
INTERFACES,
MULTIPLE
INHERITANCE,
AND
AMBIGUITIES*
.
504
8.1.17
CREATING
BUILDING
BLOCKS
WITH
DEFAULT
METHODS*
.
508
8.1.18
MARKER
INTERFACES*
.
512
8.1.19
(ABSTRACT)
CLASSES
AND
INTERFACES
IN
COMPARISON
.
513
8.2
ENUMERATION
TYPES
.
513
8.2.1
METHODS
ON
ENUM
OBJECTS
.
514
8.2.2
ENUMERATIONS
WITH
CUSTOM
METHODS,
CONSTRUCTORS,
AND
INITIALIZERS*
.
518
8.3
SEALED
CLASSES
AND
INTERFACES
.
523
8.3.1
SEALED
CLASSES
AND
INTERFACES
.
525
8.3.2
SUBCLASSES
ARE
FINAL,
SEALED,
AND
NON-SEALED
.
527
8.3.3
ABBREVIATED
NOTATIONS
.
528
8.4
RECORDS
.
529
8.4.1
SIMPLE
RECORDS
.
529
8.4.2
RECORDS
WITH
METHODS
.
531
8.4.3
CUSTOMIZING
RECORD
CONSTRUCTORS
.
532
8.4.4
ADDING
CONSTRUCTORS
.
534
8.4.5
SEALED
INTERFACES
AND
RECORDS
.
535
8.4.6
RECORDS:
SUMMARY
.
536
9
THERE
MUST
BE
EXCEPTIONS
539
9.1
FENCING
IN
PROBLEM
AREAS
.
539
9.1.1
EXCEPTIONS
IN
JAVA
WITH
TRY
AND
CATCH
.
540
9.1.2
CHECKED
AND
UNCHECKED
EXCEPTIONS
.
540
9.1.3
A
NUMBERFORMATEXCEPTION
(UNCHECKED
EXCEPTION)
.
541
9.1.4
APPENDING
A
DATE/TIMESTAMP
TO
A
TEXT
FILE
(CHECKED
EXCEPTION)
.
543
9.1.5
REPEATING
CANCELED
SECTIONS*
.
545
9.1.6
EMPTY
CATCH
BLOCKS
.
546
9.1.7
CATCHING
MULTIPLE
EXCEPTIONS
.
547
9.1.8
COMBINING
IDENTICAL
CATCH
BLOCKS
WITH
MULTI-CATCH
.
548
9.2
REDIRECTING
EXCEPTIONS
AND
THROWS
AT
THE
HEAD
OF
METHODS/
CONSTRUCTORS
.
549
9.2.1
THROWS
IN
CONSTRUCTORS
AND
METHODS
.
549
9.3
THE
CLASS
HIERARCHY
OF
EXCEPTIONS
.
550
9.3.1
MEMBERS
OF
THE
EXCEPTION
OBJECT
.
550
9.3.2
BASE
TYPE
THROWABLE
.
551
9.3.3
THE
EXCEPTION
HIERARCHY
.
552
9.3.4
CATCHING
SUPER-EXCEPTIONS
.
552
9.3.5
ALREADY
CAUGHT?
.
554
9.3.6
PROCEDURE
OF
AN
EXCEPTIONAL
SITUATION
.
555
9.3.7
NO
GENERAL
CATCHING!
.
555
9.3.8
KNOWN
RUNTIMEEXCEPTION
CLASSES
.
557
9.3.9
INTERCEPTION
IS
POSSIBLE,
BUT
NOT
MANDATORY
.
558
9.4
FINAL
HANDLING
USING
FINALLY
.
558
9.4.1
THE
IGNORANT
VERSION
.
559
9.4.2
THE
WELL-INTENTIONED
ATTEMPT
.
560
9.4.3
FROM
NOW
ON,
CLOSING
IS
PART
OF
THE
AGENDA
.
560
9.4.4
SUMMARY
.
562
9.4.5
A
TRY
WITHOUT
A
CATCH,
BUT
A
TRY-FINAILY
.
562
9.5
TRIGGERING
CUSTOM
EXCEPTIONS
.
564
9.5.1
TRIGGERING
EXCEPTIONS
VIA
THROW
.
564
9.5.2
KNOWING
AND
USING
EXISTING
RUNTIME
EXCEPTION
TYPES
.
566
9.5.3
TESTING
PARAMETERS
AND
GOOD
ERROR
MESSAGES
.
568
9.5.4
DECLARING
NEW
EXCEPTION
CLASSES
.
570
9.5.5
CUSTOM
EXCEPTIONS
AS
SUBCLASSES
OF
EXCEPTION
OR
RUNTIMEEXCEPTION?
.
571
9.5.6
CATCHING
AND
REDIRECTING
EXCEPTIONS*
.
574
9.5.7
CHANGING
THE
CALL
STACK
OF
EXCEPTIONS*
.
575
9.5.8
NESTED
EXCEPTIONS*
.
576
9.6
TRY
WITH
RESOURCES
(AUTOMATIC
RESOURCE
MANAGEMENT)
.
579
9.6.1
TRY
WITH
RESOURCES
.
580
9.6.2
THE
AUTOCLOSEABLE
INTERFACE
.
581
9.6.3
EXCEPTIONS
TO
CLOSE()
.
582
9.6.4
TYPES
THAT
ARE
AUTOCLOSEABLE
AND
CLOSEABLE
.
583
9.6.5
USING
MULTIPLE
RESOURCES
.
583
9.6.6
SUPPRESSED
EXCEPTIONS*
.
585
9.7
SPECIAL
FEATURES
OF
EXCEPTION
HANDLING*
.
588
9.7.1
RETURN
VALUES
FOR
THROWN
EXCEPTIONS
.
588
9.7.2
EXCEPTIONS
AND
RETURNS
DISAPPEAR:
THE
DUO
RETURN
AND
FINALLY
.
589
9.7.3
THROWS
ON
OVERRIDDEN
METHODS
.
590
9.7.4
UNREACHABLE
CATCH
CLAUSES
.
592
9.8
HARD
ERRORS:
ERROR*
.
593
9.9
ASSERTIONS*.
594
9.9.1
USING
ASSERTIONS
IN
CUSTOM
PROGRAMS
.
595
9.9.2
ENABLING
ASSERTIONS
AND
RUNTIME
ERRORS
.
595
9.9.3
ENABLING
OR
DISABLING
ASSERTIONS
MORE
DETAILED
.
597
9.10
CONCLUSION
.
597
10
NESTED
TYPES
599
10.1
NESTED
CLASSES,
INTERFACES,
AND
ENUMERATIONS
.
599
10.2
STATIC
NESTED
TYPES
.
601
10.2.1
MODIFIERS
AND
VISIBILITY
.
602
10.2.2
RECORDS
AS
CONTAINERS
.
602
10.2.3
IMPLEMENTING
STATIC
NESTED
TYPES*
.
602
10.3
NON-STATIC
NESTED
TYPES
.
603
10.3.1
CREATING
INSTANCES
OF
INNER
CLASSES
.
603
10.3.2
THE
THIS
REFERENCE
.
604
10.3.3
CLASS
FILES
GENERATED
BY
THE
COMPILER*
.
605
10.4
LOCAL
CLASSES
.
605
10.4.1
EXAMPLE
WITH
A
CUSTOM
DECLARATION
.
606
10.4.2
USING
A
LOCAL
CLASS
FOR
A
TIMER
.
606
10.5
ANONYMOUS
INNER
CLASSES
.
607
10.5.1
USING
AN
ANONYMOUS
INNER
CLASS
FOR
THE
TIMER
.
608
10.5.2
IMPLEMENTING
ANONYMOUS
INNER
CLASSES*
.
609
10.5.3
CONSTRUCTORS
OF
ANONYMOUS
INNER
CLASSES
.
609
10.5.4
ACCESSING
LOCAL
VARIABLES
FROM
LOCAL
AND
ANONYMOUS
CLASSES*
.
611
10.5.5
NESTED
CLASSES
ACCESS
PRIVATE
MEMBERS
.
612
10.6
NESTS
.
613
10.7
CONCLUSION
.
614
11
SPECIAL
TYPES
OF
JAVA
SE
615
11.1
OBJECT
IS
THE
MOTHER
OF
ALL
CLASSES
.
616
11.1.1
CLASS
OBJECTS
.
616
11.1.2
OBJECT
IDENTIFICATION
WITH
TOSTRING()
.
617
11.1.3
OBJECT
EQUIVALENCE
WITH
EQUALS(.)
AND
IDENTITY
.
619
11.1.4
CLONING
AN
OBJECT
USING
CLONE()*
.
625
11.1.5
RETURNING
HASH
VALUES
VIA
HASHCODEQ*
.
630
11.1.6
SYSTEM.IDENTITYHASHCODE(.)
AND
THE
PROBLEM
OF
NON-UNIQUE
OBJECT
REFERENCES*
.
636
11.1.7
SYNCHRONIZATION*
.
637
11.2
WEAK
REFERENCES
AND
CLEANERS
.
638
11.3
THEJAVA.UTIL.OBJECTS
UTILITY
CLASS
.
639
11.3.1
BUILT-IN
NULL
TESTS
FOR
EQUALS(.)/HASHCODE()
.
639
11.3.2
OBJECTS.TOSTRING(.)
.
640
11.3.3
NULL
CHECKS
WITH
BUILT-IN
EXCEPTION
HANDLING
.
640
11.3.4
TESTS
FOR
NULL
.
641
11.3.5
CHECKING
INDEX-RELATED
PROGRAM
ARGUMENTS
FOR
CORRECTNESS
.
642
11.4
COMPARING
OBJECTS
AND
ESTABLISHING
ORDER
.
643
11.4.1
NATURALLY
ORDERED
OR
NOT?
.
643
11.4.2
COMPARED)
METHOD
OF
THE
COMPARABLE
AND
COMPARATOR
INTERFACES
.
644
11.4.3
RETURN
VALUES
ENCODE
THE
ORDER
.
645
11.4.4
SORTING
CANDY
BY
CALORIES
USING
A
SAMPLE
COMPARATOR
.
645
11.4.5
TIPS
FOR
COMPARATOR
AND
COMPARABLE
IMPLEMENTATIONS
.
647
11.4.6
STATIC
AND
DEFAULT
METHODS
IN
COMPARATOR
.
648
11.5
WRAPPER
CLASSES
AND
AUTOBOXING
.
651
11.5.1
CREATING
WRAPPER
OBJECTS
.
653
11.5.2
CONVERSIONS
TO
A
STRING
REPRESENTATION
.
654
11.5.3
PARSING
FROM
A
STRING
REPRESENTATION
.
655
11.5.4
THE
NUMBER
BASE
CLASS
FOR
NUMERIC
WRAPPER
OBJECTS
.
655
11.5.5
PERFORMING
COMPARISONS
WITH
COMPARE*(.),
COMPARETO(.),
EQUALS(.),
AND
HASH
VALUES
.
657
11.5.6
STATIC
REDUCTION
METHODS
IN
WRAPPER
CLASSES
.
660
11.5.7
CONSTANTS
FOR
THE
SIZE
OF
A
PRIMITIVE
TYPE*
.
661
11.5.8
HANDLING
UNSIGNED
NUMBERS*
.
661
11.5.9
THE
INTEGER
AND
LONG
CLASSES
.
663
11.5.10
THE
DOUBLE
AND
FLOAT
CLASSES
FOR
FLOATS
.
664
11.5.11
THE
BOOLEAN
CLASS
.
664
11.5.12
AUTOBOXING:
BOXING
AND
UNBOXING
.
665
11.6 ITERATOR,
ITERABLE*
.
670
11.6.1
THE
ITERATOR
INTERFACE
.
670
11.6.2
THE
SUPPLIER
OF
THE
ITERATOR
.
673
11.6.3
THE
ITERABLE
INTERFACE
.
674
11.6.4
EXTENDED
FOR
AND
ITERABLE
.
674
11.6.5
INTERNAL
ITERATION
.
675
11.6.6
IMPLEMENTING
A
CUSTOM
ITERABLE*
.
676
11.7
ANNOTATIONS
IN
JAVA
PLATFORM,
STANDARD
EDITION
.
677
11.7.1
PLACES
FOR
ANNOTATIONS
.
677
11.7.2
ANNOTATION
TYPES
FROM
JAVA.LANG
.
678
11.7.3
@
DEPRECATED
.
678
11.7.4
ANNOTATIONS
WITH
ADDITIONAL
INFORMATION
.
679
11.7.5
@SUPPRESSWARNINGS
.
679
11.8
FURTHER
READING
.
682
12
GENERICS T
683
12.1
INTRODUCTION
TO
JAVA
GENERICS
.
683
12.1.1
MAN
VERSUS
MACHINE:
TYPE
CHECKING
OF
THE
COMPILER
AND
THE
RUNTIME
ENVIRONMENT
.
683
12.1.2
ROCKETS
.
684
12.1.3
DECLARING
GENERIC
TYPES
.
686
12.1.4
USING
GENERICS
.
688
12.1.5
DIAMONDS
ARE
FOREVER
.
690
12.1.6
GENERIC
INTERFACES
.
693
12.1.7
GENERIC
METHODS/CONSTRUCTORS
AND
TYPE
INFERENCE
.
695
12.2
IMPLEMENTING
GENERICS,
TYPE
ERASURE,
AND
RAW
TYPES
.
699
12.2.1
IMPLEMENTATION
OPTIONS
.
699
12.2.2
TYPE
ERASURE
.
699
12.2.3
PROBLEMS
WITH
TYPE
ERASURE
.
700
12.2.4
RAW
TYPES
.
704
12.3
RESTRICTING
TYPES
VIA
BOUNDS
.
706
12.3.1
SIMPLE
RESTRICTIONS
WITH
EXTENDS
.
707
12.3.2
OTHER
SUPERTYPES
WITH
&
.
709
12.4
TYPE
PARAMETERS
IN
THE
THROWS
CLAUSE*
.
710
12.4.1
DECLARING
A
CLASS
WITH
TYPE
VARIABLE
E
EXTENDS
EXCEPTION
.
710
12.4.2
PARAMETERIZED
TYPE
FOR
TYPE
VARIABLE
E
EXTENDS
EXCEPTION
.
710
12.5
INHERITANCE
AND
INVARIANCE
WITH
GENERICS
.
713
12.5.1
ARRAYS
ARE
COVARIANT
.
713
12.5.2
GENERICS
AREN
'
T
COVARIANT,
BUT
INVARIANT
.
714
12.5.3
WILDCARDS
WITH
?
.
715
12.5.4
BOUNDED
WILDCARDS
.
717
12.5.5
BOUNDED
WILDCARD
TYPES
AND
BOUNDED
TYPE
VARIABLES
.
720
12.5.6
THE
PECS
PRINCIPLE
.
722
12.6
CONSEQUENCES
OF
TYPE
ERASURE:
TYPE
TOKENS,
ARRAYS*
.
725
12.6.1
TYPE
TOKENS
.
725
12.6.2
SUPERTYPE
TOKENS
.
727
12.6.3
GENERICS
AND
ARRAYS
.
728
12.7
FURTHER
READING
.
729
13
LAMBDA
EXPRESSIONS
AND
FUNCTIONAL
PROGRAMMING
731
13.1
FUNCTIONAL
INTERFACES
AND
LAMBDA
EXPRESSIONS
.
731
13.1.1
CLASSES
IMPLEMENT
INTERFACES
.
731
13.1.2
LAMBDA
EXPRESSIONS
IMPLEMENT
INTERFACES
.
733
13.1.3
FUNCTIONAL
INTERFACES
.
734
13.1.4
THE
TYPE
OF
A
LAMBDA
EXPRESSION
DEPENDS
ON
THE
TARGET
TYPE
.
735
13.1.5
@FUNCTIONALLNTERFACE
ANNOTATIONS
.
740
13.1.6
SYNTAX
FOR
LAMBDA
EXPRESSIONS
.
741
13.1.7
THE
ENVIRONMENT
OF
LAMBDA
EXPRESSIONS
AND
VARIABLE
ACCESSES
.
745
13.1.8
EXCEPTIONS
IN
LAMBDA
EXPRESSIONS
.
751
13.1.9
CLASSES
WITH
AN
ABSTRACT
METHOD
AS
A
FUNCTIONAL
INTERFACE?*
.
755
13.2
METHOD
REFERENCES
.
755
13.2.1
MOTIVATION
.
755
13.2.2
METHOD
REFERENCES
WITH
::
.
756
13.2.3
VARIATIONS
OF
METHOD
REFERENCES
.
756
13.3
CONSTRUCTOR
REFERENCES
.
759
13.3.1
WRITING
CONSTRUCTOR
REFERENCES
.
760
13.3.2
PARAMETERLESS
AND
PARAMETERIZED
CONSTRUCTORS
.
761
13.3.3
USEFUL
PREDEFINED
INTERFACES
FOR
CONSTRUCTOR
REFERENCES
.
761
13.4
FUNCTIONAL
PROGRAMMING
.
762
13.4.1
CODE
=
DATA
.
762
13.4.2
PROGRAMMING
PARADIGMS:
IMPERATIVE
OR
DECLARATIVE
.
763
13.4.3
PRINCIPLES
OF
FUNCTIONAL
PROGRAMMING
.
764
13.4.4
IMPERATIVE
PROGRAMMING
AND
FUNCTIONAL
PROGRAMMING
.
767
13.4.5
COMPARATOR
AS
AN
EXAMPLE
OF
HIGHER-ORDER
FUNCTIONS
.
769
13.4.6
VIEWING
LAMBDA
EXPRESSIONS
AS
MAPPINGS
OR
FUNCTIONS
.
769
13.5
FUNCTIONAL
INTERFACES
FROM
THE
JAVA.UTIL.FUNCTION
PACKAGE
.
770
13.5.1
BLOCKS
WITH
CODE
AND
THE
FUNCTIONAL
INTERFACE
CONSUMER
.
771
13.5.2
SUPPLIER
.
773
13.5.3
PREDICATES
AND
JAVA.UTIL.FUNCTION.PREDICATE
.
773
13.5.4
FUNCTIONS
VIA
THE
FUNCTIONAL
INTERFACE
JAVA.UTIL.FUNCTION.FUNCTION
.
775
13.5.5
I
TAKE
TWO
.
779
13.5.6
FUNCTIONAL
INTERFACES
WITH
PRIMITIVES
.
782
13.6
OPTIONAL
IS
NOT
A
NON-STARTER
.
784
13.6.1
USING
NULL
.
785
13.6.2
THE
OPTIONAL
TYPE
.
787
13.6.3
STARTING
FUNCTIONAL
INTERFACES
WITH
OPTIONAL
.
789
13.6.4
PRIMITIVE-OPTIONAL
WITH
SPECIAL
OPTIONAL*
CLASSES
.
792
13.7
WHAT
IS
SO
FUNCTIONAL
NOW?
.
795
13.7.1
RECYCLABILITY
.
795
13.7.2
STATELESS,
IMMUTABLE
.
795
13.8
FURTHER
READING
.
797
14
ARCHITECTURE,
DESIGN,
AND
APPLIED
OBJECT
ORIENTATION
799
14.1
SOLID
MODELING
.
799
14.1.1
THREE
RULES
.
800
14.1.2
SOLID
.
800
14.1.3
DON
'
T
BE
STUPID
.
802
14.2
ARCHITECTURE,
DESIGN,
AND
IMPLEMENTATION
.
803
14.3
DESIGN
PATTERNS
.
803
14.3.1
MOTIVATION
FOR
DESIGN
PATTERNS
.
804
14.3.2
SINGLETON
.
805
14.3.3
FACTORY
METHODS
.
806
14.3.4
IMPLEMENTING
THE
OBSERVER
PATTERN
WITH
LISTENERS
.
807
14.4
FURTHER
READING
.
811
15
JAVA
PLATFORM
MODULE
SYSTEM
813
15.1
CLASS
LOADER
AND
.
.
813
15.1.1
LOADING
CLASSES
PER
REQUEST
.
813
15.1.2
WATCHING
THE
CLASS
LOADER
AT
WORK
.
814
15.1.3
JMOD
FILES
AND
JAR
FILES
.
815
15.1.4
WHERE
THE
CLASSES
COME
FROM:
SEARCH
LOCATIONS
AND
SPECIAL
CLASS
LOADERS
.
816
15.1.5
SETTING
THE
SEARCH
PATH
.
817
15.2
IMPORTING
MODULES
.
819
15.2.1
WHO
SEES
WHOM?
.
819
15.2.2
PLATFORM
MODULES
AND
A
JMOD
EXAMPLE
.
821
15.2.3
USING
INTERNAL
PLATFORM
FEATURES:
-ADD-EXPORTS
.
821
15.2.4
INTEGRATING
NEW
MODULES
.
824
15.3
DEVELOPING
CUSTOM
MODULES
.
825
15.3.1
MODULE
COM.TUTEGO.CANDYTESTER
.
825
15.3.2
MODULE
DECLARATION
WITH
MODULE-INFO.JAVA
AND
EXPORTS
.
826
15.3.3
MODULE
COM.TUTEGO.MAIN
.
826
15.3.4
MODULE
INFO
FILE
WITH
REQUIRES
.
827
15.3.5
WRITING
MODULE
INSERTERS:
JAVA
VIRTUAL
MACHINE
SWITCHES
-P
AND-M
.
828
15.3.6
EXPERIMENTS
WITH
THE
MODULE
INFO
FILE
.
829
15.3.7
AUTOMATIC
MODULES
.
829
15.3.8
UNNAMED
MODULES
.
830
15.3.9
READABILITY
AND
ACCESSIBILITY
.
831
15.3.10
MODULE
MIGRATION
.
832
15.4
FURTHER
READING
.
833
16
THE
CLASS
LIBRARY
835
16.1
THE
JAVA
CLASS
PHILOSOPHY.
835
16.1.1
MODULES,
PACKAGES,
AND
TYPES
.
836
16.1.2
OVERVIEW
OF
THE
PACKAGES
OF
THE
STANDARD
LIBRARY
.
838
16.2
SIMPLE
TIME
MEASUREMENT
AND
PROFILING*
.
842
16.2.1
PROFILERS
.
843
16.3
THE
CLASS
CLASS
.
843
16.3.1
OBTAINING
A
CLASS
OBJECT
.
843
16.3.2
A
CLASS
IS
A
TYPE
.
846
16.4
THE
UTILITY
CLASSES
SYSTEM
AND
MEMBERS
.
846
16.4.1
MEMORY
OF
THE
JAVA
VIRTUAL
MACHINE
.
847
16.4.2
NUMBER
OF
CPUS
OR
CORES
.
848
16.4.3
SYSTEM
PROPERTIES
OF
THE
JAVA
ENVIRONMENT
.
848
16.4.4
SETTING
CUSTOM
PROPERTIES
FROM
THE
CONSOLE*
.
850
16.4.5
NEWLINE
CHARACTERS
AND
LINE.SEPARATOR
.
851
16.4.6
ENVIRONMENT
VARIABLES
OF
THE
OPERATING
SYSTEM
.
852
16.5
THE
LANGUAGES
OF
DIFFERENT
COUNTRIES
.
853
16.5.1
REGIONAL
LANGUAGES
VIA
LOCALE
OBJECTS
.
853
16.6
OVERVIEW
OF
IMPORTANT
DATE
CLASSES
.
857
16.6.1
UNIX
TIME:
JANUARY
1,1970
.
858
16.6.2
SYSTEM.CURRENTTIMEMILLIS()
.
858
16.6.3
SIMPLE
TIME
CONVERSIONS
VIA
TIMEUNIT
.
859
16.7 DATE-TIME
API
.
860
16.7.1
INITIAL
OVERVIEW
.
860
16.7.2
HUMAN
TIME
AND
MACHINE
TIME
.
861
16.7.3
THE
LOCALDATE
DATE
CLASS
.
863
16.8
LOGGING
WITH
JAVA
.
864
16.8.1
LOGGING
APPLICATION
PROGRAMMING
INTERFACES
.
865
16.8.2
LOGGING
WITH
JAVA.UTIL.LOGGING
.
865
16.9 MAVEN:
RESOLVING
BUILD
MANAGEMENT
AND
DEPENDENCIES
.
867
16.9.1
DEPENDENCY
TO
BE
ACCEPTED
.
868
16.9.2
LOCAL
AND
THE
REMOTE
REPOSITORY
.
868
16.9.3
LIFECYCLES,
STAGES,
AND
MAVEN
PLUGINS
.
869
16.10
FURTHER
READING
.
869
17
INTRODUCTION
TO
CONCURRENT
PROGRAMMING
871
17.1
CONCURRENCY
AND
PARALLELISM
.
871
17.1.1
MULTITASKING,
PROCESSES,
AND
THREADS
.
872
17.1.2
THREADS
AND
PROCESSES
.
873
17.1.3
HOW
CONCURRENT
PROGRAMS
CAN
INCREASE
SPEED
.
874
17.1.4
HOW
JAVA
CAN
PROVIDE
FOR
CONCURRENCY
.
875
17.2
GENERATING
EXISTING
THREADS
AND
NEW
THREADS
.
875
17.2.1
MAIN
THREAD
.
876
17.2.2
WHO
AM
I?
.
876
17.2.3
IMPLEMENTING
THE
RUNNABLE
INTERFACE
.
876
17.2.4
STARTING
THREAD
WITH
RUNNABLE
.
878
17.2.5
PARAMETERIZING
RUNNABLE
.
.
879
17.2.6
EXTENDING
THE
THREAD
CLASS*
.
880
17.3
THREAD
MEMBERS
AND
STATES
.
882
17.3.1
THE
NAME
OF
A
THREAD
.
882
17.3.2
THE
STATES
OF
A
THREAD*
.
882
17.3.3
SLEEPERS
WANTED
.
883
17.3.4
WHEN
THREADS
ARE
FINISHED
.
885
17.3.5
TERMINATING
A
THREAD
POLITELY
USING
INTERRUPTS
.
885
17.3.6
UNHANDLED
EXCEPTIONS,
THREAD
END,
AND
UNCAUGHTEXCEPTIONHANDLER
.
887
17.3.7
THE
STOP()
FROM
THE
OUTSIDE
AND
THE
RESCUE
WITH
THREADDEATH*
.
889
17.3.8
STOPPING
AND
RESUMING
THE
WORK*
.
891
17.3.9
PRIORITY*
.
892
17.4
ENTER
THE
EXECUTOR
.
893
17.4.1
THE
EXECUTOR
INTERFACE
.
893
17.4.2
HAPPY
AS
A
GROUP:
THE
THREAD
POOLS
.
895
17.4.3
THREADS
WITH
RETURN
VIA
CALLABLE
.
897
17.4.4
MEMORIES
OF
THE
FUTURE:
THE
FUTURE
RETURN
.
899
17.4.5
PROCESSING
MULTIPLE
CALLABLE
OBJECTS
.
902
17.4.6
COMPLETIONSERVICE
AND
EXECUTORCOMPLETIONSERVICE
.
903
17.4.7
SCHEDULEDEXECUTORSERVICE:
REPETITIVE
TASKS
AND
TIME
CONTROLS
.
904
17.4.8
ASYNCHRONOUS
PROGRAMMING
WITH
COMPLETABLEFUTURE
(COMPLETIONSTAGE)
.
905
17.5
FURTHER
READING
.
907
18
INTRODUCTION
TO
DATA
STRUCTURES
AND
ALGORITHMS
909
18.1
LISTS
.
909
18.1.1
FIRST
LIST
EXAMPLE
.
910
18.1.2
SELECTION
CRITERION
ARRAYLIST
OR
LINKEDLIST
.
911
18.1.3
THE
LIST
INTERFACE
.
911
18.1.4
ARRAYLIST
.
918
18.1.5
LINKEDLIST
.
919
18.1.6
THE
ARRAY
ADAPTER
ARRAYS.ASLIST(.)
.
921
18.1.7
LISTITERATOR*
.
923
18.1.8
UNDERSTANDING
TOARRAY(.)
OF
COLLECTION:
RECOGNIZING
TRAPS
.
924
18.1.9
MANAGING
PRIMITIVE
ELEMENTS
IN
DATA
STRUCTURES
.
927
18.2
SETS
.
928
18.2.1
A
FIRST
EXAMPLE
OF
A
SET
.
928
18.2.2
METHODS
OF
THE
SET
INTERFACE
.
930
18.2.3
HASHSET
.
932
18.2.4
TREESET:
THE
SORTED
SET
.
933
18.2.5
THE
INTERFACES
NAVIGABLESET
AND
SORTEDSET
.
935
18.2.6
LINKEDHASHSET
.
937
18.3
ASSOCIATIVE
MEMORY
.
938
18.3.1
THE
HASHMAP
AND
TREEMAP
CLASSES
AND
STATIC
MAP
METHODS
.
938
18.3.2
INSERTING
AND
QUERYING
THE
ASSOCIATIVE
MEMORY
.
942
18.4
THE
STREAM
API
.
944
18.4.1
DECLARATIVE
PROGRAMMING
.
944
18.4.2
INTERNAL
VERSUS
EXTERNAL
ITERATION
.
945
18.4.3
WHAT
IS
A
STREAM?
.
946
18.5
CREATING
A
STREAM
.
947
18.5.1
STREAM.OF*(.)
.
948
18.5.2
STREAM.GENERATE(.)
.
949
18.5.3
STREAM.ITERATE(.)
.
949
18.5.4
PARALLEL
OR
SEQUENTIAL
STREAMS
.
950
18.6
TERMINAL
OPERATIONS
.
951
18.6.1
NUMBER
OF
ELEMENTS
.
951
18.6.2
AND
NOW
ALL:
FOREACH*(.)
.
951
18.6.3
GETTING
INDIVIDUAL
ELEMENTS
FROM
THE
STREAM
.
952
18.6.4
EXISTENCE
TESTS
WITH
PREDICATES
.
953
18.6.5
REDUCING
A
STREAM
TO
ITS
SMALLEST
OR
LARGEST
ELEMENT
.
953
18.6.6
REDUCING
A
STREAM
WITH
ITS
OWN
FUNCTIONS
.
954
18.6.7
WRITING
RESULTS
TO
A
CONTAINER,
PART
1:
COLLECT(.)
.
956
18.6.8
WRITING
RESULTS
TO
A
CONTAINER,
PART
2:
COLLECTOR
AND
COLLECTORS
.
957
18.6.9
WRITING
RESULTS
TO
A
CONTAINER,
PART
3:
GROUPINGS
.
959
18.6.10
TRANSFERRING
STREAM
ELEMENTS
TO
AN
ARRAY
OR
AN
ITERATOR
.
961
18.7
INTERMEDIARY
OPERATIONS
.
962
18.7.1
ELEMENT
PREVIEWS
.
963
18.7.2
FILTERING
ELEMENTS
.
963
18.7.3
STATEFUL
INTERMEDIARY
OPERATIONS
.
963
18.7.4
PREFIX
OPERATIONS
.
965
18.7.5
IMAGES
.
966
18.8
FURTHER
READING
.
968
19
FILES
AND
DATA
STREAMS
969
19.1
OLD
AND
NEW
WORLDS
IN
JAVA.IO
AND
JAVA.NIO
.
969
19.1.1
JAVA.IO
PACKAGE
WITH
THE
FILE
CLASS
.
969
19.1.2
NIO.2
AND
THE
JAVA.NIO
PACKAGE
.
970
19.2
FILE
SYSTEMS
AND
PATHS
.
970
19.2.1
FILESYSTEM
AND
PATH
.
971
19.2.2
THE
FILES
UTILITY
CLASS
.
977
19.3
RANDOM
ACCESS
FILES
.
980
19.3.1
OPENING
A
RANDOMACCESSFILE
FOR
READING
AND
WRITING
.
980
19.3.2
READING
FROM
RANDOMACCESSFILE
.
981
19.3.3
WRITING
WITH
RANDOMACCESSFILE
.
983
19.3.4
THE
LENGTH
OF
THE
RANDOMACCESSFILE
.
983
19.3.5
BACK
AND
FORTH
WITHIN
THE
FILE
.
984
19.4
BASE
CLASSES
FOR
INPUT/OUTPUT
.
985
19.4.1
THE
FOUR
ABSTRACT
BASE
CLASSES
.
985
19.4.2
THE
ABSTRACT
BASE
CLASS
OUTPUTSTREAM
.
986
19.4.3
THE
ABSTRACT
BASE
CLASS
INPUTSTREAM
.
988
19.4.4
THE
ABSTRACT
BASE
CLASS
WRITER
.
990
19.4.5
THE
APPENDABLE
INTERFACE*
.
991
19.4.6
THE
ABSTRACT
BASE
CLASS
READER
.
992
19.4.7
THE
INTERFACES
CLOSEABLE,
AUTOCLOSEABLE,
AND
FLUSHABLE
.
995
19.5
READING
FROM
FILES
AND
WRITING
TO
FILES
.
996
19.5.1
OBTAINING
BYTE-ORIENTED
DATA
STREAMS
VIA
FILES
.
997
19.5.2
OBTAINING
CHARACTER-ORIENTED
DATA
STREAMS
VIA
FILES
.
997
19.5.3
THE
FUNCTION
OF
OPENOPTION
IN
THE
FILES.NEW*(.)
METHODS
.
999
19.5.4
LOADING
RESOURCES
FROM
THE
MODULE
PATH
AND
FROM
JAR
FILES
.
1001
19.6
FURTHER
READING
.
1003
20
INTRODUCTION
TO
DATABASE
MANAGEMENT
WITH
JDBC
1005
20.1
RELATIONAL
DATABASES
AND
JAVA
ACCESS
.
1005
20.1.1
THE
RELATIONAL
MODEL
.
1005
20.1.2
JAVA
APPLICATION
PROGRAMMING
INTERFACES
FOR
ACCESSING
RELATIONAL
DATABASES
.
1006
20.1.3
THE
JDBC
API
AND
IMPLEMENTATIONS:
THE
JDBC
DRIVER
.
1006
20.1.4
H2
IS
THE
TOOL
IN
JAVA
.
1007
20.2
A
SAMPLE
QUERY
.
1008
20.2.1
STEPS
TO
QUERY
THE
DATABASE
.
1008
20.2.2
ACCESSING
THE
RELATIONAL
DATABASE
WITH
JAVA
.
1008
20.3
FURTHER
READING
.
1009
21
BITS
AND
BYTES,
MATHEMATICS
AND
MONEY
1011
21.1
BITS
AND
BYTES
.
1011
21.1.1
THE
BIT
OPERATORS:
COMPLEMENT,
AND,
OR,
AND
XOR
.
1012
21.1.2
REPRESENTATION
OF
INTEGERS
IN
JAVA:
TWO
'
S
COMPLEMENT
.
1013
21.1.3
THE
BINARY,
OCTAL,
AND
HEXADECIMAL
PLACE
VALUE
SYSTEMS
.
1014
21.1.4
EFFECT
OF
TYPECASTING
ON
BIT
PATTERNS
.
1016
21.1.5
WORKING
WITHOUT
SIGNS
.
1018
21.1.6
THE
SHIFT
OPERATORS
.
1021
21.1.7
SETTING,
CLEARING,
REVERSING,
AND
TESTING
A
BIT
.
1023
21.1.8
BIT
METHODS
OF
THE
INTEGER
AND
LONG
CLASSES
.
1024
21.2
FLOATING
POINT
ARITHMETIC
IN
JAVA
.
1025
21.2.1
SPECIAL
VALUES
FOR
INFINITY,
ZERO,
AND
NOT
A
NUMBER
.
1026
21.2.2
STANDARD
NOTATION
AND
SCIENTIFIC
NOTATION
FOR
FLOATS*
.
1029
21.2.3
MANTISSAS
AND
EXPONENTS*
.
1029
21.3
THE
MEMBERS
OF
THE
MATH
CLASS
.
1031
21.3.1
OBJECT
VARIABLES
OF
THE
MATH
CLASS
.
1031
21.3.2
ABSOLUTE
VALUES
AND
SIGNS
.
1032
21.3.3
MAXIMUMS/MINIMUMS
.
1032
21.3.4
ROUNDING
VALUES
.
1033
21.3.5
REMAINDER
OF
AN
INTEGER
DIVISION*
.
1035
21.3.6
DIVISION
WITH
ROUNDING
TOWARD
NEGATIVE
INFINITY
AND
ALTERNATIVE
REMAINDERS*
.
1036
21.3.7
MULTIPLY-ACCUMULATE
.
1038
21.3.8
SQUARE
ROOT
AND
EXPONENTIAL
METHODS
.
1038
21.3.9
THE
LOGARITHM*
.
1039
21.3.10
ANGLE
METHODS*
.
1040
21.3.11
RANDOM
NUMBERS
.
1041
21.4
ACCURACY
AND
THE
VALUE
RANGE
OF
TYPE
AND
OVERFLOW
CONTROL*
.
1042
21.4.1
THE
LARGEST
AND
SMALLEST
VALUES
.
1042
21.4.2
OVERFLOW
AND
EVERYTHING
ENTIRELY
EXACT
.
1042
21.4.3
WHAT
IN
THE
WORLD
DOES
THE
ULP
METHOD
DO?
.
1045
21.5
RANDOM
NUMBERS:
RANDOM,
THREADLOCALRANDOM,
AND
SECURERANDOM
.
1046
21.5.1
THE
RANDOM
CLASS
.
1047
21.5.2
THREADLOCALRANDOM
.
1050
21.5.3
THE
SECURERANDOM
CLASS*
.
1050
21.6
LARGE
NUMBERS*
.
1051
21.6.1
THE
BIGINTEGER
CLASS
.
1051
21.6.2
EXAMPLE:
QUITE
LONG
FACTORIALS
WITH
BIGINTEGER
.
1058
21.6.3
LARGE
FLOATS
WITH
BIGDECIMAL
.
1059
21.6.4
CONVENIENTLY
SETTING
THE
CALCULATION
ACCURACY
VIA
MATHCONTEXT
.
1062
21.6.5
CALCULATING
EVEN
FASTER
WITH
MUTABLE
IMPLEMENTATIONS
.
1063
21.7 MONEY
AND
CURRENCY
.
1064
21.7.1
REPRESENTING
AMOUNTS
OF
MONEY
.
1064
21.7.2
ISO
4217
.
1064
21.7.3
REPRESENTING
CURRENCIES
IN
JAVA
.
1065
21.8
FURTHER
READING
.
1066
22
TESTING
WITH
JUNIT
1067
22.1 SOFTWARE
TESTS
.
1067
22.1.1
PROCEDURE
FOR
WRITING
TEST
CASES
.
1068
22.2
THE
JUNIT
TESTING
FRAMEWORK
.
1068
22.2.1
JUNIT
VERSIONS
.
1069
22.2.2
INTEGRATING
JUNIT
.
1069
22.2.3
TEST-DRIVEN
DEVELOPMENT
AND
THE
TEST-FIRST
APPROACH
.
1069
22.2.4
TEST,
IMPLEMENT,
TEST,
IMPLEMENT,
TEST,
REJOICE
.
1070
22.2.5
RUNNING
JUNIT
TESTS
.
1072
22.2.6
ASSERT*(.)
METHODS
OF
THE
ASSERTIONS
CLASS
.
1073
22.2.7
TESTING
EXCEPTIONS
.
1076
22.2.8
SETTING
LIMITS
FOR
EXECUTION
TIMES
.
1077
22.2.9
LABELS
WITH
@DISPLAYNAME
.
1078
22.2.10
NESTED
TESTS
.
1078
22.2.11
IGNORING
TESTS
.
1078
22.2.12
CANCELING
TESTS
WITH
METHODS
OF
THE
ASSUMPTIONS
CLASS
.
1079
22.2.13
PARAMETERIZED
TESTS
.
1079
22.3
JAVA
ASSERTION
LIBRARIES
AND
ASSERTJ
.
1081
22.3.1
ASSERTJ
.
1081
22.4
STRUCTURE
OF
LARGE
TEST
CASES
.
1083
22.4.1
FIXTURES
.
1083
22.4.2
COLLECTIONS
OF
TEST
CLASSES
AND
CLASS
ORGANIZATION
.
1084
22.5
GOOD
DESIGN
ENABLES
EFFECTIVE
TESTING
.
1085
22.6
DUMMY,
FAKE,
STUB,
AND
MOCK
.
1087
22.7
JUNIT
EXTENSIONS
AND
TESTING
ADD-ONS
.
1089
22.7.1
WEB
TESTS
.
1089
22.7.2
TESTING
THE
DATABASE
INTERFACE
.
1089
22.8
FURTHER
READING
.
1089
23
THE
TOOLS
OF
THE
JDK
1091
23.1
OVERVIEW
.
1091
23.1.1
STRUCTURE
AND
COMMON
SWITCHES
.
1092
23.2
TRANSLATING
JAVA
SOURCES.
1092
23.2.1
THE
JAVA
COMPILER
OF
THE
JAVA
DEVELOPMENT
KIT
.
1092
23.2.2
NATIVE
COMPILERS
.
1092
23.3
THE
JAVA
RUNTIME
ENVIRONMENT
.
1093
23.3.1
SWITCHES
OF
THE
JAVA
VIRTUAL
MACHINE
.
1093
23.3.2
THE
DIFFERENCE
BETWEENJAVA.EXE
ANDJAVAW.EXE
.
1095
23.4
DOCUMENTATION
COMMENTS
WITH
JAVADOC
.
1096
23.4.1
SETTING
A
DOCUMENTATION
COMMENT
.
1096
23.4.2
CREATING
DOCUMENTATION
WITH
THE
JAVADOC
TOOL
.
1098
23.4.3
HTML
TAGS
IN
DOCUMENTATION
COMMENTS*
.
1099
23.4.4
GENERATED
FILES
.
1099
23.4.5
DOCUMENTATION
COMMENTS
AT
A
GLANCE*
.
1100
23.4.6
JAVADOC
AND
DOCLETS*
.
1101
23.4.7
DEPRECATED
TYPES
AND
MEMBERS
.
1101
23.4.8
JAVADOC
VERIFICATION
WITH
DOCLINT
.
1104
23.5
THE
JAR
ARCHIVE
FORMAT
.
1105
23.5.1
USING
THE
JAR
UTILITY
.
1105
23.5.2
THE
MANIFEST
.
1105
23.5.3
LAUNCHING
APPLICATIONS
IN
JAVA
ARCHIVES:
EXECUTABLE
JAR
FILES
.
1106
23.6
FURTHER
READING
.
1107
THE
AUTHOR
.
1109
INDEX
.
1111 |
adam_txt |
CONTENTS
AT
A
GLANCE
1
INTRODUCTION
.
43
2
IMPERATIVE
LANGUAGE
CONCEPTS
.
83
3
CLASSES
AND
OBJECTS
.
201
4
ARRAYS
AND
THEIR
AREAS
OF
USE
.
241
5
HANDLING
CHARACTERS
AND
STRINGS
.
287
6
WRITING
CUSTOM
CLASSES
.
369
7
OBJECT-ORIENTED
RELATIONSHIP
.
427
8
INTERFACES,
ENUMERATIONS,
SEALED
CLASSES,
RECORDS
.
483
9
THERE
MUST
BE
EXCEPTIONS
.
539
10
NESTED
TYPES
.
599
11
SPECIAL
TYPES
OF
JAVA
SE
.
615
12
GENERICS T
.
683
13
LAMBDA
EXPRESSIONS
AND
FUNCTIONAL
PROGRAMMING
.
731
14
ARCHITECTURE,
DESIGN,
AND
APPLIED
OBJECT
ORIENTATION
.
799
15
JAVA
PLATFORM
MODULE
SYSTEM
.
813
16
THE
CLASS
LIBRARY
.
835
17
INTRODUCTION
TO
CONCURRENT
PROGRAMMING
.
871
18
INTRODUCTION
TO
DATA
STRUCTURES
AND
ALGORITHMS
.
909
19
FILES
AND
DATA
STREAMS
.
969
20
INTRODUCTION
TO
DATABASE
MANAGEMENT
WITH
JDBC
.
1005
21
BITS
AND
BYTES,
MATHEMATICS
AND
MONEY
.
1011
22
TESTING
WITH
JUNIT
.
1067
23
THE
TOOLS
OF
THE
JDK
.
1091
CONTENTS
PREFACE
.
31
1
INTRODUCTION
43
1.1
HISTORICAL
BACKGROUND
.
43
1.2
ON
THE
POPULARITY
OF
JAVA:
THE
KEY
FEATURES
.
45
1.2.1
BYTECODE
.
46
1.2.2
EXECUTING
THE
BYTECODE
VIA
A
VIRTUAL
MACHINE
.
46
1.2.3
PLATFORM
INDEPENDENCE
.
46
1.2.4
JAVA
AS
A
LANGUAGE,
RUNTIME
ENVIRONMENT,
AND
STANDARD
LIBRARY
.
47
1.2.5
OBJECT
ORIENTATION
IN
JAVA
.
47
1.2.6
JAVA
IS
WIDESPREAD
AND
WELL
KNOWN
.
48
1.2.7
JAVA
IS
FAST:
OPTIMIZATION
AND
JUST-IN-TIME
COMPILATION
.
48
1.2.8
POINTERS
AND
REFERENCES
.
50
1.2.9
TAKE
OUT
THE
TRASH,
GARBAGE
COLLECTOR!
.
51
1.2.10
EXCEPTION
HANDLING
.
52
1.2.11
THE
RANGE
OF
LIBRARIES
AND
TOOLS
.
52
1.2.12
COMPARABLY
SIMPLE
SYNTAX
.
53
1.2.13
ABANDONING
CONTROVERSIAL
CONCEPTS
.
53
1.2.14
JAVA
IS
OPEN
SOURCE
.
54
1.2.15
WHAT
JAVA
IS
LESS
SUITABLE
FOR
.
55
13
JAVA
VERSUS
OTHER
LANGUAGES*
.
56
1.3.1
JAVA
AND
.
56
1.3.2
JAVA
AND
JAVASCRIPT
.
57
1.3.3
A
WORD
ABOUT
MICROSOFT,
JAVA,
AND
J++
.
57
1.3.4
JAVA
AND
.
58
1.4
FURTHER
DEVELOPMENT
AND
LOSSES
.
59
1.4.1
THE
DEVELOPMENT
OF
JAVA
AND
ITS
FUTURE
PROSPECTS
.
59
1.4.2
FEATURES,
ENHANCEMENTS,
AND
SPECIFICATION
REQUESTS
.
60
1.4.3
APPLETS
.
61
1.4.4
JAVAFX
.
61
1.5
JAVA
PLATFORMS
.
62
1.5.1
JAVA
PLATFORM,
STANDARD
EDITION
.
62
1.5.2
JAVA
PLATFORM,
MICRO
EDITION:
JAVA
FOR
THE
LITTLE
ONES
.
65
1.5.3
JAVA
FOR
THE
VERY,
VERY
LITTLE
ONES
.
65
1.5.4
JAVA
FOR
THE
BIG
ONES:
JAKARTA
EE
(FORMERLY
JAVA
PLATFORM,
ENTERPRISE
EDITION)
.
65
1.5.5
REAL-TIME
JAVA
.
66
CONTENTS
1.6
JAVA
PLATFORM,
STANDARD
EDITION,
IMPLEMENTATIONS
.
67
1.6.1
OPENJDK
.
67
1.6.2
ORACLE
JDK
.
68
1.7
INSTALLING
THE
JAVA
DEVELOPMENT
KIT
.
69
1.7.1
INSTALLING
ORACLE
JDK
ON
WINDOWS
.
70
1.8
COMPILING
AND
TESTING
THE
FIRST
PROGRAM
.
71
1.8.1
A
SQUARE
NUMBERS
PROGRAM
.
72
1.8.2
THE
COMPILER
RUN
.
73
1.8.3
THE
RUNTIME
ENVIRONMENT
.
74
1.8.4
COMMON
COMPILER
AND
INTERPRETER
ISSUES
.
74
1.9
DEVELOPMENT
ENVIRONMENTS
.
75
1.9.1
INTELLIJ
IDEA
.
76
1.9.2
ECLIPSE
INTEGRATED
DEVELOPMENT
ENVIRONMENT
.
80
1.9.3
NETBEANS
.
81
1.10
FURTHER
READING
.
81
2
IMPERATIVE
LANGUAGE
CONCEPTS
83
2.1
ELEMENTS
OF
THE
JAVA
PROGRAMMING
LANGUAGE
.
83
2.1.1
TOKENS
.
84
2.1.2
TEXT
ENCODING
BY
UNICODE
CHARACTERS
.
85
2.1.3
IDENTIFIERS
.
85
2.1.4
LITERALS
.
87
2.1.5
(RESERVED)
KEYWORDS
.
87
2.1.6
SUMMARY
OF
THE
LEXICAL
ANALYSIS
.
88
2.1.7
COMMENTS
.
89
2.2
FROM
CLASSES
TO
STATEMENTS
.
91
2.2.1
WHAT
ARE
STATEMENTS?
.
91
2.2.2
CLASS
DECLARATION
.
92
2.2.3
THE
JOURNEY
BEGINS
WITH
MAIN(STRING[])
.
93
2.2.4
THE
FIRST
METHOD
CALL:
PRINTLN(.)
.
93
2.2.5
ATOMIC
STATEMENTS
AND
STATEMENT
SEQUENCES
.
95
2.2.6
MORE
ABOUT
PRINT(.),
PRINTLN
(.),
AND
PRINTF(.)
FOR
SCREEN
OUTPUT
.
95
2.2.7
APPLICATION
PROGRAMMING
INTERFACE
DOCUMENTATION
.
97
2.2.8
EXPRESSIONS
.
98
2.2.9
EXPRESSION
STATEMENTS
.
98
2.2.10
FIRST
INSIGHTS
INTO
OBJECT
ORIENTATION
.
99
2.2.11
MODIFIERS
.
100
2.2.12
GROUPING
STATEMENTS
WITH
BLOCKS
.
101
2.3
DATA
TYPES,
TYPING,
VARIABLES,
AND
ASSIGNMENTS
.
102
2.3.1
OVERVIEW
OF
PRIMITIVE
DATA
TYPES
.
104
2.3.2
VARIABLE
DECLARATIONS
.
106
2.3.3
AUTOMATIC
TYPE
DETECTION
WITH
VAR
.
109
2.3.4
FINAL
VARIABLES
AND
THE
FINAL
MODIFIER
.
110
2.3.5
CONSOLE
INPUTS
.
110
2.3.6
TRUTH
VALUES
.
112
2.3.7
INTEGER
DATA
TYPES
.
112
2.3.8
UNDERSCORES
IN
NUMBERS
.
114
2.3.9
ALPHANUMERIC
CHARACTERS
.
115
2.3.10
THE
FLOAT
AND
DOUBLE
DATA
TYPES
.
115
2.3.11
GOOD
NAMES,
BAD
NAMES
.
117
2.3.12
NO
AUTOMATIC
INITIALIZATION
OF
LOCAL
VARIABLES
.
118
2.4
EXPRESSIONS,
OPERANDS,
AND
OPERATORS
.
119
2.4.1
ASSIGNMENT
OPERATOR
.
119
2.4.2
ARITHMETIC
OPERATORS
.
121
2.4.3
UNARY
MINUS
AND
PLUS
.
124
2.4.4
PREFIX
OR
POSTFIX
INCREMENT
AND
DECREMENT
.
124
2.4.5
ASSIGNMENT
WITH
OPERATION
(COMPOUND
ASSIGNMENT
OPERATOR)
.
126
2.4.6
RELATIONAL
OPERATORS
AND
EQUALITY
OPERATORS
.
128
2.4.7
LOGICAL
OPERATORS:
NOT,
AND,
OR,
AND
XOR
.
129
2.4.8
SHORT-CIRCUIT
OPERATORS
.
130
2.4.9
THE
RANK
OF
OPERATORS
IN
EVALUATION
ORDER
.
132
2.4.10
TYPECASTING
(CASTING)
.
135
2.4.11
OVERLOADED
PLUS
FOR
STRINGS
.
140
2.4.12
OPERATORS
MISSING*
.
141
2.5
CONDITIONAL
STATEMENTS
OR
CASE
DISTINCTIONS
.
142
2.5.1
BRANCHING
WITH
THE
IF
STATEMENT
.
142
2.5.2
CHOOSING
THE
ALTERNATIVE
WITH
AN
IF-ELSE
STATEMENT
.
145
2.5.3
THE
CONDITION
OPERATOR
.
148
2.5.4
THE
SWITCH
STATEMENT
PROVIDES
AN
ALTERNATIVE
.
151
2.5.5
SWITCH
EXPRESSIONS
.
157
2.6
ALWAYS
THE
SAME
WITH
LOOPS
.
160
2.6.1
THE
WHILE
LOOP
.
161
2.6.2
THE
DO-WHILE
LOOP
.
163
2.6.3
THE
FOR
LOOP
.
164
2.6.4
LOOP
CONDITIONS
AND
COMPARISONS
WITH
==
*
.
168
2.6.5
LOOP
TERMINATION
WITH
BREAK
AND
BACK
TO
TEST
WITH
CONTINUE
.
171
2.6.6
BREAK
AND
CONTINUE
WITH
LABELS*
.
174
2.7
METHODS
OF
A
CLASS
.
177
2.7.1
COMPONENTS
OF
A
METHOD
.
177
2,12
SIGNATURE
DESCRIPTION
IN
THE
JAVA
APPLICATION
PROGRAMMING
INTERFACE
DOCUMENTATION
.
179
2.7.3
CALLING
A
METHOD
.
180
2.7.4
DECLARING
METHODS
WITHOUT
PARAMETERS
.
181
2.7.5
STATIC
METHODS
(CLASS
METHODS)
.
182
2.7.6
PARAMETERS,
ARGUMENTS,
AND
VALUE
TRANSFERS
.
183
2.7.7
ENDING
METHODS
PREMATURELY
WITH
RETURN
.
185
2.7.8
UNREACHABLE
SOURCE
CODE
FOR
METHODS*
.
185
2.7.9
METHODS
WITH
RETURNS
.
186
2.7.10
OVERLOADING
METHODS
.
191
2.7.11
SCOPE
.
193
2.7.12
DEFAULT
VALUES
FOR
UNLISTED
ARGUMENTS*
.
195
2.7.13
RECURSIVE
METHODS*
.
195
2.7.14
TOWERS
OF
HANOI*
.
198
2.8
FURTHER
READING
.
200
3
CLASSES
AND
OBJECTS
201
3.1
OBJECT-ORIENTED
PROGRAMMING
.
201
3.1.1
WHY
OBJECT-ORIENTED
PROGRAMMING
AT
ALL?
.
202
3.1.2
WHEN
I
THINK
OF
JAVA,
I
THINK
OF
REUSABILITY
.
202
3.2
MEMBERS
OF
A
CLASS.
203
3.3
NATURAL
MODELING
USING
UNIFIED
MODELING
LANGUAGE*
.
204
3.4
CREATING
NEW
OBJECTS
.
206
3.4.1
CREATING
AN
INSTANCE
OF
A
CLASS
USING
THE
NEW
KEYWORD
.
206
3.4.2
DECLARING
REFERENCE
VARIABLES
.
207
3.4.3
LET
'
S
GET
TO
THE
POINT:
ACCESSING
OBJECT
VARIABLES
AND
METHODS
. 208
3.4.4
THE
CONNECTION
BETWEEN
NEW,
THE
HEAP,
AND
THE
GARBAGE
COLLECTOR
.
212
3.4.5
OVERVIEW
OF
POINT
METHODS
.
213
3.4.6
USING
CONSTRUCTORS
.
217
3.5
ZZZZZNAKE
.
218
3.6
TYING
PACKAGES,
IMPORTS,
AND
COMPILATION
UNITS
.
220
3.6.1
JAVA
PACKAGES
.
220
3.6.2
PACKAGES
IN
THE
STANDARD
LIBRARY
.
221
3.6.3
FULL
QUALIFICATION
AND
IMPORT
DECLARATION
.
221
3.6.4
REACHING
ALL
TYPES
OF
A
PACKAGE
WITH
TYPE-IMPORT-ON-DEMAND
.
223
3.6.5
HIERARCHICAL
STRUCTURES
ACROSS
PACKAGES
AND
MIRRORING
IN
THE
FILE
SYSTEM
.
224
3.6.6
THE
PACKAGE
DECLARATION
.
224
3.6.7
UNNAMED
PACKAGE
(DEFAULT
PACKAGE)
.
225
3.6.8
COMPILATION
UNIT
.
226
3.6.9
STATIC
IMPORT*
.
226
3.7
USING
REFERENCES,
DIVERSITY,
IDENTITY,
AND
EQUALITY
.
228
3.7.1
NULL
REFERENCES
AND
THE
QUESTION
OF
PHILOSOPHY
.
228
3.7.2
EVERYTHING
TO
NULL?
TESTING
REFERENCES
.
230
3.7.3
ASSIGNMENTS
WITH
REFERENCES
.
231
3.7.4
METHODS
WITH
REFERENCE
TYPES
AS
PARAMETERS
.
232
3.7.5
IDENTITY
OF
OBJECTS
.
236
3.7.6
EQUIVALENCE
AND
THE
EQUALS(.)
METHOD
.
237
3.8
FURTHER
READING
.
239
4
ARRAYS
AND
THEIR
AREAS
OF
USE
241
4.1
SIMPLE
FIELD
WORK
.
241
4.1.1
BASIC
COMPONENTS
.
242
4.1.2
DECLARING
ARRAY
VARIABLES
.
243
4.1.3
CREATING
ARRAY
OBJECTS
WITH
NEW
.
244
4.1.4 ARRAYS
WITH
{
CONTENTS
}
.
245
4.1.5
READING
THE
LENGTH
OF
AN
ARRAY
VIA
THE
OBJECT
VARIABLE
LENGTH
.
246
4.1.6
ACCESSING
THE
ELEMENTS
VIA
THE
INDEX
.
246
4.1.7
TYPICAL
ARRAY
ERRORS
.
248
4.1.8
PASSING
ARRAYS
TO
METHODS
.
250
4.1.9
MULTIPLE
RETURN
VALUES*
.
250
4.1.10
PREINITIALIZED
ARRAYS
.
251
4.2
THE
EXTENDED
FOR
LOOP
.
252
4.2.1
USING
ANONYMOUS
ARRAYS
IN
THE
EXTENDED
FOR
LOOP
.
253
4.2.2
EXAMPLE:
SEARCHING
ARRAYS
WITH
STRINGS
.
254
4.2.3
CREATING
RANDOM
PLAYER
POSITIONS
.
255
4.3
A
METHOD
WITH
A
VARIABLE
NUMBER
OF
ARGUMENTS
.
256
4.3.1
SYSTEM.OUT.PRINTF(.)
ACCEPTS
ANY
NUMBER
OF
ARGUMENTS
.
257
4.3.2
FINDING
THE
AVERAGE
OF
VARIABLE
ARGUMENTS
.
257
4.3.3
VARARG
DESIGN
TIPS*
.
259
4.4
MULTIDIMENSIONAL
ARRAYS*
.
259
4.4.1
NONRECTANGULAR
ARRAYS*
.
262
4.5
LIBRARY
SUPPORT
FOR
ARRAYS
.
264
4.5.1
CLONING
CAN
BE
WORTHWHILE:
PROPAGATING
ARRAYS
.
264
4.5.2
WHY
CAN
ARRAYS
"DO"
SO
LITTLE?
.
265
4.5.3
COPYING
ARRAY
CONTENTS
.
266
4.6
USING
THE
ARRAYS
CLASS
FOR
COMPARING,
FILLING,
SEARCHING,
AND
SORTING
.
267
4.6.1
STRING
REPRESENTATION
OF
AN
ARRAY
.
267
4.6.2
SORTING
.
268
4.6.3
PARALLEL
SORTING
.
269
4.6.4
COMPARING
ARRAYS
OF
PRIMITIVES
WITH
ARRAYS.EQUALS(.)
AND
ARRAYS.DEEPEQUALS(.)*
.
269
4.6.5
COMPARING
OBJECT
ARRAYS
USING
ARRAYS.EQUALS(.)
AND
ARRAYS.DEEPEQUALS(.)*
.
271
4.6.6
SEARCHING
DIFFERENCES
USING
MISMATCH
(.)*
.
272
4.6.7
FILLING
ARRAYS*
.
272
4.6.8
COPYING
ARRAY
SECTIONS*
.
273
4.6.9
BINARY
SEARCH*
.
275
4.6.10
LEXICOGRAPHIC
ARRAY
COMPARISONS
USING
COMPARE(.)
AND
COMPAREUNSIGNED(.)
.
276
4.6.11
ARRAYS
FOR
LISTS
WITH
ARRAYS.ASLIST(.):
CONVENIENT
FOR
SEARCHING
AND
COMPARING*
.
277
4.6.12
A
LONG
SNAKE
.
278
4.7
THE
ENTRY
POINT
FOR
THE
RUNTIME
SYSTEM:
MAIN(.)
.
281
4.7.1
CORRECT
DECLARATION
OF
THE
START
METHOD
.
281
4.7.2
PROCESSING
COMMAND
LINE
ARGUMENTS
.
282
4.7.3
THE
RETURN
TYPE
OF
MAIN(.)
AND
SYSTEM.EXIT(INT)*
.
283
4.8
FURTHER
READING
.
285
5
HANDLING
CHARACTERS
AND
STRINGS
287
5.1
FROM
ASCII
VIA
ISO-8859-1
TO
UNICODE
.
287
5.1.1
ASCII
.
287
5.1.2
ISO/IEC
8859-1
.
288
5.1.3
UNICODE
.
289
5.1.4
UNICODE
CHARACTER
ENCODING
.
291
5.1.5
ESCAPE
SEQUENCES
.
292
5.1.6
NOTATION
FOR
UNICODE
CHARACTERS AND
UNICODE
ESCAPES
.
292
5.1.7
JAVA
VERSIONS
GO
HAND
IN
HAND
WITH
THE
UNICODE
STANDARD*
.
294
5.2
DATA
TYPES
FOR
CHARACTERS
AND
STRINGS
.
295
5.3
THE
CHARACTER
CLASS
.
296
5.3.1
IS
THAT
SO?
.
296
5.3.2
CONVERTING
CHARACTERS
TO
UPPERCASE/LOWERCASE
.
298
5.3.3
FROM
CHARACTER
TO
STRING
.
299
5.3.4
FROM
CHARTO
INT:
FROM
CHARACTER
TO
NUMBER*
.
299
5.4
STRINGS
.
301
5.5
THE
STRING
CLASS
AND
ITS
METHODS
.
303
5.5.1
STRING
LITERALS
AS
STRING
OBJECTS
FOR
CONSTANT
STRINGS
.
303
5.5.2
CONCATENATION
WITH
+
.
303
5.5.3
MULTILINE
TEXT
BLOCKS
WITH
""
.
304
5.5.4
STRING
LENGTH
AND
TESTING
FOR
EMPTY
STRINGS
.
309
5.5.5
ACCESSING
A
SPECIFIC
CHARACTER
WITH
CHARAT(INT)
.
310
5.5.6
SEARCHINGFOR
CONTAINED
CHARACTERS
AND
STRINGS
.
311
5.5.7
THE
HANGMAN
GAME
.
314
5.5.8
GOOD
THAT
WE
HAVE
COMPARED
.
316
5.5.9
EXTRACTING
STRING
SECTIONS
.
320
5.5.10
APPENDING
STRINGS,
MERGING
STRINGS,
CASE
SENSITIVITY,
AND
WHITESPACE
.
325
5.5.11
SEARCHED,
FOUND,
AND
REPLACED
.
328
5.5.12
CREATING
STRING
OBJECTS
WITH
CONSTRUCTORS
AND
FROM
REPEATS*
.
330
5.6
MUTABLE
STRINGS
WITH
STRINGBUILDER
AND
STRINGBUFFER
.
333
5.6.1
CREATING
STRINGBUILDER
OBJECTS
.
334
5.6.2
CONVERTING
STRINGBUILDER
TO
OTHER
STRING
FORMATS
.
335
5.6.3
REQUESTING
CHARACTERS
OR
STRINGS
.
335
5.6.4
APPENDING
DATA
.
335
5.6.5
SETTING,
DELETING,
AND
REVERSING
CHARACTERS
AND
STRINGS
.
337
5.6.6
LENGTH
AND
CAPACITY
OF
A
STRINGBUILDER
OBJECT*
.
339
5.6.7
COMPARISON
OF
STRINGBUILDER
INSTANCES
AND
STRINGS
WITH
STRINGBUILDER
.
340
5.6.8
HASHCODE()
WITH
STRINGBUILDER*
.
342
5.7
CHARSEQUENCE
AS
BASE
TYPE
.
342
5.7.1
BASIC
OPERATIONS
OF
THE
INTERFACE
.
343
5.7.2
STATIC
COMPARE(.)
METHOD
IN
CHARSEQUENCE
.
344
5.7.3
DEFAULT
METHODS
IN
THE
CHARSEQUENCE
INTERFACE*
.
345
5.8
CONVERTING
PRIMITIVES
AND
STRINGS
.
345
5.8.1
CONVERTING
DIFFERENT
TYPES
TO
STRING
REPRESENTATIONS
.
345
5.8.2
CONVERTING
STRING
CONTENTS
TO
A
PRIMITIVE
VALUE
.
347
5.8.3
STRING
REPRESENTATION
IN
BINARY,
HEX,
AND
OCTAL
FORMATS*
.
349
5.8.4
PARSE*(.)
AND
PRINT*()
METHODS
IN
DATATYPECONVERTER*
.
353
5.9
CONCATENATING
STRINGS
.
353
5.9.1
CONCATENATING
STRINGS
WITH
STRINGJOINER
.
353
5.10
DECOMPOSING
STRINGS
.
355
5.10.1
SPLITTING
STRINGS
VIA
SPLIT(.)
.
356
5.10.2
YES
WE
CAN,
YES
WE
SCAN:
THE
SCANNER
CLASS
.
356
5.11
FORMATTING
OUTPUTS
.
360
5.11.1
FORMATTING
AND
OUTPUTTING
VIA
FORMAT()
.
361
5.12
FURTHER
READING
.
367
6
WRITING
CUSTOM
CLASSES
369
6.1
DECLARING
CUSTOM
CLASSES
WITH
MEMBERS
.
369
6.1.1
MINIMUM
CLASS
.
370
6.1.2
DECLARING
OBJECT
VARIABLES
.
370
6.1.3
DECLARING
METHODS
.
373
6.1.4
SHADOWED
VARIABLES
.
375
6.1.5
THE
THIS
REFERENCE
.
377
6.2
PRIVACY
AND
VISIBILITY
.
380
6.2.1
FOR
THE
PUBLIC:
PUBLIC
.
381
6.2.2
NOT
PUBLIC:
PASSWORDS
ARE
PRIVATE
.
381
6.2.3
WHY
NOT
FREE
METHODS
AND
VARIABLES
FOR
ALL?
.
383
6.2.4
PRIVATE
IS
NOT
QUITE
PRIVATE:
IT
DEPENDS
ON
WHO
SEES
IT*
.
383
6.2.5
DECLARING
ACCESS
METHODS
FOR
OBJECT
VARIABLES
.
384
6.2.6
SETTERS
AND
GETTERS
ACCORDING
TO
THE
JAVABEANS
SPECIFICATION
. 384
6.2.7
PACKAGE-VISIBILITY
.
386
6.2.8
VISIBILITY
SUMMARY
.
388
6.3
ONE
FOR
ALL:
STATIC
METHODS
AND
CLASS
VARIABLES
.
390
6.3.1
WHY
STATIC
MEMBERS
ARE
USEFUL
.
391
6.3.2
STATIC
MEMBERS
WITH
STATIC
.
392
6.3.3
USING
STATIC
MEMBERS
VIA
REFERENCES?*
.
393
6.3.4
WHY
CASE
SENSITIVITY
IS
IMPORTANT*
.
394
6.3.5
STATIC
VARIABLES
FOR
DATA
EXCHANGE*
.
395
6.3.6
STATIC
MEMBERS
AND
OBJECT
MEMBERS*
.
396
6.4
CONSTANTS
AND
ENUMERATIONS
.
397
6.4.1
CONSTANTS
VIA
STATIC
FINAL
VARIABLES
.
397
6.4.2
TYPE-UNSAFE
ENUMERATIONS
.
398
6.4.3
ENUMERATION
TYPES:
TYPE-SAFE
ENUMERATIONS
WITH
ENUM
.
400
6.5
CREATING
AND
DESTROYING
OBJECTS
.
405
6.5.1
WRITING
CONSTRUCTORS
.
405
6.5.2
RELATIONSHIP
OF
METHOD
AND
CONSTRUCTOR
.
406
6.5.3
THE
DEFAULT
CONSTRUCTOR
.
407
6.5.4
PARAMETERIZED
AND
OVERLOADED
CONSTRUCTORS
.
408
6.5.5
COPY
CONSTRUCTORS
.
410
6.5.6
CALLING
ANOTHER
CONSTRUCTOR
OF
THE
SAME
CLASS
VIA
THIS(.)
.
412
6.5.7
IMMUTABLE
OBJECTS
AND
WITHER
METHODS
.
414
6.5.8
WE
DON'T
MISS
YOU:
THE
GARBAGE
COLLECTOR
.
416
6.6
CLASS
AND
OBJECT
INITIALIZATION*
.
418
6.6.1
INITIALIZING
OBJECT
VARIABLES
.
418
6.6.2
STATIC
BLOCKS
AS
CLASS
INITIALIZERS
.
420
6.6.3
INITIALIZING
CLASS
VARIABLES
.
421
6.6.4
COMPILED
ASSIGNMENTS
OF
THE
CLASS
VARIABLES
.
421
6.6.5
INSTANCE
INITIALIZER
.
422
6.6.6
SETTING
FINAL
VALUES
IN
THE
CONSTRUCTOR
AND
STATIC
BLOCKS
.
425
6.7
CONCLUSION
.
426
7
OBJECT-ORIENTED
RELATIONSHIP
427
7.1
ASSOCIATIONS
BETWEEN
OBJECTS
.
427
7.1.1
ASSOCIATION
TYPES
.
427
7.1.2
UNIDIRECTIONAL
1-TO-L
RELATIONSHIP
.
428
7.1.3
BECOMING
FRIENDS:
BIDIRECTIONAL
1-TO-L
RELATIONSHIPS
.
429
7.1.4
UNIDIRECTIONAL
1-TO-N
RELATIONSHIPS
.
431
7.2
INHERITANCE
.
436
7.2.1
INHERITANCE
IN
JAVA
.
437
7.2.2
MODELING
EVENTS
.
438
7.2.3
THE
IMPLICIT
BASE
CLASS
JAVA.LANG.OBJECT
.
440
7.2.4
SINGLE
AND
MULTIPLE
INHERITANCE*
.
440
7.2.5
DO
CHILDREN
SEE
EVERYTHING?
THE
PROTECTED
VISIBILITY
.
441
7.2.6
CONSTRUCTORS
IN
INHERITANCE
AND
SUPER(.)
.
442
7.3
TYPES
IN
HIERARCHIES
.
447
7.3.1
AUTOMATIC
AND
EXPLICIT
TYPECASTING
.
447
7.3.2
THE
SUBSTITUTION
PRINCIPLE
.
450
7.3.3
TESTING
TYPES
WITH
THE
INSTANCEOF
OPERATOR
.
452
7.3.4
PATTERN
MATCHING
FOR
INSTANCEOF
.
455
7.4
OVERRIDING
METHODS
.
457
7.4.1
PROVIDING
METHODS
IN
SUBCLASSES
WITH
A
NEW
BEHAVIOR
.
457
7.4.2
WITH
SUPER
TO
THE
PARENTS
.
461
7.5
TESTING
DYNAMIC
BINDINGS
.
463
7.5.1
BOUND
TO
TOSTRING()
.
463
7.5.2
IMPLEMENTING
SYSTEM.OUT.PRINTLN(OBJECT)
.
465
7.6
FINAL
CLASSES
AND
FINAL
METHODS
.
466
7.6.1
FINAL
CLASSES
.
466
7.6.2
NON-OVERRIDABLE
(FINAL)
METHODS
.
466
7.7
ABSTRACT
CLASSES
AND
ABSTRACT
METHODS
.
468
7.7.1
ABSTRACT
CLASSES
.
468
7.7.2
ABSTRACT
METHODS
.
470
7.8
FURTHER
INFORMATION
ON
OVERRIDING
AND
DYNAMIC
BINDING
.
476
7.8.1
NO
DYNAMIC
BINDING
FOR
PRIVATE,
STATIC,
AND
FINAL
METHODS
.
476
7.8.2
COVARIANT
RETURN
TYPES
.
476
7.8.3
ARRAY
TYPES
AND
COVARIANCE*
.
477
7.8.4
DYNAMIC
BINDING
EVEN
WITH
CONSTRUCTOR
CALLS*
.
478
7.8.5
NO
DYNAMIC
BINDING
FOR
COVERED
OBJECT
VARIABLES*
.
480
7.9
A
PROGRAMMING
TASK
.
482
8
INTERFACES,
ENUMERATIONS,
SEALED
CLASSES,
RECORDS
483
8.1
INTERFACES
.
483
8.1.1
INTERFACES
ARE
NEW
TYPES
.
483
8.1.2
DECLARING
INTERFACES
.
484
8.1.3
ABSTRACT
METHODS
IN
INTERFACES
.
484
8.1.4
IMPLEMENTING
INTERFACES
.
485
8.1.5
A
POLYMORPHISM
EXAMPLE
WITH
INTERFACES
.
487
8.1.6
MULTIPLE
INHERITANCE
WITH
INTERFACES
.
488
8.1.7
NO
RISK
OF
COLLISION
WITH
MULTIPLE
INHERITANCE*
.
491
8.1.8
EXTENDING
INTERFACES:
SUBINTERFACES
.
493
8.1.9
CONSTANT
DECLARATIONS
FOR
INTERFACES
.
494
8.1.10
SUBSEQUENT
IMPLEMENTATION
OF
INTERFACES*
.
494
8.1.11
STATIC
PROGRAMMED
METHODS
IN
INTERFACES
.
495
8.1.12
EXTENDING
AND
MODIFYING
INTERFACES
.
497
8.1.13
DEFAULT
METHODS
.
498
8.1.14
DECLARING
AND
USING
EXTENDED
INTERFACES
.
500
8.1.15
PUBLIC
AND
PRIVATE
INTERFACE
METHODS
.
503
8.1.16
EXTENDED
INTERFACES,
MULTIPLE
INHERITANCE,
AND
AMBIGUITIES*
.
504
8.1.17
CREATING
BUILDING
BLOCKS
WITH
DEFAULT
METHODS*
.
508
8.1.18
MARKER
INTERFACES*
.
512
8.1.19
(ABSTRACT)
CLASSES
AND
INTERFACES
IN
COMPARISON
.
513
8.2
ENUMERATION
TYPES
.
513
8.2.1
METHODS
ON
ENUM
OBJECTS
.
514
8.2.2
ENUMERATIONS
WITH
CUSTOM
METHODS,
CONSTRUCTORS,
AND
INITIALIZERS*
.
518
8.3
SEALED
CLASSES
AND
INTERFACES
.
523
8.3.1
SEALED
CLASSES
AND
INTERFACES
.
525
8.3.2
SUBCLASSES
ARE
FINAL,
SEALED,
AND
NON-SEALED
.
527
8.3.3
ABBREVIATED
NOTATIONS
.
528
8.4
RECORDS
.
529
8.4.1
SIMPLE
RECORDS
.
529
8.4.2
RECORDS
WITH
METHODS
.
531
8.4.3
CUSTOMIZING
RECORD
CONSTRUCTORS
.
532
8.4.4
ADDING
CONSTRUCTORS
.
534
8.4.5
SEALED
INTERFACES
AND
RECORDS
.
535
8.4.6
RECORDS:
SUMMARY
.
536
9
THERE
MUST
BE
EXCEPTIONS
539
9.1
FENCING
IN
PROBLEM
AREAS
.
539
9.1.1
EXCEPTIONS
IN
JAVA
WITH
TRY
AND
CATCH
.
540
9.1.2
CHECKED
AND
UNCHECKED
EXCEPTIONS
.
540
9.1.3
A
NUMBERFORMATEXCEPTION
(UNCHECKED
EXCEPTION)
.
541
9.1.4
APPENDING
A
DATE/TIMESTAMP
TO
A
TEXT
FILE
(CHECKED
EXCEPTION)
.
543
9.1.5
REPEATING
CANCELED
SECTIONS*
.
545
9.1.6
EMPTY
CATCH
BLOCKS
.
546
9.1.7
CATCHING
MULTIPLE
EXCEPTIONS
.
547
9.1.8
COMBINING
IDENTICAL
CATCH
BLOCKS
WITH
MULTI-CATCH
.
548
9.2
REDIRECTING
EXCEPTIONS
AND
THROWS
AT
THE
HEAD
OF
METHODS/
CONSTRUCTORS
.
549
9.2.1
THROWS
IN
CONSTRUCTORS
AND
METHODS
.
549
9.3
THE
CLASS
HIERARCHY
OF
EXCEPTIONS
.
550
9.3.1
MEMBERS
OF
THE
EXCEPTION
OBJECT
.
550
9.3.2
BASE
TYPE
THROWABLE
.
551
9.3.3
THE
EXCEPTION
HIERARCHY
.
552
9.3.4
CATCHING
SUPER-EXCEPTIONS
.
552
9.3.5
ALREADY
CAUGHT?
.
554
9.3.6
PROCEDURE
OF
AN
EXCEPTIONAL
SITUATION
.
555
9.3.7
NO
GENERAL
CATCHING!
.
555
9.3.8
KNOWN
RUNTIMEEXCEPTION
CLASSES
.
557
9.3.9
INTERCEPTION
IS
POSSIBLE,
BUT
NOT
MANDATORY
.
558
9.4
FINAL
HANDLING
USING
FINALLY
.
558
9.4.1
THE
IGNORANT
VERSION
.
559
9.4.2
THE
WELL-INTENTIONED
ATTEMPT
.
560
9.4.3
FROM
NOW
ON,
CLOSING
IS
PART
OF
THE
AGENDA
.
560
9.4.4
SUMMARY
.
562
9.4.5
A
TRY
WITHOUT
A
CATCH,
BUT
A
TRY-FINAILY
.
562
9.5
TRIGGERING
CUSTOM
EXCEPTIONS
.
564
9.5.1
TRIGGERING
EXCEPTIONS
VIA
THROW
.
564
9.5.2
KNOWING
AND
USING
EXISTING
RUNTIME
EXCEPTION
TYPES
.
566
9.5.3
TESTING
PARAMETERS
AND
GOOD
ERROR
MESSAGES
.
568
9.5.4
DECLARING
NEW
EXCEPTION
CLASSES
.
570
9.5.5
CUSTOM
EXCEPTIONS
AS
SUBCLASSES
OF
EXCEPTION
OR
RUNTIMEEXCEPTION?
.
571
9.5.6
CATCHING
AND
REDIRECTING
EXCEPTIONS*
.
574
9.5.7
CHANGING
THE
CALL
STACK
OF
EXCEPTIONS*
.
575
9.5.8
NESTED
EXCEPTIONS*
.
576
9.6
TRY
WITH
RESOURCES
(AUTOMATIC
RESOURCE
MANAGEMENT)
.
579
9.6.1
TRY
WITH
RESOURCES
.
580
9.6.2
THE
AUTOCLOSEABLE
INTERFACE
.
581
9.6.3
EXCEPTIONS
TO
CLOSE()
.
582
9.6.4
TYPES
THAT
ARE
AUTOCLOSEABLE
AND
CLOSEABLE
.
583
9.6.5
USING
MULTIPLE
RESOURCES
.
583
9.6.6
SUPPRESSED
EXCEPTIONS*
.
585
9.7
SPECIAL
FEATURES
OF
EXCEPTION
HANDLING*
.
588
9.7.1
RETURN
VALUES
FOR
THROWN
EXCEPTIONS
.
588
9.7.2
EXCEPTIONS
AND
RETURNS
DISAPPEAR:
THE
DUO
RETURN
AND
FINALLY
.
589
9.7.3
THROWS
ON
OVERRIDDEN
METHODS
.
590
9.7.4
UNREACHABLE
CATCH
CLAUSES
.
592
9.8
HARD
ERRORS:
ERROR*
.
593
9.9
ASSERTIONS*.
594
9.9.1
USING
ASSERTIONS
IN
CUSTOM
PROGRAMS
.
595
9.9.2
ENABLING
ASSERTIONS
AND
RUNTIME
ERRORS
.
595
9.9.3
ENABLING
OR
DISABLING
ASSERTIONS
MORE
DETAILED
.
597
9.10
CONCLUSION
.
597
10
NESTED
TYPES
599
10.1
NESTED
CLASSES,
INTERFACES,
AND
ENUMERATIONS
.
599
10.2
STATIC
NESTED
TYPES
.
601
10.2.1
MODIFIERS
AND
VISIBILITY
.
602
10.2.2
RECORDS
AS
CONTAINERS
.
602
10.2.3
IMPLEMENTING
STATIC
NESTED
TYPES*
.
602
10.3
NON-STATIC
NESTED
TYPES
.
603
10.3.1
CREATING
INSTANCES
OF
INNER
CLASSES
.
603
10.3.2
THE
THIS
REFERENCE
.
604
10.3.3
CLASS
FILES
GENERATED
BY
THE
COMPILER*
.
605
10.4
LOCAL
CLASSES
.
605
10.4.1
EXAMPLE
WITH
A
CUSTOM
DECLARATION
.
606
10.4.2
USING
A
LOCAL
CLASS
FOR
A
TIMER
.
606
10.5
ANONYMOUS
INNER
CLASSES
.
607
10.5.1
USING
AN
ANONYMOUS
INNER
CLASS
FOR
THE
TIMER
.
608
10.5.2
IMPLEMENTING
ANONYMOUS
INNER
CLASSES*
.
609
10.5.3
CONSTRUCTORS
OF
ANONYMOUS
INNER
CLASSES
.
609
10.5.4
ACCESSING
LOCAL
VARIABLES
FROM
LOCAL
AND
ANONYMOUS
CLASSES*
.
611
10.5.5
NESTED
CLASSES
ACCESS
PRIVATE
MEMBERS
.
612
10.6
NESTS
.
613
10.7
CONCLUSION
.
614
11
SPECIAL
TYPES
OF
JAVA
SE
615
11.1
OBJECT
IS
THE
MOTHER
OF
ALL
CLASSES
.
616
11.1.1
CLASS
OBJECTS
.
616
11.1.2
OBJECT
IDENTIFICATION
WITH
TOSTRING()
.
617
11.1.3
OBJECT
EQUIVALENCE
WITH
EQUALS(.)
AND
IDENTITY
.
619
11.1.4
CLONING
AN
OBJECT
USING
CLONE()*
.
625
11.1.5
RETURNING
HASH
VALUES
VIA
HASHCODEQ*
.
630
11.1.6
SYSTEM.IDENTITYHASHCODE(.)
AND
THE
PROBLEM
OF
NON-UNIQUE
OBJECT
REFERENCES*
.
636
11.1.7
SYNCHRONIZATION*
.
637
11.2
WEAK
REFERENCES
AND
CLEANERS
.
638
11.3
THEJAVA.UTIL.OBJECTS
UTILITY
CLASS
.
639
11.3.1
BUILT-IN
NULL
TESTS
FOR
EQUALS(.)/HASHCODE()
.
639
11.3.2
OBJECTS.TOSTRING(.)
.
640
11.3.3
NULL
CHECKS
WITH
BUILT-IN
EXCEPTION
HANDLING
.
640
11.3.4
TESTS
FOR
NULL
.
641
11.3.5
CHECKING
INDEX-RELATED
PROGRAM
ARGUMENTS
FOR
CORRECTNESS
.
642
11.4
COMPARING
OBJECTS
AND
ESTABLISHING
ORDER
.
643
11.4.1
NATURALLY
ORDERED
OR
NOT?
.
643
11.4.2
COMPARED)
METHOD
OF
THE
COMPARABLE
AND
COMPARATOR
INTERFACES
.
644
11.4.3
RETURN
VALUES
ENCODE
THE
ORDER
.
645
11.4.4
SORTING
CANDY
BY
CALORIES
USING
A
SAMPLE
COMPARATOR
.
645
11.4.5
TIPS
FOR
COMPARATOR
AND
COMPARABLE
IMPLEMENTATIONS
.
647
11.4.6
STATIC
AND
DEFAULT
METHODS
IN
COMPARATOR
.
648
11.5
WRAPPER
CLASSES
AND
AUTOBOXING
.
651
11.5.1
CREATING
WRAPPER
OBJECTS
.
653
11.5.2
CONVERSIONS
TO
A
STRING
REPRESENTATION
.
654
11.5.3
PARSING
FROM
A
STRING
REPRESENTATION
.
655
11.5.4
THE
NUMBER
BASE
CLASS
FOR
NUMERIC
WRAPPER
OBJECTS
.
655
11.5.5
PERFORMING
COMPARISONS
WITH
COMPARE*(.),
COMPARETO(.),
EQUALS(.),
AND
HASH
VALUES
.
657
11.5.6
STATIC
REDUCTION
METHODS
IN
WRAPPER
CLASSES
.
660
11.5.7
CONSTANTS
FOR
THE
SIZE
OF
A
PRIMITIVE
TYPE*
.
661
11.5.8
HANDLING
UNSIGNED
NUMBERS*
.
661
11.5.9
THE
INTEGER
AND
LONG
CLASSES
.
663
11.5.10
THE
DOUBLE
AND
FLOAT
CLASSES
FOR
FLOATS
.
664
11.5.11
THE
BOOLEAN
CLASS
.
664
11.5.12
AUTOBOXING:
BOXING
AND
UNBOXING
.
665
11.6 ITERATOR,
ITERABLE*
.
670
11.6.1
THE
ITERATOR
INTERFACE
.
670
11.6.2
THE
SUPPLIER
OF
THE
ITERATOR
.
673
11.6.3
THE
ITERABLE
INTERFACE
.
674
11.6.4
EXTENDED
FOR
AND
ITERABLE
.
674
11.6.5
INTERNAL
ITERATION
.
675
11.6.6
IMPLEMENTING
A
CUSTOM
ITERABLE*
.
676
11.7
ANNOTATIONS
IN
JAVA
PLATFORM,
STANDARD
EDITION
.
677
11.7.1
PLACES
FOR
ANNOTATIONS
.
677
11.7.2
ANNOTATION
TYPES
FROM
JAVA.LANG
.
678
11.7.3
@
DEPRECATED
.
678
11.7.4
ANNOTATIONS
WITH
ADDITIONAL
INFORMATION
.
679
11.7.5
@SUPPRESSWARNINGS
.
679
11.8
FURTHER
READING
.
682
12
GENERICS T
683
12.1
INTRODUCTION
TO
JAVA
GENERICS
.
683
12.1.1
MAN
VERSUS
MACHINE:
TYPE
CHECKING
OF
THE
COMPILER
AND
THE
RUNTIME
ENVIRONMENT
.
683
12.1.2
ROCKETS
.
684
12.1.3
DECLARING
GENERIC
TYPES
.
686
12.1.4
USING
GENERICS
.
688
12.1.5
DIAMONDS
ARE
FOREVER
.
690
12.1.6
GENERIC
INTERFACES
.
693
12.1.7
GENERIC
METHODS/CONSTRUCTORS
AND
TYPE
INFERENCE
.
695
12.2
IMPLEMENTING
GENERICS,
TYPE
ERASURE,
AND
RAW
TYPES
.
699
12.2.1
IMPLEMENTATION
OPTIONS
.
699
12.2.2
TYPE
ERASURE
.
699
12.2.3
PROBLEMS
WITH
TYPE
ERASURE
.
700
12.2.4
RAW
TYPES
.
704
12.3
RESTRICTING
TYPES
VIA
BOUNDS
.
706
12.3.1
SIMPLE
RESTRICTIONS
WITH
EXTENDS
.
707
12.3.2
OTHER
SUPERTYPES
WITH
&
.
709
12.4
TYPE
PARAMETERS
IN
THE
THROWS
CLAUSE*
.
710
12.4.1
DECLARING
A
CLASS
WITH
TYPE
VARIABLE
E
EXTENDS
EXCEPTION
.
710
12.4.2
PARAMETERIZED
TYPE
FOR
TYPE
VARIABLE
E
EXTENDS
EXCEPTION
.
710
12.5
INHERITANCE
AND
INVARIANCE
WITH
GENERICS
.
713
12.5.1
ARRAYS
ARE
COVARIANT
.
713
12.5.2
GENERICS
AREN
'
T
COVARIANT,
BUT
INVARIANT
.
714
12.5.3
WILDCARDS
WITH
?
.
715
12.5.4
BOUNDED
WILDCARDS
.
717
12.5.5
BOUNDED
WILDCARD
TYPES
AND
BOUNDED
TYPE
VARIABLES
.
720
12.5.6
THE
PECS
PRINCIPLE
.
722
12.6
CONSEQUENCES
OF
TYPE
ERASURE:
TYPE
TOKENS,
ARRAYS*
.
725
12.6.1
TYPE
TOKENS
.
725
12.6.2
SUPERTYPE
TOKENS
.
727
12.6.3
GENERICS
AND
ARRAYS
.
728
12.7
FURTHER
READING
.
729
13
LAMBDA
EXPRESSIONS
AND
FUNCTIONAL
PROGRAMMING
731
13.1
FUNCTIONAL
INTERFACES
AND
LAMBDA
EXPRESSIONS
.
731
13.1.1
CLASSES
IMPLEMENT
INTERFACES
.
731
13.1.2
LAMBDA
EXPRESSIONS
IMPLEMENT
INTERFACES
.
733
13.1.3
FUNCTIONAL
INTERFACES
.
734
13.1.4
THE
TYPE
OF
A
LAMBDA
EXPRESSION
DEPENDS
ON
THE
TARGET
TYPE
.
735
13.1.5
@FUNCTIONALLNTERFACE
ANNOTATIONS
.
740
13.1.6
SYNTAX
FOR
LAMBDA
EXPRESSIONS
.
741
13.1.7
THE
ENVIRONMENT
OF
LAMBDA
EXPRESSIONS
AND
VARIABLE
ACCESSES
.
745
13.1.8
EXCEPTIONS
IN
LAMBDA
EXPRESSIONS
.
751
13.1.9
CLASSES
WITH
AN
ABSTRACT
METHOD
AS
A
FUNCTIONAL
INTERFACE?*
.
755
13.2
METHOD
REFERENCES
.
755
13.2.1
MOTIVATION
.
755
13.2.2
METHOD
REFERENCES
WITH
::
.
756
13.2.3
VARIATIONS
OF
METHOD
REFERENCES
.
756
13.3
CONSTRUCTOR
REFERENCES
.
759
13.3.1
WRITING
CONSTRUCTOR
REFERENCES
.
760
13.3.2
PARAMETERLESS
AND
PARAMETERIZED
CONSTRUCTORS
.
761
13.3.3
USEFUL
PREDEFINED
INTERFACES
FOR
CONSTRUCTOR
REFERENCES
.
761
13.4
FUNCTIONAL
PROGRAMMING
.
762
13.4.1
CODE
=
DATA
.
762
13.4.2
PROGRAMMING
PARADIGMS:
IMPERATIVE
OR
DECLARATIVE
.
763
13.4.3
PRINCIPLES
OF
FUNCTIONAL
PROGRAMMING
.
764
13.4.4
IMPERATIVE
PROGRAMMING
AND
FUNCTIONAL
PROGRAMMING
.
767
13.4.5
COMPARATOR
AS
AN
EXAMPLE
OF
HIGHER-ORDER
FUNCTIONS
.
769
13.4.6
VIEWING
LAMBDA
EXPRESSIONS
AS
MAPPINGS
OR
FUNCTIONS
.
769
13.5
FUNCTIONAL
INTERFACES
FROM
THE
JAVA.UTIL.FUNCTION
PACKAGE
.
770
13.5.1
BLOCKS
WITH
CODE
AND
THE
FUNCTIONAL
INTERFACE
CONSUMER
.
771
13.5.2
SUPPLIER
.
773
13.5.3
PREDICATES
AND
JAVA.UTIL.FUNCTION.PREDICATE
.
773
13.5.4
FUNCTIONS
VIA
THE
FUNCTIONAL
INTERFACE
JAVA.UTIL.FUNCTION.FUNCTION
.
775
13.5.5
I
TAKE
TWO
.
779
13.5.6
FUNCTIONAL
INTERFACES
WITH
PRIMITIVES
.
782
13.6
OPTIONAL
IS
NOT
A
NON-STARTER
.
784
13.6.1
USING
NULL
.
785
13.6.2
THE
OPTIONAL
TYPE
.
787
13.6.3
STARTING
FUNCTIONAL
INTERFACES
WITH
OPTIONAL
.
789
13.6.4
PRIMITIVE-OPTIONAL
WITH
SPECIAL
OPTIONAL*
CLASSES
.
792
13.7
WHAT
IS
SO
FUNCTIONAL
NOW?
.
795
13.7.1
RECYCLABILITY
.
795
13.7.2
STATELESS,
IMMUTABLE
.
795
13.8
FURTHER
READING
.
797
14
ARCHITECTURE,
DESIGN,
AND
APPLIED
OBJECT
ORIENTATION
799
14.1
SOLID
MODELING
.
799
14.1.1
THREE
RULES
.
800
14.1.2
SOLID
.
800
14.1.3
DON
'
T
BE
STUPID
.
802
14.2
ARCHITECTURE,
DESIGN,
AND
IMPLEMENTATION
.
803
14.3
DESIGN
PATTERNS
.
803
14.3.1
MOTIVATION
FOR
DESIGN
PATTERNS
.
804
14.3.2
SINGLETON
.
805
14.3.3
FACTORY
METHODS
.
806
14.3.4
IMPLEMENTING
THE
OBSERVER
PATTERN
WITH
LISTENERS
.
807
14.4
FURTHER
READING
.
811
15
JAVA
PLATFORM
MODULE
SYSTEM
813
15.1
CLASS
LOADER
AND
.
.
813
15.1.1
LOADING
CLASSES
PER
REQUEST
.
813
15.1.2
WATCHING
THE
CLASS
LOADER
AT
WORK
.
814
15.1.3
JMOD
FILES
AND
JAR
FILES
.
815
15.1.4
WHERE
THE
CLASSES
COME
FROM:
SEARCH
LOCATIONS
AND
SPECIAL
CLASS
LOADERS
.
816
15.1.5
SETTING
THE
SEARCH
PATH
.
817
15.2
IMPORTING
MODULES
.
819
15.2.1
WHO
SEES
WHOM?
.
819
15.2.2
PLATFORM
MODULES
AND
A
JMOD
EXAMPLE
.
821
15.2.3
USING
INTERNAL
PLATFORM
FEATURES:
-ADD-EXPORTS
.
821
15.2.4
INTEGRATING
NEW
MODULES
.
824
15.3
DEVELOPING
CUSTOM
MODULES
.
825
15.3.1
MODULE
COM.TUTEGO.CANDYTESTER
.
825
15.3.2
MODULE
DECLARATION
WITH
MODULE-INFO.JAVA
AND
EXPORTS
.
826
15.3.3
MODULE
COM.TUTEGO.MAIN
.
826
15.3.4
MODULE
INFO
FILE
WITH
REQUIRES
.
827
15.3.5
WRITING
MODULE
INSERTERS:
JAVA
VIRTUAL
MACHINE
SWITCHES
-P
AND-M
.
828
15.3.6
EXPERIMENTS
WITH
THE
MODULE
INFO
FILE
.
829
15.3.7
AUTOMATIC
MODULES
.
829
15.3.8
UNNAMED
MODULES
.
830
15.3.9
READABILITY
AND
ACCESSIBILITY
.
831
15.3.10
MODULE
MIGRATION
.
832
15.4
FURTHER
READING
.
833
16
THE
CLASS
LIBRARY
835
16.1
THE
JAVA
CLASS
PHILOSOPHY.
835
16.1.1
MODULES,
PACKAGES,
AND
TYPES
.
836
16.1.2
OVERVIEW
OF
THE
PACKAGES
OF
THE
STANDARD
LIBRARY
.
838
16.2
SIMPLE
TIME
MEASUREMENT
AND
PROFILING*
.
842
16.2.1
PROFILERS
.
843
16.3
THE
CLASS
CLASS
.
843
16.3.1
OBTAINING
A
CLASS
OBJECT
.
843
16.3.2
A
CLASS
IS
A
TYPE
.
846
16.4
THE
UTILITY
CLASSES
SYSTEM
AND
MEMBERS
.
846
16.4.1
MEMORY
OF
THE
JAVA
VIRTUAL
MACHINE
.
847
16.4.2
NUMBER
OF
CPUS
OR
CORES
.
848
16.4.3
SYSTEM
PROPERTIES
OF
THE
JAVA
ENVIRONMENT
.
848
16.4.4
SETTING
CUSTOM
PROPERTIES
FROM
THE
CONSOLE*
.
850
16.4.5
NEWLINE
CHARACTERS
AND
LINE.SEPARATOR
.
851
16.4.6
ENVIRONMENT
VARIABLES
OF
THE
OPERATING
SYSTEM
.
852
16.5
THE
LANGUAGES
OF
DIFFERENT
COUNTRIES
.
853
16.5.1
REGIONAL
LANGUAGES
VIA
LOCALE
OBJECTS
.
853
16.6
OVERVIEW
OF
IMPORTANT
DATE
CLASSES
.
857
16.6.1
UNIX
TIME:
JANUARY
1,1970
.
858
16.6.2
SYSTEM.CURRENTTIMEMILLIS()
.
858
16.6.3
SIMPLE
TIME
CONVERSIONS
VIA
TIMEUNIT
.
859
16.7 DATE-TIME
API
.
860
16.7.1
INITIAL
OVERVIEW
.
860
16.7.2
HUMAN
TIME
AND
MACHINE
TIME
.
861
16.7.3
THE
LOCALDATE
DATE
CLASS
.
863
16.8
LOGGING
WITH
JAVA
.
864
16.8.1
LOGGING
APPLICATION
PROGRAMMING
INTERFACES
.
865
16.8.2
LOGGING
WITH
JAVA.UTIL.LOGGING
.
865
16.9 MAVEN:
RESOLVING
BUILD
MANAGEMENT
AND
DEPENDENCIES
.
867
16.9.1
DEPENDENCY
TO
BE
ACCEPTED
.
868
16.9.2
LOCAL
AND
THE
REMOTE
REPOSITORY
.
868
16.9.3
LIFECYCLES,
STAGES,
AND
MAVEN
PLUGINS
.
869
16.10
FURTHER
READING
.
869
17
INTRODUCTION
TO
CONCURRENT
PROGRAMMING
871
17.1
CONCURRENCY
AND
PARALLELISM
.
871
17.1.1
MULTITASKING,
PROCESSES,
AND
THREADS
.
872
17.1.2
THREADS
AND
PROCESSES
.
873
17.1.3
HOW
CONCURRENT
PROGRAMS
CAN
INCREASE
SPEED
.
874
17.1.4
HOW
JAVA
CAN
PROVIDE
FOR
CONCURRENCY
.
875
17.2
GENERATING
EXISTING
THREADS
AND
NEW
THREADS
.
875
17.2.1
MAIN
THREAD
.
876
17.2.2
WHO
AM
I?
.
876
17.2.3
IMPLEMENTING
THE
RUNNABLE
INTERFACE
.
876
17.2.4
STARTING
THREAD
WITH
RUNNABLE
.
878
17.2.5
PARAMETERIZING
RUNNABLE
.
.
879
17.2.6
EXTENDING
THE
THREAD
CLASS*
.
880
17.3
THREAD
MEMBERS
AND
STATES
.
882
17.3.1
THE
NAME
OF
A
THREAD
.
882
17.3.2
THE
STATES
OF
A
THREAD*
.
882
17.3.3
SLEEPERS
WANTED
.
883
17.3.4
WHEN
THREADS
ARE
FINISHED
.
885
17.3.5
TERMINATING
A
THREAD
POLITELY
USING
INTERRUPTS
.
885
17.3.6
UNHANDLED
EXCEPTIONS,
THREAD
END,
AND
UNCAUGHTEXCEPTIONHANDLER
.
887
17.3.7
THE
STOP()
FROM
THE
OUTSIDE
AND
THE
RESCUE
WITH
THREADDEATH*
.
889
17.3.8
STOPPING
AND
RESUMING
THE
WORK*
.
891
17.3.9
PRIORITY*
.
892
17.4
ENTER
THE
EXECUTOR
.
893
17.4.1
THE
EXECUTOR
INTERFACE
.
893
17.4.2
HAPPY
AS
A
GROUP:
THE
THREAD
POOLS
.
895
17.4.3
THREADS
WITH
RETURN
VIA
CALLABLE
.
897
17.4.4
MEMORIES
OF
THE
FUTURE:
THE
FUTURE
RETURN
.
899
17.4.5
PROCESSING
MULTIPLE
CALLABLE
OBJECTS
.
902
17.4.6
COMPLETIONSERVICE
AND
EXECUTORCOMPLETIONSERVICE
.
903
17.4.7
SCHEDULEDEXECUTORSERVICE:
REPETITIVE
TASKS
AND
TIME
CONTROLS
.
904
17.4.8
ASYNCHRONOUS
PROGRAMMING
WITH
COMPLETABLEFUTURE
(COMPLETIONSTAGE)
.
905
17.5
FURTHER
READING
.
907
18
INTRODUCTION
TO
DATA
STRUCTURES
AND
ALGORITHMS
909
18.1
LISTS
.
909
18.1.1
FIRST
LIST
EXAMPLE
.
910
18.1.2
SELECTION
CRITERION
ARRAYLIST
OR
LINKEDLIST
.
911
18.1.3
THE
LIST
INTERFACE
.
911
18.1.4
ARRAYLIST
.
918
18.1.5
LINKEDLIST
.
919
18.1.6
THE
ARRAY
ADAPTER
ARRAYS.ASLIST(.)
.
921
18.1.7
LISTITERATOR*
.
923
18.1.8
UNDERSTANDING
TOARRAY(.)
OF
COLLECTION:
RECOGNIZING
TRAPS
.
924
18.1.9
MANAGING
PRIMITIVE
ELEMENTS
IN
DATA
STRUCTURES
.
927
18.2
SETS
.
928
18.2.1
A
FIRST
EXAMPLE
OF
A
SET
.
928
18.2.2
METHODS
OF
THE
SET
INTERFACE
.
930
18.2.3
HASHSET
.
932
18.2.4
TREESET:
THE
SORTED
SET
.
933
18.2.5
THE
INTERFACES
NAVIGABLESET
AND
SORTEDSET
.
935
18.2.6
LINKEDHASHSET
.
937
18.3
ASSOCIATIVE
MEMORY
.
938
18.3.1
THE
HASHMAP
AND
TREEMAP
CLASSES
AND
STATIC
MAP
METHODS
.
938
18.3.2
INSERTING
AND
QUERYING
THE
ASSOCIATIVE
MEMORY
.
942
18.4
THE
STREAM
API
.
944
18.4.1
DECLARATIVE
PROGRAMMING
.
944
18.4.2
INTERNAL
VERSUS
EXTERNAL
ITERATION
.
945
18.4.3
WHAT
IS
A
STREAM?
.
946
18.5
CREATING
A
STREAM
.
947
18.5.1
STREAM.OF*(.)
.
948
18.5.2
STREAM.GENERATE(.)
.
949
18.5.3
STREAM.ITERATE(.)
.
949
18.5.4
PARALLEL
OR
SEQUENTIAL
STREAMS
.
950
18.6
TERMINAL
OPERATIONS
.
951
18.6.1
NUMBER
OF
ELEMENTS
.
951
18.6.2
AND
NOW
ALL:
FOREACH*(.)
.
951
18.6.3
GETTING
INDIVIDUAL
ELEMENTS
FROM
THE
STREAM
.
952
18.6.4
EXISTENCE
TESTS
WITH
PREDICATES
.
953
18.6.5
REDUCING
A
STREAM
TO
ITS
SMALLEST
OR
LARGEST
ELEMENT
.
953
18.6.6
REDUCING
A
STREAM
WITH
ITS
OWN
FUNCTIONS
.
954
18.6.7
WRITING
RESULTS
TO
A
CONTAINER,
PART
1:
COLLECT(.)
.
956
18.6.8
WRITING
RESULTS
TO
A
CONTAINER,
PART
2:
COLLECTOR
AND
COLLECTORS
.
957
18.6.9
WRITING
RESULTS
TO
A
CONTAINER,
PART
3:
GROUPINGS
.
959
18.6.10
TRANSFERRING
STREAM
ELEMENTS
TO
AN
ARRAY
OR
AN
ITERATOR
.
961
18.7
INTERMEDIARY
OPERATIONS
.
962
18.7.1
ELEMENT
PREVIEWS
.
963
18.7.2
FILTERING
ELEMENTS
.
963
18.7.3
STATEFUL
INTERMEDIARY
OPERATIONS
.
963
18.7.4
PREFIX
OPERATIONS
.
965
18.7.5
IMAGES
.
966
18.8
FURTHER
READING
.
968
19
FILES
AND
DATA
STREAMS
969
19.1
OLD
AND
NEW
WORLDS
IN
JAVA.IO
AND
JAVA.NIO
.
969
19.1.1
JAVA.IO
PACKAGE
WITH
THE
FILE
CLASS
.
969
19.1.2
NIO.2
AND
THE
JAVA.NIO
PACKAGE
.
970
19.2
FILE
SYSTEMS
AND
PATHS
.
970
19.2.1
FILESYSTEM
AND
PATH
.
971
19.2.2
THE
FILES
UTILITY
CLASS
.
977
19.3
RANDOM
ACCESS
FILES
.
980
19.3.1
OPENING
A
RANDOMACCESSFILE
FOR
READING
AND
WRITING
.
980
19.3.2
READING
FROM
RANDOMACCESSFILE
.
981
19.3.3
WRITING
WITH
RANDOMACCESSFILE
.
983
19.3.4
THE
LENGTH
OF
THE
RANDOMACCESSFILE
.
983
19.3.5
BACK
AND
FORTH
WITHIN
THE
FILE
.
984
19.4
BASE
CLASSES
FOR
INPUT/OUTPUT
.
985
19.4.1
THE
FOUR
ABSTRACT
BASE
CLASSES
.
985
19.4.2
THE
ABSTRACT
BASE
CLASS
OUTPUTSTREAM
.
986
19.4.3
THE
ABSTRACT
BASE
CLASS
INPUTSTREAM
.
988
19.4.4
THE
ABSTRACT
BASE
CLASS
WRITER
.
990
19.4.5
THE
APPENDABLE
INTERFACE*
.
991
19.4.6
THE
ABSTRACT
BASE
CLASS
READER
.
992
19.4.7
THE
INTERFACES
CLOSEABLE,
AUTOCLOSEABLE,
AND
FLUSHABLE
.
995
19.5
READING
FROM
FILES
AND
WRITING
TO
FILES
.
996
19.5.1
OBTAINING
BYTE-ORIENTED
DATA
STREAMS
VIA
FILES
.
997
19.5.2
OBTAINING
CHARACTER-ORIENTED
DATA
STREAMS
VIA
FILES
.
997
19.5.3
THE
FUNCTION
OF
OPENOPTION
IN
THE
FILES.NEW*(.)
METHODS
.
999
19.5.4
LOADING
RESOURCES
FROM
THE
MODULE
PATH
AND
FROM
JAR
FILES
.
1001
19.6
FURTHER
READING
.
1003
20
INTRODUCTION
TO
DATABASE
MANAGEMENT
WITH
JDBC
1005
20.1
RELATIONAL
DATABASES
AND
JAVA
ACCESS
.
1005
20.1.1
THE
RELATIONAL
MODEL
.
1005
20.1.2
JAVA
APPLICATION
PROGRAMMING
INTERFACES
FOR
ACCESSING
RELATIONAL
DATABASES
.
1006
20.1.3
THE
JDBC
API
AND
IMPLEMENTATIONS:
THE
JDBC
DRIVER
.
1006
20.1.4
H2
IS
THE
TOOL
IN
JAVA
.
1007
20.2
A
SAMPLE
QUERY
.
1008
20.2.1
STEPS
TO
QUERY
THE
DATABASE
.
1008
20.2.2
ACCESSING
THE
RELATIONAL
DATABASE
WITH
JAVA
.
1008
20.3
FURTHER
READING
.
1009
21
BITS
AND
BYTES,
MATHEMATICS
AND
MONEY
1011
21.1
BITS
AND
BYTES
.
1011
21.1.1
THE
BIT
OPERATORS:
COMPLEMENT,
AND,
OR,
AND
XOR
.
1012
21.1.2
REPRESENTATION
OF
INTEGERS
IN
JAVA:
TWO
'
S
COMPLEMENT
.
1013
21.1.3
THE
BINARY,
OCTAL,
AND
HEXADECIMAL
PLACE
VALUE
SYSTEMS
.
1014
21.1.4
EFFECT
OF
TYPECASTING
ON
BIT
PATTERNS
.
1016
21.1.5
WORKING
WITHOUT
SIGNS
.
1018
21.1.6
THE
SHIFT
OPERATORS
.
1021
21.1.7
SETTING,
CLEARING,
REVERSING,
AND
TESTING
A
BIT
.
1023
21.1.8
BIT
METHODS
OF
THE
INTEGER
AND
LONG
CLASSES
.
1024
21.2
FLOATING
POINT
ARITHMETIC
IN
JAVA
.
1025
21.2.1
SPECIAL
VALUES
FOR
INFINITY,
ZERO,
AND
NOT
A
NUMBER
.
1026
21.2.2
STANDARD
NOTATION
AND
SCIENTIFIC
NOTATION
FOR
FLOATS*
.
1029
21.2.3
MANTISSAS
AND
EXPONENTS*
.
1029
21.3
THE
MEMBERS
OF
THE
MATH
CLASS
.
1031
21.3.1
OBJECT
VARIABLES
OF
THE
MATH
CLASS
.
1031
21.3.2
ABSOLUTE
VALUES
AND
SIGNS
.
1032
21.3.3
MAXIMUMS/MINIMUMS
.
1032
21.3.4
ROUNDING
VALUES
.
1033
21.3.5
REMAINDER
OF
AN
INTEGER
DIVISION*
.
1035
21.3.6
DIVISION
WITH
ROUNDING
TOWARD
NEGATIVE
INFINITY
AND
ALTERNATIVE
REMAINDERS*
.
1036
21.3.7
MULTIPLY-ACCUMULATE
.
1038
21.3.8
SQUARE
ROOT
AND
EXPONENTIAL
METHODS
.
1038
21.3.9
THE
LOGARITHM*
.
1039
21.3.10
ANGLE
METHODS*
.
1040
21.3.11
RANDOM
NUMBERS
.
1041
21.4
ACCURACY
AND
THE
VALUE
RANGE
OF
TYPE
AND
OVERFLOW
CONTROL*
.
1042
21.4.1
THE
LARGEST
AND
SMALLEST
VALUES
.
1042
21.4.2
OVERFLOW
AND
EVERYTHING
ENTIRELY
EXACT
.
1042
21.4.3
WHAT
IN
THE
WORLD
DOES
THE
ULP
METHOD
DO?
.
1045
21.5
RANDOM
NUMBERS:
RANDOM,
THREADLOCALRANDOM,
AND
SECURERANDOM
.
1046
21.5.1
THE
RANDOM
CLASS
.
1047
21.5.2
THREADLOCALRANDOM
.
1050
21.5.3
THE
SECURERANDOM
CLASS*
.
1050
21.6
LARGE
NUMBERS*
.
1051
21.6.1
THE
BIGINTEGER
CLASS
.
1051
21.6.2
EXAMPLE:
QUITE
LONG
FACTORIALS
WITH
BIGINTEGER
.
1058
21.6.3
LARGE
FLOATS
WITH
BIGDECIMAL
.
1059
21.6.4
CONVENIENTLY
SETTING
THE
CALCULATION
ACCURACY
VIA
MATHCONTEXT
.
1062
21.6.5
CALCULATING
EVEN
FASTER
WITH
MUTABLE
IMPLEMENTATIONS
.
1063
21.7 MONEY
AND
CURRENCY
.
1064
21.7.1
REPRESENTING
AMOUNTS
OF
MONEY
.
1064
21.7.2
ISO
4217
.
1064
21.7.3
REPRESENTING
CURRENCIES
IN
JAVA
.
1065
21.8
FURTHER
READING
.
1066
22
TESTING
WITH
JUNIT
1067
22.1 SOFTWARE
TESTS
.
1067
22.1.1
PROCEDURE
FOR
WRITING
TEST
CASES
.
1068
22.2
THE
JUNIT
TESTING
FRAMEWORK
.
1068
22.2.1
JUNIT
VERSIONS
.
1069
22.2.2
INTEGRATING
JUNIT
.
1069
22.2.3
TEST-DRIVEN
DEVELOPMENT
AND
THE
TEST-FIRST
APPROACH
.
1069
22.2.4
TEST,
IMPLEMENT,
TEST,
IMPLEMENT,
TEST,
REJOICE
.
1070
22.2.5
RUNNING
JUNIT
TESTS
.
1072
22.2.6
ASSERT*(.)
METHODS
OF
THE
ASSERTIONS
CLASS
.
1073
22.2.7
TESTING
EXCEPTIONS
.
1076
22.2.8
SETTING
LIMITS
FOR
EXECUTION
TIMES
.
1077
22.2.9
LABELS
WITH
@DISPLAYNAME
.
1078
22.2.10
NESTED
TESTS
.
1078
22.2.11
IGNORING
TESTS
.
1078
22.2.12
CANCELING
TESTS
WITH
METHODS
OF
THE
ASSUMPTIONS
CLASS
.
1079
22.2.13
PARAMETERIZED
TESTS
.
1079
22.3
JAVA
ASSERTION
LIBRARIES
AND
ASSERTJ
.
1081
22.3.1
ASSERTJ
.
1081
22.4
STRUCTURE
OF
LARGE
TEST
CASES
.
1083
22.4.1
FIXTURES
.
1083
22.4.2
COLLECTIONS
OF
TEST
CLASSES
AND
CLASS
ORGANIZATION
.
1084
22.5
GOOD
DESIGN
ENABLES
EFFECTIVE
TESTING
.
1085
22.6
DUMMY,
FAKE,
STUB,
AND
MOCK
.
1087
22.7
JUNIT
EXTENSIONS
AND
TESTING
ADD-ONS
.
1089
22.7.1
WEB
TESTS
.
1089
22.7.2
TESTING
THE
DATABASE
INTERFACE
.
1089
22.8
FURTHER
READING
.
1089
23
THE
TOOLS
OF
THE
JDK
1091
23.1
OVERVIEW
.
1091
23.1.1
STRUCTURE
AND
COMMON
SWITCHES
.
1092
23.2
TRANSLATING
JAVA
SOURCES.
1092
23.2.1
THE
JAVA
COMPILER
OF
THE
JAVA
DEVELOPMENT
KIT
.
1092
23.2.2
NATIVE
COMPILERS
.
1092
23.3
THE
JAVA
RUNTIME
ENVIRONMENT
.
1093
23.3.1
SWITCHES
OF
THE
JAVA
VIRTUAL
MACHINE
.
1093
23.3.2
THE
DIFFERENCE
BETWEENJAVA.EXE
ANDJAVAW.EXE
.
1095
23.4
DOCUMENTATION
COMMENTS
WITH
JAVADOC
.
1096
23.4.1
SETTING
A
DOCUMENTATION
COMMENT
.
1096
23.4.2
CREATING
DOCUMENTATION
WITH
THE
JAVADOC
TOOL
.
1098
23.4.3
HTML
TAGS
IN
DOCUMENTATION
COMMENTS*
.
1099
23.4.4
GENERATED
FILES
.
1099
23.4.5
DOCUMENTATION
COMMENTS
AT
A
GLANCE*
.
1100
23.4.6
JAVADOC
AND
DOCLETS*
.
1101
23.4.7
DEPRECATED
TYPES
AND
MEMBERS
.
1101
23.4.8
JAVADOC
VERIFICATION
WITH
DOCLINT
.
1104
23.5
THE
JAR
ARCHIVE
FORMAT
.
1105
23.5.1
USING
THE
JAR
UTILITY
.
1105
23.5.2
THE
MANIFEST
.
1105
23.5.3
LAUNCHING
APPLICATIONS
IN
JAVA
ARCHIVES:
EXECUTABLE
JAR
FILES
.
1106
23.6
FURTHER
READING
.
1107
THE
AUTHOR
.
1109
INDEX
.
1111 |
any_adam_object | 1 |
any_adam_object_boolean | 1 |
author | Ullenboom, Christian |
author_GND | (DE-588)123404738 |
author_facet | Ullenboom, Christian |
author_role | aut |
author_sort | Ullenboom, Christian |
author_variant | c u cu |
building | Verbundindex |
bvnumber | BV048861986 |
classification_rvk | ST 250 |
ctrlnum | (OCoLC)1376413937 (DE-599)DNB1260568296 |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | 1st edition |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>00000nam a22000008c 4500</leader><controlfield tag="001">BV048861986</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20240516</controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">230315s2023 gw a||| |||| 00||| eng d</controlfield><datafield tag="015" ind1=" " ind2=" "><subfield code="a">22,N26</subfield><subfield code="2">dnb</subfield></datafield><datafield tag="016" ind1="7" ind2=" "><subfield code="a">1260568296</subfield><subfield code="2">DE-101</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781493222957</subfield><subfield code="c">EUR 56.03 (DE), EUR 59.95 (DE) (freier Preis), EUR 61.70 (AT) (freier Preis), CHF 76.95 (freier Preis)</subfield><subfield code="9">978-1-4932-2295-7</subfield></datafield><datafield tag="024" ind1="3" ind2=" "><subfield code="a">9781493222957</subfield></datafield><datafield tag="028" ind1="5" ind2="2"><subfield code="a">Bestellnummer: 459/22295</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1376413937</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)DNB1260568296</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rda</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="044" ind1=" " ind2=" "><subfield code="a">gw</subfield><subfield code="c">XA-DE</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-19</subfield><subfield code="a">DE-29T</subfield><subfield code="a">DE-1102</subfield><subfield code="a">DE-92</subfield><subfield code="a">DE-573</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 250</subfield><subfield code="0">(DE-625)143626:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="8">1\p</subfield><subfield code="a">004</subfield><subfield code="2">23sdnb</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Ullenboom, Christian</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)123404738</subfield><subfield code="4">aut</subfield></datafield><datafield tag="240" ind1="1" ind2="0"><subfield code="a">Java ist auch eine Insel</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Java</subfield><subfield code="b">the comprehensive guide</subfield><subfield code="c">Christian Ullenboom</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">1st edition</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Boston, MA</subfield><subfield code="b">Rheinwerk</subfield><subfield code="c">[2023]</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">1126 Seiten</subfield><subfield code="b">Illustrationen, Diagramme</subfield><subfield code="c">25.4 cm x 17.8 cm</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="490" ind1="0" ind2=" "><subfield code="a">Rheinwerk computing</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Java</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4401313-9</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Java Standard Edition 17</subfield><subfield code="0">(DE-588)1286419034</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="653" ind1=" " ind2=" "><subfield code="a">Computing Series</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Java Standard Edition 17</subfield><subfield code="0">(DE-588)1286419034</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2="1"><subfield code="a">Java</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4401313-9</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="710" ind1="2" ind2=" "><subfield code="a">Galileo Press Inc.</subfield><subfield code="0">(DE-588)106510992X</subfield><subfield code="4">pbl</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">X:MVB</subfield><subfield code="q">text/html</subfield><subfield code="u">http://deposit.dnb.de/cgi-bin/dokserv?id=876285178bcc4a7486c864a5735f3b0f&prov=M&dok_var=1&dok_ext=htm</subfield><subfield code="3">Inhaltstext</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">DNB Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=034127086&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="883" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="a">vlb</subfield><subfield code="d">20220622</subfield><subfield code="q">DE-101</subfield><subfield code="u">https://d-nb.info/provenance/plan#vlb</subfield></datafield></record></collection> |
id | DE-604.BV048861986 |
illustrated | Illustrated |
index_date | 2024-07-03T21:42:17Z |
indexdate | 2024-07-20T04:41:29Z |
institution | BVB |
institution_GND | (DE-588)106510992X |
isbn | 9781493222957 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-034127086 |
oclc_num | 1376413937 |
open_access_boolean | |
owner | DE-19 DE-BY-UBM DE-29T DE-1102 DE-92 DE-573 |
owner_facet | DE-19 DE-BY-UBM DE-29T DE-1102 DE-92 DE-573 |
physical | 1126 Seiten Illustrationen, Diagramme 25.4 cm x 17.8 cm |
publishDate | 2023 |
publishDateSearch | 2023 |
publishDateSort | 2023 |
publisher | Rheinwerk |
record_format | marc |
series2 | Rheinwerk computing |
spelling | Ullenboom, Christian Verfasser (DE-588)123404738 aut Java ist auch eine Insel Java the comprehensive guide Christian Ullenboom 1st edition Boston, MA Rheinwerk [2023] 1126 Seiten Illustrationen, Diagramme 25.4 cm x 17.8 cm txt rdacontent n rdamedia nc rdacarrier Rheinwerk computing Java Programmiersprache (DE-588)4401313-9 gnd rswk-swf Java Standard Edition 17 (DE-588)1286419034 gnd rswk-swf Computing Series Java Standard Edition 17 (DE-588)1286419034 s Java Programmiersprache (DE-588)4401313-9 s DE-604 Galileo Press Inc. (DE-588)106510992X pbl X:MVB text/html http://deposit.dnb.de/cgi-bin/dokserv?id=876285178bcc4a7486c864a5735f3b0f&prov=M&dok_var=1&dok_ext=htm Inhaltstext DNB Datenaustausch application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=034127086&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA Inhaltsverzeichnis 1\p vlb 20220622 DE-101 https://d-nb.info/provenance/plan#vlb |
spellingShingle | Ullenboom, Christian Java the comprehensive guide Java Programmiersprache (DE-588)4401313-9 gnd Java Standard Edition 17 (DE-588)1286419034 gnd |
subject_GND | (DE-588)4401313-9 (DE-588)1286419034 |
title | Java the comprehensive guide |
title_alt | Java ist auch eine Insel |
title_auth | Java the comprehensive guide |
title_exact_search | Java the comprehensive guide |
title_exact_search_txtP | Java the comprehensive guide |
title_full | Java the comprehensive guide Christian Ullenboom |
title_fullStr | Java the comprehensive guide Christian Ullenboom |
title_full_unstemmed | Java the comprehensive guide Christian Ullenboom |
title_short | Java |
title_sort | java the comprehensive guide |
title_sub | the comprehensive guide |
topic | Java Programmiersprache (DE-588)4401313-9 gnd Java Standard Edition 17 (DE-588)1286419034 gnd |
topic_facet | Java Programmiersprache Java Standard Edition 17 |
url | http://deposit.dnb.de/cgi-bin/dokserv?id=876285178bcc4a7486c864a5735f3b0f&prov=M&dok_var=1&dok_ext=htm http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=034127086&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT ullenboomchristian javaistaucheineinsel AT galileopressinc javaistaucheineinsel AT ullenboomchristian javathecomprehensiveguide AT galileopressinc javathecomprehensiveguide |