0% found this document useful (0 votes)
29 views49 pages

Java All in One For Dummies Seventh Edition Doug Lowe

Uploaded by

maijakchih
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
0% found this document useful (0 votes)
29 views49 pages

Java All in One For Dummies Seventh Edition Doug Lowe

Uploaded by

maijakchih
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/ 49

Full download ebook at ebookmeta.

com

Java All in One For Dummies Seventh Edition


Doug Lowe

https://ebookmeta.com/product/java-all-in-one-for-
dummies-seventh-edition-doug-lowe/

Download more ebook from https://ebookmeta.com


More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Java All in One For Dummies Fifth Edition Doug Lowe

https://ebookmeta.com/product/java-all-in-one-for-dummies-fifth-
edition-doug-lowe-3/

Java All in One For Dummies Fifth Edition Doug Lowe

https://ebookmeta.com/product/java-all-in-one-for-dummies-fifth-
edition-doug-lowe-2/

Java All in One For Dummies Fifth Edition Doug Lowe

https://ebookmeta.com/product/java-all-in-one-for-dummies-fifth-
edition-doug-lowe/

Networking All in One For Dummies Doug Lowe

https://ebookmeta.com/product/networking-all-in-one-for-dummies-
doug-lowe/
Networking All-in-One For Dummies Doug Lowe

https://ebookmeta.com/product/networking-all-in-one-for-dummies-
doug-lowe-2/

Electronics All-in-One For Dummies Doug Lowe

https://ebookmeta.com/product/electronics-all-in-one-for-dummies-
doug-lowe/

Networking All-in-One For Dummies, 8th Edition Doug


Lowe

https://ebookmeta.com/product/networking-all-in-one-for-
dummies-8th-edition-doug-lowe/

PowerPoint For Dummies Office 2021 Edition Doug Lowe

https://ebookmeta.com/product/powerpoint-for-dummies-
office-2021-edition-doug-lowe/

CODING ALL-IN-ONE FOR DUMMIES 2nd Edition Dummies.

https://ebookmeta.com/product/coding-all-in-one-for-dummies-2nd-
edition-dummies/
Java
®

ALL-IN-ONE

7th Edition

by Doug Lowe
Ещё больше книг по Java в нашем телеграм канале:
https://t.me/javalib
Java® All-in-One For Dummies®, 7th Edition
Published by: John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030-5774, www.wiley.com

Copyright © 2023 by John Wiley & Sons, Inc., Hoboken, New Jersey

Media and software compilation copyright © 2023 by John Wiley & Sons, Inc. All rights reserved.

Published simultaneously in Canada

No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by
any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under
Sections 107 or 108 of the 1976 United States Copyright Act, without the prior written permission of the Publisher.
Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons,
Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www.wiley.com/
go/permissions.

Trademarks: Wiley, For Dummies, the Dummies Man logo, Dummies.com, Making Everything Easier, and related
trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and may not be used without written
permission. Java is a registered trademark of Oracle America, Inc. All other trademarks are the property of their
respective owners. John Wiley & Sons, Inc. is not associated with any product or vendor mentioned in this book.

LIMIT OF LIABILITY/DISCLAIMER OF WARRANTY: WHILE THE PUBLISHER AND AUTHORS HAVE USED THEIR
BEST EFFORTS IN PREPARING THIS WORK, THEY MAKE NO REPRESENTATIONS OR WARRANTIES WITH RESPECT
TO THE ACCURACY OR COMPLETENESS OF THE CONTENTS OF THIS WORK AND SPECIFICALLY DISCLAIM
ALL WARRANTIES, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY
OR FITNESS FOR A PARTICULAR PURPOSE. NO WARRANTY MAY BE CREATED OR EXTENDED BY SALES
REPRESENTATIVES, WRITTEN SALES MATERIALS OR PROMOTIONAL STATEMENTS FOR THIS WORK. THE
FACT THAT AN ORGANIZATION, WEBSITE, OR PRODUCT IS REFERRED TO IN THIS WORK AS A CITATION AND/
OR POTENTIAL SOURCE OF FURTHER INFORMATION DOES NOT MEAN THAT THE PUBLISHER AND AUTHORS
ENDORSE THE INFORMATION OR SERVICES THE ORGANIZATION, WEBSITE, OR PRODUCT MAY PROVIDE OR
RECOMMENDATIONS IT MAY MAKE. THIS WORK IS SOLD WITH THE UNDERSTANDING THAT THE PUBLISHER
IS NOT ENGAGED IN RENDERING PROFESSIONAL SERVICES. THE ADVICE AND STRATEGIES CONTAINED HEREIN
MAY NOT BE SUITABLE FOR YOUR SITUATION. YOU SHOULD CONSULT WITH A SPECIALIST WHERE APPROPRIATE.
FURTHER, READERS SHOULD BE AWARE THAT WEBSITES LISTED IN THIS WORK MAY HAVE CHANGED OR
DISAPPEARED BETWEEN WHEN THIS WORK WAS WRITTEN AND WHEN IT IS READ. NEITHER THE PUBLISHER
NOR AUTHORS SHALL BE LIABLE FOR ANY LOSS OF PROFIT OR ANY OTHER COMMERCIAL DAMAGES, INCLUDING
BUT NOT LIMITED TO SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR OTHER DAMAGES.

For general information on our other products and services, please contact our Customer Care Department within
the U.S. at 877-762-2974, outside the U.S. at 317-572-3993, or fax 317-572-4002. For technical support, please visit
https://hub.wiley.com/community/support/dummies.

Wiley publishes in a variety of print and electronic formats and by print-on-demand. Some material included with
standard print versions of this book may not be included in e-books or in print-on-demand. If this book refers to
media such as a CD or DVD that is not included in the version you purchased, you may download this material at
http://booksupport.wiley.com. For more information about Wiley products, visit www.wiley.com.

Library of Congress Control Number: 2022950700

ISBN 978-1-119-98664-5 (pbk); ISBN 978-1-119-98665-2 (ebk); ISBN 978-1-119-98666-9 (ebk)


Contents at a Glance
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Book 1: Java Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5


CHAPTER 1: Welcome to Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
CHAPTER 2: Installing and Using Java Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
CHAPTER 3: Working with TextPad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Book 2: Programming Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37


CHAPTER 1: Java Programming Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
CHAPTER 2: Working with Variables and Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
CHAPTER 3: Working with Numbers and Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . 97
CHAPTER 4: Making Choices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
CHAPTER 5: Going Around in Circles (or, Using Loops). . . . . . . . . . . . . . . . . . . . . . . . 149
CHAPTER 6: Pulling a Switcheroo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
CHAPTER 7: Adding Some Methods to Your Madness. . . . . . . . . . . . . . . . . . . . . . . . . 195
CHAPTER 8: Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Book 3: Object-Oriented Programming. . . . . . . . . . . . . . . . . . . . . . 237


CHAPTER 1: Understanding Object-Oriented Programming . . . . . . . . . . . . . . . . . . . 239
CHAPTER 2: Making Your Own Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
CHAPTER 3: Working with Statics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
CHAPTER 4: Using Subclasses and Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
CHAPTER 5: Using Abstract Classes and Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . 305
CHAPTER 6: Using the Object and Class Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
CHAPTER 7: Using Inner Classes and Anonymous Classes. . . . . . . . . . . . . . . . . . . . . 355
CHAPTER 8: Working with Packages and the Java Module System. . . . . . . . . . . . . . 365

Book 4: Strings and Other Data Types . . . . . . . . . . . . . . . . . . . . . . . 387


CHAPTER 1: Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
CHAPTER 2: Using Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
CHAPTER 3: Working with Dates and Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
CHAPTER 4: Using the BigDecimal Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

Book 5: Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471


CHAPTER 1: Introducing Data Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
CHAPTER 2: Using Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
CHAPTER 3: Using the ArrayList Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
CHAPTER 4: Using the LinkedList Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
CHAPTER 5: Creating Generic Collection Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
CHAPTER 6: Using Maps and Trees. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

Book 6: Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595


CHAPTER 1: Introducing Algorithms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
CHAPTER 2: Using Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
CHAPTER 3: Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
CHAPTER 4: Searching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

Book 7: Programming Techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . 657


CHAPTER 1: Programming Threads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
CHAPTER 2: Using Functional Programming and Lambda Expressions. . . . . . . . . . 689
CHAPTER 3: Consuming Web Services with HttpClient. . . . . . . . . . . . . . . . . . . . . . . . 705

Book 8: JavaFX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727


