100% found this document useful (2 votes)
92 views

Java Programming Eigth Edition Joyce Farrell instant download

The document provides information about the 'Java Programming, Eighth Edition' by Joyce Farrell, including download links and additional related titles. It outlines the book's contents, which cover various programming concepts such as methods, classes, and object-oriented programming. The document also includes links to other educational resources and ebooks available on the website.

Uploaded by

hankizeveson
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
92 views

Java Programming Eigth Edition Joyce Farrell instant download

The document provides information about the 'Java Programming, Eighth Edition' by Joyce Farrell, including download links and additional related titles. It outlines the book's contents, which cover various programming concepts such as methods, classes, and object-oriented programming. The document also includes links to other educational resources and ebooks available on the website.

Uploaded by

hankizeveson
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 78

Java Programming Eigth Edition Joyce Farrell

install download

https://ebookmeta.com/product/java-programming-eigth-edition-
joyce-farrell/

Download more ebook from https://ebookmeta.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookmeta.com
to discover even more!

Java Programming (MindTap Course List), 10th Edition


Joyce Farrell

https://ebookmeta.com/product/java-programming-mindtap-course-
list-10th-edition-joyce-farrell/

Programming Logic & Design, Comprehensive 9th edition


Joyce Farrell

https://ebookmeta.com/product/programming-logic-design-
comprehensive-9th-edition-joyce-farrell/

Programming Logic and Design, Comprehensive 9th Edition


Joyce Farrell

https://ebookmeta.com/product/programming-logic-and-design-
comprehensive-9th-edition-joyce-farrell/

Practical CockroachDB: Building Fault-Tolerant


Distributed SQL Databases 1st Edition Rob Reid

https://ebookmeta.com/product/practical-cockroachdb-building-
fault-tolerant-distributed-sql-databases-1st-edition-rob-reid/
Colon Cancer Diagnosis and Therapy Volume 2 2nd Edition
Ganji Purnachandra Nagaraju Dhananjay Shukla Naveen
Kumar Vishvakarma

https://ebookmeta.com/product/colon-cancer-diagnosis-and-therapy-
volume-2-2nd-edition-ganji-purnachandra-nagaraju-dhananjay-
shukla-naveen-kumar-vishvakarma/

Socioeconomic Pragmatic Variation Speech Acts and


Address Forms in Context 1st Edition Larssyn Staley

https://ebookmeta.com/product/socioeconomic-pragmatic-variation-
speech-acts-and-address-forms-in-context-1st-edition-larssyn-
staley/

The Greycoast Pack Complete Collection 1st Edition


Jena Wade & Lorelei M. Hart.

https://ebookmeta.com/product/the-greycoast-pack-complete-
collection-1st-edition-jena-wade-lorelei-m-hart/

The Digital Selling Handbook 1st Edition Bill Stinnett

https://ebookmeta.com/product/the-digital-selling-handbook-1st-
edition-bill-stinnett/

Cancer Stem Cells Basic Concept and Therapeutic


Implications Farhadul Islam

https://ebookmeta.com/product/cancer-stem-cells-basic-concept-
and-therapeutic-implications-farhadul-islam/
Illegal Immigrants Model Minorities The Cold War of
Chinese American Narrative 1st Edition Heidi Kim

https://ebookmeta.com/product/illegal-immigrants-model-
minorities-the-cold-war-of-chinese-american-narrative-1st-
edition-heidi-kim/
EIGHTHEDITION

JAVA PROGRAMMING

JOYCE FARRELL

Java Programming,

Eighth Edition

Joyce Farrell

© 2016, 2014, 2012 Cengage Learning

WCN: 02-200-203

Library of Congress Control Number: 2014956152

ISBN: 978-1-285-85691-9

Cengage Learning

20 Channel Center Street

Boston, MA 02210

USA

Printed in the United States of America

Print Number: 01

Print Year: 2015

Brief Contents

Preface . . . . . . . . . . . . . . . . . . . . . . xxi CHAPTER 1


Creating Java Programs . . . . . . . . . . . . . . . . 1

CHAPTER 2

Using Data . . . . . . . . . . . . . . . . . . . . . 53

CHAPTER 3

Using Methods, Classes, and Objects

. . . . . . . 119

CHAPTER 4

More Object Concepts . . . . . . . . . . . . . . . 183

CHAPTER 5

Making Decisions . . . . . . . . . . . . . . . . . 245

CHAPTER 6

Looping . . . . . . . . . . . . . . . . . . . . . 301

CHAPTER 7

Characters, Strings, and the StringBuilder . . . 353

CHAPTER 8

Arrays . . . . . . . . . . . . . . . . . . . . . . 393

CHAPTER 9

Advanced Array Concepts . . . . . . . . . . . . . 439

CHAPTER 10

Introduction to Inheritance . . . . . . . . . . . . . 491


CHAPTER 11

Advanced Inheritance Concepts . . . . . . . . . . 537

CHAPTER 12

Exception Handling . . . . . . . . . . . . . . . . 593

CHAPTER 13

File Input and Output

. . . . . . . . . . . . . . . 665

CHAPTER 14

Introduction to Swing Components

. . . . . . . . 729

CHAPTER 15

Advanced GUI Topics . . . . . . . . . . . . . . . 791

CHAPTER 16

Graphics . . . . . . . . . . . . . . . . . . . . . 861

APPENDIX A

Working with the Java Platform . . . . . . . . . . . 919

APPENDIX B

Data Representation

. . . . . . . . . . . . . . . 925

APPENDIX C
Formatting Output

. . . . . . . . . . . . . . . . 931

APPENDIX D

Generating Random Numbers

. . . . . . . . . . . 941

APPENDIX E

Javadoc . . . . . . . . . . . . . . . . . . . . . 949

Glossary

....................

957

Index . . . . . . . . . . . . . . . . . . . . . .

979

Contents

Preface . . . . . . . . . . . . . . . . . . xxi

CHAPTER 1

Creating Java Programs . . . . . . . . . . .

Learning Programming Terminology . . . . . . . . . . . . . . 2

Comparing Procedural and Object-Oriented

Programming Concepts . . . . . . . . . . . . . . . . . . 6
Procedural Programming . . . . . . . . . . . . . . . . . . 6

Object-Oriented Programming . . . . . . . . . . . . . . . . 6

Understanding Classes, Objects, and Encapsulation . . . . . . 7

Understanding Inheritance and Polymorphism . . . . . . . . . 9

Features of the Java Programming Language . . . . . . . . . . 11

Java Program Types . . . . . . . . . . . . . . . . . . . . 12

Analyzing a Java Application that Produces Console Output . . . . 13

Understanding the Statement that Produces the Output . . . . . 14

Understanding the First Class . . . . . . . . . . . . . . . 15

Indent Style

. . . . . . . . . . . . . . . . . . . . . . . 18

Understanding the main() Method . . . . . . . . . . . . . 19

Saving a Java Class . . . . . . . . . . . . . . . . . . . . 21

Compiling a Java Class and Correcting Syntax Errors . . . . . . . 23

Compiling a Java Class . . . . . . . . . . . . . . . . . . . 23

Correcting Syntax Errors . . . . . . . . . . . . . . . . . . 24

Running a Java Application and Correcting Logic Errors . . . . . . 29

Running a Java Application . . . . . . . . . . . . . . . . . 29

Modifying a Compiled Java Class . . . . . . . . . . . . . . 30

Correcting Logic Errors . . . . . . . . . . . . . . . . . . 31


Adding Comments to a Java Class . . . . . . . . . . . . . . . 32

Creating a Java Application that Produces GUI Output

. . . . . . 35

Finding Help . . . . . . . . . . . . . . . . . . . . . . . . 38

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . . 39

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . . 41

Chapter Summary . . . . . . . . . . . . . . . . . . . . . . 45

Review Questions . . . . . . . . . . . . . . . . . . . . . . 46

Exercises . . . . . . . . . . . . . . . . . . . . . . . . . 48

Programming Exercises . . . . . . . . . . . . . . . . . . 48

Debugging Exercises . . . . . . . . . . . . . . . . . . . 50

Game Zone . . . . . . . . . . . . . . . . . . . . . . . . 50

Case Problems . . . . . . . . . . . . . . . . . . . . . . 51

CHAPTER 2

Using Data . . . . . . . . . . . . . . . . . 53

Declaring and Using Constants and Variables . . . . . . . . . . 54

Declaring Variables . . . . . . . . . . . . . . . . . . . . 55

Declaring Named Constants . . . . . . . . . . . . . . . . 56

The Scope of Variables and Constants . . . . . . . . . . . . 58

Concatenating Strings to Variables and Constants . . . . . . . 58


Pitfall: Forgetting that a Variable Holds

One Value at a Time . . . . . . . . . . . . . . . . . . . 60

Learning About Integer Data Types . . . . . . . . . . . . . . 64

Using the boolean Data Type . . . . . . . . . . . . . . . . . 70

Learning About Floating-Point Data Types . . . . . . . . . . . . 71

Using the char Data Type . . . . . . . . . . . . . . . . . . 72

Using the Scanner Class to Accept Keyboard Input . . . . . . . 78

Pitfall: Using nextLine() Fol owing One of the

Other Scanner Input Methods . . . . . . . . . . . . . . 81

Using the JOptionPane Class to Accept GUI Input . . . . . . . 87

Using Input Dialog Boxes . . . . . . . . . . . . . . . . . . 87

Using Confirm Dialog Boxes . . . . . . . . . . . . . . . . 91

Performing Arithmetic . . . . . . . . . . . . . . . . . . . . 93

Associativity and Precedence . . . . . . . . . . . . . . . . 95

Writing Arithmetic Statements Efficiently . . . . . . . . . . . 96

Pitfall: Not Understanding Imprecision

in Floating-Point Numbers

. . . . . . . . . . . . . . . . 96

Understanding Type Conversion . . . . . . . . . . . . . . . 101

Automatic Type Conversion . . . . . . . . . . . . . . . . 101


Explicit Type Conversions

. . . . . . . . . . . . . . . . 102

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 106

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 107

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 111

Review Questions . . . . . . . . . . . . . . . . . . . . . 111

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 114

Programming Exercises . . . . . . . . . . . . . . . . . 114

Debugging Exercises . . . . . . . . . . . . . . . . . . 116

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 117

Case Problems . . . . . . . . . . . . . . . . . . . . . 118

CHAPTER 3

Using Methods, Classes, and Objects . . . . 119

Understanding Method Calls and Placement . . . . . . . . . . 120

Understanding Method Construction . . . . . . . . . . . . . 123

Access Specifiers . . . . . . . . . . . . . . . . . . . . 123

Return Type . . . . . . . . . . . . . . . . . . . . . . 124

Method Name . . . . . . . . . . . . . . . . . . . . . 125

Parentheses . . . . . . . . . . . . . . . . . . . . . . 125

Adding Parameters to Methods . . . . . . . . . . . . . . . 129


Creating a Method that Receives a Single Parameter . . . . . 130

Creating a Method that Requires Multiple Parameters . . . . . 133

Creating Methods that Return Values . . . . . . . . . . . . . 136

Chaining Method Calls . . . . . . . . . . . . . . . . . . 138

Learning About Classes and Objects . . . . . . . . . . . . . 142

Creating a Class . . . . . . . . . . . . . . . . . . . . . 145

Creating Instance Methods in a Class . . . . . . . . . . . . 147

Organizing Classes . . . . . . . . . . . . . . . . . . . 150

Declaring Objects and Using their Methods . . . . . . . . . . 154

Understanding Data Hiding . . . . . . . . . . . . . . . . 156

An Introduction to Using Constructors . . . . . . . . . . . . 159

Understanding that Classes Are Data Types . . . . . . . . . . 163

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 168

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 168

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 170

Review Questions . . . . . . . . . . . . . . . . . . . . . 171

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 174

Programming Exercises . . . . . . . . . . . . . . . . . 174

Debugging Exercises . . . . . . . . . . . . . . . . . . 177

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 178


Case Problems . . . . . . . . . . . . . . . . . . . . . 179

CHAPTER 4

More Object Concepts . . . . . . . . . . . 183

Understanding Blocks and Scope . . . . . . . . . . . . . . 184

Overloading a Method . . . . . . . . . . . . . . . . . . . 192

Automatic Type Promotion in Method Calls . . . . . . . . . 194

Learning About Ambiguity . . . . . . . . . . . . . . . . . 199

Creating and Cal ing Constructors with Parameters . . . . . . . 200

Overloading Constructors

. . . . . . . . . . . . . . . . 201

Learning About the this Reference . . . . . . . . . . . . . 205

Using the this Reference to Make Overloaded Constructors More


Efficient . . . . . . . . . . . . . . . . . . . . . 209

Using static Fields . . . . . . . . . . . . . . . . . . . 213

Using Constant Fields . . . . . . . . . . . . . . . . . . 215

Using Automatically Imported, Prewritten Constants

and Methods . . . . . . . . . . . . . . . . . . . . . . 220

The Math Class

. . . . . . . . . . . . . . . . . . . . 221

Importing Classes that Are Not Imported Automatically . . . . 223


Using the LocalDate Class . . . . . . . . . . . . . . . 224

Understanding Composition and Nested Classes . . . . . . . . 230

Composition . . . . . . . . . . . . . . . . . . . . . . 230

Nested Classes . . . . . . . . . . . . . . . . . . . . . 232

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 234

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 234

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 236

Review Questions . . . . . . . . . . . . . . . . . . . . . 236

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 239

Programming Exercises . . . . . . . . . . . . . . . . . 239

Debugging Exercises . . . . . . . . . . . . . . . . . . 242

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 242

