Full Chapter Core Java Volume I Fundamentals Eleventh Edition Safari PDF
Full Chapter Core Java Volume I Fundamentals Eleventh Edition Safari PDF
https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-
loucas/
https://textbookfull.com/product/java-the-complete-reference-
eleventh-edition-herbert-schildt/
https://textbookfull.com/product/structural-dynamics-
fundamentals-and-advanced-applications-volume-i-volume-i-1st-
edition-alvar-m-kabe/
https://textbookfull.com/product/fundamentals-of-technical-
graphics-volume-i-edward-e-osakue/
Beginning Swift Master the fundamentals of programming
in Swift 4 Safari
https://textbookfull.com/product/beginning-swift-master-the-
fundamentals-of-programming-in-swift-4-safari/
https://textbookfull.com/product/horngrens-accounting-
volume-2-eleventh-canadian-edition-tracie-miller-nobles/
https://textbookfull.com/product/a-primer-on-microeconomics-
volume-i-fundamentals-of-exchange-second-edition-thomas-m-
beveridge/
https://textbookfull.com/product/media-composer-fundamentals-i-
avid/
https://textbookfull.com/product/interactive-c-fundamentals-core-
concepts-and-patterns-1st-edition-vaskaran-sarcar/
About This E-Book
EPUB is an open, industry-standard format for e-books. However,
support for EPUB and its many features varies across reading
devices and applications. Use your device or app settings to
customize the presentation to your liking. Settings that you can
customize often include font, font size, single or double column,
landscape or portrait mode, and figures that you can click or tap to
enlarge. For additional information about the settings and features
on your reading device or app, visit the device manufacturer’s Web
site.
Many titles include programming code or configuration examples.
To optimize the presentation of these elements, view the e-book in
single-column, landscape mode and adjust the font size to the
smallest setting. In addition to presenting code and configurations in
the reflowable text format, we have included images of the code
that mimic the presentation found in the print book; therefore,
where the reflowable format may compromise the presentation of
the code listing, you will see a “Click here to view code image” link.
Click the link to view the print-fidelity code image. To return to the
previous page viewed, click the Back button on your device or app.
Core Java
Volume I–Fundamentals
Eleventh Edition
Cay S. Horstmann
Microsoft® Windows®, and Microsoft Office® are registered trademarks of the Microsoft
Corporation in the U.S.A. and other countries. This book is not sponsored or endorsed by or
affiliated with the Microsoft Corporation.
All rights reserved. This publication is protected by copyright, and permission must be
obtained from the publisher prior to any prohibited reproduction, storage in a retrieval
system, or transmission in any form or by any means, electronic, mechanical, photocopying,
recording, or likewise. For information regarding permissions, request forms and the
appropriate contacts within the Pearson Education Global Rights & Permissions Department,
please visit www.pearsoned.com/permissions/.
ISBN-13: 978-0-13-516630-7
ISBN-10: 0-13-516630-6
1 18
Contents
Preface
Acknowledgments
Chapter 1: An Introduction to Java
1.1 Java as a Programming Platform
1.2 The Java “White Paper” Buzzwords
1.2.1 Simple
1.2.2 Object-Oriented
1.2.3 Distributed
1.2.4 Robust
1.2.5 Secure
1.2.6 Architecture-Neutral
1.2.7 Portable
1.2.8 Interpreted
1.2.9 High-Performance
1.2.10 Multithreaded
1.2.11 Dynamic
1.3 Java Applets and the Internet
1.4 A Short History of Java
1.5 Common Misconceptions about Java
Chapter 2: The Java Programming Environment
2.1 Installing the Java Development Kit
2.1.1 Downloading the JDK
2.1.2 Setting up the JDK
2.1.3 Installing Source Files and Documentation
2.2 Using the Command-Line Tools
2.3 Using an Integrated Development Environment
2.4 JShell
Chapter 3: Fundamental Programming Structures in Java
3.1 A Simple Java Program
3.2 Comments
3.3 Data Types
3.3.1 Integer Types
3.3.2 Floating-Point Types
3.3.3 The char Type
3.3.4 Unicode and the char Type
3.3.5 The boolean Type
3.4 Variables and Constants
3.4.1 Declaring Variables
3.4.2 Initializing Variables
3.4.3 Constants
3.4.4 Enumerated Types
3.5 Operators
3.5.1 Arithmetic Operators
3.5.2 Mathematical Functions and Constants
3.5.3 Conversions between Numeric Types
3.5.4 Casts
3.5.5 Combining Assignment with Operators
3.5.6 Increment and Decrement Operators
3.5.7 Relational and boolean Operators
3.5.8 Bitwise Operators
3.5.9 Parentheses and Operator Hierarchy
3.6 Strings
3.6.1 Substrings
3.6.2 Concatenation
3.6.3 Strings Are Immutable
3.6.4 Testing Strings for Equality
3.6.5 Empty and Null Strings
3.6.6 Code Points and Code Units
3.6.7 The String API
3.6.8 Reading the Online API Documentation
3.6.9 Building Strings
3.7 Input and Output
3.7.1 Reading Input
3.7.2 Formatting Output
3.7.3 File Input and Output
3.8 Control Flow
3.8.1 Block Scope
3.8.2 Conditional Statements
3.8.3 Loops
3.8.4 Determinate Loops
3.8.5 Multiple Selections—The switch Statement
3.8.6 Statements That Break Control Flow
3.9 Big Numbers
3.10 Arrays
3.10.1 Declaring Arrays
3.10.2 Accessing Array Elements
3.10.3 The “for each” Loop
3.10.4 Array Copying
3.10.5 Command-Line Parameters
3.10.6 Array Sorting
3.10.7 Multidimensional Arrays
3.10.8 Ragged Arrays
Chapter 4: Objects and Classes
4.1 Introduction to Object-Oriented Programming
4.1.1 Classes
4.1.2 Objects
4.1.3 Identifying Classes
4.1.4 Relationships between Classes
4.2 Using Predefined Classes
4.2.1 Objects and Object Variables
4.2.2 The LocalDate Class of the Java Library
4.2.3 Mutator and Accessor Methods
4.3 Defining Your Own Classes
4.3.1 An Employee Class
4.3.2 Use of Multiple Source Files
4.3.3 Dissecting the Employee Class
4.3.4 First Steps with Constructors
4.3.5 Declaring Local Variables with var
4.3.6 Working with null References
4.3.7 Implicit and Explicit Parameters
4.3.8 Benefits of Encapsulation
4.3.9 Class-Based Access Privileges
4.3.10 Private Methods
4.3.11 Final Instance Fields
4.4 Static Fields and Methods
4.4.1 Static Fields
4.4.2 Static Constants
4.4.3 Static Methods
4.4.4 Factory Methods
4.4.5 The main Method
4.5 Method Parameters
4.6 Object Construction
4.6.1 Overloading
4.6.2 Default Field Initialization
4.6.3 The Constructor with No Arguments
4.6.4 Explicit Field Initialization
4.6.5 Parameter Names
4.6.6 Calling Another Constructor
4.6.7 Initialization Blocks
4.6.8 Object Destruction and the finalize Method
4.7 Packages
4.7.1 Package Names
4.7.2 Class Importation
4.7.3 Static Imports
4.7.4 Addition of a Class into a Package
4.7.5 Package Access
4.7.6 The Class Path
4.7.7 Setting the Class Path
4.8 JAR Files
4.8.1 Creating JAR files
4.8.2 The Manifest
4.8.3 Executable JAR Files
4.8.4 Multi-Release JAR Files
4.8.5 A Note about Command-Line Options
4.9 Documentation Comments
4.9.1 Comment Insertion
4.9.2 Class Comments
4.9.3 Method Comments
4.9.4 Field Comments
4.9.5 General Comments
4.9.6 Package Comments
4.9.7 Comment Extraction
4.10 Class Design Hints
Chapter 5: Inheritance
5.1 Classes, Superclasses, and Subclasses
5.1.1 Defining Subclasses
5.1.2 Overriding Methods
5.1.3 Subclass Constructors
5.1.4 Inheritance Hierarchies
5.1.5 Polymorphism
5.1.6 Understanding Method Calls
5.1.7 Preventing Inheritance: Final Classes and Methods
5.1.8 Casting
5.1.9 Abstract Classes
5.1.10 Protected Access
5.2 Object: The Cosmic Superclass
5.2.1 Variables of Type Object
5.2.2 The equals Method
5.2.3 Equality Testing and Inheritance
5.2.4 The hashCode Method
5.2.5 The toString Method
5.3 Generic Array Lists
5.3.1 Declaring Array Lists
5.3.2 Accessing Array List Elements
5.3.3 Compatibility between Typed and Raw Array Lists
5.4 Object Wrappers and Autoboxing
5.5 Methods with a Variable Number of Parameters
5.6 Enumeration Classes
5.7 Reflection
5.7.1 The Class Class
5.7.2 A Primer on Declaring Exceptions
5.7.3 Resources
5.7.4 Using Reflection to Analyze the Capabilities of Classes
5.7.5 Using Reflection to Analyze Objects at Runtime
5.7.6 Using Reflection to Write Generic Array Code
5.7.7 Invoking Arbitrary Methods and Constructors
5.8 Design Hints for Inheritance
Chapter 6: Interfaces, Lambda Expressions, and Inner
Classes
6.1 Interfaces
6.1.1 The Interface Concept
6.1.2 Properties of Interfaces
6.1.3 Interfaces and Abstract Classes
6.1.4 Static and Private Methods
6.1.5 Default Methods
6.1.6 Resolving Default Method Conflicts
6.1.7 Interfaces and Callbacks
6.1.8 The Comparator Interface
6.1.9 Object Cloning
6.2 Lambda Expressions
6.2.1 Why Lambdas?
6.2.2 The Syntax of Lambda Expressions
6.2.3 Functional Interfaces
6.2.4 Method References
6.2.5 Constructor References
6.2.6 Variable Scope
6.2.7 Processing Lambda Expressions
6.2.8 More about Comparators
6.3 Inner Classes
6.3.1 Use of an Inner Class to Access Object State
6.3.2 Special Syntax Rules for Inner Classes
6.3.3 Are Inner Classes Useful? Actually Necessary?
Secure?
6.3.4 Local Inner Classes
6.3.5 Accessing Variables from Outer Methods
6.3.6 Anonymous Inner Classes
6.3.7 Static Inner Classes
6.4 Service Loaders
6.5 Proxies
6.5.1 When to Use Proxies
6.5.2 Creating Proxy Objects
6.5.3 Properties of Proxy Classes
Chapter 7: Exceptions, Assertions, and Logging
7.1 Dealing with Errors
7.1.1 The Classification of Exceptions
7.1.2 Declaring Checked Exceptions
7.1.3 How to Throw an Exception
7.1.4 Creating Exception Classes
7.2 Catching Exceptions
7.2.1 Catching an Exception
7.2.2 Catching Multiple Exceptions
7.2.3 Rethrowing and Chaining Exceptions
7.2.4 The finally Clause
7.2.5 The try-with-Resources Statement
7.2.6 Analyzing Stack Trace Elements
7.3 Tips for Using Exceptions
7.4 Using Assertions
7.4.1 The Assertion Concept
7.4.2 Assertion Enabling and Disabling
7.4.3 Using Assertions for Parameter Checking
7.4.4 Using Assertions for Documenting Assumptions
7.5 Logging
7.5.1 Basic Logging
7.5.2 Advanced Logging
7.5.3 Changing the Log Manager Configuration
7.5.4 Localization
7.5.5 Handlers
7.5.6 Filters
7.5.7 Formatters
7.5.8 A Logging Recipe
7.6 Debugging Tips
Chapter 8: Generic Programming
8.1 Why Generic Programming?
8.1.1 The Advantage of Type Parameters
8.1.2 Who Wants to Be a Generic Programmer?
8.2 Defining a Simple Generic Class
8.3 Generic Methods
8.4 Bounds for Type Variables
8.5 Generic Code and the Virtual Machine
8.5.1 Type Erasure
8.5.2 Translating Generic Expressions
8.5.3 Translating Generic Methods
8.5.4 Calling Legacy Code
8.6 Restrictions and Limitations
8.6.1 Type Parameters Cannot Be Instantiated with
Primitive Types
8.6.2 Runtime Type Inquiry Only Works with Raw Types
8.6.3 You Cannot Create Arrays of Parameterized Types
8.6.4 Varargs Warnings
8.6.5 You Cannot Instantiate Type Variables
8.6.6 You Cannot Construct a Generic Array
8.6.7 Type Variables Are Not Valid in Static Contexts of
Generic Classes
8.6.8 You Cannot Throw or Catch Instances of a Generic
Class
8.6.9 You Can Defeat Checked Exception Checking
8.6.10 Beware of Clashes after Erasure
8.7 Inheritance Rules for Generic Types
8.8 Wildcard Types
8.8.1 The Wildcard Concept
8.8.2 Supertype Bounds for Wildcards
8.8.3 Unbounded Wildcards
8.8.4 Wildcard Capture
8.9 Reflection and Generics
8.9.1 The Generic Class Class
8.9.2 Using Class<T> Parameters for Type Matching
8.9.3 Generic Type Information in the Virtual Machine
8.9.4 Type Literals
Chapter 9: Collections
9.1 The Java Collections Framework
9.1.1 Separating Collection Interfaces and Implementation
9.1.2 The Collection Interface
9.1.3 Iterators
9.1.4 Generic Utility Methods
9.2 Interfaces in the Collections Framework
9.3 Concrete Collections
9.3.1 Linked Lists
9.3.2 Array Lists
9.3.3 Hash Sets
9.3.4 Tree Sets
9.3.5 Queues and Deques
9.3.6 Priority Queues
9.4 Maps
9.4.1 Basic Map Operations
9.4.2 Updating Map Entries
9.4.3 Map Views
9.4.4 Weak Hash Maps
9.4.5 Linked Hash Sets and Maps
9.4.6 Enumeration Sets and Maps
9.4.7 Identity Hash Maps
9.5 Views and Wrappers
9.5.1 Small Collections
9.5.2 Subranges
9.5.3 Unmodifiable Views
9.5.4 Synchronized Views
9.5.5 Checked Views
9.5.6 A Note on Optional Operations
9.6 Algorithms
9.6.1 Why Generic Algorithms?
9.6.2 Sorting and Shuffling
9.6.3 Binary Search
9.6.4 Simple Algorithms
9.6.5 Bulk Operations
9.6.6 Converting between Collections and Arrays
9.6.7 Writing Your Own Algorithms
9.7 Legacy Collections
9.7.1 The Hashtable Class
9.7.2 Enumerations
9.7.3 Property Maps
9.7.4 Stacks
9.7.5 Bit Sets
Chapter 10: Graphical User Interface Programming
10.1 A History of Java User Interface Toolkits
10.2 Displaying Frames
10.2.1 Creating a Frame
10.2.2 Frame Properties
10.3 Displaying Information in a Component
10.3.1 Working with 2D Shapes
10.3.2 Using Color
10.3.3 Using Fonts
10.3.4 Displaying Images
10.4 Event Handling
10.4.1 Basic Event Handling Concepts
10.4.2 Example: Handling a Button Click
10.4.3 Specifying Listeners Concisely
10.4.4 Adapter Classes
10.4.5 Actions
10.4.6 Mouse Events
10.4.7 The AWT Event Hierarchy
10.5 The Preferences API
Chapter 11: User Interface Components with Swing
11.1 Swing and the Model-View-Controller Design Pattern
11.2 Introduction to Layout Management
11.2.1 Layout Managers
11.2.2 Border Layout
11.2.3 Grid Layout
11.3 Text Input
11.3.1 Text Fields
11.3.2 Labels and Labeling Components
11.3.3 Password Fields
11.3.4 Text Areas
11.3.5 Scroll Panes
11.4 Choice Components
11.4.1 Checkboxes
11.4.2 Radio Buttons
11.4.3 Borders
11.4.4 Combo Boxes
11.4.5 Sliders
11.5 Menus
11.5.1 Menu Building
11.5.2 Icons in Menu Items
11.5.3 Checkbox and Radio Button Menu Items
11.5.4 Pop-Up Menus
11.5.5 Keyboard Mnemonics and Accelerators
11.5.6 Enabling and Disabling Menu Items
11.5.7 Toolbars
11.5.8 Tooltips
11.6 Sophisticated Layout Management
11.6.1 The Grid Bag Layout
11.6.1.1 The gridx, gridy, gridwidth, and
gridheight Parameters
11.6.1.2 Weight Fields
11.6.1.3 The fill and anchor Parameters
11.6.1.4 Padding
11.6.1.5 Alternative Method to Specify the gridx,
gridy, gridwidth, and gridheight
Parameters
11.6.1.6 A Grid Bag Layout Recipe
11.6.1.7 A Helper Class to Tame the Grid Bag
Constraints
11.6.2 Custom Layout Managers
11.7 Dialog Boxes
11.7.1 Option Dialogs
11.7.2 Creating Dialogs
11.7.3 Data Exchange
11.7.4 File Dialogs
Chapter 12: Concurrency
12.1 What Are Threads?
12.2 Thread States
12.2.1 New Threads
12.2.2 Runnable Threads
12.2.3 Blocked and Waiting Threads
12.2.4 Terminated Threads
12.3 Thread Properties
12.3.1 Interrupting Threads
12.3.2 Daemon Threads
12.3.3 Thread Names
12.3.4 Handlers for Uncaught Exceptions
12.3.5 Thread Priorities
12.4 Synchronization
12.4.1 An Example of a Race Condition
12.4.2 The Race Condition Explained
12.4.3 Lock Objects
12.4.4 Condition Objects
12.4.5 The synchronized Keyword
12.4.6 Synchronized Blocks
12.4.7 The Monitor Concept
12.4.8 Volatile Fields
12.4.9 Final Variables
12.4.10 Atomics
12.4.11 Deadlocks
12.4.12 Thread-Local Variables
12.4.13 Why the stop and suspend Methods Are
Deprecated
12.5 Thread-Safe Collections
12.5.1 Blocking Queues
12.5.2 Efficient Maps, Sets, and Queues
12.5.3 Atomic Update of Map Entries
12.5.4 Bulk Operations on Concurrent Hash Maps
12.5.5 Concurrent Set Views
12.5.6 Copy on Write Arrays
12.5.7 Parallel Array Algorithms
12.5.8 Older Thread-Safe Collections
12.6 Tasks and Thread Pools
12.6.1 Callables and Futures
12.6.2 Executors
12.6.3 Controlling Groups of Tasks
12.6.4 The Fork-Join Framework
12.7 Asynchronous Computations
12.7.1 Completable Futures
12.7.2 Composing Completable Futures
12.7.3 Long-Running Tasks in User Interface Callbacks
12.8 Processes
12.8.1 Building a Process
12.8.2 Running a Process
12.8.3 Process Handles
Appendix
Index
Preface
To the Reader
In late 1995, the Java programming language burst onto the
Internet scene and gained instant celebrity status. The promise of
Java technology was that it would become the universal glue that
connects users with information wherever it comes from—web
servers, databases, information providers, or any other imaginable
source. Indeed, Java is in a unique position to fulfill this promise. It
is an extremely solidly engineered language that has gained wide
acceptance. Its built-in security and safety features are reassuring
both to programmers and to the users of Java programs. Java has
built-in support for advanced programming tasks, such as network
programming, database connectivity, and concurrency.
Since 1995, eleven major revisions of the Java Development Kit have
been released. Over the course of the last 20 years, the Application
Programming Interface (API) has grown from about 200 to over
4,000 classes. The API now spans such diverse areas as user
interface construction, database management, internationalization,
security, and XML processing.
The book that you are reading right now is the first volume of the
eleventh edition of Core Java. Each edition closely followed a release
of the Java Development Kit, and each time, we rewrote the book to
take advantage of the newest Java features. This edition has been
updated to reflect the features of Java Standard Edition (SE) 9, 10,
and 11.
As with the previous editions of this book, we still target serious
programmers who want to put Java to work on real projects. We
think of you, our reader, as a programmer with a solid background in
a programming language other than Java, and we assume that you
don’t like books filled with toy examples (such as toasters, zoo
animals, or “nervous text”). You won’t find any of these in our book.
Our goal is to enable you to fully understand the Java language and
library, not to give you an illusion of understanding.
In this book you will find lots of sample code demonstrating almost
every language and library feature that we discuss. We keep the
sample programs purposefully simple to focus on the major points,
but, for the most part, they aren’t fake and they don’t cut corners.
They should make good starting points for your own code.
We assume you are willing, even eager, to learn about all the
advanced features that Java puts at your disposal. For example, we
give you a detailed treatment of
Object-oriented programming
Reflection and proxies
Interfaces and inner classes
Exception handling
Generic programming
The collections framework
The event listener model
Graphical user interface design
Concurrency
With the explosive growth of the Java class library, a one-volume
treatment of all the features of Java that serious programmers need
to know is no longer possible. Hence, we decided to break up the
book into two volumes. This first volume concentrates on the
fundamental concepts of the Java language, along with the basics of
user-interface programming. The second volume, Core Java, Volume
II—Advanced Features, goes further into the enterprise features and
advanced user-interface programming. It includes detailed
discussions of
The Stream API
File processing and regular expressions
Databases
XML processing
Annotations
Internationalization
Network programming
Advanced GUI components
Advanced graphics
Native methods
When writing a book, errors and inaccuracies are inevitable. We’d
very much like to know about them. But, of course, we’d prefer to
learn about each of them only once. We have put up a list of
frequently asked questions, bug fixes, and workarounds on a web
page at http://horstmann.com/corejava. Strategically placed
at the end of the errata page (to encourage you to read through
it first) is a form you can use to report bugs and suggest
improvements. Please don’t be disappointed if we don’t answer
every query or don’t get back to you immediately. We do read all e-
mail and appreciate your input to make future editions of this book
clearer and more informative.
Conventions
As is common in many computer books, we use monospace type
to represent computer code.
Note
Notes are tagged with “note” icons that look like this.
Tip
Tips are tagged with “tip” icons that look like this.
Caution
When there is danger ahead, we warn you with a “caution”
icon.
C++ Note
Sample Code
The web site for this book at http://horstmann.com/corejava
contains all sample code from the book. See Chapter 2 for more
information on installing the Java Development Kit and the sample
code.
On the 12th they again saw a couple of bears coming from the
east, and returning from the sea towards the land. The mother fell a
victim to their guns, but the cub was captured, and chained to an
anchor which they had driven into the ice. It appeared exceedingly
restless and disturbed, but not the less did it greedily devour a slice
of its mother’s flesh which the sailors threw to it. A snow wigwam
was hastily constructed for its accommodation, and the floor covered
with a layer of shavings; but the cub despised these luxuries of
civilization, and preferred to encamp on the snow, like a true
inhabitant of the Polar Regions. A few days afterwards it
disappeared with its chain, which it had contrived to detach from the
anchor; and the weight of the iron, in all probability, had dragged the
poor beast to the bottom of the water.
It was on the 22nd of October, in lat. 70° 50’ N., and long. 21° W.,
that the Hansa sank beneath the ice. Dr. Laube writes: “We made
ourselves as snug as possible, and, once our little house was
completely embanked with snow, we had not to complain of the cold.
We enjoyed perfect health, and occupied the time with long walks
and with our books, of which we had many. We made a Christmas-
tree of birch-twigs, and embellished it with fragments of wax taper.”
To prevent attacks of disease, and to maintain the cheerfulness
of the men, the officers of the expedition stimulated them to every
kind of active employment, and laid down strict rules for the due
division of the day.
At seven in the morning, they were aroused by the watch. They
rose, attired themselves in their warm thick woollen clothing, washed
in water procured by melting snow, and then took their morning cup
of coffee, with a piece of hard bread. Various occupations
succeeded: the construction of such useful utensils as proved to be
necessary; stitching sail-cloth, mending clothes, writing up the day’s
journal, and reading. When the weather permitted, astronomical
observations and calculations were not forgotten. At noon, all hands
were summoned to dinner, at which a good rich soup formed the
principal dish; and as they had an abundance of preserved
vegetables, the bill of fare was frequently changed. In the use of
alcoholic liquors the most rigid economy was observed, and it was
on Sunday only that each person received a glass of port.
The ice-floe on which their cabin stood was assiduously and
carefully explored in all directions. It was about seven miles in circuit,
and its average diameter measured nearly two miles.
The out-of-door amusements consisted chiefly of skating, and
building up huge images of snow—Egyptian sphynxes and the like.
The borders of the ice-floe, especially to the west and south-
west, presented a curious aspect; the attrition and pressure of the
floating ice had built up about it high glittering walls, upwards of ten
feet in elevation. The snow-crystals flashed and radiated in the sun
like myriads of diamonds. The red gleam of morning and evening
cast a strange emerald tint on the white surface of the landscape.
The nights were magnificent. The glowing firmament, and the snow
which reflected its lustre, produced so intense a brightness, that it
was possible to read without fatigue the finest handwriting, and to
distinguish remote objects. The phenomenon of the Aurora Borealis
was of constant occurrence, and on one occasion was so
wonderfully luminous that it paled the radiance of the stars, and
everything upon the ice-floe cast a shadow, as if it had been the sun
shining.
Near the coal-cabin stood two small huts, one of which served for
ablutions, the other as a shed. Round this nucleus of the little
shipwrecked colony were situated at convenient points the piles of
wood for fuel, the boats, and the barrels of patent fuel and pork. To
prevent the wind and snow from entering the dwelling-hut, a
vestibule was constructed, with a winding entrance.
The greatest cold experienced was -29° 30’ F., and this was in
December. After Christmas the little settlement was visited by
several severe storms, and their ice-raft drifted close along the
shore, sometimes within eight or nine miles, amidst much ice-
crushing,—which so reduced it on all sides, that by the 4th of
January 1870 it did not measure more than one-eighth of its original
dimensions.
On the 6th of January, when they had descended as far south as
66° 45’ N. lat., the sun reappeared, and was joyfully welcomed.
On the night of the 15th of January, the colony was stricken by a
sudden and terrible alarm. The ice yawned asunder, immediately
beneath the hut, and its occupants had but just time to take refuge in
their boats. Here they lay in a miserable condition, unable to clear
out the snow, and sheltered very imperfectly from the driving, furious
tempest. But on the 17th the gale moderated, and as soon as the
weather permitted they set to work to reconstruct out of the ruins of
the old hut a new but much smaller one. It was not large enough to
accommodate more than half the colony; and the other half took up
their residence in the boats.
February was calm and fine, and the floe still continued to drift
southward along the land. The nights were gorgeous with auroral
displays. Luminous sheaves expanded themselves on the deep blue
firmament like the folds of a fan, or the petals of a flower.
March was very snowy, and mostly dull. On the 4th, the ice-raft
passed within twenty-five miles of the glacier Kolberger-Heide. A day
or two later, it nearly came into collision with a large grounded
iceberg. The portion nearest to the drifting colony formed an
immense overhanging mass; its principal body had been wrought by
the action of the sun and the waves into the most capricious forms,
and seemed an aggregate of rocks and pinnacles, towers and
gateways. The castaways could have seized its projecting angles as
they floated past. They thought their destruction certain, but the
fragments of ice which surrounded the raft served as “buffers,” and
saved it from a fatal collision.
On the 29th of March, they found themselves in the latitude of
Nukarbik, the island where Graab, the explorer, wintered, from
September 3rd, 1827, to April 5th, 1830. They had cherished the
hope that from this spot they might be able to take to their boats, and
start for Friedrichstal, a Moravian missionary station on the south
coast of Greenland. However, the ice was as yet too compact for any
such venture to be attempted.
For four weeks they were detained in the bay of Nukarbik, only
two or three miles from the shore, and yet unable to reach it. Their
raft was caught in a kind of eddy, and sometimes tacked to the
south, sometimes to the north. The rising tide carried it towards the
shore, the ebbing tide floated it out again to sea. During this
detention they were visited by small troops of birds, snow linnets and
snow buntings. The seamen threw them a small quantity of oats,
which they greedily devoured. They were so tame that they allowed
themselves to be caught by the hand.