CHAPTER 1: Hello, JavaFX!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
CHAPTER 2: Handling Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
CHAPTER 3: Setting the Stage and Scene Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
CHAPTER 4: Using Layout Panes to Arrange Your Scenes. . . . . . . . . . . . . . . . . . . . . . 791
CHAPTER 5: Getting Input from the User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
CHAPTER 6: Choosing from a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841

Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Table of Contents
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
About This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Foolish Assumptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Icons Used in This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Beyond the Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

BOOK 1: JAVA BASICS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5


CHAPTER 1: Welcome to Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

What Is Java, and Why Is It So Great?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8


Platform independence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Object orientation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The Java API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Important Features of the Java Language. . . . . . . . . . . . . . . . . . . . . . . . 11
Type checking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Java Version Insanity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
What’s in a Name?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

CHAPTER 2: Installing and Using Java Tools. . . . . . . . . . . . . . . . . . . . . . . . . 17


Downloading and Installing the Java Development Kit . . . . . . . . . . . . . 18
Downloading the JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Installing the JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Perusing the JDK folders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Setting the JAVA_HOME and path variables. . . . . . . . . . . . . . . . . . . . 20
Confirming Your Java Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Using Java’s Command-Line Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Compiling a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Compiling more than one file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Using Java compiler options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Running a Java program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Using the javap command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Using Java Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

CHAPTER 3: Working with TextPad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31


Downloading and Installing TextPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Editing Source Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Compiling a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Running a Java Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Table of Contents v
BOOK 2: PROGRAMMING BASICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
CHAPTER 1: Java Programming Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Looking at the Venerable Hello, World! Program. . . . . . . . . . . . . . . . . . 40


Dealing with Keywords. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Working with Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Types of statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
White space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Working with Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Creating Identifiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Crafting Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
End-of-line comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Traditional comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Introducing Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . 51
Understanding classes and objects . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Understanding static methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Creating an object from a class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Viewing a program that uses an object . . . . . . . . . . . . . . . . . . . . . . . 54
So what’s the difference?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Importing Java API Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

CHAPTER 2: Working with Variables and Data Types. . . . . . . . . . . . . . 59


Declaring Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Declaring two or more variables in one statement . . . . . . . . . . . . . 61
Declaring class variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Declaring instance variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Declaring local variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Initializing Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Initializing variables with assignment statements . . . . . . . . . . . . . . 65
Initializing variables with initializers. . . . . . . . . . . . . . . . . . . . . . . . . . 66
Using Final Variables (Constants) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Working with Primitive Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Integer types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Floating-point types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
The char type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
The Boolean type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Using wrapper classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Using reference types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Using inferred variable types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Working with Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Declaring and initializing strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Combining strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Converting primitives to strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Converting strings to primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

vi Java All-in-One For Dummies


Converting and Casting Numeric Data. . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Automatic conversions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Type casting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Thinking Inside the Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Understanding Scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Shadowing Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Printing Data with System.out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Using standard input and output streams . . . . . . . . . . . . . . . . . . . . 87
Using System.out and System.err. . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Getting Input with the Scanner Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Importing the Scanner class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Declaring and creating a Scanner object. . . . . . . . . . . . . . . . . . . . . . 90
Getting input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Getting Input with the JOptionPane Class. . . . . . . . . . . . . . . . . . . . . . . . 93
Using enum to Create Your Own Data Types . . . . . . . . . . . . . . . . . . . . . 94

CHAPTER 3: Working with Numbers and Expressions. . . . . . . . . . . . 97


Working with Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Dividing Integers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Combining Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Using the Unary Plus and Minus Operators . . . . . . . . . . . . . . . . . . . . . 103
Using Increment and Decrement Operators. . . . . . . . . . . . . . . . . . . . . 104
Using the Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Using Compound Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . 108
Using the Math Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Using constants of the Math class . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Working with mathematical functions. . . . . . . . . . . . . . . . . . . . . . . 111
Creating random numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
Rounding functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Formatting Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Recognizing Weird Things about Java Math. . . . . . . . . . . . . . . . . . . . . .121
Integer overflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Floating-point weirdness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Division by zero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

CHAPTER 4: Making Choices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127


Using Simple Boolean Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Using if Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Simple if statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
if-else statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Nested if statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
else-if statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Using Mr. Spock’s Favorite Operators (Logical Ones, of Course). . . . 140
Using the ! operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Using the & and && operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Table of Contents vii


Using the | and || operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Using the ^ operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Combining logical operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Using the Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Comparing Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

CHAPTER 5: Going Around in Circles (or, Using Loops). . . . . . . . . . 149


Using Your Basic while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
The while statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
A counting loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Breaking Out of a Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Looping Forever. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Letting the user decide when to quit . . . . . . . . . . . . . . . . . . . . . . . . 154
Letting the user decide in another way . . . . . . . . . . . . . . . . . . . . . . 155
Using the continue Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Running do-while Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Validating Input from the User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Using the Famous for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Understanding the formal format of the for loop . . . . . . . . . . . . . 162
Scoping out the counter variable . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Counting even numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Counting backward. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Using for loops without bodies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Ganging up your expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Omitting expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Breaking and continuing your for loops. . . . . . . . . . . . . . . . . . . . . .170
Nesting Your Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
A simple nested for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
A guessing game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

CHAPTER 6: Pulling a Switcheroo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177


Battling else-if Monstrosities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Viewing an example else-if program . . . . . . . . . . . . . . . . . . . . . . . . 178
Creating a better version of the example program . . . . . . . . . . . . 179
Using the switch Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Viewing a boring switch example, complete with flowchart. . . . . 182
Putting if statements inside switch statements . . . . . . . . . . . . . . . 184
Creating Character Cases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Matching Two or More Values in a Single Case Group . . . . . . . . . . . . 186
Intentionally Leaving Out a Break Statement. . . . . . . . . . . . . . . . . . . . 187
Switching with Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Assigning a Value with a Switch Statement. . . . . . . . . . . . . . . . . . . . . . 191

viii Java All-in-One For Dummies


CHAPTER 7: Adding Some Methods to Your Madness. . . . . . . . . . . 195
The Joy of Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
The Basics of Making Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
An example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Another example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Methods That Return Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Declaring the method’s return type . . . . . . . . . . . . . . . . . . . . . . . . . 201
Using the return statement to return the value. . . . . . . . . . . . . . . 202
Using a method that returns a type. . . . . . . . . . . . . . . . . . . . . . . . . 203
You gotta have a proper return statement. . . . . . . . . . . . . . . . . . . 203
Trying another version of the guessing-game program . . . . . . . . 205
Methods That Take Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Declaring parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Scoping out parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Understanding pass-by-value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Trying yet another version of the guessing-game program . . . . . 211

CHAPTER 8: Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215


Understanding Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Witnessing an exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Finding the culprit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Catching Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
A simple example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Another example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Handling Exceptions with a Preemptive Strike. . . . . . . . . . . . . . . . . . . 222
Catching All Exceptions at Once . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Displaying the Exception Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Using a finally Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Handling Checked Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Viewing the catch-or-throw compiler error. . . . . . . . . . . . . . . . . . . 229
Catching FileNotFoundException . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Throwing the FileNotFoundException . . . . . . . . . . . . . . . . . . . . . . . 231
Throwing an exception from main. . . . . . . . . . . . . . . . . . . . . . . . . . 232
Swallowing exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Throwing Your Own Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Using the try-with-resources Statement . . . . . . . . . . . . . . . . . . . . . . . . 235

BOOK 3: OBJECT-ORIENTED PROGRAMMING. . . . . . . . . . . . . . 237


CHAPTER 1: Understanding Object-Oriented Programming. . . 239
What Is Object-Oriented Programming? . . . . . . . . . . . . . . . . . . . . . . . . 240
Understanding Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Objects have identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Objects have type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Table of Contents ix
Objects have state. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Objects have behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Understanding the Life Cycle of an Object . . . . . . . . . . . . . . . . . . . . . . 245
Working with Related Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Designing a Program with Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Diagramming Classes with UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Drawing classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Drawing arrows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

CHAPTER 2: Making Your Own Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253


Declaring a Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Picking class names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Knowing what goes in the class body. . . . . . . . . . . . . . . . . . . . . . . . 255
Seeing where classes live. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Working with Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Understanding fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Understanding instance methods. . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Understanding visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Using Getters and Setters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Overloading Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Creating Constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Creating basic constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Creating default constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Calling other constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Finding More Uses for the this Keyword . . . . . . . . . . . . . . . . . . . . . . . . 268
Using Initializers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Using Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

CHAPTER 3: Working with Statics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273


Understanding Static Fields and Methods. . . . . . . . . . . . . . . . . . . . . . . 273
Working with Static Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Using Static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Counting Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Preventing Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Using Static Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

CHAPTER 4: Using Subclasses and Inheritance. . . . . . . . . . . . . . . . . . . 283