Case Problems . . . . . . . . . . . . . . . . . . . . . 243

CHAPTER 5

Making Decisions . . . . . . . . . . . . . 245

Planning Decision-Making Logic . . . . . . . . . . . . . . . 246

The if and if…else Statements . . . . . . . . . . . . . . 248

The if Statement . . . . . . . . . . . . . . . . . . . . 248

Pitfall: Misplacing a Semicolon in an if Statement . . . . . . 249

Pitfall: Using the Assignment Operator Instead


of the Equivalency Operator

. . . . . . . . . . . . . . 250

Pitfall: Attempting to Compare Objects

Using the Relational Operators . . . . . . . . . . . . . 251

The if…else Statement . . . . . . . . . . . . . . . . . 251

Using Multiple Statements in if and if…else Clauses

. . . . 254

Nesting if and if…else Statements . . . . . . . . . . . . 260

Using Logical AND and OR Operators . . . . . . . . . . . . 263

The AND Operator . . . . . . . . . . . . . . . . . . . . 263

The OR Operator . . . . . . . . . . . . . . . . . . . . 265

Short-Circuit Evaluation . . . . . . . . . . . . . . . . . . 266

Making Accurate and Efficient Decisions . . . . . . . . . . . 269

Making Accurate Range Checks . . . . . . . . . . . . . . 270

Making Efficient Range Checks . . . . . . . . . . . . . . 272

Using && and || Appropriately . . . . . . . . . . . . . . 273

Using the switch Statement . . . . . . . . . . . . . . . . 274

Using the Conditional and NOT Operators . . . . . . . . . . . 280

Using the NOT Operator . . . . . . . . . . . . . . . . . 281

Understanding Operator Precedence . . . . . . . . . . . . . 282


Adding Decisions and Constructors

to Instance Methods . . . . . . . . . . . . . . . . . . . 285

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 289

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 289

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 291

Review Questions . . . . . . . . . . . . . . . . . . . . . 291

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 294

Programming Exercises . . . . . . . . . . . . . . . . . 294

Debugging Exercises . . . . . . . . . . . . . . . . . . 297

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 297

Case Problems . . . . . . . . . . . . . . . . . . . . . 299

CHAPTER 6

Looping

. . . . . . . . . . . . . . . . . 301

Learning About the Loop Structure . . . . . . . . . . . . . . 302

Creating while Loops

. . . . . . . . . . . . . . . . . . 303

Writing a Definite while Loop . . . . . . . . . . . . . . 303

Pitfall: Failing to Alter the Loop Control Variable

Within the Loop Body . . . . . . . . . . . . . . . . . 305


Pitfall: Unintentionally Creating a Loop with

an Empty Body . . . . . . . . . . . . . . . . . . . . 306

Altering a Definite Loop’s Control Variable . . . . . . . . . . 307

Writing an Indefinite while Loop . . . . . . . . . . . . . 308

Validating Data . . . . . . . . . . . . . . . . . . . . . 310

Using Shortcut Arithmetic Operators . . . . . . . . . . . . . 314

Creating a for Loop . . . . . . . . . . . . . . . . . . . 319

Unconventional for Loops . . . . . . . . . . . . . . . . 320

Learning How and When to Use a do…while Loop . . . . . . 325

Learning About Nested Loops . . . . . . . . . . . . . . . . 328

Improving Loop Performance . . . . . . . . . . . . . . . . 333

Avoiding Unnecessary Operations . . . . . . . . . . . . . 333

Considering the Order of Evaluation of Short-Circuit

Operators . . . . . . . . . . . . . . . . . . . . . . 334

Comparing to Zero . . . . . . . . . . . . . . . . . . . 334

Employing Loop Fusion . . . . . . . . . . . . . . . . . . 336

Using Prefix Incrementing Rather than Postfix

Incrementing . . . . . . . . . . . . . . . . . . . . . 337

A Final Note on Improving Loop Performance . . . . . . . . 338

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 342
Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 342

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 344

Review Questions . . . . . . . . . . . . . . . . . . . . . 344

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 347

Programming Exercises . . . . . . . . . . . . . . . . . 347

Debugging Exercises . . . . . . . . . . . . . . . . . . 350

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 350

Case Problems . . . . . . . . . . . . . . . . . . . . . 352

CHAPTER 7

Characters, Strings, and

the StringBuilder . . . . . . . . . . . . 353

Understanding String Data Problems . . . . . . . . . . . . . 354

Using Character Class Methods . . . . . . . . . . . . . . 355

Declaring and Comparing String Objects . . . . . . . . . . 359

Comparing String Values . . . . . . . . . . . . . . . . 359

Empty and null Strings . . . . . . . . . . . . . . . . . 363

Using Other String Methods . . . . . . . . . . . . . . . 365

Converting String Objects to Numbers . . . . . . . . . . 369

Learning About the StringBuilder

and StringBuffer Classes


. . . . . . . . . . . . . . 374

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 381

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 382

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 382

Review Questions . . . . . . . . . . . . . . . . . . . . . 383

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 385

Programming Exercises . . . . . . . . . . . . . . . . . 385

Debugging Exercises . . . . . . . . . . . . . . . . . . 388

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 388

Case Problems . . . . . . . . . . . . . . . . . . . . . 391

CHAPTER 8

Arrays . . . . . . . . . . . . . . . . . . 393

Declaring Arrays . . . . . . . . . . . . . . . . . . . . . 394

Initializing an Array . . . . . . . . . . . . . . . . . . . . 399

Using Variable Subscripts with an Array . . . . . . . . . . . . 402

Using the Enhanced for Loop . . . . . . . . . . . . . . 403

Using Part of an Array . . . . . . . . . . . . . . . . . . 404

Declaring and Using Arrays of Objects . . . . . . . . . . . . 406

Using the Enhanced for Loop with Objects . . . . . . . . . 408

Manipulating Arrays of Strings . . . . . . . . . . . . . 408


Searching an Array and Using Parallel Arrays . . . . . . . . . 414

Using Parallel Arrays . . . . . . . . . . . . . . . . . . . 415

Searching an Array for a Range Match . . . . . . . . . . . 418

Passing Arrays to and Returning Arrays from Methods . . . . . 422

Returning an Array from a Method . . . . . . . . . . . . . 426

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 428

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 428

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 429

Review Questions . . . . . . . . . . . . . . . . . . . . . 430

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 433

Programming Exercises . . . . . . . . . . . . . . . . . 433

Debugging Exercises . . . . . . . . . . . . . . . . . . 435

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 435

Case Problems . . . . . . . . . . . . . . . . . . . . . 438

CHAPTER 9

Advanced Array Concepts . . . . . . . . . 439

Sorting Array Elements Using the Bubble Sort Algorithm . . . . 440

Using the Bubble Sort Algorithm . . . . . . . . . . . . . . 440

Improving Bubble Sort Efficiency

. . . . . . . . . . . . . 442
Sorting Arrays of Objects . . . . . . . . . . . . . . . . . 443

Sorting Array Elements Using the Insertion Sort Algorithm . . . . 448

Using Two-Dimensional and Other Multidimensional Arrays . . . . 452

Passing a Two-Dimensional Array to a Method . . . . . . . . 454

Using the length Field with a Two-Dimensional Array . . . . 455

Understanding Ragged Arrays . . . . . . . . . . . . . . . 456

Using Other Multidimensional Arrays . . . . . . . . . . . . 456

Using the Arrays Class . . . . . . . . . . . . . . . . . . 459

Using the ArrayList Class . . . . . . . . . . . . . . . . 467

Creating Enumerations . . . . . . . . . . . . . . . . . . . 472

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 479

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 479

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 480

Review Questions . . . . . . . . . . . . . . . . . . . . . 481

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 484

Programming Exercises . . . . . . . . . . . . . . . . . 484

Debugging Exercises . . . . . . . . . . . . . . . . . . 486

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 487

Case Problems . . . . . . . . . . . . . . . . . . . . . 490

CHAPTER 10
Introduction to Inheritance . . . . . . . . . 491

Learning About the Concept of Inheritance . . . . . . . . . . 492

Diagramming Inheritance Using the UML . . . . . . . . . . 492

Inheritance Terminology . . . . . . . . . . . . . . . . . 495

Extending Classes . . . . . . . . . . . . . . . . . . . . . 496

Overriding Superclass Methods . . . . . . . . . . . . . . . 502

Using the @Override Tag . . . . . . . . . . . . . . . . 504

Calling Constructors During Inheritance . . . . . . . . . . . . 507

Using Superclass Constructors that

Require Arguments . . . . . . . . . . . . . . . . . . 508

Accessing Superclass Methods . . . . . . . . . . . . . . . 513

Comparing this and super . . . . . . . . . . . . . . . 515

Employing Information Hiding . . . . . . . . . . . . . . . . 516

Methods You Cannot Override . . . . . . . . . . . . . . . . 518

A Subclass Cannot Override static Methods in

Its Superclass . . . . . . . . . . . . . . . . . . . . 518

A Subclass Cannot Override final Methods in

Its Superclass . . . . . . . . . . . . . . . . . . . . 522

A Subclass Cannot Override Methods

in a final Superclass . . . . . . . . . . . . . . . . 523


Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 525

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 525

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 526

Review Questions . . . . . . . . . . . . . . . . . . . . . 527

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 530

Programming Exercises . . . . . . . . . . . . . . . . . 530

Debugging Exercises . . . . . . . . . . . . . . . . . . 533

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 534

Case Problems . . . . . . . . . . . . . . . . . . . . . 535

CHAPTER 11

Advanced Inheritance Concepts . . . . . . . 537

Creating and Using Abstract Classes . . . . . . . . . . . . . 538

Using Dynamic Method Binding . . . . . . . . . . . . . . . 547

Using a Superclass as a Method Parameter Type . . . . . . 549

Creating Arrays of Subclass Objects . . . . . . . . . . . . . 551

Using the Object Class and Its Methods . . . . . . . . . . . 554

Using the toString() Method . . . . . . . . . . . . . 556

Using the equals() Method . . . . . . . . . . . . . . . 559

Using Inheritance to Achieve Good Software Design . . . . . . 564

Creating and Using Interfaces . . . . . . . . . . . . . . . . 565


Creating Interfaces to Store Related Constants . . . . . . . 570

Creating and Using Packages . . . . . . . . . . . . . . . . 574

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 580

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 580

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 581

Review Questions . . . . . . . . . . . . . . . . . . . . . 582

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 585

Programming Exercises . . . . . . . . . . . . . . . . . 585

Debugging Exercises . . . . . . . . . . . . . . . . . . 589

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 590

Case Problems . . . . . . . . . . . . . . . . . . . . . 590

CHAPTER 12

Exception Handling . . . . . . . . . . . . 593

Learning About Exceptions . . . . . . . . . . . . . . . . . 594

Trying Code and Catching Exceptions . . . . . . . . . . . . 599

Using a try Block to Make Programs “Foolproof” . . . . . . 604

Declaring and Initializing Variables in try…catch Blocks . . . 606

Throwing and Catching Multiple Exceptions . . . . . . . . . . 609

Using the finally Block . . . . . . . . . . . . . . . . . 615

Understanding the Advantages of Exception Handling . . . . . . 618


Specifying the Exceptions that a Method Can Throw . . . . . . 621

Tracing Exceptions Through the Call Stack . . . . . . . . . . 626

Creating Your Own Exception Classes . . . . . . . . . . . 630

Using Assertions . . . . . . . . . . . . . . . . . . . . . 634

Displaying the Virtual Keyboard . . . . . . . . . . . . . . . 650

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 653

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 654

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 655

Review Questions . . . . . . . . . . . . . . . . . . . . . 656

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 659

Programming Exercises . . . . . . . . . . . . . . . . . 659

Debugging Exercises . . . . . . . . . . . . . . . . . . 662

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 662

Case Problems . . . . . . . . . . . . . . . . . . . . . 663

CHAPTER 13

File Input and Output . . . . . . . . . . . . 665

Understanding Computer Files . . . . . . . . . . . . . . . 666

Using the Path and Files Classes . . . . . . . . . . . . . 667

Creating a Path . . . . . . . . . . . . . . . . . . . . . 668

Retrieving Information About a Path . . . . . . . . . . . . 669


Converting a Relative Path to an Absolute One . . . . . . . . 670

Checking File Accessibility . . . . . . . . . . . . . . . . 671

Deleting a Path . . . . . . . . . . . . . . . . . . . . . 673

Determining File Attributes . . . . . . . . . . . . . . . . 674

File Organization, Streams, and Buffers . . . . . . . . . . . . 678

Using Java’s IO Classes . . . . . . . . . . . . . . . . . . 680

Writing to a File . . . . . . . . . . . . . . . . . . . . . 683

Reading from a File . . . . . . . . . . . . . . . . . . . 685

Creating and Using Sequential Data Files . . . . . . . . . . . 687

Learning About Random Access Files . . . . . . . . . . . . 693

Writing Records to a Random Access Data File . . . . . . . . 697

Reading Records from a Random Access Data File . . . . . . . 704

Accessing a Random Access File Sequentially . . . . . . . . 704

Accessing a Random Access File Randomly . . . . . . . . . 705

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 719

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 719

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 720

Review Questions . . . . . . . . . . . . . . . . . . . . . 721

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 724

Programming Exercises . . . . . . . . . . . . . . . . . 724


Debugging Exercises . . . . . . . . . . . . . . . . . . 726

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 727

Case Problems . . . . . . . . . . . . . . . . . . . . . 727

CHAPTER 14

Introduction to Swing Components . . . . . 729

Understanding Swing Components . . . . . . . . . . . . . 730

Using the JFrame Class . . . . . . . . . . . . . . . . . . 731