Introducing Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Motorcycles, trains, and automobiles . . . . . . . . . . . . . . . . . . . . . . . 285
Game play. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
A businesslike example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Inheritance hierarchies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Creating Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

x Java All-in-One For Dummies


Overriding Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Protecting Your Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Using the this and super Keywords in Your Subclasses . . . . . . . . . . . 291
Understanding Inheritance and Constructors . . . . . . . . . . . . . . . . . . . 292
Using the final Keyword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Final methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Final classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Casting Up and Down. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Determining an Object’s Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Poly What? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Creating Custom Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Tracing the Throwable hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Creating an exception class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Throwing a custom exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

CHAPTER 5: Using Abstract Classes and Interfaces. . . . . . . . . . . . . . 305


Using Abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Using Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Creating a basic interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Implementing an interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Using an interface as a type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
More Things You Can Do with Interfaces. . . . . . . . . . . . . . . . . . . . . . . . 312
Adding fields to an interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Extending interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Using interfaces for callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Using Additional Interface Method Types. . . . . . . . . . . . . . . . . . . . . . . 318
Two Interfaces That Enable Java Language Features. . . . . . . . . . . . . . 320
Sealing Your Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

CHAPTER 6: Using the Object and Class Classes. . . . . . . . . . . . . . . . . . 327


The Mother of All Classes: Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Every object is an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Object as a type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Methods of the Object class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329
Primitives aren’t objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
The toString Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Using toString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Overriding toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
The equals Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Using equals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Overriding the equals method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
The clone Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Implementing the clone method. . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Using clone to create a shallow copy. . . . . . . . . . . . . . . . . . . . . . . . 343
Creating deep copies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Table of Contents xi
The Class Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Using the instanceof Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

CHAPTER 7: Using Inner Classes and Anonymous Classes. . . . . . 355


Declaring Inner Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Understanding inner classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Viewing an example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Using Static Inner Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Using Anonymous Inner Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Creating an anonymous class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Creating a program with an anonymous class. . . . . . . . . . . . . . . . 363

CHAPTER 8: Working with Packages and the Java Module


System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Working with Packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Importing classes and packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Creating your own packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
An example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Putting Your Classes in a JAR File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
jar command-line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Archiving a package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Adding a jar to your classpath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Running a program directly from an archive . . . . . . . . . . . . . . . . . 374
Using Javadoc to Document Your Classes. . . . . . . . . . . . . . . . . . . . . . . 375
Adding Javadoc comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Using the javadoc command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Viewing Javadoc pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Using the Java Module System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Understanding modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
The module-info.java file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Setting up folders for a module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Compiling a module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Creating a modular JAR file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Running a modular JAR file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

BOOK 4: STRINGS AND OTHER DATA TYPES . . . . . . . . . . . . . . . 387


CHAPTER 1: Working with Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Reviewing Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390
Using the String Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Finding the length of a string. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Making simple string modifications . . . . . . . . . . . . . . . . . . . . . . . . . 395
Extracting characters from a string. . . . . . . . . . . . . . . . . . . . . . . . . . 396
Extracting substrings from a string. . . . . . . . . . . . . . . . . . . . . . . . . . 397

xii Java All-in-One For Dummies


Splitting a string. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Replacing parts of a string. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Stripping a string. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Determining Whether a String Is Empty . . . . . . . . . . . . . . . . . . . . . . . . 402
Using the StringBuilder and StringBuffer Classes . . . . . . . . . . . . . . . . 404
Creating a StringBuilder object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Using StringBuilder methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Viewing a StringBuilder example. . . . . . . . . . . . . . . . . . . . . . . . . . . .407
Using the CharSequence Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Using Text Blocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

CHAPTER 2: Using Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 411


Creating a Program for Experimenting with Regular Expressions. . . 412
Performing Basic Character Matching. . . . . . . . . . . . . . . . . . . . . . . . . . 415
Matching single characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Using predefined character classes . . . . . . . . . . . . . . . . . . . . . . . . . 415
Using custom character classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Using ranges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Using negation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Matching multiple characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Using escapes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .422
Using parentheses to group characters. . . . . . . . . . . . . . . . . . . . . . 422
Using the pipe symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Using Regular Expressions in Java Programs . . . . . . . . . . . . . . . . . . . . 425
Understanding the String problem. . . . . . . . . . . . . . . . . . . . . . . . . . 425
Using regular expressions with the String class. . . . . . . . . . . . . . . 426
Using the Pattern and Matcher classes . . . . . . . . . . . . . . . . . . . . . . 427

CHAPTER 3: Working with Dates and Times . . . . . . . . . . . . . . . . . . . . . . 429


Pondering How Time Is Represented. . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Picking the Right Date and Time Class for Your Application. . . . . . . . 431
Using the now Method to Create a Date-Time Object. . . . . . . . . . . . . 432
Using the parse Method to Create a Date-Time Object. . . . . . . . . . . . 434
Using the of Method to Create a Date-Time Object. . . . . . . . . . . . . . . 435
Using the Month enumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Using the ZoneId class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Using the ZoneOffset class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Looking Closer at the LocalDate Class. . . . . . . . . . . . . . . . . . . . . . . . . . 438
Extracting Information about a Date . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Comparing Dates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Calculating with Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Formatting Dates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Looking at a Fun Birthday Calculator. . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Table of Contents xiii


Another random document with
no related content on Scribd:
»Ei puolella eikä toisella ole hätää», vastasi tohtori. »Billotin tila on
vakava, mutta ellei odottamatonta tapahdu, se ei ole kuolemaksi.
Eukko Billot taas voi elää vielä kymmenen kaksitoista päivää.»

»Voi, herra tohtori, kun hänet toissa päivänä pantiin vuoteeseen,


ei hän puhunut enää eikä liikahtanutkaan. Vain silmissä näkyi olevan
elämää.»

»Mitä siitä, minä tiedän mitä sanon, Pitou, ja minä takaan hänelle,
kuten sinulle jo sanoin, kymmenen kaksitoista elinpäivää.»

»Hyväinen aika, herra tohtori, totta kai te sen paremmin


tiedättekin kuin minä!»

»Parempi onkin antaa poloisen Catherinen viettää vielä yksi yö


tietämättömyydessä ja levossa. Yhden yön uni on poloisille tärkeää,
Pitou!»

Pitou alistui tähän jälkimäiseen järkipäätelmään.

»No niin, minne nyt siis menemme, herra Gilbert?» kysyi hän.

»Minun luokseni, hitossa! Pääset entiseen huoneeseesi.»

»Se sopii!» sanoi Pitou hymyillen. »Mieluista on nähdä se jälleen.»

»Ja huomenna», jatkoi Gilbert, »pannaan hevoset valjaisiin kello


kuusi aamulla».

»Miksi hevoset valjastetaan?» kysyi Pitou, joka piti hevosta


loistokapineena.

»Ne vievät sinut Ville-d'Avrayhin.»


»Onko täältä siis Ville-d'Avrayhin parisataa kilometriä?» ihmetteli
Pitou.

»Ei sinne ole kymmentäkään», vastasi Gilbert, joka väläyksellä oli


näkevinään nuorukaisaikansa kävelyt, jotka hän oli tehnyt
opettajansa, Rousseaun, seurassa Louveciennesin, Meudonin ja Ville-
d'Avrayn metsiin.

»Ei kymmentäkään, herra Gilbert», sanoi Pitou, »se on sitten vain


tunnin asia. Se sujuu kuin rasvattu!»

»Entä Catherine», huomautti Gilbert, »luuletko sinä, että hänkin


sujuttaa kuin rasvattuna ne kymmenen kilometriä, jotka, sieltä on
matkaa Pariisiin, ja ne kahdeksankymmentä, jotka on Pariisista
Villers-Cotteretsiin?»

»Ah, se on totta», myönsi Pitou. »Suokaa anteeksi, herra Gilbert.


Minä vasta olen pässinpää, minä!… Asiasta toiseen, kuinka Sébastien
jaksaa?»

»Kerrassaan mainiosti. Tapaat hänet huomenna.»

»Yhäkö apotti Bérardierin oppilaana?»

»Yhä.»

»Ah, sitä parempi! Olen hyvin mielissäni, kun tapaan hänet taas.»

»Ja hänkin, Pitou, sillä kuten minä, niin hänkin rakastaa sinua
kaikesta sydämestään.»

Tällöin tohtori ja Ange Pitou pysähtyivät Saint-HonorékaduUa


olevan rakennuksen eteen.
Pitou nukkui, kuten juoksi, kuten söi, kuten taisteli, koko
ruumiillaan. Mutta tottuneena maaseutulaisten lailla heräämään
aikaisin hän oli jalkeilla jo kello viideltä aamulla.

Kello kuusi ajoneuvot ilmestyivät portille.

Kello seitsemän hän kolkutti Catherinen ovelle.

Hän oli sopinut tohtori Gilbertin kanssa, että he tapaisivat toisensa


Billotin vuoteen ääressä.

Catherine tuli avaamaan ja nähdessään Pitoun parahti.

»Ah, äiti on kuollut!» huudahti hän.

Ja hän kalpeni ja nojautui seinään.

»Ei ole», sanoi Pitou, »mutta jos haluatte nähdä hänet, ennenkuin
hän kuolee, on teidän pidettävä kiirettä, neiti Catherine».

Nämä muutamat sanat sisälsivät paljon, sivuuttivat kaikki,


johdannot ja ilmaisivat Catherinelle äkkiä häntä kohdanneen
onnettomuuden.

»Ja lisäksi on sattunut toinenkin onnettomuus», jatkoi Pitou.

»Mikä?» kysyi Catherine lyhyesti ja välinpitämättömästi kuten


henkilö, joka jo on tyhjentänyt inhimillisten kärsimysten maljan eikä
pelkää enää näiden tuskien lisääntyvän.

»Se, että herra Billot haavoittui eilen Mars-kentällä


hengenvaarallisesti.»

»Ah!» sanoi Catherine.


Ilmeisesti tämä uutinen koski nuoreen naiseen vähemmän kipeästi
kuin edellinen.

»Silloin», jatkoi Pitou, »minä päättelin itsekseni — ja samaa arveli


herra tohtori Gilbertkin —: 'Neiti Catherine käväisee katsomassa
herra Billotia, joka on viety Gros-Cailloun sairaalaan, ja sieltä hän
jatkaa matkaa postikyydillä Villers-Cotteretsiin.'»

»Entä te, herra Pitou?» kysyi Catherine.

»Minä», vastasi Pitou, »minä olen ajatellut, että koska te menette


auttamaan rouva Billotia kuolemaan, minä jään tänne ja yritän saada
herra Billotin elämään… Minä jään sen luokse, jolla ei ole ketään,
ymmärrättehän, neiti Catherine?»

Pitou lausui nämä sanat enkelimäisen viattomasti, ajattelematta,


että hän näin, muutamin sanoin, esitti uhrautuvaisuutensa koko
historian.

Catherine ojensi hänelle kätensä.

»Teillä on jalo sydän, Pitou», sanoi hän nuorukaiselle. »Tulkaa nyt


syleilemään pikku Isidor-rukkaa.»

Hän lähti edellä, sillä vastikään kertomamme kohtaus oli esitetty


talon puutarhakäytävällä portin pielessä. Catherine-rukka oli
kauniimpi kuin koskaan ennen! Hän oli pukeutunut kauttaaltaan
suruasuun. Pitou huoahti toisen kerran.

Catherine meni nuoren miehen edellä pieneen, puutarhan puolella


olevaan huoneeseen. Tässä huoneessa, joka keittiön ja
pukukammion ohella muodosti Catherinen koko asunnon, oli vuode
ja kätkyt.
Äidin vuode, lapsen kätkyt.

Lapsi nukkui.

Catherine työnsi syrjään harsokankaiset uutimet ja väistyi sivulle,


jotta Pitou voisi kurkistaa kehtoon.

»Voi, mikä kaunis pikku enkeli!» sanoi Pitou ja pani kätensä ristiin.

Ja ikäänkuin olisi todella joutunut enkelin eteen, hän polvistui ja


suuteli lapsen kättä.

Pitou sai heti palkinnon tästä teostaan: hän tunsi kasvoillaan


Catherinen hiusten lehahduksen ja huulipari sipaisi hänen otsaansa.

Äiti korvasi pojalle annetun suudelman.

»Kiitos, kelpo Pitou!» sanoi hän. »Senjälkeen kun hän sai


viimeisen suukon isältään, ei pikku poloistani ole suudellut kukaan
muu kuin minä.»

»Oh, neiti Catherine!» mutisi Pitou nuoren tytön suudelman


sokaisemana ja puistattamalla, ikäänkuin olisi saanut sähköiskun.

Ja tässä suudelmassa oli kuitenkin vain, mitä äidin rakkaudessa on


pyhää ja kiittävää.
XXVI

Tytär ja isä

Kymmentä minuuttia myöhemmin Catherine, Pitou ja pikku Isidor


ajoivat tohtori Gilbertin vaunuissa Pariisin tiellä.

Vaunut pysähtyivät Gros-Cailloun sairaalan eteen.

Catherine astui, poika sylissä, vaunuista ja seurasi Pitouta.

Varastohuoneen oven edessä hän pysähtyi.

»Tehän sanoitte tapaavanne tohtori Gilbertin isäni vuoteen


ääressä?» sanoi hän.

»Niin…»

Pitou raotti ovea.

»Ja tuolla hän onkin», lisäsi hän.

»Voinko minä astua sisälle aiheuttamatta hänelle liian suurta


mielenliikutusta?»
Pitou astui sisälle, kysyi tohtorilta ja palasi melkein heti
noutamaan
Catherinea.

»Iskun aiheuttama aivotäräys on ollut niin ankara, ettei hän tunne


vielä ketään» sanoi herra Gilbert.

Catherine aikoi mennä sisälle, lapsi käsivarsilla.

»Antakaa minulle lapsi, neiti Catherine», sanoi Pitou.

Catherine empi hetken.

»Ah, antaessanne sen minulle», lisäsi Pitou, »on niinkuin ette siitä
luopuisikaan».

»Olette oikeassa», myönsi Catherine.

Ja hän ojensi lapsen Pitoulle kuin veljelle, ehkä luettavampanakin,


astui sisälle lujin askelin ja meni suoraan isänsä vuoteen ääreen.

Kuten on jo mainittu, tohtori Gilbert seisoi haavoittuneen vuoteen


ääressä.

Potilaan tila ei ollut sanottavasti muuttunut. Hän oli sijoitettu,


kuten eilenkin, niin, että selkä nojasi pielukseen, ja tohtori kostutteli
veteen liotetulla ja sitten puserretulla sienellä siteitä, jotka pitivät
koossa haavalle pantua sidelaitetta. Vaikka hänessä olikin selvät
tulehduskuumeen oireet, oli Billot silti, kauhean verenvuodon
johdosta, kuolemankalpea. Vasen silmä ja vasemman posken puoli
olivat ajettuneet.
Tuntiessaan kylmän veden kosketuksen hän oli mutissut joitakin
katkonaisia sanoja ja aukaissut silmänsä. Mutta se voimakas
uneliaisuus, jota lääkärit sanovat horrokseksi, oli heti sammuttanut
hänen sanansa ja ummistanut hänen silmänsä.

Vuoteen ääressä Catherine lankesi polvilleen, kohotti kätensä ylös


ja sanoi:

»Oi, hyvä isä Jumala, sinä olet todistaja, että rukoilen sinulta
kaikesta sydämestäni isäni elämää!»

Siinä olikin kaikki, mitä hän voi tehdä isän hyväksi, joka oli
yrittänyt surmata hänen rakastajansa.

Hänen äänensä aiheutti potilaan ruumiissa puistatusta; hän alkoi


hengittää kiihkeämmin, hän aukaisi silmänsä ja hänen katseensa
harhaili ensin kuin hakeakseen, mistä tämä ääni tuli, ja pysähtyi
sitten Catherineen.

Hänen kätensä liikahti kuin karkoittaakseen tuon näyn, jota hän


varmaankin piti kuumehoureena.

Nuoren naisen katse kohtasi isän katseen, ja Gilbert huomasi


kauhukseen, että näistä silmistä singahti kaksi liekkiä, jotka näyttivät
pikemminkin inhan salamilta kuin rakkauden säteiltä.

Senjälkeen nuori nainen nousi ja lähti yhtä lujin askelin kuin oli
tullutkin. Hän meni Pitoun luokse.

Pitou istui permannolla ja leikki lapsen kanssa.

Catherine tempasi poikansa rajusti, mikä muistutti pikemminkin


naarasleijonan rakkautta kuin naisen lempeä, puristi sitä rintaansa
vasten ja huudahti:

»Voi, lapseni, oma lapseni!»

Tähän huudahdukseen sisältyi äidin huoli, lesken valitus ja naisen


tuska.

Pitou halusi saattaa Catherinea postivaunu-toimistoon, mistä


vaunut lähtisivät kello kymmenen.

Mutta Catherine esteli.