Customizing a JFrame’s Appearance . . . . . . . . . . . 734

Using the JLabel Class . . . . . . . . . . . . . . . . . . 738

Changing a JLabel’s Font . . . . . . . . . . . . . . . . 740

Using a Layout Manager . . . . . . . . . . . . . . . . . . 743

Extending the JFrame Class . . . . . . . . . . . . . . . . 746

Adding JTextFields, JButtons, and Tool Tips to a

JFrame . . . . . . . . . . . . . . . . . . . . . . . . 748

Adding JTextFields . . . . . . . . . . . . . . . . . . 748

Adding JButtons . . . . . . . . . . . . . . . . . . . 750

Using Tool Tips . . . . . . . . . . . . . . . . . . . . . 752

Learning About Event-Driven Programming . . . . . . . . . . 755

Preparing Your Class to Accept Event Messages . . . . . . . 756

Tel ing Your Class to Expect Events to Happen . . . . . . . 757


Tel ing Your Class How to Respond to Events . . . . . . . . 757

An Event-Driven Program . . . . . . . . . . . . . . . . . 757

Using Multiple Event Sources . . . . . . . . . . . . . . . 759

Using the setEnabled() Method . . . . . . . . . . . . 761

Understanding Swing Event Listeners . . . . . . . . . . . . 764

Using the JCheckBox, ButtonGroup, and JComboBox Classes . . . . . .


. . . . . . . . . . . . . . . . . . 767

The JCheckBox Class . . . . . . . . . . . . . . . . . 767

The ButtonGroup Class . . . . . . . . . . . . . . . . 771

The JComboBox Class . . . . . . . . . . . . . . . . . 772

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 780

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 780

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 781

Review Questions . . . . . . . . . . . . . . . . . . . . . 783

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 785

Programming Exercises . . . . . . . . . . . . . . . . . 785

Debugging Exercises . . . . . . . . . . . . . . . . . . 787

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 787

Case Problems . . . . . . . . . . . . . . . . . . . . . 788

CHAPTER 15
Advanced GUI Topics

. . . . . . . . . . . 791

Understanding the Content Pane

. . . . . . . . . . . . . . 792

Using Color

. . . . . . . . . . . . . . . . . . . . . . . 795

Learning More About Layout Managers . . . . . . . . . . . . 797

Using BorderLayout . . . . . . . . . . . . . . . . . 798

Using FlowLayout . . . . . . . . . . . . . . . . . . . 800

Using GridLayout . . . . . . . . . . . . . . . . . . . 802

Using CardLayout . . . . . . . . . . . . . . . . . . . 803

Using Advanced Layout Managers . . . . . . . . . . . . . 805

Using the JPanel Class . . . . . . . . . . . . . . . . . . 813

Creating JScrollPanes . . . . . . . . . . . . . . . . . 821

A Closer Look at Events and Event Handling . . . . . . . . . . 824

An Event-Handling Example: KeyListener

. . . . . . . . 827

Using AWTEvent Class Methods . . . . . . . . . . . . . . 830

Understanding x- and y-Coordinates . . . . . . . . . . . . 832

Handling Mouse Events


. . . . . . . . . . . . . . . . . . 832

Using Menus . . . . . . . . . . . . . . . . . . . . . . . 837

Using Specialized Menu Items . . . . . . . . . . . . . . . 841

Using addSeparator() . . . . . . . . . . . . . . . . 843

Using setMnemonic() . . . . . . . . . . . . . . . . . 843

Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 848

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 849

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 850

Review Questions . . . . . . . . . . . . . . . . . . . . . 851

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 853

Programming Exercises . . . . . . . . . . . . . . . . . 853

Debugging Exercises . . . . . . . . . . . . . . . . . . 855

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 855

Case Problems . . . . . . . . . . . . . . . . . . . . . 859

CHAPTER 16

Graphics . . . . . . . . . . . . . . . . . 861

Learning About Rendering Methods . . . . . . . . . . . . . 862

Drawing Strings . . . . . . . . . . . . . . . . . . . . . . 865

Repainting . . . . . . . . . . . . . . . . . . . . . . . 867

Setting a Font . . . . . . . . . . . . . . . . . . . . . 869


Using Color

. . . . . . . . . . . . . . . . . . . . . . 870

Drawing Lines and Shapes . . . . . . . . . . . . . . . . . 874

Drawing Lines . . . . . . . . . . . . . . . . . . . . . 874

Drawing Unfil ed and Fil ed Rectangles . . . . . . . . . . . 875

Drawing Clear Rectangles . . . . . . . . . . . . . . . . 875

Drawing Rounded Rectangles . . . . . . . . . . . . . . . 876

Drawing Shadowed Rectangles . . . . . . . . . . . . . . 878

Drawing Ovals . . . . . . . . . . . . . . . . . . . . . 879

Drawing Arcs . . . . . . . . . . . . . . . . . . . . . . 880

Creating Polygons . . . . . . . . . . . . . . . . . . . . 881

Copying an Area . . . . . . . . . . . . . . . . . . . . 883

Using the paint() Method with JFrames . . . . . . . . . 883

Learning More About Fonts . . . . . . . . . . . . . . . . . 891

Discovering Screen Statistics . . . . . . . . . . . . . . . 893

Discovering Font Statistics . . . . . . . . . . . . . . . . 894

Drawing with Java 2D Graphics . . . . . . . . . . . . . . . 898

Specifying the Rendering Attributes . . . . . . . . . . . . 899

Setting a Drawing Stroke . . . . . . . . . . . . . . . . . 901

Creating Objects to Draw . . . . . . . . . . . . . . . . . 902


Don’t Do It . . . . . . . . . . . . . . . . . . . . . . . . 910

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 911

Chapter Summary . . . . . . . . . . . . . . . . . . . . . 911

Review Questions . . . . . . . . . . . . . . . . . . . . . 912

Exercises . . . . . . . . . . . . . . . . . . . . . . . . 915

Programming Exercises . . . . . . . . . . . . . . . . . 915

Debugging Exercises . . . . . . . . . . . . . . . . . . 916

Game Zone . . . . . . . . . . . . . . . . . . . . . . . 916

Case Problems . . . . . . . . . . . . . . . . . . . . . 918

APPENDIX A

Working with the Java Platform . . . . . . . 919

Learning about the Java SE Development Kit . . . . . . . . . 920

Configuring Windows to Use the JDK . . . . . . . . . . . . . 920

Finding the Command Prompt . . . . . . . . . . . . . . . 921

Command Prompt Anatomy . . . . . . . . . . . . . . . . 921

Changing Directories . . . . . . . . . . . . . . . . . . 921

Setting the class and classpath Variables . . . . . . . 922

Changing a File’s Name . . . . . . . . . . . . . . . . . 922

Compiling and Executing a Java Program . . . . . . . . . . . 923

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 923


APPENDIX B

Data Representation . . . . . . . . . . . . 925

Understanding Numbering Systems . . . . . . . . . . . . . 926

Representing Numeric Values . . . . . . . . . . . . . . . . 927

Representing Character Values . . . . . . . . . . . . . . . 929

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 930

APPENDIX C

Formatting Output . . . . . . . . . . . . . 931

Rounding Numbers . . . . . . . . . . . . . . . . . . . . 932

Using the printf() Method . . . . . . . . . . . . . . . . 933

Specifying a Number of Decimal Places to

Display with printf() . . . . . . . . . . . . . . . . 936

Specifying a Field Size with printf() . . . . . . . . . . . 937

Using the Optional Argument Index with printf() . . . . . 938

Using the DecimalFormat Class . . . . . . . . . . . . . 939

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 940

APPENDIX D

Generating Random Numbers . . . . . . . . 941

Understanding Computer-Generated Random Numbers . . . . . 942

Using the Math.random() Method . . . . . . . . . . . . . 943


Using the Random Class . . . . . . . . . . . . . . . . . . 944

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 947

APPENDIX E

Javadoc

. . . . . . . . . . . . . . . . . 949

The Javadoc Documentation Generator . . . . . . . . . . . . 950

Javadoc Comment Types . . . . . . . . . . . . . . . . . . 950

Generating Javadoc Documentation . . . . . . . . . . . . . 952

Specifying Visibility of Javadoc Documentation . . . . . . . . 955

Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 956

Glossary

. . . . . . . . . . . . . . . . . 957

Index . . . . . . . . . . . . . . . . . . . 979

Preface

Java Programming, Eighth Edition, provides the beginning


programmer with a guide to developing applications using the Java
programming language. Java is popular among professional
programmers because it can be used to build visual y interesting
graphical user interface (GUI) and Web-based applications. Java also
provides an excel ent environment for the beginning programmer—a
student can quickly build useful programs while learning the basics
of structured and object-oriented programming techniques.
This textbook assumes that you have little or no programming
experience. It provides a solid background in good object-oriented
programming techniques and introduces terminology using clear,
familiar language. The programming examples are business
examples; they do not assume a mathematical background beyond
high-school business math. In addition, the examples il ustrate only
one or two major points; they do not contain so many features that
you become lost fol owing irrelevant and extraneous details.
Complete, working programs appear frequently in each chapter;
these examples help students make the transition from the
theoretical to the practical. The code presented in each chapter can
also be downloaded from the publisher’s Web site, so students can
easily run the programs and experiment with changes to them.

The student using Java Programming, Eighth Edition, builds


applications from the bottom up rather than starting with existing
objects. This facilitates a deeper understanding of the concepts used
in object-oriented programming and engenders appreciation for the
existing objects students use as their knowledge of the language
advances. When students complete this book, they wil know how to
modify and create simple Java programs, and they wil have the tools
to create more complex examples. They also wil have a fundamental
knowledge of object-oriented programming, which wil serve them
wel in advanced Java courses or in studying other object-oriented
languages such as C++, C#, and Visual Basic.

Organization and Coverage

Java Programming, Eighth Edition, presents Java programming


concepts, enforcing good style, logical thinking, and the object-
oriented paradigm. Objects are covered right from the beginning,
earlier than in many other textbooks. You create your first Java
program in Chapter 1. Chapters 2, 3, and 4 increase your
understanding of how data, classes, objects, and methods interact in
an object-oriented environment.
Chapters 5 and 6 explore input and repetition structures, which are
the backbone of programming logic and essential to creating useful
programs in any language. You learn the special considerations of
string and array manipulation in Chapters 7, 8, and 9.

Chapters 10, 11, and 12 thoroughly cover inheritance and exception


handling. Inheritance is the object-oriented concept that al ows you
to develop new objects quickly by adapting the features of existing
objects; exception handling is the object-oriented approach to
handling errors. Both are important concepts in object-oriented
design. Chapter 13 provides information on handling files so you can
permanently store and retrieve program output.

Chapters 14, 15, and 16 introduce GUI Swing components (Java’s


visual y pleasing, user-friendly widgets), their layout managers, and
graphics.

Features

The fol owing features are new for the Eighth Edition: JAVA 8E: Al
programs have been tested using Java 8e, the newest edition of
Java.

WINDOWS 8.1: Al programs have been tested in Windows 8.1,


and al screen shots have been taken in this new environment.

DATE AND TIME CLASSES: This edition provides thorough


coverage of the java.time package, which is new in Java 8e.

ON-SCREEN KEYBOARD: This edition provides instructions for


displaying and using an on-screen keyboard with either a touch
screen or a standard screen.

MODERNIZED GRAPHICS OUTPUT: The chapter on graphics


(Chapter 16) has been completely rewritten to focus on Swing
component graphics production using the paintComponent()
method.
MODERNIZED OVERRIDING: The @Override tag is introduced.

EXPANDED COVERAGE OF THE EQUALS() METHOD: The book


provides a thorough explanation of the difference between
overloading and overriding the equals() method.

PROGRAMMING EXERCISES: Each chapter contains several new


programming exercises not seen in previous editions. Al exercises
and their solutions from the previous edition that were replaced in
this edition are stil available in the Instructor’s Resource Kit.

Additional y, Java Programming, Eighth Edition, includes the fol


owing features: OBJECTIVES: Each chapter begins with a list of
objectives so you know the topics that wil be presented in the
chapter. In addition to providing a quick reference to topics covered,
this feature provides a useful study aid.

YOU DO IT: In each chapter, step-by-step exercises help students


create multiple working programs that emphasize the logic a
programmer uses in choosing statements to include.

These sections provide a means for students to achieve success on


their own—even those in online or distance learning classes.

NOTES: These highlighted tips provide additional information—for


example, an alternative method of performing a procedure, another
term for a concept, background information on a technique, or a
common error to avoid.

EMPHASIS ON STUDENT RESEARCH: The student frequently is


directed to the Java Web site to investigate classes and methods.
Computer languages evolve, and programming professionals must
understand how to find the latest language improvements. This book
encourages independent research.

FIGURES: Each chapter contains many figures. Code figures are


most frequently 25 lines or fewer, il ustrating one concept at a time.
Frequent screen shots show exactly how program output appears.
Cal outs appear where needed to emphasize a point.

COLOR: The code figures in each chapter contain al Java keywords


in blue. This helps students identify keywords more easily,
distinguishing them from programmer-selected names.

FILES: More than 200 student files can be downloaded from the
publisher’s Web site. Most files contain the code presented in the
figures in each chapter; students can run the code for themselves,
view the output, and make changes to the code to observe the
effects. Other files include debugging exercises that help students
improve their programming skil s.

TWO TRUTHS & A LIE: A short quiz reviews each chapter section,
with answers provided.

This quiz contains three statements based on the preceding section