»Ei», sanoi hän, »olette sanonut, että paikkanne on sen luona,


joka on yksin. Jääkää, Pitou.»

Ja hän työnsi Pitoun takaisin huoneeseen.

Pitou totteli, kun Catherine käski.

Sillaikaa kun Pitou lähestyi potilaan vuodetta, kun Billot


kuullessaan kansalliskaartin kapteenin raskaan astunnan avasi
silmänsä ja kun hänen kasvoillaan ystävällinen ilme seurasi äskeistä,
tyttären aiheuttamaa vihan ilmettä, sillaikaa Catherine laskeutui
portaat ja, lapsi yhä käsivarsilla, saapui Saint-Denis-kaduUe Plat-
d'Étainin hotellin eteen, mistä postivaunut lähtisivät Villers-
Cotteretsiin.

Hevoset oli valjastettu, ajomies satulassa. Yksi sija oli vapaa,


Catherine sai sen.

Kahdeksaa tuntia myöhemmin vaunut pysähtyivät Soissons-


kadulle.

Kello oli kuusi iltapäivällä; oli siis vielä miltei täysi päivä.
Jos Catherine olisi ollut nuori tyttö ja tullut Isidorin eläessä
katsomaan täysissä voimissa olevaa äitiään, olisi hän pysäyttänyt
vaunut Largny-kadun päähän, kiertänyt kaupungin ja tullut
Pisseleuhun kenenkään näkemättä, sillä hän olisi hävennyt.

Mutta leskenä ja äitinä hän ei ajatellut maaseudun asukasten


pilkkaa. Hän poistui vaunuista uhittelematta, mutta myöskin
pelkäämättä. Surupuku ja lapsi tuntuivat hänestä, toinen synkältä,
toinen hymyilevältä enkeliltä, jotka kilistäisivät hänestä kaiken pilkan
ja halveksimisen.

Eikä Catherinea ensimmältä tunnettukaan. Hän oli niin kalpea ja


niin muuttunut, ettei hän näyttänyt samalta naiselta. Hänet oli lisäksi
omiaan tekemään tuntemattomaksi se pikku hienostuminen, joka oli
tullut hänen olemukseensa seurustelusta hienostuneen miehen
kanssa.

Mutta yksi hänet tunsi jo kaukaa.

Täti Angélique nimittäin.

Täti Angélique seisoi kaupungintalon portilla ja puheli parin


kolmen muijan kanssa papeilta vaaditusta valasta. Hän tiesi
kuulleensa herra Fortierin sanoneen, ettei hän milloinkaan vannoisi
valaa jakobiineille tai vallankumoukselle ja että hänestä tulisi
ennemmin marttyyri kuin että hänen päänsä taipuisi
vallankumouksen ikeeseen.

»Hoo!» huudahti hän sitten kesken puheinaan. »Jeesus, Jumalan


poika!
Noista vaunuista poistuu Billotin tyttö lapsineen!»
»Catherineko, Catherineko?» toistelivat akat.

»Hän juuri. Katsokaas, nyt hän pakenee sivukadulle!»

Täti Angélique erehtyi; Catherine ei paennut. Hänellä oli hoppu


äitinsä luokse ja hän käveli rivakasti. Hän poikkesi sivukadulle, koska
se tie oli lyhyin.

Täti Angéliquen huudahdus: »Billotin tyttö!» ja hänen naapuriensa


vahvistavat huudahdukset: »Catherine!» olivat saaneet muutamat
lapset juoksemaan nuoren naisen perään, ja kun he olivat
tavoittaneet hänet, sanoivat he:

»Kas, se on totta, se on neiti…»

»Niin, lapsi kullat, minä se olen», sanoi Catherine leppeästi.

Lapset pitivät hänestä paljon, sillä hän antoi näille aina jotakin,
ellei muuta niin hyväilyn. Siksipä pienokaiset nyt tervehtivätkin häntä
sanoilla:

»Hyvää päivää, neiti Catherine!»

»Hyvää päivää, rakkaat ystävät!» vastasi Catherine. »Äitini ei ole


kuollut, eihän?»

»Oh, ei, neiti, ei vielä!»

Sitten muuan lapsista lisäsi:

»Herra Raynal sanoo, että hän elää vielä kahdeksan tai kymmenen
päivää.»

»Kiitos, lapsi kullat!» virkkoi Catherine.


Ja annettuaan heille vähän pikkurahaa hän jatkoi matkaansa.

Lapset palasivat eukkojen luokse.

»No?» utelivat nämä.

»Kyllä se oli hän», vakuuttivat lapset. »Hän kyseli meiltä äitinsä


vointia, ja katsokaas, mitä hän antoi meille.»

Ja lapset näyttivät Catherinelta saamiansa pikku rahoja.

»Hän näkyy osanneen myydä hyvin Pariisissa», huomautti täti


Angélique, »koskapa voi antaa perässään juokseville kakaroille
valkoisia lantteja».

Täti Angélique ei pitänyt Catherine Billotista.

Catherine Billot oli nuori ja kaunis, täti Angélique vanha ja ruma;


Catherine Billot oli kookas ja notkeavartaloinen, täti Angélique oli
pieni ja ontuva.

Ja lisäksi Ange Pitou, jonka täti Angélique oli karkoittanut


luotansa, oli saanut turvapaikan Billotin talosta.

Ja vihdoin, Billot oli ihmisoikeuksien julistuksen päivänä raahannut


apotti Fortierin paikalle pakottaakseen tätä lukemaan messun
isänmaanalttarilla.

Kaikki nämä syyt, joihin voi vielä lisätä hänen luontaisen


ilkeytensä, riittivät saamaan täti Angéliquen vihaamaan Billoteja
yleensä ja Catherinea eritoten.

Ja kun täti Angélique vihasi, vihasi hän perinpohjin, hän vihasi


hartaasti.
Hän riensi neiti Adelaiden, apotti Fortierin sukulaisen luokse
ilmoittamaan tälle uutisen.

Apotti Fortier söi paraikaa Walluen lammesta ongittua karppia,


jonka höysteenä oli lautasellinen munakokkelia ja toinen pinaattia.

Oli näet laiha päivä.

Apotti Fortier oli pannut kasvoilleen kireän, kärsivän ilmeen,


niinkuin ihminen, joka odottaa joka hetki marttyyrikruunua.

»Mitä nyt taas?» kysyi hän kuullessaan naisten sopottavan


eteisessä.
»Tullaanko minua hakemaan rippitunnustusta kuulemaan?»

»Ei vielä, rakas eno», sanoi neiti Adelaide. »Täällä on vain täti
Angélique» — Pitoun mukaan kaikki sanoivat tätä ikäneitoa täti
Angéliqueksi — »joka tulee kertomaan uudesta häpeäjutusta».

»Me elämme aikaa, jolloin häpeä juoksee kadulla», vastasi apotti


Fortier. »Mikä uusi häpeäjuttu teillä on kerrottavana, täti Angélique?»

Neiti Adelaide opasti tuolien vuokraajattaren apotin eteen.

»Nöyrin palvelijanne, herra apotti», sanoi täti Angélique.

»Hyvä on, täti Angélique! Haluatteko lasillisen viiniä?»

»Kiitos, herra apotti!» vastasi täti Angélique. »Minä en juo


milloinkaan viiniä.»

»Siinä teette väärin. Kanooninen laki ei kiellä viiniä.»


»Oh, en minä ole juomatta sen vuoksi, että se on sallittu, tai
kielletty, vaan koska se maksaa yhdeksän souta pullo.»

»Olette siis yhä kitupiikki, täti Angélique?» kysyi apotti Fortier


heittäytyen nojatuoliinsa.

»Voi, hyvä jumala, kitupiikki, herra apotti! Täytyy ollakin, kun


kerran köyhyys vaivaa.»

»Köyhyys! Jopa peräti! Entä se tuoleja koskeva vuokrasopimus,


jonka olen antanut teille ilmaiseksi, täti Angélique, kun voisin siitä
saada sata ecua ensimmäiseltä vastaantulijalta?»

»Ah, herra apotti, mitä hän tekisi sillä, se henkilö? Ei yhtään


mitään, herra apotti! Sen nojalla ei voi juoda muuta kuin vettä.»

»Siksipä tarjoankin teille lasillisen viiniä, täti Angélique.»

»Ottakaa toki vastaan», kehoitti neiti Adelaide. »Eno suuttuu,


ellette suostu ottamaan.»

»Luuletteko, että herra apotti suuttuu?» sanoi täti Angélique, joka


oli kuolla haluunsa.

»Ihan varmasti.»