of text—two statements are true and one is false. Over the years,
students have requested answers to problems, but we have
hesitated to distribute them in case instructors want to use problems
as assignments or test questions. These true–false quizzes provide
students with immediate feedback as they read, without “giving
away” answers to the multiple-choice questions and programming
exercises.

DON’T DO IT: This section at the end of each chapter summarizes


common mistakes and pitfal s that plague new programmers while
learning the current topic.

KEY TERMS: Each chapter includes a list of newly introduced


vocabulary, shown in the order of appearance in the text. The list of
key terms provides a short review of the major concepts in the
chapter.

SUMMARIES: Fol owing each chapter is a summary that recaps the


programming concepts and techniques covered in the chapter. This
feature provides a concise means for students to check their
understanding of the main points in each chapter.

REVIEW QUESTIONS: Each chapter includes 20 multiple-choice


questions that serve as a review of chapter topics.

GAME ZONE: Each chapter provides one or more exercises in which


students can create interactive games using the programming
techniques learned up to that point; 70 game programs are
suggested in the book. The games are fun to create and play;
writing them motivates students to master the necessary
programming techniques. Students might exchange completed game
programs with each other, suggesting improvements and discovering
alternate ways to accomplish tasks.

CASES: Each chapter contains two running case problems. These


cases represent projects that continue to grow throughout a
semester using concepts learned in each new chapter.

Two cases al ow instructors to assign different cases in alternate


semesters or to divide students in a class into two case teams.

GLOSSARY: This edition contains an alphabetized list of al key


terms identified in the book, along with their definitions.

APPENDICES: This edition includes useful appendices on working


with the Java platform, data representation, formatting output,
generating random numbers, and creating Javadoc comments.

QUALITY: Every program example, exercise, and game solution


was tested by the author and then tested again by a quality
assurance team using Java Standard Edition (SE) 8, the most recent
version available.

CourseMate
The more you study, the better the results. Make the most of your
study time by accessing everything you need to succeed in one
place. Read your textbook, take notes, review flashcards, watch
videos, and take practice quizzes online. CourseMate goes beyond
the book to deliver what you need! Learn more at
www.cengage.com/coursemate.

The Java Programming CourseMate includes:

Debugging Exercises: Four error-fil ed programs accompany each


chapter. By debugging these programs, students can gain expertise
in program logic in general and the Java programming language in
particular.

Video Lessons: Each chapter is accompanied by at least three


video lessons that help to explain important chapter concepts. These
videos were created and narrated by the author.

Interactive Study Aids: An interactive eBook, quizzes, flashcards,


and more!

Instructors may add CourseMate to the textbook package, or


students may purchase CourseMate directly at
www.CengageBrain.com.

Instructor Resources

The fol owing teaching tools are available for download at our
Instructor Companion Site.

Simply search for this text at sso.cengage.com. An instructor login is


required.

Electronic Instructor’s Manual: The Instructor’s Manual that


accompanies this textbook contains additional instructional material
to assist in class preparation, including items such as Overviews,
Chapter Objectives, Teaching Tips, Quick Quizzes, Class Discussion
Topics, Additional Projects, Additional Resources, and Key Terms. A
sample syl abus is also available. Additional exercises in the
Instructor’s Manual include:

Tough Questions: Two or more fairly difficult questions that an


applicant might encounter in a technical job interview accompany
each chapter. These questions are often open-ended; some involve
coding and others might involve research.

Up for Discussion: A few thought-provoking questions concerning


programming in general or Java in particular supplement each
chapter. The questions can be used to start classroom or online
discussions, or to develop and encourage research, writing, and
language skil s.

Programming Exercises and Solutions: Each chapter is


accompanied by several programming exercises to supplement those
offered in the text. Instructors can use these exercises as additional
or alternate assignments, or as the basis for lectures.

Test Bank: Cengage Learning Testing Powered by Cognero is a


flexible, online system that al ows you to:

Author, edit, and manage test bank content from multiple Cengage
Learning solutions.

Create multiple test versions in an instant.

Deliver tests from your LMS, your classroom, or anywhere you want.

PowerPoint Presentations: This text provides PowerPoint slides


to accompany each chapter. Slides may be used to guide classroom
presentations, to make available to students for chapter review, or to
print as classroom handouts. Files are provided for every figure in
the text. Instructors may use the files to customize PowerPoint
slides, il ustrate quizzes, or create handouts.
Solutions: Solutions to “You Do It” exercises and al end-of-chapter
exercises are available. Annotated solutions are provided for some of
the multiple-choice Review Questions. For example, if students are
likely to debate answer choices or not understand the choice
deemed to be the correct one, a rationale is provided.

Acknowledgments

I would like to thank al of the people who helped to make this book
a reality, including Dan Seiter, Development Editor; Alyssa Pratt,
Senior Content Developer; Carmel Isaac, Content Project Manager;
and Chris Scriver and Daniel e Shaw, quality assurance testers. I am
lucky to work with these professionals who are dedicated to
producing high-quality instructional materials.

I am also grateful to the reviewers who provided comments and


encouragement during this book’s development, including Bernice
Cunningham, Wayne County Community Col ege District; Bev Eckel,
Iowa Western Community Col ege; John Russo, Wentworth Institute
of Technology; Leslie Spivey, Edison Community Col ege; and
Angeline Surber, Mesa Community Col ege.

Thanks, too, to my husband, Geoff, for his constant support and


encouragement. Final y, this book is dedicated to the newest Farrel ,
coming March 2015. As this book goes to production, I don’t know
your name or even your gender, but I do know that I love you.

Joyce Farrell

Read This Before

You Begin

The fol owing information wil help you as you prepare to use this
textbook.

To the User of the Data Files


To complete the steps and projects in this book, you need data files
that have been created specifical y for this book. Your instructor wil
provide the data files to you. You also can obtain the files
electronical y from www.CengageBrain.com. Find the ISBN of your
title on the back cover of your book, then enter the ISBN in the
search box at the top of the Cengage Brain home page. You can find
the data files on the product page that opens. Note that you can use
a computer in your school lab or your own computer to complete the
exercises in this book.

Using Your Own Computer

To use your own computer to complete the steps and exercises, you
need the fol owing: Software: Java SE 8, available from
www.oracle.com/technetwork/java/index.html. Although almost al of
the examples in this book wil work with earlier versions of Java, this
book was created using Java 8. The book clearly points out the few
cases when an example is based on Java 7 and wil not work with
earlier versions of Java. You also need a text editor, such as
Notepad. A few exercises ask you to use a browser for research.

Hardware: If you are using Windows 8, the Java Web site suggests
at least 128 MB of memory and at least 181 MB of disk space. For
other operating system requirements, see
http://java.com/en/download/help.

CHAPTER

Creating Java

Programs

In this chapter, you wil :

Define basic programming terminology


Compare procedural and object-oriented programming

Describe the features of the Java programming language Analyze a


Java application that produces console output Compile a Java class
and correct syntax errors

Run a Java application and correct logic errors

Add comments to a Java class

Create a Java application that produces GUI output

Find help

CHAPTER1

Creating Java Programs

Learning Programming Terminology

A computer program is a set of instructions that you write to tel a


computer what to do.

Computer equipment, such as a monitor or keyboard, is hardware,


and programs are software. A program that performs a task for a
user (such as calculating and producing 2

paychecks, word processing, or playing a game) is application


software; a program that manages the computer itself (such as
Windows or Linux) is system software. The logic behind any
computer program, whether it is an application or system program,
determines the exact order of instructions needed to produce
desired results. Much of this book describes how to develop the logic
to create application software.

Al computer programs ultimately are converted to machine


language. Machine language, or machine code, is the most basic
set of instructions that a computer can execute. Each type of
processor (the internal hardware that handles computer instructions)
has its own set of machine language instructions. Programmers
often describe machine language using 1s and 0s to represent the
on-and-off circuitry of computer systems.

The system that uses only 1s and 0s is the binary numbering


system. Appendix B describes the binary system in detail. Later in
this chapter, you wil learn that bytecode is the name for the binary
code created when Java programs are converted to machine
language.

Machine language is a low-level programming language, or one


that corresponds closely to a computer processor’s circuitry. Low-
level languages require you to use memory addresses for specific
machines when you create commands. This means that low-level
languages are difficult to use and must be customized for every type
of machine on which a program runs.

Fortunately, programming has evolved into an easier task because of


the development of high-level programming languages. A high-
level programming language al ows you to use a vocabulary of
reasonable terms, such as read, write, or add, instead of the
sequences of 1s and 0s that perform these tasks. High-level
languages also al ow you to assign single-word, intuitive names to
areas of computer memory where you store data. This means you
can use identifiers such as hoursWorked or rateOfPay, rather than
having to remember their memory locations. Currently, over 2,000
high-level programming languages are available to developers; Java
is one of them.

Each high-level language has its own syntax, or rules about how
language elements are combined correctly to produce usable
statements. For example, depending on the specific high-level
language, you might use the verb print or write to produce output.
Al languages have a specific, limited vocabulary (the language’s
keywords) and a specific set of rules for using that vocabulary.
When you are learning a computer programming language, such as
Java, C++, or Visual Basic, you real y are learning the vocabulary
and syntax for that language.

Using a programming language, programmers write a series of


program statements, similar to English sentences, to carry out
the tasks they want the program to perform. Program statements
are also known as commands because they are orders to the
computer, such as

“output this word” or “add these two numbers.”

Learning Programming Terminology

After the program statements are written, high-level language


programmers use a computer program cal ed a compiler or
interpreter to translate their language statements into machine
language. A compiler translates an entire program before carrying
out any statements, or executing them, whereas an interpreter
translates one program statement at a time, executing a statement
as soon as it is translated.

Whether you use a compiler or interpreter often depends on the


programming language you use. For example, C++ is a compiled
language, and Visual Basic is an interpreted language. Each type of
translator has its supporters; programs written in compiled
languages execute more quickly, whereas programs written in
interpreted languages can be easier to develop and debug. Java
uses the best of both technolo-gies: a compiler to translate your
programming statements and an interpreter to read the compiled
code line by line when the program executes (also called at run
time).

Compilers and interpreters issue one or more error messages each


time they encounter an invalid program statement—that is, a
statement containing a syntax error, or misuse of the language.
Examples of syntax errors include misspel ing a keyword or omitting
a word that a statement requires. When a syntax error is detected,
the programmer can correct the error and attempt another
translation. Repairing al syntax errors is the first part of the process
of debugging a program—freeing the program of al flaws or errors,
also known as bugs.

Figure 1-1 il ustrates the steps a programmer takes while developing


an executable program.

You wil learn more about debugging Java programs later in this
chapter.

CHAPTER1

Creating Java Programs

Plan program logic

Write program language statements

that correspond to the logic

ses

Use translating software (a compiler or

oc

interpreter) that translates programming

language statements to machine language

ging pr
Other documents randomly have
different content
suullaan vedessä makaava, mutta — se ei ollut kokonainen mies.
Pennin kasvot vaihtoivat väriä ja hän vetäisi nyyhkäisten henkeään.
Harvey kilkutti kelloa epätoivoisesti, sillä hän pelkäsi heidän voivan
hukkua minä silmänräpäyksenä tahansa, ja hän hypähti
kevennyksestä kuullessaan Danin huihkaisevan, kun miehet palasivat
takaisin.

"'Jennie Cushman'", sanoi Dan kiihtyneellä äänellä, "katkennut


suoraan kahtia — ja ihan murskaksi survottuna! Ei
neljännespeninkulmaakaan tästä. Isä pelasti laivurin. Ketään muita ei
saatu, ja — siinä oli hänen poikansakin. Voi, Harve, Harve, minä en
voi sitä kestää! Minä näin — —" Hän painoi päänsä käsivarsiensa
varaan ja nyyhkytti, Silläaikaa kun toiset raahasivat kannelle
harmaapäisen miehen.

"Mitä varten sinä minut korjasit?" vaikeroi pelastettu. "Disko, mitä


varten sinä minut korjasit?"

Disko laski lujasti kätensä miehen olkapäälle, sillä hänen katseensa


oli hurja ja hänen huulensa värisivät, kun hän tuijotti äänettömään
miehistöön. Silloin astui esiin Pennsylvania Pratt, joka oli myös
Haskins tai Rich tai McVitty silloin kun Salters unohti; ja hänen
kasvonsa olivat muuttuneet hullun kasvoista viisaan, kokeneen
vanhuksen kasvoiksi, ja hän puhui lausuen lujalla äänellä: "Herra
antoi ja Herra otti; kiitetty olkoon Herran nimi! Minä olin — minä
olen evankeliumin palvelija. Jättäkää hänet minun huostaani."

"Oi, oletteko, oletteko te?" sanoi mies. "Rukoilkaa sitten poikani


takaisin minulle! Rukoilkaa takaisin yhdeksäntuhannen dollarin alus
ja tuhat sentneriä kalaa. Jos olisitte antaneet minun olla, olisi leskeni
voinut mennä huoltolaitokseen ja tehdä työtä ruokansa edestä, eikä
hän olisi saanut koskaan tietää — ei koskaan tietää. Nyt minun
täytyy kertoa hänelle."

"Älä nyt huoli puhua mitään", sanoi Disko. "Parempi kun menisit
vähän makaamaan, Jason Olley."

Kun mies on kadottanut ainoan poikansa, kokonaisen kesäkauden


ansion ja kaiken maallisen pääomansa muutamissa kymmenissä
sekunneissa, on häntä vaikea lohduttaa.

"Nehän olivat kaikki Gloucesterin miehiä, vai miten?" sanoi Tom


Platt, hypistellen avuttomasti jotain köydenpätkää.

"Oh, se ei tee mitään erotusta", sanoi Jason, vääntäen vettä


parrastaan. "Minä tulen kai soutamaan kesävieraita East Gloucesterin
tienoilla tänä syksynä." Hän hoiperteli raskaasti reilingin luo ja lauloi:

"Linnut taivaan alla, laulain lausukaa kukin äänellänne


Herran kunniaa!"

"Tulkaa minun kanssani. Tulkaa alas!" sanoi Penn, ikäänkuin


hänellä olisi ollut oikeus antaa määräyksiä. Heidän katseensa
sattuivat vastakkain ja taistelivat neljäsosan minuuttia.

"En tiedä kuka olette, mutta minä tulen", sanoi Jason


alistuvaisesti. "Ehkä saan takaisin jotain — jotain niistä —
yhdeksästätuhannesta dollarista." Penn talutti hänet kajuuttaan ja
sulki oven jälkeensä.

"Tuo ei ole Penn", huusi Salters-setä. "Se on Jakob Boiler, ja —


hän on muistanut Johnstownin! En ole ikinä nähnyt sellaisia silmiä
kenenkään ihmisen päässä. Mitä nyt on tehtävä? Mitä minun nyt on
tehtävä?"
He saattoivat kuulla Pennin ja Jasonin äänien puhuvan kajuutassa.
Sitten Pennin ääni jatkoi yksinään, ja Salters vetäisi hatun päästään,
sillä Penn rukoili. Jonkun hetken perästä Penn astui ylös kajuutan
portaita, suuret hikipisarat kasvoillaan, ja katseli miehistöä. Dan
nyyhkytti yhä ruorirattaan luona.

"Hän ei tunne meitä", vaikeroi Salters. "Kaikki on alettava jälleen


alusta, shakki ja kaikki — ja mitä hän sanoo minulle?"

Penn puhui; he saattoivat kuulla että hän puhui kuin oudoille


ihmisille. "Olen rukoillut", sanoi hän. "Meidän uskonjoukkomme
uskoo rukoukseen. Olen rukoillut että tämä mies saisi poikansa
takaisin elävänä. Minun omani hukkuivat silmieni edessä, vaimoni ja
vanhin poikani — ja toiset. Tuleeko ihmisen olla viisaampi
Luojaansa? En ole koskaan rukoillut heitä takaisin, mutta minä
rukoilin tämän miehen poikaa, ja varmasti se annetaan hänelle."

Salters katsoi rukoilevasti Penniin nähdäkseen eikö tämä muistaisi


häntä.

"Kuinka kauan olen ollut hulluna?" kysyi Penn äkkiä. Hänen


huulensa nytkähtelivät.

"Joutavia, Penn! Ethän sinä ole ollut hulluna", alkoi Salters. "Vähän
hämmennyksissä vain."

"Minä näin talojen törmäävän siltaan, ennenkuin tulipalot syttyivät.


En muista mitään muuta. Kuinka kauan siitä on?"

"En voi kestää sitä! En voi kestää sitä!" huusi Dan, ja Harvey
nyyhkytti myötätunnosta.

"Noin viisi vuotta", sanoi Disko vavahtelevalla äänellä.


"Minä olen siis ollut jonkun henkilön rasituksena joka päivä koko
tuona aikana. Kuka se henkilö oli?"

Disko viittasi Saltersiin.

"Et ole — et ole!" huusi maanviljelijä-merimies, pusertaen käsiään


yhteen. "Sinä olet ansainnut ylläpitosi enemmän kuin
kaksinkertaisesti; ja sinä olet saamassa rahaa, lukuunottamatta
puolta minun neljännes-osuudestani tähän alukseen, joka on sinulle
kuuluva puhtaan oston kautta."

"Te olette hyviä miehiä. Minä näen sen teidän kasvoistanne.


Mutta — —"

"Armias taivas", kuiskasi Pitkä Jack, "ja hän on ollut mukanamme


kaikki nämä matkat! Hän on kerrassaan noiduttu."

Kuunarin kellon ääni kuului laivan sivulta päin, ja sumusta huusi


ääni: "Hoi, Disko! Oletko kuullut mitään 'Jennie Cushmanista?"

"He ovat löytäneet hänen poikansa", huusi Penn. "Seisokaa hiljaa


ja katsokaa Luojan lunastusta!"

"Jason on täällä meillä", vastasi Disko, mutta hänen äänensä


vapisi.
"Ketään muita — ei kai ole löydetty?"

"Me olemme ainakin löytäneet yhden. Tapasimme hänet puurojun


seasta, joka näyttää olleen kanssina. Hänen päänsä on vähän
loukkaantunut."

"Kuka hän on?"


Kaikkien kannella-olijain sydämet tykyttivät yhtä levottomina.

"Nuorempi Olley se kai on", vastasi ääni.

Penn korotti kätensä ja lausui jotakin saksaksi. Harvey olisi voinut


vannoa, että kirkas aurinko paistoi hänen ylöspäin kääntyneille
kasvoilleen. Mutta ääni jatkoi: "Hoi, kuulkaa! Te miehet härnäsitte
meitä koko lailla toissa yönä."

"Emme me nyt ole härnäystuulella", sanoi Disko.

"Tiedän sen; mutta totta puhuakseni me olimme niinkuin —


niinkuin ajelulla, kun tapasimme Olleyn pojan."

Alus, josta puhuteltiin, oli tuo parantumaton "Carrie Pitman", ja


"Täällä Ollaan"-kuunarin kannelta remahti hiukan epätasaiselta
kuulostava nauru.

"Eiköhän teidän sopisi lähettää Jason-ukko tänne? Me olemme


menossa maihin noutamaan lisää syöttiä ja pohjataklinkia. Ette
suinkaan te häntä millään tavoin tarvitse, ja tämä vietävän
ankkuripeli tekee väkemme vähän riittämättömäksi. Me pidämme
hänestä huolta. Hän on naimisissa minun eukkoni tädin kanssa."

"Annan teille mitä vain haluatte", sanoi Troop.

"Emme halua mitään, paitsi ehkä ankkuria, joka pitäisi. Mutta


nuori
Olley alkaa tulla vähän rauhattomaksi. Lähettäkäähän ukko tänne."

Penn herätti hänet epätoivon tylsyydestään, ja Tom Platt souti


hänet toiseen alukseen. Hän jätti heidät lausumatta sanaakaan
kiitokseksi ja tietämättä mikä häntä odotti; ja sumu verhosi kaikki
kätköönsä.

"Ja nyt", sanoi Penn, vetäisten syvään henkeään kuin


saarnaamaan valmistuen. "Ja nyt" — ryhdikäs vartalo lysähti kuin
huotraan työnnetty miekka, yliluonnollisen kirkkaitten silmien loiste
sammui, ääni muuttui jälleen tavalliseksi heikoksi piipitykseksi — "ja
nyt", sanoi Pennsylvania Pratt, "onko mielestäsi liian varhaista ottaa
pieni peli shakkia, Salters?"

"No, juuri samaa minä aioin sanoa", huusi Salters vilkkaasti. "On
merkillistä, Penn, kuinka sinä osaat arvata toisen ajatukset."

Pikku mies punastui ja seurasi lauhkeasti Saltersia keulaan.

"Ylös ankkuri! Joutuin! Pois näiltä noidutuilta vesiltä", huusi


Disko, eikä hänen käskyään ollut koskaan vikkelämmin toteltu.

"Minkä ihmeen selityksen te nyt annatte kaikelle tälle?" sanoi Pitkä


Jack, kun he jälleen olivat ponnistelemassa läpi sumun, kosteina,
vettätippuvina ja huumautuneina.

"Minä selitän sen tähän tapaan", sanoi Disko ruorirattaan äärestä:


"Kun tuo 'Jennie Cushmahin' tapaus tuli tyhjälle vatsalle — —"

"Hän — me näimme yhden heistä menevän sivu", nyyhkytti


Harvey.

"Niin, se tietysti ikäänkuin kohotti hänet ylös vedestä, samoin kuin


laiva viskautuu rannalle; kohotti hänet ylös, minun käsittääkseni, niin
että hän muisti Johnstownin ja Jakob Boilerin ja kaikki senkaltaiset
muistot. No niin, ja Jasonin lohduttaminen piti häntä vähän aikaa
ylhäällä, samoin kuin pönkät pitävät pystyssä laivaa. Mutta sitten
pönkät alkoivat solua ja solua, ja hän luisti rannalta alas, ja nyt hän
on veden varassa jälleen. Siihen tapaan minä sen selitän."

He päättivät että Diskon selitys oli täysin oikea.

"Salters olisi tullut kerrassaan onnettomaksi, jos Penn olisi jäänyt


Jakob Boileriksi", sanoi Pitkä Jack.

"Näittekö hänen kasvojaan silloin kun Penn kysyi, kenen


rasituksena hän oli ollut koko tämän ajan? No, mitäs kuuluu,
Salters?"

"Nukkuu — nukkuu kuin tukki. Meni maata kuin lapsi", vastasi


Salters, käyden varpaillaan perään päin. "Emme tietysti syö
aamiaista ennenkuin hän herää, Oletteko koskaan nähneet sellaista
rukouksen lahjaa? Hän totta totisesti veti nuoren Olleyn ylös
merestä. Se on minun uskoni. Jason oli kamalan ylpeä pojastaan, ja
minä epäilin heti alunpitäen, että se oli hänelle rangaistus
epäjumalien palvelemisesta."

"On niitä muitakin yhtä mielettömiä", sanoi Disko.

"Se on erittäin", vastasi Salters joutuisasti. "Penn ei ole aivan


täysipäinen, enkä minä tee häneen nähden muuta kuin
velvollisuuteni."

He odottivat, nuo nälkäiset miehet, kolme tuntia kunnes Penn


ilmestyi kannelle lempein kasvoin ja ajatuksettomin aivoin. Hän sanoi
että hänestä tuntui kuin hän olisi nähnyt unta. Sitten hän tahtoi
tietää minkätähden he olivat niin hiljaisia, eivätkä he voineet sanoa
hänelle syytä.
Disko piti kaikki miehet säälimättömästi työssä seuraavat kolme
neljä päivää; kun ei voitu olla ulkona pyytämässä, pani hän heidät
ruumaan ahtamaan laivan varastoja pienemmälle alalle, jotta
saataisiin enemmän tilaa kalalle. Tiukkaan ahdettu kalakasa ulottui
kajuutan väliseinästä kanssin lieden takana olevaan työntöoveen
saakka, ja Disko näytti kuinka suurta taitoa kysyi lastin järjestäminen
niin että kuunari sai parhaan syvällyksensä. Miehistö tuli tällä tavoin
pysytetyksi virkeänä, kunnes heidän mielensä oli vapautunut
painostuksesta; ja Pitkä Jack antoi kerran Harveyn maistaa
köydenpäästä, koska, kuten hän sanoi, tämä kulki "murheellisena
kuin sairas kissa asioista joita ei voinut auttaa." Harvey ajatteli paljon
noina vaiteliaina päivinä; ja hän ilmaisi ajatuksensa Danille, ja Dan
yhtyi hänen mielipiteisiinsä — aina siinä määrin, että he nyt pyysivät
paistinpiirakoita sen sijaan että olisivat niitä salaa näpistelleet.

Mutta viikkoa myöhemmin he molemmat olivat vähällä kaataa


kumoon "Hattie S:n" kevytmielisessä yrityksessään seivästää haita
kepin nokkaan nidotulla vanhalla pistimellä. Tuo vihainen peto
uiskenteli veneen sivuilla kerjäten pieniä kaloja, ja oli todella Luojan
onni, että kaikki kolme selvisivät kahakasta hengissä.

Ja kun oli aikansa oltu sokkosilla sumussa, tuli vihdoinkin aamu,


jolloin Disko huusi kannelta alas kanssiin: "Joutukaa, pojat! Olemme
kaupungissa!"
VIII.

Ei koskaan mene Harveyn mielestä se näky, joka avautui hänen


eteensä sinä aamuna. Aurinko oli juuri erkautunut taivaanrannasta,
jota he eivät olleet nähneet lähes viikkoon, ja sen matalat,
punertavat säteet osuivat kolmen ankkuroidun kuunarilaivaston
purjeisiin — laivastoista oli yksi pohjoisessa, yksi lännessä ja yksi
etelässä. Siellä oli varmaankin lähes sata alusta, jokaista mahdollista
tekotapaa ja rakennetta, ulompana erillään muista raakataklauksella
varustettu ranskalainen, kaikki kumarrellen ja niiaillen toisilleen.
Jokaisesta aluksesta oli veneitä lähdössä vesille kuin mehiläisiä
pesästään; ja huutojen kajahtelu, köysien ja pylpyräin kalina ja
airojen loiskina kantautui peninkulmittain yli vellovan vedenpinnan.
Auringon kohotessa korkeammalle muuttuivat purjeet monen
värisiksi — mustiksi, himmeänharmaiksi ja valkoisiksi, ja yhä uusia
aluksia ilmestyi esiin etelän ilmalla häämöttävän sumun seasta.

Veneet kokoutuivat rypäisiin, erkanivat, muuttivat uuteen


järjestykseen ja hajautuivat taaskin, mutta kaikki pyrkivät samaan
suuntaan; ja miehet huutelivat, viheltelivät ja lauloivat, ja vedenpinta
oli kirjavana aluksista heitetyistä roskista.
"Se on kaupunki", sanoi Harvey. "Disko oli oikeassa. Se on
todellakin kaupunki."

"Olen nähnyt pienempiäkin", sanoi Disko. "Täällä on kaikkiaan


tuhatkunta miestä. Ja tuolla on Neitsyt." Hän viittasi tyhjään
paikkaan, missä vihertävällä vedenpinnalla ei ollut yhtään venettä.