»No sitten, herra apotti, pari pisaraa viiniä, olkaa hyvä, jotten
pahoittaisi mieltänne.»

»Kas niin», sanoi apotti Fortier ja täytti lasin reunojaan myöten


ihanalla bourgognella, joka oli kirkasta kuin rubiini. »Ryypätkää tuo,
täti Angélique, ja kun sitten laskette ecujanne, luulette niitä olevan
kaksi kertaa enemmän.»
Täti Angélique kohotti lasin huulilleen.

»Ecujani?» sanoi hän. »Voi, herra apotti, älkää puhuko sellaista;


teitä, Jumalan miestä, ihmiset uskovat.»

»Juokaa, täti Angélique, juokaa!»

Kuin tehdäkseen apotti Fortierin mieliksi täti Angélique painoi


huulensa lasin reunaan, ummisti silmänsä ja nieli autuaallisen
näköisenä lähes kolmanneksen lasin sisällöstä.

»Oh, se on väkevää!» sanoi hän. »En käsitä, kuinka voi juoda


puhdasta viiniä.»

»Enkä minä», virkkoi apotti, »käsitä, kuinka voi sekoittaa viiniinsä


vettä. Mutta välipä sillä, se ei estä minua panemasta veikkaa, täti
Angélique, että teillä on sievoiset säästörahat.»

»Voi, herra apotti, herra apotti, älkää puhuko sellaista! Minä en


jaksa maksaa edes verojani, joita menee vuodessa kolme livreä
kymmenen souta.»

Ja täti Angélique nielaisi toisen kolmanneksen lasin sisällöstä.

»Niin, niin, sitä te kyllä ruikutatte, mutta minä sanon siitä


huolimatta, että päivänä, jolloin te jätätte sielunne Jumalan
huomaan, teidän sisarenne poika Ange Pitou, jos tarkoin etsii löytää
jostakin vanhasta pellavasukasta summan, jolla voisi ostaa koko
Pleu-kadun.»

»Herra apotti, herra apotti!» huudahti täti Angélique. »Jos te


puhutte sellaisia asioita, niin roistot, murhapolttajat ja sadontuhoojat
surmaavat minut, sillä he uskovat teidän laisenne pyhän miehen
sanaan ja luulevat minua rikkaaksi… Voi hyvä jumala, hyvä jumala,
mikä onnettomuus!»

Ja silmät kosteina hyvinvoinnin kyynelistä täti Angélique nielaisi


viinin lopputilkat.

»No», sanoi apotti ilkkuvasti, »nyt näette, että alatte tottua tähän
pieneen viinimäärään, täti Angélique».

»Se on kuitenkin aika väkevää», vastasi vanhus.

Apotti oli lopettamaisillaan illallisensa.

»No niin», sanoi hän, »antakaa kuulua! Mikä uusi häpeä kuohuttaa
Israelin mieliä?»

»Herra apotti, Billotin tyttö on tullut tänne lapsineen


postivaunuissa!»

»Soo, soo», sanoi apotti, »ja minä kun luulin hänen toimittaneen
sen löytölasten kotiin?»

»Ja hän olisikin tehnyt siinä oikein», virkkoi täti Angélique. »Sen
pikku-raukan ei olisi ainakaan tarvinnut punastua äitinsä takia!»

»Niin todella, täti Angélique», myönsi apotti, »olette esittänyt sen


laitoksen hyödyn uudelta näkökannalta. — Entä mitä hän aikoo
tehdä täällä?»

»Hän on kai tullut katsomaan äitiään, sillä hän on tiedustellut


lapsilta, vieläkö hänen äitinsä on elossa.»

»Tiedättekö, täti Angélique», sanoi apotti häijysti hymyillen, »että


emäntä Billot on unhottanut ripittäytyä?»
»Ah, herra apotti», vastasi täti Angélique, »se ei ole hänen
vikansa. Se poloinen nainen näyttää menettäneen järkensä kolme
neljä kuukautta sitten. Hän oli siihen aikaan, jolloin tytär ei ollut
tuottanut hänelle paljon murhetta, hyvin hurskas ja Jumalaa
pelkääväinen nainen, joka kirkkoon tullessaan otti aina kaksi tuolia,
toisen istuakseen ja toisen jalkojensa tueksi.»

»Entä hänen miehensä?» kysyi apotti, jonka silmissä leimahti


vihan salama. »Montako tuolia otti kansalainen Billot, Bastiljin
valloittaja?»

»Hyväinen aika, en tiedä!» vastasi täti Angélique viattomasti.


»Hän ei käynyt kirkossa milloinkaan, mutta emäntä Billot…»

»Hyvä on, hyvä on», sanoi apotti, »sen laskun me järjestämme


hänen hautauspäivänään».

Sitten hän teki ristinmerkin ja virkkoi:

»Hyvät sisaret, sanelkaa kiitosrukous kanssani.»

Molemmat ikäneidot tekivät niinikään ristinmerkin ja lausuivat


hartaina kiitosrukouksen apotin kanssa.
XXVII

Tytär ja äiti

Sillaikaa Catherine jatkoi matkaansa. Sivukadulta hän oli poikennut


vasemmalle, kulkenut Lormet-katua ja tämän päästä tullut vainioiden
poikki kulkevalle polulle, joka yhtyi Pisseleun tiehen.

Tällä tiellä kaikki oli Catherinelle tuskallista muistoa.

Ensiksikin tämä pikku silta, jolla Isidor oli sanonut hänelle hyvästi
ja jolla hän oli virunut pyörtyneenä, kunnes Pitou oli löytänyt hänet
kylmänä ja kohmettuneena.

Ja sitten lähempänä maatilaa se ontto piilipuu, johon Isidor oli


kätkenyt kirjeensä.

Vielä lähempänä hän näki sen pienen ikkunan, josta Isidor oli
tullut hänen luoksensa ja jonka ääressä Billot oli tähdännyt häneen
yönä, jolloin kaikeksi onneksi tilanhoitajan pyssy ei ollut lauennut.

Ja vihdoin maatilan isoa porttia vastapäätä näkyi Boursonnesin tie,


jota Catherine oli niin usein kulkenut, jonka hän tunsi niin hyvin, tie,
jolta Isidor oli tullut.
Kuinka monesti hän olikaan yöllä nojannut tuon ikkunan lautaan,
tuijottanut tälle tielle, odottanut läähättäen ja huomatessaan
pimennossa rakastajansa, aina täsmällisenä, aina uskollisena,
tuntenut rintansa paisuvan ja sitten levittänyt sylinsä häntä vastaan
ottamaan.

Tänään Isidor oli vainaja! Mutta hänen lapsensa oli toki molempien
käsivarsien syleilemänä hänen rintaansa vasten!

Mitä ihmiset siis puhuivat hänen tahratusta maineestaan ja hänen


häpeästään?

Voiko noin kaunis lapsi milloinkaan olla äidille häpeäksi tai


maineen tahraksi?

Niinpä hän astuikin rivakasti ja mitään pelkäämättä maatilan


alueelle.

Muuan iso koira alkoi haukkua hänelle, mutta sitten se tunsi


nuoren valtiattarensa, lähestyi niin pitkälle kuin kahle salli ja alkoi
hyppiä ulvahdellen iloisena.

Koiran haukunta kutsui portille erään miehen, joka tuli utelemaan


koiran ilon aihetta.

»Neiti Catherine!» huudahti hän.

»Ukko Clouis!» sanoi Catherine vuorostaan.

»Ah, tervetuloa, rakas neiti!» virkkoi vanhus. »Talo kaipaakin


kipeästi teitä, nähkääs!»

»Entä poloinen äitini?» kysyi Catherine.


»Voi, ei paremmin eikä huonommin, tai paremminkin huonosti
kuin hyvin.
Hän sammuu, se kultainen vaimo-rukka!»

»Missä hän on?»

»Huoneessaan.»

»Ihan yksin?»

»Ei, ei, ei… Minä en olisi sitä sallinut! Hyväinen aika! Saatte suoda
anteeksi, neiti Catherine, että minä isäntäväen poissaollessa olen
hoidellut isännän tehtäviä. Aika, jonka te vietitte matalassa
majassani, on tehnyt minusta kuin perheenjäsenen: minä rakastin
teitä ja poloista herra Isidoria!»

»Olette siis kuullut…?» sanoi Catherine ja pyyhki silmistään pari


kyyneltä.

»Tiedän, tiedän, saanut surmansa kuningattaren hyväksi, kuten


herra Georgeskin… Mutta, hyvä neiti, älkää surko! Hän on jättänyt
teille tuon kauniin lapsen, eikö niin? Isää täytyy itkeä, pojalle
hymyillä.»