"Täällä Ollaan" kaarratti pohjoisen laivueen liepeitse, Diskon


huiskuttaessa kättään toiselle tuttavalle toisensa jälkeen, ja sitten se
ankkuroi yhtä sulavasti kuin kilpapurjehdus-alus purjehduskauden
päättyessä. Matalikko-alukset sivuuttavat äänettöminä taidokkaasti
suoritetun liikkeen, mutta poropeukalo saa osakseen ivahuutoja
pitkin koko linjaa.

"Juuri parhaaseen aikaan täkykalalle", huudettiin "Mary


Chiltonista".

"Onko suola kohta kosteana?" kysyttiin "King Philipistä".

"Hei, Tom Platt! Tuletko illalliselle tänään?" sanottiin "Henry


Clay'stä"; ja siihen tapaan kysymykset ja vastaukset risteilivät
aluksesta toiseen. Miehet olivat tavanneet toisiaan jo aikaisemmin,
liikkuessaan pyyntiveneillä sumussa, eikä mikään paikka ole niin
otollinen juorujen kulkemiselle kuin matalikkolaivasto. Heillä tuntui
kaikilla olevan tietona Harveyn pelastuminen, ja he kysyivät oliko
hän jo suolansa arvoinen. Nuoret pojat kompailivat Danin kanssa,
jolla myös oli sukkela kieli ja joka kyseli heidän vointiaan käyttäen
heidän kaupunkilaisliikanimiään, joista tiesi heidän vähimmän
pitävän. Manuelin kanssa lavertelivat hänen maanmiehensä omalla
kielellään, ja vähäpuheisen kokinkin nähtiin ratsastavan
halkaisijapuomilla huutelemassa gaelinkielellä tuttavalleen, joka oli
yhtä musta kuin hän itsekin. Kun he olivat varustaneet poijulla
ankkuriköytensä — Neitsyen seutu on kauttaaltaan kallioista pohjaa,
ja huolettomuus merkitsee ankkuriköyden poikkihankautumisen ja
ajelulle joutumisen vaaraa — kun he siis olivat varustaneet poijulla
ankkuriköytensä, lähtivät heidänkin veneensä liikkeelle liittyäkseen
noin peninkulman päässä ankkurissa olevaan veneparveen. Kuunarit
keinuivat ja nuokkuivat turvallisen välimatkan päässä kuin
lapsukaisiaan vartioivat ankkaemot, ja veneet käyttäytyivät kuin
vallattomat ankanpoikaset.

Kun he sekaantuivat hälisevään parveen, missä veneet kolahtelivat


toisiinsa, Harveyn korvat kihisivät hänen soututapaansa kohdistuvista
huomautuksista. Hänen ympärillään sateli sanoja kaikilla Labradorin
ja Long Islandin välillä tavattavilla kielimurteilla, portugalin kieltä,
napolilaismurretta, lingua francaa, ranskaa ja gaelinkieltä myöten,
laulujen ja hoilauksien ja uusien voimasanojen säestäminä, ja hän
tuntui olevan niitten kaikkien maalitauluna. Ensi kertaa eläessään
hän tunsi itseään ujostuttavan — ehkä hänen kuunarin miehistön
pienessä piirissä viettämänsä pitkä aika oli siihen syynä — kun hän
näki nuo monet kymmenet hurjat kasvot, jotka nousivat ja laskivat
pienen keinuvan aluksen mukana. Laakea, henkäillen kohoileva
maininki, noin kolmesataa syltää laaksosta laelle, kohotti aika-ajoin
rauhallisesti hartioilleen eriväristen veneitten ketjun. Ne kuvastuivat
tuokion omituisena reunuskuvasarjana taivaan rajaviivaa vasten,
niissä olevien miehien viittoessa ja huhuillessa. Seuraavassa
silmänräpäyksessä nuo avonaiset suut, huitovat käsivarret ja paljaat
rinnat taas hävisivät, jonka jälkeen toisen mainingin tullessa kohosi
ylös aivan erinäköinen ihmiskuva-sarja, muistuttaen paperikuvia
lasten leikkinäyttämöllä. Harvey katseli ihmeissään. "Ole varuillasi!"
sanoi Dan heiluttaen lippoa. "Kun minä käsken sinun lipota, niin
lippoa. Täkykalat saattavat parveilla milloin hyvänsä tästä puolin.
Minne laskemme, Tom Platt?"
Työnnellen, puskien ja hinaten, tervehtien vanhoja ystäviä yhtäällä
ja varottaen vanhoja vihamiehiä toisaalla ohjasi eskaaderinpäällikkö
Tom Platt pienen laivastonsa kunnialla yleisen tungoksen alapuolelle,
ja heti alkoi kolme tai neljä miestä hinata ylös ankkureitaan aikoen
siirtyä heidän alapuolelleen. Mutta silloin remahti valtava
naurunrähäkkä, kun eräs vene syöksähti paikaltaan tavattomalla
vauhdilla, siinä olevan miehen kiskoessa hurjasti ankkuriköydestä.

"Päästä köysi löysälle!" huusi parikymmentä ääntä. "Anna sen


pudistaa se irti."

"Mitä se on?" kysyi Harvey veneen viilettäessä etelää kohti. "Eikö


se ole ankkurissa, mitä?"

"Ankkurissa — kyllä, mutta sen pohjataklaus on vähän


epävakainen", sanoi Dan nauraen. "Valas on sekaantunut siihen…
Lippoa, Harve! Nyt ne tulevat!"

Vedenpinta heidän ympärillään sumeni ja tummeni ja kähertyi


sitten tiheäksi hopeavälkkeisten pikku kalojen kuuroksi, ja noin
puolensadan sylen laajuisella alalla alkoivat turskat hyppiä kuin lohet
keväällä; turskien takaa näkyi taasen kolme tai neljä leveää
harmaanmustaa selkää, jotka poreita synnyttäen halkoivat vettä.

Silloin joka mies huusi ja koetti hinata ylös ankkuriaan


päästäkseen parveen käsiksi, sekotti naapurinsa siiman, purki
sydäntään häiritsijöilleen, ammensi vimmatusti lipollaan ja kirkui
varotuksia ja neuvoja tovereilleen, vedenpinnan sihistessä kuin
vasta-avattu soodavesipullo ja turskien, miesten ja valaitten
hyökätessä yksin tuumin onnettomien täkykalojen kimppuun. Harvey
oli vähällä horjahtaa yli laidan Danin lipon varren kolhauksesta.
Mutta kaiken tämän metelinkin keskellä hän huomasi ja painoi
muistiinsa valaan häijyn, päättäväisen, sirkuselefanttia jollakin tavoin
muistuttavan pienen silmän katseen, sen kiitäessä melkein
vedenpinnan tasalla ja, kuten hän väitti, vilkuttaessa hänelle silmää.
Kolmen veneen ankkuriköydet joutuivat näiden häikäilemättömien
aavanmeren ajometsästäjien sotkettaviksi, ja ne saivat kulkea
näitten hevostensa vetäminä puoli peninkulmaa ennenkuin nämä
pudistivat köyden irralleen.

Sitten pikkukalain parvi siirtyi pois, ja viiden minuutin kuluttua ei


kuulunut mitään muuta ääntä kuin painolyijyjen loiskahtelua veteen,
turskien sätkintää ja nuijien muksahtelua miesten tainnuttaessa
niitä. Se oli ihmeellistä pyyntiä. Harvey saattoi nähdä kuinka alhaalla
vedessä välähtelevät turskat uivat verkalleen laumoissa, tarttuen
koukkuihin yhtä vääjäämättä kuin uivatkin. Matalikkolaki kieltää
jyrkästi käyttämästä useampaa kuin yhtä koukkua samassa siimassa
silloin kun veneet ovat Neitsytmatalikolla tai Itäisillä särkillä; mutta
niin liki toisiaan olivat veneet, että yksikoukkuisetkin siimat
sekaantuivat, ja Harvey joutui ennen pitkää kiihkeään kiistaan
lauhkean, parrakkaan newfoundlandilaisen kanssa toisella puolella ja
kiljuvan portugalilaisen kanssa toisella.

Pahempaa kuin konsaan siimojen sekaantuminen, oli


ankkuriköysien sotkulle joutuminen veden alla. Kukin oli ankkuroinut
mihin katsoi sopivaksi, ajelehtien ja soudellen kiinnekohtansa
ympärillä. Kun kalat alkoivat syödä laimeammin, tahtoi jokainen
nostaa ankkurinsa ja siirtyä paremmalle paikalle; mutta joka kolmas
mies näki veneköytensä olevan tiukasti sekaannuksissa neljän tai
viiden lähinnäolevan köyden kanssa. Toisen veneköyden
katkaiseminen on kuvaamattoman törkeä rikos matalikoilla; kuitenkin
sitä tehtiin, tekijän ilmi joutumatta, kolme tai neljä kertaa sinä
päivänä. Tom Platt sai kiinni erään Mainen miehen itse teosta ja iski
hänet airolla veneen laidan yli veteen, ja Manuel kohteli erästä omaa
maanmiestään samalla tavalla. Mutta Harveyn ankkuriköysi
katkaistiin ja samoin Pennin, ja heidän veneensä muutettiin
apuveneiksi kuljettamaan kaloja kuunariin sitä mukaa kuin toiset
veneet täyttyivät. Täkykalat parveilivat vielä toisen kerran
illansuussa, jolloin hurja meteli uusiintui; ja hämärän tullen he
soutivat kaikki laivalle perkatakseen karsinan laitaan kiinnitettyjen
öljylamppujen valossa.

Kaloja oli suunnaton kasa, ja he nukkuivat kesken perkkaustaan.


Seuraavana päivänä muutamat veneet pyydystivät Neitsytsärkän
huipun kohdalla, ja Harvey, joka oli joukossa, katseli kuulakkaan
veden läpi tuota yksinäistä kalliota, joka kohoaa kahdenkymmenen
jalan päähän vedenpinnasta, niin että voi nähdä sen pinnalla
kasvavat levätkin. Turskia oli siellä epälukuisin, liikehtien vakavan
verkkaisesti nahkamaisten levälehvien yllä. Kun ne söivät, söivät ne
kaikki yhtäaikaa, ja samalla tavalla ne lakkasivat. Puolenpäivän
tienoissa oli joutilas aika, ja miehet alkoivat etsiä ajanvietettä. Dan
huomasi ensimäiseksi "Pragin Toivon", joka juuri oli saapunut, ja kun
sen veneet liittyivät toisten joukkoon, tervehdittiin niitä
kysymyksellä; "Kuka on keljuin mies laivastossa?"

Kolmesataa ääntä vastasi raikkaasti: "Nick Bra-ady." Se kajahti


kuin urkumessu.

"Kuka varasti lampunsydämet?" Tämä oli Danin avustus.

"Nick Bra-ady", veisattiin veneistä.

"Kuka keitti velliä suolatuista syöteistä?" Tämä oli joku tuntematon


panettelija neljännespeninkulman päässä.
Taas sama raikas kuoro. Brady ei itse asiassa ollut mitenkään
erityisemmin halpamainen, mutta hänellä oli sellainen maine, ja
laivasto käytti sitä hyväkseen parhaansa mukaan. Sitten he keksivät
erään Truron aluksen, joka kuusi vuotta aikaisemmin oli todistettu
vikapääksi viisi- tai kuusikoukkuisen siiman käyttämiseen Itäisillä
särkillä — "scrowger'iksi" he tuollaista kapinetta nimittivät. Mies oli
luonnollisesti saanut nimekseen "Scrowger-Jim"; ja vaikka hän siitä
pitäen oli piilotellut Georges-matalikoilla, tapasi hän kunniansa täällä
odottamassa häntä täydessä loistossaan. He alkoivat julistaa sitä
jonkinlaisessa sähikäiskuorossa: "Jim! Oo Jim! Jim! Oo Jim!
Sssscrowger-Jim!" Tämä oli jokaisesta hauskaa. Ja kun muuan
runollinen beverlyläinen lauloi "Carrie Pitmanin" ankkurista
tekemänsä pilkkalaulun — hän oli muovaillut sitä koko päivän ja
puhunut siitä jo viikkokausia — tunsi veneseurue itsensä kerrassaan
onnelliseksi. Sitten heidän täyty kysyä samalta beverlyläiseltä, kuinka
hänen papuvaransa riittivät, sillä runoilijoillekaan ei kaikki saa käydä
mieltä myöten. Jokainen kuunari ja melkein joka mieskin tuli
vuorostaan pilan esineeksi. Jos oli jossakin huolimaton tai siivoton
kokki, niin veneseurue lauloi hänestä ja hänen ruuistaan. Jos jokin
kuunari oli kelvottomaksi havaittu, sai laivasto kuulla sen juurta
jaksain. Jos joku mies oli varastanut tupakkaa ruokakumppaniltaan,
mainittiin hänet kokouksessa nimeltään. Diskon erehtymättömät
arvostelut, Pitkän Jackin jo vuosia sitten myömä kuorma-alus, Danin
mielitietty (voi Danin kiukkua silloin!), Pennin huono onni veneen-
ankkurien suhteen, Saltersin mielipiteet lannotuskysymyksestä,
Manuelin pienet harha-askeleet hyveen tieltä maissa ollessaan ja
Harveyn naismainen airojen käsittely — kaikki tuotiin julki; ja kun
sumu laskeutui heidän ympärilleen hopeanvalkoisina lakanoina
taakse jääneen auringon hohteessa, kajahtelivat äänet ikäänkuin
näkymätön tuomarijoukko olisi lausunut tuomioitaan.
Veneet liikuskelivat ja kalastivat ja jupakoivat, kunnes suurehko
aallonvyöry kulki yli matalikon. Silloin veneet erkanivat kauemmaksi
toisistaan, jotteivät murskaisi laitojaan, ja joku huusi että jos vyöryjä
jatkuisi, niin Neitsyt puhkeisi. Muuan arkailematon galwaylainen
veljenpoikineen väitti sitä perättömäksi, hinasi ylös ankkurinsa ja
souti ihan kallion kohdalle. Monet äänet huusivat heitä tulemaan
pois, toisten taasen yllyttäessä heitä pitkittämään. Kun sileälakiset
vyöryt liukuivat etelää kohti, nostivat ne veneen korkealle ja yhä
korkeammalle sumussa ja pudottivat sen sitten likaisen-väriseen,
pyörteiseen, häränsilmäiseen aallonlaaksoon, missä se kieppui
ankkurinsa ympäri jalan tai parin päässä piilossa olevasta kalliosta.
Se oli leikkimistä kuoleman kanssa vain urheuttaan näyttääkseen, ja
toiset veneet katselivat sitä painostavan äänettömyyden vallitessa,
kunnes Pitkä Jack souti maanmiestensä taakse ja tyvenesti leikkasi
poikki heidän ankkuriköytensä.