»Kiitos, ukko Clouis», sanoi Catherine ja ojensi vanhalle vartijalle


kätensä. »Mutta äitini…?»

»Hän on huoneessaan, kuten jo sanoin teille, ja hänen luonansa


on rouva
Clément, sama rouva, joka teitäkin on hoitanut.»

»Ja… onko hän tajuissaan, äiti-rukka?» kysyi Catherine arkaillen.


»Hetkittäin voisi niin luulla», vastasi ukko Clouis, »silloin kun
teidän nimenne mainitaan. .. Ah, se on ollut tepsivä keino, se on
tehonnut toissapäivään saakka. Mutta senjälkeen hän ei ole ollut
tolkullaan, ei edes, kun on puhuttu teistä.»

»Menkäämme sisälle, ukko Clouis», kehoitti Catherine.

»Astukaa sisälle, neiti», sanoi vanha vartija ja aukaisi rouva Billotin


huoneen oven.

Catherine silmäili huonetta. Hänen äitinsä makasi vihrein


sarkauutimin suojatussa vuoteessa, jota valaisi maaseututaloissa
usein nähty kolmisydäminen lamppu. Ja, kuten ukko Clouis oli
sanonut, rouva Clément oli häntä hoitamassa.

Tämä istui tilavassa nojatuolissa, sairaanhoitajattarien


tavanomaisessa mielentilassa, joka on puolivalvomista,
puolinukkumista.

Poloinen emäntä Billot ei näyttänyt muuttuneelta; hänen kasvonsa


vain olivat käyneet norsunluunkalpeiksi.

Hän näytti nukkuvan.

»Äiti, äiti!» huudahti Catherine ja syöksyi vuoteen ääreen.

Potilas avasi silmänsä ja käänsi päänsä Catherineen päin. Järjen


pilkahdus ilmestyi hänen katseeseensa ja hänen huulensa alkoivat
mutista käsittämättömiä sanoja, jotka eivät sentään kehittyneet edes
katkonaisiksi lauseiksi. Hänen kätensä kohosi, yrittäen kosketuksella
täydentää kuulon ja näön miltei sammuneita aistimuksia. Mutta tämä
yritys ylitti hänen voimansa, liike raukesi, silmä ummistui, käsi painui
kuin vainajan liikkumaton käsi äitinsä vuoteen ääreen polvistuneen
Catherinen päälaelle, ja sairas vaipui entiseen liikkumattomuuteen,
josta hän oli hetkeksi havahtunut sen sähköiskun vaikutuksesta,
jonka tyttären ääni oli häneen siirtänyt.

Isän ja äidin horrostilat olivat, kuin kahdelta vastakkaiselta


taivaanrannalta välähtäneet salamat, ilmaisseet kahta tuiki
vastakkaista tunnetta.

Isäntä Billot oli toipunut tainnostilastaan työntääkseen Catherinen


kauas luotaan.

Emäntä Billot oli herännyt horteestaan vetääkseen Catherinen


tykönsä.

Catherinen saapuminen oli synnyttänyt maatilalla


vallankumouksen.

Billotia oli odotettu eikä hänen tytärtään.

Catherine kertoi, mikä tapaturma oli Billotia kohdannut, ja sanoi,


että Pariisissa Billot oli yhtä lähellä kuolemaa kuin Pisseleussa hänen
vaimonsa.

Mutta ilmeisesti nämä kaksi kuolevaa vaelsivat vastakkaisiin


suuntiin:
Billot kuolemasta elämään ja hänen vaimonsa elämästä kuolemaan.

Catherine astui tyttöaikansa kammioon. Paljon kyyneliä aiheuttivat


muistot, jotka tämä pieni huone palautti mieleen. Täällähän oli
nähnyt lapsen kauniit unet, täällä kokenut nuoren tytön polttavat
intohimot ja tänne hän nyt oli palannut leskenä, murtunein sydämin.
Heti tulonsa jälkeen Catherine otti ohjakset käteensä
epäjärjestykseen joutuneessa talossa vedoten valtaan, jonka hänen
isänsä oli kerran hänelle luovuttanut äitinsä kustannuksella.

Ukko Clouis sai kiitokset ja runsaat palkkiot, ja hän palasi


loukkoonsa, kuten hän nimitti Clouise-kallion hökkeliä.

Seuraavana päivänä saapui tohtori Raynal taloon.

Hän tuli sinne joka toinen päivä, pikemminkin omantunnon


vaatimuksesta kuin jotakin toivoen. Hän tiesi liiankin hyvin, ettei
mitään voitu tehdä, että tämä elämä sammuisi kuin lamppu, joka
kuluttaa viimeisen öljypisaran, ja ettei sitä voisi pelastaa inhimillisin
ponnistuksin.

Hän ilahtui tavattomasti nähdessään talon nuoren tyttären.

Hän esitti erään tärkeän kysymyksen, josta hän ei ollut tohtinut


puhua
Billotille: pyhän ehtoollisen.

Kuten tiedämme, Billot oli vannoutunut voltairelainen.

Tohtori Raynalkaan ei tosin ollut esimerkiksi kelpaavan


uskonnollinen, ei sinne päinkään. Päinvastoin, ajan henkeen hän liitti
tieteen hengen.

Mikäli ajan henki epäili, sikäli tiede jo kielsi.

Mutta tohtori Raynal, silloista asemaansa vastaavien olosuhteitten


mukaan, piti velvollisuutenaan ilmoittaa omaisille.
Hurskaat vanhemmat ottaisivat ilmoituksesta vaarin ja lähettäisivät
hakemaan pappia.

Jumalattomat vanhemmat käskisivät papin saapuessa sulkea oven


hänen nenänsä edestä.

Catherine oli hurskas.

Hän ei tiennyt, mikä tunteitten epäsointu vallitsi Billotin ja apotti


Fortierin välillä, tai oikeammin, hän ei pitänyt sitä kovin tärkeänä.

Hän lähetti rouva Clémentin apotti Fortierin luokse pyytämään tätä


antamaan viimeisen voitelun hänen äidilleen. Pisseleu oli liian
vähäpätöinen kyläkunta rakentaakseen itselleen oman kirkon ja
kustantaakseen itselleen oman sielunpaimenen, — se kuului Villers-
Cotteretsin seurakuntaan. Pisseleun vainajatkin haudattiin Villers-
Cotteretsin kalmistoon.

Tuntia myöhemmin ehtoolliskello kilisi maatilan portilla.

Catherine tervehti pyhää sakramenttia polvillaan.

Mutta tuskin apotti Fortier oli astunut potilaan huoneeseen ja


huomannut, että sairas, jota varten hänet oli kutsuttu, oli mykkä,
tajuton ja sokea, kun hän jo selitti, että hän antoi synninpäästön
vain niille, jotka kykenevät ripittäytymään, ja kaikista pyynnöistä
huolimatta hän vei ehtoolliskalkin pois.

Apotti Fortier oli synkän, hirveän koulukunnan pappi.-Hän olisi ollut


Espanjassa pyhä Dominikus, Meksikossa Valverde.

Ketään toistakaan pappia ei maksanut vaivaa pyytää avuksi.


Pisseleu kuului hänen seurakuntaansa, eikä kukaan lähiseudun pappi
uskaltaisi loukata hänen oikeuksiaan.

Catherine oli uskonnollinen ja hellä sydän, mutta hän oli samalla


järkevä. Hän suhtautui apotti Fortierin epäykseen, niinkuin siihen oli
suhtauduttava, ja toivoi, että Jumala olisi kuolevalle vaimo-rukalle
armeliaampi kuin hänen käskyläisensä.

Sitten hän edelleenkin täytti tyttären velvollisuudet äitiä kohtaan ja


äidin velvollisuudet lasta kohtaan ja jakoi kaiken aikansa sille
nuorelle sielulle, joka astui elämään, ja sille väsyneelle sielulle, joka
poistui elämästä.

Kahdeksaan päivään ja yhtä moneen yöhön hän ei poistunut


äitinsä vuoteen äärestä muualle kuin lapsensa kehdon ääreen.

Kahdeksannen ja yhdeksännen päivän välisenä yönä, kun nuori


tyttö yhä valvoi kuolevan äitinsä vuoteen ääressä — äitinsä, joka yhä
syvemmälle mereen painuvan veneen lailla oli siirtymässä verkalleen
iäisyyteen — rouva Billotin huoneen ovi aukeni ja Pitou ilmestyi
kynnykselle.

Hän saapui Pariisista, mistä hän tapansa mukaan oli lähtenyt


aamulla.

Hänet nähdessään Catherine säpsähti.