"Ettekö kuule sen kolahtelevan?" huusi hän. "Soutakaa henkenne


edestä! Soutakaa!"

Miehet kiroilivat ja yrittivät väittää vastaan, kun vene ajautui


irralleen; mutta seuraava vyöry pysähtyi hiukan, ikäänkuin ihminen
mattoon kompastuessaan. Kuului syvä nyyhkytys ja vahveneva
kohina, ja Neitsyt viskasi ylös muutamia kymmeniä neliösyltiä
vaahtoavaa vettä, joka kuohui valkoisena, raivoavana ja
kammottavana matalan pohjan yläpuolella. Silloin kaikkien veneitten
miehet kovasti ylistivät Pitkää Jackia, ja galwaylaiset tukkivat suunsa.

"Eikö se ole komeaa?" sanoi Dan, pyörähdellen kuin


hylkeenpoikanen kotikivellään. "Se puhkeaa tästä lähtien kerran joka
puolen tunnin aikana, jolleivät vyöryt kovasti suurene. Mikä on sen
säännöllinen aika, silloin kun se on toiminnassaan, Tom Platt?"
"Kerran joka viidestoista minuutti, täsmälleen. Harve, sinä olet
nähnyt matalikkojen suurimman merkillisyyden; ja ilman Pitkää
Jackia olisit saanut nähdä parin miehen lopun vielä lisäksi."

Iloista hälinää kuului siltä suunnalta, missä sumu oli tiheimpänä ja


kuunarit soittivat kellojaan. Iso parkki pisti varovasti kuononsa esiin
sumusta, ja irlantilaiset ottivat sen vastaan huudellen: "Tule tänne
vain, kultaseni!"

"Onko se ranskalainen?" kysyi Harvey.

"Eikö sinulla ole silmiä? Sehän on baltimorelainen, joka kulkee


pelossa ja vapistuksessa", sanoi Dan. "Nyt me hassutamme sitä niin
että tikut lähtevät. Luulen että sen laivuri kohtaa ensi kerran
kalastajalaivaston tällaisissa oloissa."

Se oli musta, eloisa kahdeksansadan tonnin alus. Sen isopurje oli


sidottu lämsällä ja märssypurje lepatti epäröiden vähäisessä
tuulenhengessä. Parkki on naisellisin kaikista meren tyttäristä, ja
tämä kookas, empivä olento valkoiseksi ja kullanväriseksi
maalattuine keulakuvineen muistutti ilmielävästi hämmentynyttä
naista, joka hiukan kohottaa helmuksiaan mennäkseen rapakoisen
kadun poikki häijyjen poikanaskalien ilkkuessa ympärillä. Aluksen
tilanne olikin hyvin suuressa määrässä samanlainen. Se tiesi
olevansa jossakin Neitsyen lähistöllä, oli kuullut sen kohinan ja kulki
sen vuoksi varovasti kysellen tietään. Tässä on pieni osa siitä mitä se
sai kuulla pieniltä keikkuvilta veneiltä:

"Neitsytkö? Mitä te puhutte? Tämähän on Le Have sunnuntai-


aamuna.
Menkää kotiin ja nukkukaa päänne selväksi."
"Menkää kotiin ja sanokaa että mekin tulemme."

Kun parkin perä keinahtaen ja loiskahtaen painui aallonpohjaan,


huusi puolikymmentä ääntä kuin yhdestä suusta: "Haaa — nyt se
iskee kariin!"

"Tiukkaan ylös! Tiukkaan ylös henkenne tähden! Te olette juuri


kohdalla nyt."

"Alas! Tarkkaan alas! Antakaa mennä täyttä päätä!"

"Kaikki miehet pumpuille!"

"Alas halkaisija, ja sauvokaa!"

Tällöin laivuri menetti malttinsa ja sanoi mitä hän ajatteli. Heti


paikalla keskeyttivät miehet pyynnin vastatakseen hänelle, ja hän sai
kuulla monta merkillistä seikkaa aluksestaan ja sen lähimmästä
satamasta. He kysyivät häneltä oliko hän vakuutuksessa, ja mistä
hän oli varastanut ankkurinsa, koska, he sanoivat, se kuului "Carrie
Pitmanille"; he kutsuivat hänen alustaan mutaproomuksi ja syyttivät
että hän penkoo pohjaliejua ja säikyttää kalat pois; he tarjoutuivat
hinaamaan häntä ja lähettämään laskun hänen eukolleen; ja muuan
uskalias nuorukainen pujahti melkein peräpeilin alle, läimäytti sitä
kämmenellään ja kiljaisi: "Nous' ylös, Buck!"

Kokki tyhjensi tuhkapannun hänen päälleen, ja hän vastasi


turskanpäillä. Parkin miehistö heitteli pieniä tulisia hiiliä keittiön-
uunistaan, ja veneissä-olijat uhkasivat tulla laivaan ja panna siinä
toimeen "typistyksiä". He olisivat viipymättä varottaneet, jos laiva
olisi ollut todellisessa vaarassa, mutta kun he tiesivät sen turvallisesti
sivuuttaneen Neitsyen, niin he käyttivät tilaisuutta parhaaksensa.
Hauskuus meni pilalle, kun kari kuohui uudelleen puolen
peninkulman päässä tuulen päällä, ja kiusattu parkki nosti kaiken
mikä vain otti tuulta ja laski tiehensä; mutta venelaivue tunsi että
kunnia oli jäänyt heille.

Koko seuraavan yön Neitsyt kohisi kumeasti, ja aamulla Harvey


näki meren lainehtivan äreänä ja kuohupäisenä ja laivaston
odottavan johtavaa merkinantoa häälyvin mastoin. Ei ainoatakaan
venettä laskettu vesille ennenkuin kello kymmenen, jolloin Jerauldin
veljekset "Päivän Silmästä" olematonta tyventymistä kuvitellen
antoivat esimerkin. Minuutin kuluttua puolet veneistä olivat ulkona ja
poukkuilivat kähärtyvillä vyöryillä, mutta Troop piti oman miehistönsä
perkkuutyössä. Hän ei nähnyt mitään järkeä uhkayrityksissä; ja kun
myrsky kiihtyi iltapuolella, saivat he tyytyväisyydekseen ottaa
vastaan likomärkiä vieraita, jotka kiittivät kun pääsivät johonkaan
suojaan ärjyvältä myrskyltä. Pojat seisoivat venetalojen luona lyhdyt
kädessä, miehet valmiina hinaamaan, tähystellen merelle jonkun
suuren hyökyaallon tulon varalta, joka saisi heidät heittämään kaiken
muun ja pitämään kiinni epätoivon voimalla säilyttääkseen henkensä.
Pimeästä kuului aina aika-ajoin huuto: "Vene! Vene!" He kiinnittivät
nostotaljat, hinasivat kannelle läpimärän miehen ja puoliupoksissa
olevan veneen; tätä he tekivät kunnes kuunarin kansi oli täynnään
venepinoja ja kojut täynnä miehiä. Viisi kertaa Harvey ja Dan
vahtivuorollaan syöksyivät puomiin köytetyn etumaston kahvelin
kimppuun ja tarrautuivat käsin, jaloin ja hampain kiinni puihin ja
köysiin ja lionneeseen purjevaatteeseen, kun suuri aalto täytti
kannen. Muuan vene paiskautui säpäleiksi ja aallot viskasivat miehen
pää edellä kannelle, niin että otsaan tuli ammottava haava; ja
aamunkoitteessa, kun riehuvien aaltojen harjat kauttaaltaan hohtivat
valkoisina, raahautui muuan mies kannelle sinertävänä, kauhun
leima kasvoillaan ja taittunein käsivarsin, kysyen veljeään. Seitsemän
ylimääräistä suuta oli aamiaisella: eräs ruotsalainen, eräs
chathamilainen laivuri, eräs Mainen Hancockista oleva poika, muuan
duxburyläinen ja kolme Provincetownin miestä.

Seuraavana päivänä oli yleinen lajittelu laivaston kesken, ja vaikka


ei kukaan virkkanut mitään, söivät kaikki paremmalla ruokahalulla,
kun alus toisensa jälkeen ilmotti täyden miehistön olevan laivalla.
Ainoastaan pari portugalilaista ja muuan vanha mies Gloucesterista
olivat hukkuneet, mutta monet olivat haavottuneet tai saaneet
ruhjevammoja; ja kahdelta kuunarilta oli katkennut ankkuriköysi ja
ne olivat ajautuneet eteläänpäin kolmen päivän purjehdusmatkan
päähän. Eräällä ranskalaisella aluksella kuoli mies — se oli sama
parkki, jonka kanssa "Täällä Ollaan" oli tehnyt tupakankauppaa. Alus
lähti hiljaa liikkeelle eräänä kosteana, kelmeänä aamuna, siirtyi
paikalle jossa oli syvää vettä, purjeitten riippuessa velttoina kaiken
aikaa, ja Harvey näki hautaustoimituksen Diskon kiikarilla. Se oli
yksinkertainen: pitkulainen käärö vain solautettiin yli laidan. Heillä ei
näyttänyt olevan mitään juhlamenoja, mutta illalla aluksen maatessa
ankkurissa Harvey kuuli tähtituikkeisen mustan veden yli heidän
laulavan jotain, joka kuulosti virreltä. Se kulki hyvin verkkaiseen
tahtiin näillä sanoilla:

"La brigantine (Jo pursi kääntyy qui va tourner ja


keinahtaa, roule et s'incline se kohta kauas pour m'e trainer.
mun kuljettaa. Oh, Vierge Marie, Oi Neitsyt Pyhä, pour moi
priez Dieu! suo armosi! Adieu, patrie; Oi synnyinmaani,
Quebec, adieu!" jää hyvästi!)

Tom Platt kävi laivalla, koska, kuten hän sanoi, vainaja oli hänen
vapaamuurari-veljensä. Saatiin tietää että aalto oli pusertanut mies-
paran taivuksiin kokkapuun tyveä vasten ja taittanut hänen selkänsä.
Tieto levisi kuin kulovalkea, sillä laivan miehet pitivät vastoin yleistä
tapaa huutokaupan vainajan kapineille — hänellä ei ollut ketään
sukulaisia St. Malossa tai Miquelonissa —, ja kaikki tavarat oli
levitetty kajuutan katolle, punaisesta, kudotusta lakista tuppipuukolla
varustettuun nahkavyöhön asti. Dan ja Harvey olivat "Hattie S:llä"
pyydystämässä kahdenkymmenen sylen vedessä ja he luonnollisesti
soutivat parkille ollakseen mukana. Se oli pitkä soutumatka, ja he
viipyivät perillä jonkunverran, millä aikaa Dan osti puukon, jossa oli
omituisen muotoinen messinkipää. Kun he jälleen laskeutuivat
veneeseensä ja alkoivat soutaa tihusateessa lotisevaa vedenpintaa
pitkin, tulivat he ajatelleeksi että heille saattaisi koitua ikävyyksiä
pyyntihomman laiminlyömisestä.

"Eipä liene haitaksi, jos vähän lämpenemmekin", sanoi Dan


väristen öljytakissaan, ja he soutivat rivakasti suoraan keskelle
valkoista sumua, joka, kuten tavallisesti, laskeutui heidän ylleen
ilman edeltäkäyvää varotusta.

"Näillä tienoin on liian paljon merivirtoja, jotta voisi luottaa


vaistoihinsa", sanoi Dan. "Heitä ankkuri veteen, Harve, niin
kalastamme vähän, kunnes ilma selvenee. Pane suurin lyijysi
painoksi. Kolmen naulan paino ei ole liikaa tällä vedellä. Katso kuinka
vene on jo vetänyt köyden tiukalle."

Keulan alla kävi kerrassaan pieni pulina, kun joku matalikon


säännötön merivirta piti venettä piukalla köyden päässä; mutta he
eivät voineet nähdä veneen mittaakaan millekään suunnalle. Harvey
käänsi takinkauluksensa ylös ja köykistyi kelansa ylitse uupuneen
merenkyntäjän ilmein. Sumulla ei enää ollut mitään erittäin
pelottavaa voimaa häneen nähden. He kalastivat jonkun aikaa
äänettöminä ja huomasivat turskan syövän hyvästi. Sitten Dan veti
puukon tupesta ja koetteli sen terää veneenlaitaan.

"Se on sievä", sanoi Harvey. "Miten sait sen niin halvalla?"

"No, heidän joutavien katolilaisten taikauskojensa takia", sanoi


Dan, työnnellen veneenlaitaa kirkkaalla puukonkärjellä. "Heistä on
vastenmielistä ottaa rautaista esinettä kuolleelta. Etkö nähnyt niitten
Arichatin ranskalaisten vetäytyvän takaperin, kun minä tarjosin?"

"Mutta eihän huutokaupasta ostaminen ole samaa kuin kuolleelta


ottaminen. Sehän on kauppaa."

"Me tiedämme sen kyllä, mutta taikauskoon eivät järkisyyt vaikuta.


Tästäkin asiasta näkee kuinka edullista on asua edistyneessä
maassa." Ja Dan alkoi viheltää:

"No, terve, Thatcher, kuinkas voit?


Jo näkyy tuolla Eastern Point.
Koht' ankkurimme heitämme
Cape Ann'in kohdalle!"

"Miksikä sitten se Eastportin mies ei tarjonnut? Hänhän osti


saappaatkin. Eikö Maine ole edistynyt seutu?"

"Mainekö? Pyh! Maineläisillä ei ole edes niin paljon tietoa tai niin
paljon rahaa, että maalauttaisivat talonsa. Minä olen nähnyt niitä. Se
Eastportin mies kertoi minulle että tätä puukkoa oli käytetty —
ranskalaiselta kapteenilta hän oli sen kuullut — käytetty jossain
Ranskan rannikolla viime vuonna."

"Miestäkö lyöty sillä? Nakkaappa nuija tänne!" Harvey veti kalansa


veneeseen, pani uuden syötin ja heitti koukun taas veteen.
"Tapettu mies! Kun minä kuulin sen, halutti minua tietysti kahta
kovemmin ostaa se."

"Peijakas! Sitä minä en tiennyt", sanoi Harvey käännähtäen


ympäri. "Minä annan siitä sinulle dollarin, kun — kun saan palkkani.
Kuule, minä annan kaksi dollaria."

"Ihanko todella? Pidätkö siitä niin kovasti?" sanoi Dan punastuen.


"Totta puhuakseni minä ostin sen oikeastaan sinua varten —
lahjaksi; mutta minä en tahtonut ilmaista sitä ennenkuin näkisin mitä
sinä siitä pitäisit. Se on sinun ja hyvästä sydämestä, Harve, koska
kerran olemme venetoverit ja niin edespäin. Siinä on, ota!"

Hän ojensi sen Harveylle, vöineen kaikkineen.

"Mutta kuulehan, Dan, minä en ymmärrä — —".

"Ota pois. En minä sillä mitään tee. Minä haluan että sinä otat
sen."

Kiusaus oli vastustamaton. "Dan, sinä olet valkoinen mies", sanoi


Harvey. "Minä pidän sitä niin kauan kuin elän."

"Hauska kuulla", virkkoi Dan nauraen hyvillä mielin; ja rientäen


muuttamaan puheenaihetta hän sanoi sitten: "Minusta näyttää kuin
sinun siimasi olisi kiinni jossakin."

"Tarttunut pohjaan varmaankin", sanoi Harvey nykäistyään. Mutta


ennenkuin hän ryhtyi vetämään siimaa ylös, kiinnitti hän vyön
vyötäisilleen, kuullen mielihyvällä kuinka tupen kärki kalahti tuhtoon
hänen takanaan. "Mer-killistä!" huusi hän. "Siinä on ihan sellainen
tunne kuin se olisi mansikkapohjassa. Eikös tässä ole puhdas
hietapohja, vai mitä?"
Dan kurottui hänen puolelleen ja nykäisi tutkistelevasti. "Kampela
jurottaa tuolla tavoin, jos se on huonolla tuulella. Ei tässä ole
mansikkapohjaa. Tempaise kerran tai pari. Kas, se antaa perään. On
kai parasta hinata ylös ja katsoa varmemmin."

He vetivät yhdessä, kiinnittäen jokaisen siimalenkin hakoihin, ja


salaperäinen paino kohosi hitaasti.

"Oop-hei!" huihkasi Dan, mutta huihkaus loppui molempien


poikien päästämään kimakkaan kauhunkiljaisuun, sillä vedestä
kohosi — kaksi päivää sitten haudatun ranskalaisen ruumis! Koukku
oli tarttunut sen oikeaan kainalokuoppaan, ja se kellui pystyssä ja
kamalan näköisenä, pää ja hartiat vedenpinnan yläpuolella.
Käsivarret olivat sidotut kylkiin, ja — sillä ei ollut lainkaan kasvoja.
Pojat tuupertuivat yhteen kasaan veneen pohjalle jääden siihen
makaamaan, silläaikaa kun tuo kammotus kellui veneen sivulla
tiukalle kiristyneen siiman kannattamana.

"Virta — virta on tuonut sen tänne!" sanoi Harvey värisevin huulin,


hapuillen kädellään vyön soikea.

"Voi Herra Jumala!" voihki Dan. "Voi, Harve, joudu! Hän on tullut
sitä noutamaan. Anna se hänelle. Ota se pois vyöltäsi."

"Minä en tahdo sitä pitää! En!" huusi Harvey. "Minä en löydä so-
solkea."

"Joudu, Harve! Se on sinun siimassasi!" Harvey kohosi istualleen


irrottaakseen vyötä, joutuen siten katsomaan kuolleen päätä, jonka
vettävaluvain hiussuortuvain alla ei ollut kasvoja. "Se on kiinni vielä",
kuiskasi hän Danille, joka kaivoi esiin taskuveitsensä ja katkaisi
siiman, samalla kun Harvey viskasi vyön kauas veneen laidan yli.
Ruumis vajosi mulskahtaen veden alle, ja Dan kohoutui varovaisesti
polvilleen, valkoisempana kuin sumu.

"Se tuli sitä noutamaan. Se tuli sitä noutamaan. Olen ennen


nähnyt ruumiin hinattavan ylös pitkässäsiimassa, enkä siitä paljon
välittänyt, mutta tämä tuli varta vasten meidän luokse."

"Toivoisin — toivoisin etten olisi ottanut sitä veistä. Silloin se olisi


tullut sinun siimaasi."

"Tuskinpa se olisi tehnyt erotusta. Me olemme kumpikin


säikähtäneet itseltämme kymmenen vuoden kasvun. Ooh, Harve,
näitkö sen päätä?"

"Näinkö? Minä en voi sitä unhottaa milloinkaan. Mutta kuule, Dan;


ei suinkaan hän voinut tulla tahallaan. Virta se vain hänet toi."

"Virtako? Ei, kyllä hän tuli sitä noutamaan, Harve. Hehän upottivat
hänet kuusi peninkulmaa etelään laivastosta, ja me olemme siitä
vain kahden peninkulman päässä. Ja minä kuulin että he olivat
panneet painoksi puolitoista syltää ankkurikettinkiä."

"Mitähän hän mahtoi tehdä tuolla veitsellä — siellä Ranskan


rannikolla?"

"Jonkin katalan teon. Luulen että hänen täytyy viedä se mukanaan


viimeiselle tuomiolle, ja siksi… Mitä sinä teet kaloille?"

"Heitän ne yli laidan", vastasi Harvey. "Mitä varten? Emmehän me


niitä syö."

"Sama se sille on. Minun täytyi katsoa hänen kasvoihinsa silloin


kun irrotin vyötä. Sinä voit pitää saaliisi, jos haluat. Minä en halua
omaani."

Dan ei virkkanut mitään, vaan nakkeli hänkin kalansa takaisin


veteen.

"Taitaa olla parasta pysyä varmemmalla puolella", mumisi hän


vihdoin. "Antaisin kuukauden palkan, jos tuo sumu hälvenisi.
Sumussa liikkuu kaikkea sellaista, mitä ei selvällä ilmalla näe —
kyöpeleitä ja särkkäkummituksia ja sellaisia. Tuntuu minusta
ikäänkuin vähän keventävältä, että se tuli sillä tavoin eikä kävellen.
Se olisi voinut tulla kävellenkin."

"Älä, älä puhu, Dan! Me olemme ihan sen kohdalla vielä.


Tahtoisinpa että olisin turvassa laivalla ja Salters-sedän
löylyytettävänä."

"He alkavat pian kyllä kaivata meitä. Anna minulle torvi." Dan otti
tinaisen merkinantotorven, mutta pysähtyi ennenkuin puhalsi.

"Puhalla pois", sanoi Harvey. "Minä en halua jäädä tänne koko


yöksi."

"Kysymys on siitä, miten hän sen ottaa. Muuan etelänpuolen mies


kertoi minulle kerran olleensa kuunarissa, jossa ei uskallettu kutsua
veneitä torveen puhaltamalla, koska laivuri — ei se jonka kanssa hän
oli, vaan joku kapteeni, joka oli kuljettanut sitä viisi vuotta
aikaisemmin — oli hukuttanut pojan laivan sivulle juovuspäissään; ja
aina sen jälkeen, kun veneitä kutsuttiin torvella, souti poikakin laivan
sivulle ja huusi: 'Vene! Vene!' niinkuin toisetkin."

"Vene! Vene!" kuului kumea ääni sumusta. Pojat kyyristyivät


jälleen säikähtyneinä, ja torvi putosi Danin kädestä.
"Älä huoli!" huudahti Harvey. "Sehän on kokki."

"Mikä minut panikin muistamaan tuota hupsua juttua", sanoi Dan.


"Tohtorihan se on, ihan selvästi."

"Dan, Danny! Ho-oi, Dan! Harve! Harvey! Hoooi! Haarveee!"

"Täällä ollaan", hoilasivat pojat yhteen ääneen. He kuulivat


aironloisketta, mutta eivät nähneet mitään ennenkuin kokki kasvot
kiiltävinä ja vettätippuen souti ihan heidän viereensä.

"Mitä on tapahtunut?" sanoi hän. "Te saatte selkäänne kotona."

"Sitä tarvitsemmekin. Sitä juuri kaipaammekin", sanoi Dan. "Mikä


vain on kotoista, kelpaa kyllä meille. Meillä on ollut hiukan
painostavaa seuraa." Ja kokin ojentaessa heille köyden kertoi Dan
tapahtuman hänelle.

"Niin! Hän tuli noutamaan puukkoaan", oli kaikki mitä kokki sanoi
kertomuksen loputtua.

Ei milloinkaan ollut pieni keinuva "Täällä Ollaan" näyttänyt niin


suloisen kodikkaalta kuin nyt, kun kokki, joka oli syntynyt ja
kasvanut sumujen keskellä, souti heidät sen luokse. Kajuutasta loisti
lämmin valonhohde ja keulan puolesta tuoksahti miellyttävä
ruuanhaju, ja tuntui ihan taivaallisen suloiselta kuulla Diskon sekä
muitten ilmielävinä ja reippaina reilingin yli nojautuen ottavan heitä
vastaan oikein ensiluokan selkäsaunan lupauksilla. Mutta kokki oli
kaikessa mustuudessaan sotataidon mestari. Hän piti huolen siitä,
ettei veneitä nostettu kannelle, ennenkuin hän jo oli esittänyt
vaikuttavimmat kohdat poikien kertomuksesta ja selittänyt peräpeilin
ympäri kiertäessään ja kolistellessaan, kuinka Harvey oli
onnenkantaja, joka teki tyhjäksi kaikki mahdolliset turmion yritykset.
Näin ollen tulivat pojat kannelle jonkinlaisina kunnioitusta
herättävinä sankareina, ja kaikki tekivät heille kysymyksiä sen sijaan
että olisivat löylyttäneet heitä häiriön ja turhan vaivan
aiheuttamisesta. Pieni Penn piti kerrassaan puheen taikauskon
järjettömyydestä, mutta yleinen mielipide oli häntä vastaan ja Pitkän
Jackin puolella, joka kertoi mitä karmivimpia kummitusjuttuja
melkein puoliyöhön saakka. Tämä vaikutti, ettei kukaan paitsi Salters
ja Penn virkkanut mitään "pakanallisuudesta", kun kokki asetti
sytytetyn kynttilän, jauhoista ja vedestä leivotun kakun ja
hyppysellisen suolaa laudankappaleelle ja laski sen veteen laivan
perästä rauhottaakseen ranskalaista, jos tämä vielä oli levoton. Dan
sytytti kynttilän, koska hän oli ostanut vyön, ja kokki mumisi ja jupisi
loihtuja niin kauan kuin sukeltelevaa liekkiä saattoi nähdä.

Mennessään alas kanssiin vahtivuoronsa päätyttyä virkahti Harvey


Danille: "Kuinkas on edistyksen ja katolilaisen taikauskon laita?"

"Hm, enköhän minä ole yhtä edistynyt ja valistunut kuin joku


muukin, mutta kun kuollut st.-malolainen laivamies tulee ja
säikäyttää hengettömiksi kaksi poika-raukkaa kolmenkymmenen
sentin puukon takia, niin silloin minä annan kokille valtuudet toimia
puolestani. Minä epäilen muukalaisia, sekä eläviä että kuolleita."

Seuraavana aamuna olivat kaikki paitsi kokki jokseenkin


häpeissään illallisista tempuista ja kävivät jatkamaan pitkiä työpäiviä
herkeämättömällä tarmolla, puhutellen toisiaan äreästi.

"Täällä Ollaan" lastasi viimeisiä venelastejaan kilpaa "Parry


Normanin" kanssa; ja niin tasaväkistä oli kilpailu, että toiset
innostuivat ottamaan siihen osaa lyömällä vetoja, jossa panoksina oli
tupakkaa. Joka kynsi ahersi pyynti- ja perkkuutyössä, kunnes

You might also like