Tuokion hän pelkäsi, että hänen isänsä oli kuollut.

Mutta Pitoun kasvot, vaikka eivät olleetkaan juuri iloiset, eivät


liioin osoittaneet, että hän oli ikävän uutisen tuoja.

Billot jaksoi tosiaankin yhä paremmin ja paremmin. Neljä viisi


päivää sitten tohtori oli taannut hänen parantuvan. Pitoun
lähtöpäivän aamulla potilas piti siirrettämän Gros-Cailloun sairaalasta
tohtori Gilbertin luokse.

Kun Billotin tila oli lakannut olemasta vaarallinen, oli Pitou sanonut
päättäneensä palata Pisseleuhun.

Hän ei ohut peloissaan Billotin, vaan Catherinen takia

Pitou oli mielessään kuvitellut hetkeä, jolloin Billotille


ilmoitettaisiin, mitä hänelle ei ollut vielä tahdottu ilmoittaa missä
tilassa hänen vaimonsa oli.

Pitou oli ihan varma, että sillä hetkellä Billot lähtisi Villers-
Cotteretsiin, olkoonpa kuinka heikko tahansa. Ja mitä tapahtuisi, kun
hän tapaisi tyttärensä maatilalla?

Tohtori Gilbert ei ollut salannut Pitoulta, kuinka Catherinen


ilmestyminen isän sairasvuoteen ääreen oli potilaaseen vaikuttanut.

Oli ilmeistä, että tämä näky oli syöpynyt hänen


ajatusmaailmaansa, kuten herätessä jää mieleen ilkeän unen muisto.

Sitä mukaa kuin hänen järkensä kirkastui, haavoittunut loi


ympärilleen silmäyksiä, jotka vähitellen muuttuivat levottomista
vihaisiksi.

Varmaankin hän odotti näkevänsä saman näyn hetkellä millä


hyvänsä.

Mutta hän ei ollut lausunut siitä asiasta sanaakaan. Yhtään kertaa


hän ei ollut maininnut Catherinen nimeä. Mutta tohtori Gilbert oli
liian tarkka havaitsija, hän oli arvannut kaikki, lukenut kaikki.
Kun Billot oli päässyt toipilasasteelle, lähetti hän Pitoun maatilalle.

Hänen tehtäväkseen tuli saada Catherine lähtemään sieltä. Pitoulla


olisi sitävarten pari kolme päivää aikaa. Vasta parin kolmen päivän
perästä tohtori uskaltaisi ilmoittaa toipilaalle Pitoun tuomat ikävät
uutiset.

Pitou ilmaisi Catherinelle pelkonsa ja huolensa, jotka Billotin


äkkipikainen mielenlaatu oli hänessä herättänyt. Mutta Catherine
sanoi, että isä saisi vaikka tappaa hänet kuolevan äidin vuoteen
viereen, mutta hän ei poistuisi, ennenkuin saisi sulkea äitinsä silmät.

Pitou valitteli syvästi tätä päätöstä, muttei keksinyt sanoja, joilla


sitä vastustaisi.

Hän jäi siis taloon valmiina asettumaan isän ja tyttären väliin.

Kaksi päivää ja kaksi yötä kuluivat. Näiden kahden päivän ja


kahden yön aikana emäntä Billotin elämä näytti sammuvan henkäys
henkäykseltä.

Kymmeneen päivään potilas ei ollut syönyt mitään. Silloin tällöin


hänen suuhunsa oli pantu lusikallinen sokerivettä, siinä hänen
ravintonsa.

Oli vaikea uskoa, että ihminen voisi elää sellaisella ravinnolla. —


Mutta tämä ruumis-rukka elikin niin heikosti!

Kymmenennen ja yhdennentoista päivän välisenä yönä, juuri kun


viimeinenkin elonliekki näytti sammuneen hänessä, sairas tuntui
virkistyvän, hänen käsivartensa liikahtivat, huulet värähtivät ja silmät
aukenivat suuriksi ja tarkkaaviksi.
»Äiti, äiti!» huudahti Catherine.

Ja hän kiiruhti hakemaan poikaansa.

Olisi voinut sanoa, että Catherine kuljetti mukanaan äitinsä


henkeä. Kun hän palasi, pikku Isidor käsivarsillaan, liikahti kuoleva
kääntyäkseen ovelle päin.

Hänen silmänsä olivat yhä suuret, avoimet ja tarkkaavat.

Ja sitten hänen silmänsä välähtivät, hänen suunsa aukeni


huudahdukseen ja käsivarret kohosivat levälleen.

Catherine lankesi lapsineen polvilleen äitinsä vuoteen ääreen.

Silloin tapahtui jotakin omituista: emäntä Billot, kohosi pieluksensa


varaan, laski hitaasti kätensä Catherinen ja lapsen päälaelle ja
ponnistettuaan, kuten aikoinaan Kroisoksen nuori poika, hän sai
lausutuksi sanat:

»Lapsi kullat, minä siunaan teidät!»

Ja hän vaipui takaisin pielukselle, käsivarret retkahtivat, ääni


sammui.

Hän oli kuollut.

Mutta hänen silmänsä olivat jääneet auki, ikäänkuin vaimoparka,


joka, ei eläissään ollut nähnyt kyllin, olisi halunnut katsella tytärtänsä
haudan tuolta puolen.
XXVIII

Apotti Fortier panee täytäntöön uhkauksensa

Catherine ummisti hartaana äitinsä silmät, ensin kädellä sitten


huulilla.

Rouva Clément oli kauan odotellut tätä hetkeä ja ostanut


ennakolta kaksi vahakynttilää.

Sillaikaa kun Catherine, viljavat kyynelet silmissä, vei


huoneeseensa itkevän pikku Isidorin ja nukutti tämän antamalla
rintaa, rouva Clément sytytti molemmat vahakynttilät ja pani yhden
kummallekin puolen vuodetta. Sitten hän pani vainajan kädet ristiin
rinnalle, pani hänen kämmentensä väliin ristiinnaulitun kuvan ja laski
tuolille vihkivesimaljakon ynnä viime palmusunnuntaina katkaistun
puksipuun oksan.

Kun Catherine palasi, ei hänen tarvinnut tehdä muuta kuin


laskeutua polvilleen äitinsä vuoteen ääreen, rukouskirja kädessä.

Sillävälin Pitou oli ryhtynyt muihin hautausvalmisteluihin. Koska


hän ei uskaltanut mennä apotti Fortierin puheille — he olivat, kuten
muistettaneen, epäsovussa — meni hän suntion luokse ja pyysi tätä
huolehtimaan kuolinmessusta, kantajien luokse ilmoittamaan näille,
milloin he saisivat tulla noutamaan arkun, ja haudankaivajan luokse
sanomaan tälle, että hän kaivaisi haudan.

Senjälkeen hän meni Haramontiin ilmoittamaan luutnantilleen,


aliluutnantilleen ja yhdelleneljättä kansalliskaartilaiselleen, että rouva
Billotin hautajaiset tapahtuisivat seuraavana päivänä kello yksitoista
aamulla.

Koska emäntä Billotilla, vaimo-rukalla, ei ollut koskaan ollut


minkäänlaista valtiollista tointa eikä minkäänlaista arvoasemaa
kansalliskaartissa tai armeijassa, oli Pitoun ilmoitus miehilleen siis
puolivirallinen eikä virallinen, kuten helposti käsittääkin. Se oli kutsu
saapua hautajaistilaisuuteen eikä käsky.

Mutta kaikki tiesivät, mitä Billot oli tehnyt tämän vallankumouksen


hyväksi, joka hämmensi kaikkien pään, sytytti jokaisen sydämen.
Tiedettiin hyvin, mikä vaara tälläkin hetkellä uhkasi Billotia, joka virui
tuskanvuoteella, haavoittunut kun oli puolustaessaan pyhää asiaa.
Kutsu käsitettiin siis käskyksi. Haramontin kansalliskaarti lupasi siis
päällikölleen saapua mielellään ja täysissä aseissa seuraavana
päivänä kello yhdeksitoista surutaloon.

Iltapuolella Pitou palasi maatilalle. Portilla hän tapasi puusepän,


joka kantoi ruumisarkkua olkapäillään.

Pitou oli vaistoltaan herkkäsydäminen, mikä ominaisuus on


harvinainen maalaisväestössä, jopa suuren maailman ihmisissäkin.
Hän piilotti puusepän ja ruumisarkun talliin, ja säästääkseen
Catherinea näkemästä tuota synkkää laatikkoa ja kuulemasta
vasaran hirveää ääntä hän astui sisälle yksin.

You might also like