Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (1 vote)
11 views

Programming in Java 2nd edition Edition Choudhary download

The document provides information about the book 'Programming in Java, 2nd Edition' by Sachin Malhotra and Saurabh Choudhary, detailing its content, structure, and key features. It covers the evolution of Java, its applications, and includes practical examples, exercises, and interview questions to aid learning. The second edition updates the material to align with Java Standard Edition 7, enhancing coverage of various programming concepts and tools.

Uploaded by

mamiyobarimi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
11 views

Programming in Java 2nd edition Edition Choudhary download

The document provides information about the book 'Programming in Java, 2nd Edition' by Sachin Malhotra and Saurabh Choudhary, detailing its content, structure, and key features. It covers the evolution of Java, its applications, and includes practical examples, exercises, and interview questions to aid learning. The second edition updates the material to align with Java Standard Edition 7, enhancing coverage of various programming concepts and tools.

Uploaded by

mamiyobarimi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 78

Programming in Java 2nd edition Edition

Choudhary pdf download

https://ebookgate.com/product/programming-in-java-2nd-edition-
edition-choudhary/

Get Instant Ebook Downloads – Browse at https://ebookgate.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

A Guide To Programming in Java Java 2 Platform Standard


Edition 5 Beth Brown

https://ebookgate.com/product/a-guide-to-programming-in-java-
java-2-platform-standard-edition-5-beth-brown/

ebookgate.com

Java Programming 8th Edition Joyce Farrell

https://ebookgate.com/product/java-programming-8th-edition-joyce-
farrell/

ebookgate.com

Java Programming 6th Edition Joyce Farrell

https://ebookgate.com/product/java-programming-6th-edition-joyce-
farrell/

ebookgate.com

Functional Programming in Java Harnessing the Power Of


Java 8 Lambda Expressions 1st Edition Venkat Subramaniam

https://ebookgate.com/product/functional-programming-in-java-
harnessing-the-power-of-java-8-lambda-expressions-1st-edition-venkat-
subramaniam/
ebookgate.com
JXTA Java P2P Programming 1st Edition Daniel Brookshier

https://ebookgate.com/product/jxta-java-p2p-programming-1st-edition-
daniel-brookshier/

ebookgate.com

Java Network Programming Third Edition Elliotte Rusty


Harold

https://ebookgate.com/product/java-network-programming-third-edition-
elliotte-rusty-harold/

ebookgate.com

Beginning Programming with Java For Dummies 3rd Edition


Barry Burd

https://ebookgate.com/product/beginning-programming-with-java-for-
dummies-3rd-edition-barry-burd/

ebookgate.com

Programming in C 2nd Edition Safari

https://ebookgate.com/product/programming-in-c-2nd-edition-safari/

ebookgate.com

Programming in Scala 2nd 2nd Edition Martin Odersky

https://ebookgate.com/product/programming-in-scala-2nd-2nd-edition-
martin-odersky/

ebookgate.com
Programming in
Java
Second Edition

SACHIN MALHOTRA
Associate Professor
IMS, Ghaziabad

SAURABH CHOUDHARY
Formerly, Head
IT Department
IMS, Ghaziabad

1
3
Oxford University Press is a department of the University of Oxford.
It furthers the University’s objective of excellence in research, scholarship,
and education by publishing worldwide. Oxford is a registered trade mark of
Oxford University Press in the UK and in certain other countries.

Published in India by
Oxford University Press
YMCA Library Building, 1 Jai Singh Road, New Delhi 110001, India

© Oxford University Press 2010, 2014

The moral rights of the author/s have been asserted.

First Edition published in 2010


Second Edition published in 2014

All rights reserved. No part of this publication may be reproduced, stored in


a retrieval system, or transmitted, in any form or by any means, without the
prior permission in writing of Oxford University Press, or as expressly permitted
by law, by licence, or under terms agreed with the appropriate reprographics
rights organization. Enquiries concerning reproduction outside the scope of the
above should be sent to the Rights Department, Oxford University Press, at the
address above.

You must not circulate this work in any other form


and you must impose this same condition on any acquirer.

ISBN-13: 978-0-19-809485-2
ISBN-10: 0-19-809485-X

Typeset in Times New Roman


by Sukuvisa Enterprises
Printed in India by Yash Printographics, Noida 201301
Dedicated
to
Our Parents
About the Authors

Sachin Malhotra is currently Associate Professor in the IT department of IMS Ghaziabad. He has more
than a decade long experience in mentoring students on developing Java applications as well as training
practising professionals in the field of Java. He has also designed and conducted various corporate
trainings in Java and networking.
Saurabh Choudhary is currently a practising IT consultant and corporate trainer. He has more than 12
years of experience in industry, academia, and consultancy. He has worked on positions of eminence
at IMS Ghaziabad as Head of IT department and Dean Academics (University Campus). His areas of
expertise include Java, Database Management System, and Information Systems.

Testimonials
From pervasive computing to communications industry, medical science to aerospace, Java is
gaining a foothold in every domain. Programming in Java has been written to arouse the interest
even in a novice computer programmer to an expert, craving to sharpen his programming skills.
Pankaj Verma | Senior Software Engineer | OSI Inc.
It is definitely the best textbook on Java that I have run into. I highly recommend it.
Sachin Dhama | Team Lead | Accenture
Java is a very powerful language for developing enterprise applications. I am hopeful that this
book will provide a basic building platform for Java programmers to enhance their knowledge.
Awadhesh Kumar Katiyar | Technical Lead | HCL Technologies Ltd.
Java enables users to develop applications on the Internet for servers, desktops computers, and small
handheld devices. The future of computing is being influenced by the Internet, and Java promises to
play a big part in it. This book is perfect for those who are seeking a clear understanding of Java. It
should allow the readers to create codes that are a lot clearer and are far more effective than before.
Saurabh Moondhra | Sr. Technical Consultant | SGT Inc
This is the most interesting Java programming book for beginners; at the same time, it is equally
good for intermediate readers as well. This should be your first Java book if you are learning
from scratch.
Pankaj Jain | Senior Manager | Bank of America
When you go through this book, you will gain confidence after completing each chapter. The
authors have written it in such a simple way covering each and every aspect of Java that anyone
can learn how to develop effective codes.
Rajeev Varshney | Lead Consultant | HCL NZ Ltd.
Preface to the First Edition

Java was primarily designed as a platform-independent language for usage in small consumer
electronic devices. It was derived from C++ but with a lot of difference. Java’s platform
independence originally addressed the problem that applications for embedded devices must
run on a wide variety of hardware. But since the Internet was emerging at the same time, Java
soon got adopted as an Internet language because of its portable nature. Major Internet browsers
such as Netscape Navigator and Microsoft Internet Explorer became Java-compatible, as it
effectively addressed the concerns for security by providing a firewall between web applications
and the computer. Eventually it became a standard programming language and is now being
used for creating a variety of applications including standalone applications, web applications,
enterprise-wide applications, and mobile games.
It can therefore be inferred that since its inception, Java has emerged as the most important
programming language. As the domain of Java is quite vast and a bit more complex than other
programming languages such as C, C++, and Visual Basic, it is observed that students and novice
programmers strive hard to comprehend its core concepts. Hence, a need for a book in this area,
which is both concise and simple, is a necessity.
About the Book
The book encapsulates the concepts of the latest version of Java, i.e. Java 6, encompassing a
comprehensive coverage of curriculum and industry expectations. It is useful for the students of
undergraduate and postgraduate courses of computer science and engineering and information
technology disciplines as well as for the instructors at various levels.
The book provides a thorough understanding of the basic concepts of object-oriented
programming principles and gradually moves on to the advanced concepts in Java. It includes
numerous examples, line-by-line description of examples, figures, explanation of concepts, and
key notes. Review questions and programming exercises are included as chapter-end exercises
to assess the learning outcomes. Every topic in the book is supported by examples followed
by an output and explanation. It also offers an appendix on general interview questions which
provides students an insight into the current requirements of the industry and allows them to
prepare accordingly.
The main features of this book include the following:
  an exhaustive coverage of Java features such as operators, classes, objects, inheritance,

packages, and exception handling


  comprehensive discussion on the latest features of Java such as enumerations, generics,

logging API, console class, StringBuilder class, NetworkInterface class, and assertions
  latest features combined with core concepts such as multithreading, applets, AWT, and

swings
  an introduction to the advanced concepts in Java such as servlets, RMI, and JDBC
Preface to theLab
Appendix A: Lab Manual—Java First Edition XIxi
Exercises

ACKNOWLEDGEMENTS
Several people have been instrumental throughout this tiring yet wonderful journey. First of all,
we would like to express our sincere gratitude to our families without whose support, patience,
and cooperation, this would not have been possible and we would not have been what we are
today. We are very thankful to Dr R. K. Bharadwaj, Head of our institution, for his inspirational
thoughts which inculcated urgency for writing this book. We are also thankful to our colleagues
for their endless support and suggestions during the entire process of writing this book.
Sachin Malhotra
Saurabh Choudhary
Preface to the Second Edition

Java is an easy-to-learn, versatile, robust, portable, and secure language with rich user interfaces.
It has set up new benchmarks in the software development world ranging from desktop to web-
based enterprise applications to mobile and embedded applications. Since its inception in 1995,
it has come a long way by continuously evolving itself and in the process, changing the style of
programming the world over. Java is not only found in laptops or data centres, it is also widely
used in cell phones, SIM cards, smart cards, printers, routers and switches, set-top boxes, ATMs,
and navigation systems, to name a few. According to Oracle, a staggering 1.1 billion desktops
and 3 billion cell phones are based on Java.
This second edition of Programming in Java confirms to Java Standard Edition 7, the latest
release since Oracle took over Sun Microsystems. It is significant in the sense that the last update
was six years back and this major release comes bundled with plenty of enhancements which were
overdue. To list a few noticeable enhancements, Java 7 includes support for strings in switch and
try-with-resources statements, improved multi-catch, binary numeric literals, numeric literals
with underscores, new APIs in NIO such as path and files, automatic resource management, and
much more. All the new topics are appropriately explained with suitable examples.
New to the Second Edition
This revised edition has been updated thoroughly with greater topical coverage as well as more
programming examples in every chapter, in addition to the confirmation to Java 7. Practically
every chapter, with the exception of Chapter 11, has been revisited to refine the text as much as
possible. The most noticeable changes are as follows:
  New practical programming examples to show how Java is used in practice.

 Enhanced coverage of servlets and JDBC along with an introduction to JSP, Java beans,

Jar files and enterprise Java beans


 Enhanced coverage of swing components like JTree, JTable, layered pane, JDesktopPane,

internal frames, JColorChooser, JFileChooser, and JEditorPane


 New classes of java.nio package and project coin language enhancements

  Enhanced coverage of utility classes

 Appendix B contains more interview questions to help students prepare for their interviews.

 The second edition is supplemented with a rich online resource centre that contains chapter-

wise PPTs for teachers and additional practical programming examples for students.
Key Features
The most prominent feature of this book has been the line-by-line explanation section under
each program. They facilitate in-depth understanding of the whole program. We have retained
this feature in the second edition as it has been well appreciated by the users. Other noticeable
features include the following:
Preface to the Second Edition vii

  A recap of object-oriented programming concepts before introducing the concepts of Java


 Plenty of user-friendly programs and key notes at appropriate places to highlight important
concepts
 A variety of end-chapter exercises that includes subjective as well as objective questions
Extended Chapter Material
The second edition includes the following changes:
Chapter 1, Introduction to OOP: Enhanced coverage of UML and its application in pictorial
representation of OOP concepts.
Chapter 2, Getting Started with Java: New sections about the features of Java 7 and how
to install JDK 1.7.
Chapter 3, Java Programming Constructs: Numeric literals with underscores, binary
numeric literals, and how to use strings in switch statements.
Chapter 4, Classes and Objects: New topics such as inner classes, variable length arguments,
arrays as return values from methods, and objects as arguments to and return type from methods.
It contains a practical problem on complex numbers to demonstrate how OOP concepts can be
put to practise.
Chapter 5, Inheritance: New section that highlights the differences between shadowing and
overriding. At the end of the chapter, there is a practical programming example on circle and
cylinder class.
Chapter 6, Interfaces, Packages, and Enumeration: Practical problem on banking concepts
to demonstrate the usage of packages in creating applications.
Chapter 7, Exception, Assertions, and Logging: try-with-resources and catching multiple
exceptions features which are new enhancements of Java 7.
Chapter 8, Multithreading in Java: Concrete practical example to show the use of threads
in applications.
Chapter 9, Input/Output, Serialization, and Cloning: New classes included in java.nio
package and how to perform cloning of objects.
Chapter 10, Generics, java.util and other API: Utility classes like Random class, Runtime
class, Observer and Observable and reflection API.
Chapter 12, Applets: how to use threads and images in applets. The practical problem at the
end of the chapter explains how to display a digital clock.
Chapter 13, Event Handling in Java: Practical programming example that explains how to
create a cartoon on applet and performs its event handling. This is actually a series of examples
with gradual and step-by-step revision in all of them in order to enhance their functionality and
then eliminate their drawbacks.
Chapter 14, Abstract Window Toolkit: Mini project like programming example on CityMap
Applet. The applet shows the map of a city from top angle with five buttons, namely, Hospitals,
Shopping Malls, Police station, Post Office, and Stadium. If a user presses the Hospital button,
all the hospitals are shown on the map with a specific color and likewise for Malls, Police station,
Post office and Stadium.
Chapter 15, Swing: Explanation of new classes with examples and also includes a practical
programming example to create a mini text editor.
Chapter 16, Introduction to Advanced Java: Introductory sections on JSP, Java Beans, Jar
files and enterprise Java beans with lots of examples apart from enhanced coverage of servlets
and JDBC. This chapter also encompasses a login application built using servlets and database
to demonstrate how to create and use a web application.
viii Preface to the Second Edition

Content and Structure


This book comprises 16 chapters and two appendices. A brief outline of each chapter is as follows.
Chapter 1 focuses on the object-oriented concepts and principles. It provides real life mapping
of concepts and principles besides depicting them pictorially. In addition to this, the chapter also
provides an introduction to Unified Modeling Language (UML), which is a modeling language
to show classes, objects, and their relationship with other objects.
Chapter 2 introduces Java and its evolution from its inception to its current state. Besides
introducing the features of Java, it also tells you about the structure of JDK (Java Development
Kit) and the enhancements made to Java in its latest versions. It describes how to install and run
the JDK that is in turn required for executing a Java program.
Chapter 3 describes the basic programming constructs used in Java such as variables, data
types, identifiers, etc. Java reserved keywords are also depicted in this chapter. The operators
(arithmetic, relational, boolean, etc.) that act on variables are also explained in this chapter. For
each set of operators, we have provided sufficient examples along with their explanation and
output. Apart from variables and operators, this chapter focuses on statements like if and other
loops available in Java (for, while, do…while, and for...each).
Chapter 4 deals with classes and objects. A lot of practical problems and their solutions
have been discussed in this chapter. It begins with how to define classes, objects, and method
creation. Method overloading is also discussed. Later, it emphasizes on the differences between
instance variables/methods and class variables and methods. Finally, a discussion about arrays,
this keyword, and command-line arguments is also provided.
Chapter 5 focuses on inheritance and its uses. How it is realized in Java is discussed in this
chapter. Apart from this, polymorphism concepts are visualized through method overriding and
super keyword. How practical programming problems are solved through super keyword forms
a major part of this chapter. Towards the end of the chapter, some related concepts like abstract
classes are also discussed.
Chapter 6 covers interfaces, packages, and enumeration. It highlights the differences between
abstract classes and interfaces and their practical usages with examples. The role of packages in
Java and their creation and usage is also discussed. In-depth coverage of a predefined package
java.lang is included in this chapter along with some of the famous classes such as String,
StringBuffer, StringBuilder, and Wrapper classes.
Chapter 7 discusses exceptions in detail. Apart from explaining in detail the five keywords
(try, catch, throw, throws, and finally) used in handling exceptions, it also discusses how a user
can create his own exceptions and handle them. Concepts such as exception, encapsulation, and
enrichment are also explained in this chapter. Besides these, the new facilities provided by Java
like assertions and logging are also discussed.
Chapter 8 covers multithreading concepts, its states, priorities, etc. It also discusses in detail
the inter-thread communication and synchronization concepts. Methods like wait(), notify(), and
notifyAll() have also been discussed.
Chapter 9 emphasizes on the essentials of I/O concepts like how standard input can be taken
and how output is delivered to the standard output. A few main classes of the java.io package
are discussed with examples and their usages. Console class, used for taking user input, is also
discussed. What is the use of making objects persistent and how will it be done is discussed
towards the end of the chapter.
Chapter 10 discusses the java.util package in detail. The interfaces like Map, Set, and List
etc have been discussed in detail as well as their subclasses like LinkedList, ArrayList, Vector,
HashSet, HashMap, TreeMap, etc. Java 5 introduced a new feature named ‘Generics’ which
Preface to the Second Edition ix

forms the core of the java.util package. This concept along with its application has been covered
in detail.
Chapter 11 explains how network programming can be done in Java. In-depth coverage of
sockets is extended in this chapter. Client and server concept is illustrated by the programs
created. TCP and UDP clients and server and their interactions are demonstrated. The concept
of multithreading is merged with socket and illustrated to create server programs. Some main
classes such as URL, URL connection, and network interface (new feature) are also discussed.
Chapter 12 focuses on applets, its lifecycle, methods, etc. and how they are different from
applications. Besides providing an in-depth coverage of java.applet package, some of the
classes of java.awt package are also discussed as they are very useful in creating applets such
as Graphics class, Font class, Color class, and FontMetric class. All these classes are discussed
and supported by an example for each of them.
Chapter 13 talks about event handling in Java. Basically for creating effective GUI applications,
we need to handle events and this forms the basis of this chapter. The event handling model is
not only discussed but applied throughout the chapter. All the approaches to event handling have
been discussed such as Listener interfaces, Adapter classes, inner classes, and anonymous inner
classes.
Chapter 14 focuses on GUI creation through java.awt package. It has an in-depth coverage
of containers and components. Containers like Frame, Window, etc. and components like Label,
Button, TextField, Choice, Checkbox, List, etc. are discussed in detail. How the components can
be arranged in a container is also discussed, e.g. BorderLayout, GridBagLayout, and GridLayout.
Chapter 15 shows how to create more advanced and lightweight GUI applications in Java.
More advanced layouts like SpringLayout have been discussed. Lightweight components like
JButton, JLabel, JCheckBox, JToggleButton, JList, JScrollPane, JTabbedPane, etc. have been
discussed. How to create Dialogs is also discussed. The pluggable look and feel of Java is
explained in detail.
Chapter 16 focuses on advanced Java concepts such as servlets, JDBC, and RMI. An
introduction to the advanced technologies has been discussed. This chapter is equipped with
numerous figures showing how to install the necessary softwares required for executing an
advanced Java program. The chapter also provides a step-by-step and simplified approach on
how to learn advanced concepts.
Appendix A on practical lab problems will facilitate better understanding of the concepts
explained in the book. Appendix B includes a list of interview questions along with their answers
that provides an overview of the industry scenario and their requirements.

ACKNOWLEDGEMENTS
Several people have been instrumental throughout this tiring yet wonderful journey. First of all, we
would like to express our sincere gratitude to our families without whose support, patience, and
cooperation, this would not have been possible and we would not have been what we are today.
We are also thankful to our colleagues and friends for their endless support and suggestions
during the entire process of writing this book. Lastly, we would also like to thank all our readers
/students who have supported us, encouraged us, and provided feedback to us regularly which
has helped us in shaping this edition.
Sachin Malhotra
Saurabh Choudhary
Brief Contents
Preface to the Second Edition vi
Preface to the First Edition x
Detailed Contents xiii
1. Introduction to OOP 1
2. Getting Started With Java 12
3. Java Programming Constructs 42
4. Classes and Objects 74
5. Inheritance 132
6. Interfaces, Packages, and Enumeration 156
7. Exception, Assertions, and Logging 199
8. Multithreading in Java 224
9. Input/Output, Serialization and Cloning 256
10. Generics, java.util and other API 296
11. Network Programming 336
12. Applets 354
13. Event Handling in Java 394
14. Abstract Window Toolkit 429
15. Swing 495
16. Introduction to Advanced Java 553
Appendix A: Lab Manual 628
Appendix B: Interview Questions 650
Index 657
Detailed Contents
Preface to the Second Edition vi
Preface to the First Edition x

1. Introduction to OOP 1 2.6.6 Java is Multithreaded 20


2.6.7 Other Features 20
1.1 Introduction 1
2.7 Program Structure 21
1.2 Need of Object-Oriented
Programming 2 2.7.1 How to Execute a Java
Program 21
1.2.1 Procedural Languages 2
2.7.2 Why Save as Example.Java? 22
1.2.2 Object-Oriented Modeling 2
2.7.3 Explanation 22
1.3 Principles of Object-Oriented
2.8 Java Improvements 23
Languages 3
2.8.1 Java 5.0 Features 23
1.3.1 Classes 3
2.8.3 Java 6 Features 25
1.3.2 Objects 3
2.8.4 Java 7 Features 26
1.3.3 Abstraction 3
2.8.4 Brief Comparison of Different
1.3.4 Inheritance 4
Releases 27
1.3.5 Encapsulation 4
2.9 Differences between Java and C++ 28
1.3.6 Polymorphism 5
2.10 Installation of JDK 1.7 29
1.4 Procedural Language vs OOP 5
2.10.1 Getting Started With the JDK 29
1.5 OOAD Using UML 6
2.10.2 JDK Installation Notes 29
1.6 Applications of OOP 9
2.10.3 Exploring the JDK 37
2. Getting Started With Java 12 2.11 Integrated Development
Environment 39
2.1 Introduction 12
2.2 History of Java 13 3. Java Programming Constructs 42
2.3 Java’s Journey: From Embedded Systems
3.1 Variables 42
To Middle-Tier Applications 13
3.2 Primitive Data Types 42
2.4 Java Essentials 14
3.3 Identifier 44
2.5 Java Virtual Machine 15 3.3.1 Rules for Naming 44
2.6 Java Features 16 3.3.2 Naming Convention 44
2.6.1 Platform Independence 16 3.3.3 Keywords 45
2.6.2 Object Oriented 16 3.4 Literals 45
2.6.3 Both Compiled and Interpreted 17 3.5 Operators 48
2.6.4 Java is Robust 18 3.5.1 Binary Operators 48
2.6.5 Java Language Security 3.5.2 Unary Operators 54
Features 18 3.5.3 Ternary Operator 54
xiv Detailed Contents

3.6 Expressions 55 4.9 this Keyword 103


3.7 Precedence Rules and 4.10 Arrays 105
Associativity 55 4.10.1 One-Dimensional Arrays 105
3.8 Primitive Type Conversion 4.10.2 Two-Dimensional Arrays 110
and Casting 57 4.10.3 Using for-each With Arrays 115
3.9 Flow of Control 61 4.10.4 Passing Arrays to Methods 115
3.9.1 Conditional Statements 62 4.10.5 Returning Arrays from
3.9.2 Loops 65 Methods 116
3.9.3 Branching Mechanism 68 4.10.6 Variable Arguments 117
4.11 Command-line Arguments 118
4. Classes and Objects 74 4.12 Nested Classes 119
4.1 Classes 74 4.12.1 Inner Class 119
4.2 Objects 75 4.12.2 Static Nested Class 122
4.2.1 Difference between Objects 4.12.3 Why Do We Create Nested
and Classes 76 Classes? 124
4.2.2 Why Should We Use 4.13 Practical Problem: Complex
Objects and Classes? 76 Number Program 124
4.3 Class Declaration in Java 77
4.3.1 Class Body 78 5. Inheritance 132
4.4 Creating Objects 79 5.1 Inheritance vs Aggregation 132
4.4.1 Declaring an Object 79 5.1.1 Types of Inheritance 133
4.4.2 Instantiating an Object 79 5.1.2 Deriving Classes Using
4.4.3 Initializing an Object 80 Extends Keyword 135
4.5 Methods 82 5.2 Overriding Method 137
4.5.1 Why Use Methods? 82 5.3 super Keyword 141
4.5.2 Method Types 82 5.4 final Keyword 146
4.5.3 Method Declaration 83 5.5 Abstract Class 147
4.5.3 Instance Method Invocation 86 5.6 Shadowing vs Overriding 149
4.5.4 Method Overloading 87 5.7 Practical Problem: Circle
4.6 Constructors 90 and Cylinder Class 151
4.6.1 Parameterized Constructors 93
6. Interfaces, Packages, and
4.6.2 Constructor Overloading 94
Enumeration 156
4.7 Cleaning Up Unused Objects 96
4.7.1 The Garbage Collector 96 6.1 Interfaces 156
4.7.2 Finalization 97 6.1.1 Variables in Interface 158
4.7.3 Advantages and Disadvantages 97 6.1.2 Extending Interfaces 160
4.8 Class Variable and 6.1.3 Interface vs Abstract Classes 160
Methods—Static Keyword 97 6.2 Packages 161
4.8.1 Static Variables 98 6.2.1 Creating Packages 162
4.8.2 Static Methods 99 6.2.2 Using Packages 164
4.8.3 Static Initialization Block 101 6.2.3 Access Protection 168
Detailed Contents xv

6.3 java.lang Package 169 8.4 Main Thread 227


6.3.1 java.lang.Object Class 169 8.5 Creation of New Threads 228
6.3.2 Java Wrapper Classes 170 8.5.1 By Inheriting the Thread
6.3.3 String Class 174 Class 228
6.3.4 StringBuffer Class 179 8.5.2 Implementing the Runnable
6.3.5 StringBuilder Class 180 Interface 231
6.3.6 Splitting Strings 181 8.6 Thread.State in Java 234
6.4 Enum Type 183 8.6.1 Thread States 235
6.4.1 Using Conditional Statements with 8.7 Thread Priority 240
an Enumerated Variable 185 8.8 Multithreading—Using isAlive()
6.4.2 Using for Loop for Accessing and join() 243
Values 185 8.9 Synchronization 245
6.4.3 Attributes and Methods Within 8.9.1 Synchronized Methods 246
Enumeration 186 8.9.2 Synchronized Statements 246
6.5 Practical Problem: Banking 8.10 Suspending and Resuming Threads 246
Example 187 8.11 Communication between
Threads 248
7. Exception, Assertions, 8.12 Practical Problem: Time
and Logging 199 Clock Example 251
7.1 Introduction 199
7.1.1 Exception Types 201 9. Input/Output, Serialization
and Cloning 256
7.2 Exception Handling Techniques 202
7.2.1 try…catch 203 9.1 Introduction 256
7.2.2 throw Keyword 206 9.1.1 java.io.InputStream and
7.2.3 throws 207 java io.OutputStream 257
7.2.4 finally Block 209 9.2 java.io.File Class 258
7.2.5 try-with-resources 9.3 Reading and Writing Data 261
Statement 210 9.3.1 Reading/Writing Files Using Byte
7.2.6 Multi Catch 212 Stream 261
7.2.7 Improved Exception Handling 9.3.2 Reading/Writing Console
in Java 7 213 (User Input) 264
7.3 User-Defined Exception 215 9.3.3 Reading/Writing Files Using
7.4 Exception Encapsulation Character Stream 269
and Enrichment 216 9.3.4 Reading/Writing Using Buffered
7.5 Assertions 217 Byte Stream Classes 270
7.6 Logging 219 9.3.5 Reading/Writing Using Buffered
Character Stream Classes 272
8. Multithreading in Java 224
9.4 Randomly Accessing a File 273
8.1 Introduction 224 9.5 Reading and Writing Files
8.2 Multithreading in Java 225 Using New I/O Package 276
8.3 java.lang.Thread 225 9.6 Java 7 Nio Enhancements 278
xvi Detailed Contents

9.7 Serialization 283 12. Applets 354


9.8 Cloning 285 12.1 Introduction 354
12.2 Applet Class 355
10. Generics, java.util and other API 296
12.3 Applet Structure 356
10.1 Introduction 296 12.4 Example Applet Program 357
10.2 Generics 301 12.4.1 How to Run an Applet? 358
10.2.1 Using Generics in Arguments and 12.5 Applet Life Cycle 359
Return Types 304 12.6 Common Methods Used in
10.2.2 Wildcards 304 Displaying the Output 361
10.2.3 Bounded Wildcards 306 12.7 paint(), update(), and repaint() 364
10.2.4 Defining Your Own 12.7.1 paint() Method 364
Generic Classes 307 12.7.2 update() Method 365
10.3 Linked List 309 12.7.3 repaint() Method 366
10.4 Set 311 12.8 More About Applet Tag 366
10.4.1 Hashset Class 312 12.9 getDocumentbase() and
10.4.2 Treeset Class 314 getCodebase() Methods 369
10.5 Maps 315 12.10 Appletcontext Interface 370
10.5.1 Hashmap Class 315 12.10.1 Communication between Two
Applets 371
10.5.2 Treemap Class 317
12.11 How To Use An Audio Clip? 372
10.6 Collections Class 318
12.12 Images in Applet 373
10.7 Legacy Classes and Interfaces 319
12.12.1 Mediatracker Class 375
10.7.1 Difference between Vector
12.13 Graphics Class 377
and Arraylist 319
12.13.1 An Example Applet Using
10.7.2 Difference between Enumerations
Graphics 379
and Iterator 320
12.14 Color 380
10.8 Utility Classes: Random Class 320
12.15 Font 382
10.8.1 Observer and Observable 322
12.16 Fontmetrics 386
10.9 Runtime Class 326
12.17 Practical Problem: Digital Clock 390
10.10 Reflection API 328
13. Event Handling in Java 394
11. Network Programming 336
13.1 Introduction 394
11.1 Introduction 336 13.2 Event Delegation Model 395
11.1.1 TCP/IP Protocol Suite 336 13.3 java.awt.Event Description 395
11.2 Sockets 337 13.3.1 Event Classes 395
11.2.1 TCP Client and Server 338 13.4 Sources of Events 404
11.2.2 UDP Client and Server 342 13.5 Event Listeners 404
11.3 URL Class 344 13.6 How Does The Model Work? 406
11.4 Multithreaded Sockets 346 13.7 Adapter Classes 410
11.5 Network Interface 349 13.7.1 How To Use Adapter Classes 410
Detailed Contents xvii

13.7.2 Adapter Classes in Java 412 15. Swing 495


13.8 Inner Classes in Event Handling 413
15.1 Introduction 495
13.9 Practical Problem: Cartoon
15.1.1 Features of Swing 496
Applet 416
15.1.2 Differences between
13.9.1 Smiling Cartoon With Blinking Swing and AWT 496
Eyes (Part 1) 416
15.2 JFrame 497
13.9.2 Smiling Cartoon With Blinking
15.3 JApplet 500
Eyes (Part 2) 420
15.4 JPanel 501
13.9.3 Smiling Cartoon (Part 3) 423
15.5 Components in Swings 502
14. Abstract Window Toolkit 429 15.6 Layout Managers 506
15.6.1 Springlayout 506
14.1 Introduction 429 15.6.2 Boxlayout 509
14.1.1 Why Awt? 429 15.7 JList and JScrollPane 510
14.1.2 java.awt Package 430 15.8 Split Pane 513
14.2 Components and Containers 432 15.9 JTabbedPane 514
14.2.1 Component 432 15.10 JTree 516
14.2.2 Components as Event 15.11 JTable 521
Generator 433 15.12 Dialog Box 525
14.3 Button 434 15.13 JFileChooser 529
14.4 Label 437 15.14 JColorChooser 530
14.5 Checkbox 438 15.15 Pluggable Look and Feel 531
14.6 Radio Buttons 441 15.16 Inner Frames 539
14.7 List Boxes 444 15.17 Practical Problem: Mini Editor 545
14.8 Choice Boxes 448
16. Introduction to Advanced Java 553
14.9 Textfield and Textarea 451
14.10 Container Class 455 16.1 Introduction to J2ee 553
14.10.1 Panels 455 16.2 Database Handling Using JDBC 553
14.10.2 Window 456 16.2.1 Load the Driver 554
16.2.2 Establish Connection 556
14.10.3 Frame 456
16.2.3 Create Statement 556
14.11 Layouts 458
16.2.4 Execute Query 557
14.11.1 FlowLayout 459
16.2.5 Iterate Resultset 557
14.11.2 BorderLayout 462
16.2.6 Scrollable Resultset 559
14.11.3 CardLayout 465
16.2.7 Transactions 560
14.11.4 GridLayout 469 16.3 Servlets 562
14.11.5 GridbagLayout 471 16.3.1 Lifecycle of Servlets 562
14.12 Menu 478 16.3.2 First Servlet 563
14.13 Scrollbar 483 16.3.3 Reading Client Data 567
14.14 Practical Problem: City 16.3.4 Http Redirects 571
Map Applet 487 16.3.5 Cookies 572
xviii Detailed Contents

16.3.6 Session Management 574 16.7.1 Creating a Jar File 605


16.4 Practical Problem: Login Application 577 16.7.2 Viewing the Contents of
16.5 Introduction to Java a Jar File 606
Server Pages 589 16.7.3 Extracting the Contents
16.5.1 JSP Life Cycle 589 of Jar 607
16.5.2 Steps in JSP Page Execution 590 16.7.4 Manifest Files 607
16.5.3 JSP Elements 590 16.8 Remote Method Invocation 609
16.5.4 Placing Your JSP in the 16.8.1 RMI Networking Model 609
Webserver 593
16.8.2 Creating an Rmi Application 610
16.6 Java Beans 597
16.9 Introduction to EJB 613
16.6.1 Properties of a Bean 597
16.9.1 Types of EJB 614
16.6.2 Using Beans Through JSP 601
16.6.3 Calculatebean Example 602 16.9.2 EJB Architecture 615
16.7 Jar Files 605 16.10 Hello World—EJB Example 616

Appendix A: Lab Manual 628


Appendix B: Interview Questions 650
Index 657
Introduction to
OOP 1
Beauty is our weapon against nature; by it we make objects, giving them limit,
symmetry, proportion. Beauty halts and freezes the melting flux of nature.
Camille Paglia

After reading this chapter, the readers will be able to


 know what is object-oriented programming

 understand the principles of OOP

 understand how is OOP different from procedural languages

 comprehend the problems in procedural programming and how OOP overcomes them

 learn the applications of OOP

 use UML notations

1.1 INTRODUCTION
Object-oriented programming (OOP) is one of the most interesting and useful innovations in
software development. OOP has strong historical roots in programming paradigms and practices.
It addresses the problems commonly known as the software crisis. Software have become
inherently complex which has led to many problems within the development of large software
projects. Many software have failed in the past. The term ‘software crisis’ describes software
failure in terms of
 Exceeding software budget
 Software not meeting clients’ requirements
 Bugs in the software
OOP is a programming paradigm which deals with the concepts of object to build programs
and software applications. It is modeled around the real world. The world we live in is full of
objects. Every object has a well-defined identity, attributes, and behavior. Objects exhibit the
same behavior in programming. The features of object-oriented programming also map closely
to the real-world features like inheritance, abstraction, encapsulation, and polymorphism. We
will discuss them later in the chapter.
2 Programming in Java

1.2 NEED OF OBJECT-ORIENTED PROGRAMMING


There were certain limitations in earlier programming approaches and to overcome these
limitations, a new programming approach was required. We first need to know what these
limitations were.
1.2.1 Procedural Languages
In procedural languages, such as C, FORTRAN, and PASCAL, a program is a list of instructions.
The programmer creates a list of instructions to write a very small program. As the length of a
program increases, its complexity increases making it difficult to maintain a very large program.
In the structured programming, this problem can be overcome by dividing a large program into
different functions or modules, but this gives birth to other problems. Large programs can still
become increasingly complex. There are two main problems in procedural language—(i) the
functions have unrestricted access to global data and (ii) they provide poor mapping to the real
world.
Here are some other problems in the procedural languages. Computer languages generally
have built-in data types: integers, character, float, and so on. It is very difficult to create a new
data type or a user-defined data type. For example, if we want to work with dates or complex
numbers, then it becomes very difficult to work with built-in types. Creating our own data types is
a feature called extensibility: we can extend the capabilities of a language. Procedural languages
are not extensible. In the traditional languages, it is hard to write and maintain complex results.
1.2.2 Object-Oriented Modeling
In the physical world, we deal with objects like person, plane, or car. Such objects are not like
data and functions. In the complex real-world situations, we have objects which have some
attributes and behavior. We deal with similar objects in OOP. Objects are defined by their unique
identity, state, and behavior. The state of an object is identified by the value of its attributes and
behavior by methods.
Attributes
Attributes define the data for an object. Every object has some attributes. Different types of
objects contain different attributes or characteristics. For example, the attributes of a student
object are name, roll number, and subject; and the attributes for a car object would be color,
engine power, number of seats, etc. These attributes will have specific values, such as Peter (for
name) or 23 (for roll number).
Behavior
The response of an object when subjected to stimulation is called its behavior. Behavior defines
what can be done with the objects and may manipulate the attributes of an object. For example,
if a manager orders an employee to do some task, then he responds either by doing it or not
doing it. The wings of a fan start moving only when the fan is switched ON. Behavior actually
determines the way an object interacts with other objects. We can say that behavior is synonym
to functions or methods: we call a function to perform some task. For example, an Employee
class will have functions such as adding an employee, updating an employee details, etc.
Introduction to OOP 3

Note If we try to represent the CPU of a computer in OOP terminology, then CPU is the object.
The CPU is responsible for fetching the instructions and executing them. So fetching and
executing are two possible functions (methods or behavior) of CPU. The place (attributes)
where CPU stores the retrieved instructions, values and result of the execution (registers) will
then be the attributes of the CPU.

1.3 PRINCIPLES OF OBJECT-ORIENTED LANGUAGES


OOP languages follow certain principles such as class, object, and abstraction. These principles
map very closely to the real world.
1.3.1 Classes
A class is defined as the blueprint for an object. It serves as a plan or a template. The description
of a number of similar objects is also called a class. An object is not created by just defining a
class. It has to be created explicitly. Classes are logical in nature. For example, furniture does
not have any existence but tables and chairs do exist. A class is also defined as a new data type,
a user-defined type which contains two things: data members and methods.
1.3.2 Objects
Objects are defined as the instances of a class, e.g. table, chair are all instances of the class
Furniture. Objects of a class will have same attributes and behavior which are defined in that
class. The only difference between objects would be the value of attributes, which may vary.
Objects (in real life as well as programming) can be physical, conceptual, or software. Objects
have unique identity, state, and behavior. There may be several types of objects:
 Creator objects: Humans, Employees, Students, Animal

 Physical objects: Car, Bus, Plane

 Objects in computer system: Monitor, Keyboard, Mouse, CPU, Memory

1.3.3 Abstraction
Can you classify the following items?
 Elephant  CD player

 Television  Chair

 Table  Tiger

How many classes do you identify here? The obvious answer anybody would give is three, i.e.,
Animal, Furniture, and Electronic items. But how do you come to this conclusion? Well, we
grouped similar items like Elephant and Tiger and focused on the generic characteristics rather
than specific characteristics. This is called abstraction. Everything in this world can be classified
as living or non-living and that would be the highest level of abstraction.
Another well-known analogy for abstraction is a car. We drive cars without knowing the
internal details about how the engine works and how the car stops on applying brakes. We are
happy with the abstraction provided to us, e.g., brakes, steering, etc. and we interact with them.
In real life, human beings manage complexity by abstracting details away. In programming,
we manage complexity by concentrating only on the essential characteristics and suppressing
implementation details.
4 Programming in Java

1.3.4 Inheritance
Inheritance is the way to adopt the characteristics of one class into another class. Here we have
two types of classes: base class and subclass. There exists a parent–child relationship among
the classes. When a class inherits another class, it has all the properties of the base class and it
adds some new properties of its own. We can categorize vehicles into car, bus, scooter, ships,
planes, etc. The class of animals can be divided into mammals, amphibians, birds, and so on.
The principle of dividing a class into subclass is that each subclass shares common
characteristics with the class from where they are inherited or derived. Cars, scooters, planes,
and ships all have an engine and a speedometer. These are the characteristics of vehicles. Each
subclass has its own characteristic feature, e.g., motorcycles have disk braking system, while
planes have hydraulic braking system. A car can run only on the surface, while a plane can fly
in air and a ship sails over water (see Fig. 1.1).

Vehicle

Road vehicle Air vehicle Water vehicle

Bus Motor bike Aeroplane Boat

Fig. 1.1 Inheritance

Inheritance aids in reusability. When we create a class, it can be distributed to other


programmers which they can use in their programs. This is called reusability. Suppose someone
wants to make a program for a calculator, he can use a predefined class for arithmetic operations,
and then he need not define all the methods for these operations. This is similar to using library
functions in procedural language. In OOP, this can be done using the inheritance feature. A
programmer can use a base class with or without modifying it. He can derive a child class from
a parent class and then add some additional features to his class.
1.3.5 Encapsulation
Encapsulation is one of the features of object-oriented methodology. The process of binding
the data procedures into objects to hide them from
the outside world is called encapsulation (see Fig.
1.2). It provides us the power to restrict anyone from
directly altering the data. Encapsulation is also known Method
as data hiding. An access to the data has to be through
the methods of the class. The data is hidden from the Method Data
outside world and as a result, it is protected. The details Accessing
that are not useful for other objects should be hidden data Method
from them. This is called encapsulation. For example,
an object that does the calculation must provide an
interface to obtain the result. However, the internal
coding used to calculate need not be made available Fig. 1.2 Diagrammatic Illustration of a
to the requesting object. Class to Show Encapsulation
Introduction to OOP 5

1.3.6 Polymorphism
Polymorphism simply means many forms. It can be defined as the same thing being used in
different forms. For example, there are certain bacteria that exhibit in more than one morphological
form. In programming, polymorphism is of two types: compile-time and runtime polymorphism.
Runtime polymorphism, also known as dynamic binding or late binding, is used to determine
which method to invoke at runtime. The binding of method call to its method is done at runtime
and hence the term late binding is used. In case of compile-time polymorphism, the compiler
determines which method (from all the overloaded methods) will be executed. The binding of
method call to the method is done at compile time. So the decision is made early and hence
the term early binding. Compile-time polymorphism in Java is implemented by overloading
and runtime polymorphism by overriding. In overloading, a method has the same name with
different signatures. (A signature is the list of formal argument that is passed to the method.)
In overriding, a method is defined in subclass with the same name and same signature as that
of parent class. This distinction between compile-time and runtime polymorphism is of method
invocation. Compile-time polymorphism is also implemented by operator overloading which
is a feature present in C++ but not in Java. Operator overloading allows the user to define new
meanings for that operator so that it can be used in different ways. The operator (+) in Java is
however an exception as it can be used for addition of two integers as well as concatenation of
two strings or an integer with a string. This operator is overloaded by the language itself and
the Java programmer cannot overload any operator.

1.4 PROCEDURAL LANGUAGE VS OOP


Table 1.1 highlights some of the major differences between procedural and object-oriented
programming languages.
Table 1.1 Procedural Language vs OOP
Procedural Language OOP
 Separate data from functions that operate on them.  Encapsulate data and methods in a class.
 Not suitable for defining abstract types.  Suitable for defining abstract types.
 Debugging is difficult.  Debugging is easier.
 Difficult to implement change.  Easier to manage and implement change.
 Not suitable for larger programs and applications.  Suitable for larger programs and applications.
 Analysis and design not so easy.  Analysis and design made easier.
 Faster.  Slower.
 Less flexible.  Highly flexible.
 Data and procedure based.  Object oriented.
 Less reusable.  More reusable.
 Only data and procedures are there.  Inheritance, encapsulation, and polymorphism are the
key features.
 Use top-down approach.  Use bottom-up approach.
 Only a function call another.  Object communication is there.
 Example: C, Basic, FORTRAN.  Example: JAVA, C++, VB.NET, C#.NET.
6 Programming in Java

1.5 OOAD USING UML


An object-oriented system comprises of objects. The behavior of a system results from its objects
and their interactions. Interaction between objects involves sending messages to each other.
Every object is capable of receiving messages, processing them, and sending to other objects.
Object-oriented Analysis and Design (OOAD)
It is an approach that models software as a group of interacting objects. A model is a description
of the system that we intend to build. Each object is characterized by its class having its own state
(attributes) and behavior. Object-oriented analysis (OOA) analyzes the functional requirements
of a system and focuses on what the system should do. Object-oriented design (OOD) focuses on
how the system does it. The most popular modeling language for OOAD is the unified modeling
language (UML).
UML is a standard language for OOAD. It contains graphical notations for all entities (class,
object, etc.) used in the object-oriented languages along with the relationship that exists among
them. These notations are used to create models. UML helps in visualizing the system, thereby
reducing complexity and improving software quality. The notations used for class and object are
shown in Fig. 1.3. For example, consider an Employee class with attributes name, designation,
salary, etc. and operations such as addEmployee, deleteEmployee, and searchEmployee.
The notation for employee class and its object is as follows:

Employee Class
name
address
designation Attributes
salary

addEmployee
deleteEmployee Behavior
searchEmployee

Fig. 1.3 UML Notation for Class


The notation for an object is very much similar to the class notation. The class name underlined
and followed by a colon represents an object (Fig. 1.4).

:Employee Object
name=peter
address=NY
designation=manager Attributes
salary=10000

addEmployee
deleteEmployee
searchEmployee

Fig. 1.4 UML Notation for Object


Introduction to OOP 7

An instance of a class can be related to any number of instances of other class known as
multiplicity of the relation. One-to-one, one-to-many, and many-to-many are different types
of multiplicities that exist among objects. The multiplicities along with their examples and
respective notations are shown below. Figure 1.5(a) illustrates the generic notation for representing
multiplicity in object-oriented analysis and design. One-to-one mapping is shown as a straight
line between the two classes. Figure 1.5(b) shows the UML notation for demonstrating the one-
to-one mapping. The 1..1 multiplicity depicted on the straight line (both ends) indicates a single
instance of a class is associated with single instance of other class. Figure 1.5 shows that each
country has a president and a president is associated with a country.

Country has Country 1.1 has 1.1


President President

(a) (b)

Fig. 1.5 One-to-one Relationship

A country has many states and many states belong to a country. So there exists a one-to-many
relationship between the two. This relationship is shown in Fig. 1.6. Part (a) of this figure shows
the generic notation where a solid dot is indicated on the many side and both classes are joined
by a straight line. Figure 1.6(b) shows the UML notation where 1..* indicates the one to many
relationship between country and states. On the country end, a 1..1 multiplicity is placed to
indicate one country and on states end, a 1..* is placed to indicate many states.

has 1..1 has 1..*


Country States Country States

(a) (b)

Fig. 1.6 One-to-many Relationship

Let us take another example to explain many-to-many relationship. A teacher teaches many
students and a student can be taught by many teachers. There exists a many-to-many relationship
between them. Many-to-many relationship (Generic notation in OOAD) are represented by
placing solid dots on both ends joined by a straight line as shown in Fig. 1.7(a). The respective
notation in UML is shown in Fig. 1.7(b) where 1..* on both ends is used to signify many-to-
many relationship.

teaches 1..* teaches 1..*


Teacher Student Teacher Student

(a) (b)

Fig. 1.7 Many-to-many Relationship


8 Programming in Java

Besides multiplicity of relations, the relationships can be of various types: inheritance,


aggregation, composition. These relationships can be denoted in UML with links and associations.
The links represent the connection between the objects and associations represent groups of links
between classes. If a class inherits another class, then there exists a parent-child relationship
between them. This relationship is depicted in UML as shown in Fig. 1.8. For example, Shape
is the superclass, and the subclasses of Shape can take any shape, e.g., Square, Triangle, etc.

Shape

Triangle Square

Fig. 1.8 UML Diagram Depicting Inheritance


The above diagram can be extended to depict the OOP principle of polymorphism. Every shape
will have a method named area() which would calculate the area of that shape. The implementation
of area() method would be different for different shapes. For example, the formula for calculating
area of a triangle is different from a square. So the implementation is different but the name of
the method is same. This is polymorphism (one name many implementations). In Fig 1.9 below,
the area() method is overridden by Triangle and Square classes.

Shape

area( )

Triangle Square Rectangle

area( ) area( ) area( )

Fig. 1.9 UML Diagram Depicting Polymorphism

Another kind of relationship that exists among objects is the part-of-relationship. When a
particular object is a part of another object then we say that it is aggregation. For example, car is
Introduction to OOP 9

an aggregation of many objects: engine, door, etc. and engine in turn is an aggregation of many
objects, e.g., cylinder, piston, valves, etc. as shown in Fig. 1.10(a). A special kind of aggregation
is composition where one object owns other objects. If the owner object does not exist, the
owned objects also ceases to exist. For example, the human body is a very good example of
composition. It is a composition of different organs. The hands, feet, and internal organs such
as the lung and intestine are also parts of the body owned by the body.

Car

Human body
Engine Door

Cylinder Radiator Liver Lungs

(a) (b)

Fig. 1.10 (a) Aggregation and (b) Composition

1.6 APPLICATIONS OF OOP


The basic thought behind object-oriented language is to make an object by combining data and
functions as a single unit and then operate on that data. In procedural approach, the focus is on
business process and the data needed to support the process. For example, in the last decade, a
problem bothered every programmer, popularly known as the Y2K problem. Everybody related
to the computer industry was afraid of what will happen past midnight 31 December 1999. The
problem arises due to the writing convention of the year attribute. In early programming days,
a programmer wrote a year in two digits, so there was a problem to distinguish the year 1900
from 2000 because if we write only the last two digits of a year, the computer cannot differentiate
between the two. Nobody perceived this problem and used the date and year code as and when
required, thus aggravating the problem. The solution to this problem was to analyze multiple
lines of codes everywhere and change the year to four digits rather than two. It seems simple to
change the state variable of year but analyzing a code of several thousands of lines to find how
many times you have used date in your code is not an easy task.
If object-oriented programming language had been used, we could have created a Date class
with day, month, and year attributes in it. Wherever the date functionality would be required,
10 Programming in Java

a Date object would be created and used. At a later point of time, if a change is required, for
example, the year of Date class needs to be changed to four digits, then this change would be
incorporated in the class only and this change would automatically be reflected in all the objects
of the Date class whenever they are created and used. So, the change would have to be done at
one place only, i.e., the class and wherever the objects of the class are being used, the changes
would be reflected automatically. There is no need to analyze the whole code and change it.
In OOP, we access data with the help of objects, so it is very easy to overcome a problem
without modifying the whole system. Likewise, OOP is used in various fields, such as
 Real-time systems  Neural networks

 Artificial intelligence  Database management

 Expert systems

SUMMARY
Object-oriented languages have become an ubiquitous large projects, a technique known as OOAD is used.
standard for programming. They have been derived Object-oriented analysis and design deals with how a
from the real world. OOP revolves around objects and system is modeled. OOA deals with what the system
classes. A class is defined as a group of objects with should do and OOD deals with how the system
similar attributes and behavior. OOP is a programming achieves what has been specified by OOA.
paradigm which deals with the concepts of objects to OOAD is realized with the help of a language known
develop software applications. Certain principles have as UML. UML stands for unified modeling language;
been laid down by OOP which are followed by every it is a standard language used for visualizing the
OOP language. These principles are: inheritance, software. An abstract model is created for the entire
abstraction, encapsulation, and polymorphism. software using graphical notations provided by UML.
We have presented a detailed comparison of
procedural and object-oriented languages. For building

EXERCISES
Objective Questions
1. In an object model, which one of the following is (c) Polymorphism (d) None of the above
true? 4. Which one of the following terms must relate to
(a) Abstraction, encapsulation, and multitasking polymorphism?
are the major principles (a) Static allocation (b) Static typing
(b) Hierarchy, concurrency, and typing are the
(c) Dynamic binding (d) Dynamic allocation
major principles
5. Providing access to an object only through its
(c) Abstraction, encapsulation, and polymor-
phism are the major principles member functions, while keeping the details
(d) Typing is the major principle private is called
(a) Information hiding (b) Encapsulation
2. Which one of the following is not an object-
(c) Modularity (d) Inheritance
oriented language?
(a) Simula (b) Java 6. The concept of derived classes is involved in
(c) C++ (d) C (a) Inheritance
3. The ability to hide many different implementations (b) Encapsulation
behind an interface is. (c) Data hiding
(a) Abstraction (b) Inheritance (d) Abstract data types
Introduction to OOP 11

7. Inheritance is a way to (d) All the above


(a) Organize data 9. Which of the following is true about class?
(b) Pass arguments to objects of classes (a) Class possesses data and methods
(c) Add features to existing classes without (b) Classes are physical in nature
rewriting them (c) Collection of similar type of objects is a class
(d) Improve data-hiding and encapsulation (d) Both (a) and (c)
8. UML is used for 10. Which of the following is true about procedural
(a) Creating models languages?
(b) Representing classes, objects and their (a) Debugging is easier
(b) analysis and design is easy
relationships pictorially
(c) less reusable
(c) Reducing complexity and improving software
(d) difficult to implement changes
quality

Review Questions
1. Explain the importance of object-oriented pro- 4. Write short notes on: (a) inheritance, (b) poly-
gramming languages. morphism, (c) abstraction, (d) encapsulation.
2. Explain the difference between class and object. 5. Differentiate between runtime and compite-time
3. Differentiate between procedural languages and polymorphism.
OOP languages.

Programming Exercises
1. Identify the relevant classes along with their A hospital wants to keep track of scheduled
attributes for the following: A departmental store appointments of a patient with his doctor. When
needs to maintain an inventory of cosmetic items a patient is given an appointment, he should be
which might be found there. You should include given a confirmation that states the time and date
female as well as male cosmetic items. Keep of appointment along with the doctor’s name.
information on all items such as item name, Meanwhile the doctor should also be informed
category, manufacturer, cost, date purchased, about the patient details. Each doctor has one
and serial number. weekday as off-day and no patients should be
2. Identify the relevant classes along with their assigned to a doctor on that day.
attributes from the following problem specification:

Answers to Objective Questions


1. (c) 2. (d) 3. (c) 4. (c)
5. (b) 6. (a) 7. (c) 8. (d)
9. (d) 10. (c) and (d)
Getting Started
with Java 2
The road of life can only reveal itself as it is traveled; each turn in the road reveals a
surprise. Man’s future is hidden. Anon

After reading this chapter, the readers will be able to


 know the history of Java

 understand the features of Java and its runtime environment

 know the basic structure of a Java program

 know the details about JDK installation

 understand various constituents of JDK and its development environments

2.1 INTRODUCTION
Java is a popular and powerful language. Although it is a very simple language, there are a
number of subtleties that can trip up less-experienced programmers. Java is an object-oriented
programming language with a built-in application programming interface (API) that can handle
graphical user interfaces (GUI) used to create applications or applets. Java provides a rich set
of APIs apart from being platform-independent.
Much of the syntax in Java is similar to C and C++. One of the major differences between
Java and other languages is that it does not have pointers. However, the biggest difference is that
you are forced to write object-oriented code in Java. Procedural code is embedded in objects.
In Java, we distinguish between applications and applets, applications being programs that
perform functions similar to those written in other programming languages and applets are
programs that are meant to be embedded in a web page and downloaded over the Internet.
When a program is compiled, a byte code is generated which can be executed on any platform,
provided the runtime environment exists on the destination platform.
This chapter guides the readers to a step-by-step introduction to Java programming. An
important thrust of this chapter is to cover the features of Java from an object-oriented perspective.
It also gives an insight about the installation of Java runtime environment and the various
integrated development environments (IDEs) of Java.
This chapter also focusses on the different versions of Java (including the latest Java 7) and
the Core API’s (Java 7 is also known as Java 1.7).
Getting Started with Java 13

2.2 HISTORY OF JAVA


It is often believed that the Java was developed specifically for the World Wide Web. Java as it
was initially developed was intended for the Web. However, it was improved to be a standard
programming language for the Internet application.
Bill Joy, the Vice President at Sun Micro systems, was thought to be the main person to
conceive the idea of a programming language that later became Java. In late 1970s, Bill Joy
wanted to design a language that could contain the best features of languages like MESA and
C. He found that C++ was inefficient for rewriting Unix operating system. In 1991, it was this
desire to invent a better programming tool that propelled Joy in the direction of Sun’s mammoth
project called as the ‘Stealth Project.’ This name was given by Scott McNealy, Sun’s president.
In January 1991, a formal team of persons like Bill Joy, James Gosling, Mike Sheradin, Patrick
Naughton (formerly the project leader of Sun’s Open Windows user environment), and several
other individuals met in Aspen, Colorado for the first time to plan for the Stealth Project.
Stealth Project was all about developing consumer electronic devices that could all be centrally
controlled and programmed from a handheld remote control like device.
James Gosling was made responsible for suggesting a proper programming language for the
project. Initially he thought of using C++, but soon after was convinced about the inadequacy of
C++ for this particular project. He took the first step towards the development of an independent
language that would fit the project objectives by extending and modifying C++.
The idea of naming the language as ‘Oak’ struck Gosling while staring at an oak tree outside his
office window. Unfortunately, this name had already been patented by some other programming
language. Owing to the fear of copyright violation, the name ‘Oak’ was dropped. The team
struggled to find a proper name for the language for many days. After so many brainstorming
sessions, one day finally a thought struck their mind during a trip to the local coffee shop as
recalled by Gosling. The term ‘Java’ in USA is generally a slang used for coffee. Java is also the
name of a coffee produced on the islands of Java in Indonesia. There are some other views also
towards the naming convention used for naming the language as Java. One of it speculates that
the name Java came from several individuals involved in the project: James Gosling, Arthur
Van Goff, Andy Bechtolsheim.

2.3 JAVA’S JOURNEY: FROM EMBEDDED SYSTEMS TO


MIDDLE-TIER APPLICATIONS
Java was designed to run standalone in small devices. The Java language was derived from C++
but with many differences. Java’s platform-independence originally addressed the problem that
applications for embedded devices must run on a wide variety of hardware. But later with the
advent of Internet in 1995, Java was soon adopted, as it could run on heterogeneous operating
systems. Netscape Navigator started using Java in its browser. Many applets (which run inside
a browser) were built and Java achieved popularity and acceptance.
Microsoft developed its own virtual machine that it used in its Internet Explorer which differed
from the specifications laid down. Therefore, Sun and Microsoft ran into a dispute, that was
settled later. Sun saw a potential for Java beyond the browser (see Fig. 2.1).
14 Programming in Java

Client
Browser Internet
(running Web server
Java applet)

Fig. 2.1 Java Applets Running on the Client System


Still Java was not popular for the client-side because of the following reasons:
 Less Impressive GUI Java’s early GUI (AWT) was primitive. The newer GUI (Swing)
was not shipped until the late 90’s (and Swing is still not supported by most modern
browsers without plug-ins).
  Microsoft’s Strong Presence Nearly 95% of the desktop world uses Microsoft.
  Clients’ Software Upgradation Good alternative methods were found to update clients’
software automatically (without having to download Java on-the-fly application code
each time).
  Success of DHTML Browsers have their own dynamic capabilities and many developers
found it easier to code in DHTML. In addition, DHTML pages tend to download and
start faster than Java applets.
Figure 2.2 shows how Java could be used as middle-tier services between the database and a
client browser. In 1997, Sun developed servlets, so that Java could be used to generate dynamic
content based on clients’ request. In 1999, Sun released its Java 2 Enterprise Edition (J2EE).

Web application Client browser


Database

Java in Middle Tier

Fig. 2.2 Middle-tier Capabilities of Java to Run in Web/Application Server


Enterprise Java described how to build middle-tier components. Sun defined Enterprise Java
Beans for developing business logic. The J2EE framework allows developers to concentrate on
building applications rather than mulling over scalability, reliability, and security issues which
are handled by the Web/application server vendors.

2.4 JAVA ESSENTIALS


Java is a platform-independent, object-oriented programming language. Java encompasses the
following features:
  A High-level Language Java is a high-level language that looks very similar to C and

C++ but offers many unique features of its own.


  J
 ava Bytecode Bytecode in Java is an intermediate code generated by the compiler,
such as Sun’s javac, that is executed by the JVM.
  J
 ava Virtual Machine (JVM) JVM acts as an interpreter for the bytecode, which takes
bytecodes as input and executes it as if it was a physical process executing machine
code.
Getting Started with Java 15

Java is designed to be architecturally neutral so that it can run on multiple platforms. The
same runtime code can run on any platform that supports Java. To achieve its cross-architecture
capabilities, the Java compiler generates architecturally neutral bytecode instructions. These
instructions are designed to be both easily interpreted on any machine and easily translated into
native machine code on-the-fly, as shown in Fig. 2.3. Java Runtime Environment (JRE) includes
JVM, class libraries, and other supporting files.
JRE = JVM + Core Java API libraries
JDK = JRE + development tools like compilers

Source code resembles C++ but is simpler to


JAVA source code develop and understand

Same bytecode runs on any JVM (i.e. across


JAVA bytecode many platforms, so it is called write once run
anywhere (WORA)

All major platforms have a JVM. Each JVM


JVM Interprets bytecode to machine code on-the-fly

Fig. 2.3 Java Runtime Environment

Tools such as javac (compiler), java (interpreter), and others are provided in a bundle, popularly
known as Java Development Kit (JDK). JDK comes in many versions (enhanced in each version)
and is different for different platforms such as Windows and Linux. A runtime bundle is also
provided as a part of JDK (popularly known as Java Runtime Environment).

2.5 JAVA VIRTUAL MACHINE


At the heart of the Java platform lies the JVM. Most programming languages compile the source
code directly into machine code, suitable for execution on a particular microprocessor architecture.
The difference with Java is that it uses bytecode, an intermediate code.
Java bytecode executes on a virtual machine. Actually, there wasn’t a hardware implementation
of this microprocessor available when Java was first released. Instead, the processor architecture
is emulated by software known as the virtual machine. This virtual machine is an emulation of
a real Java processor—a machine within a machine (Fig. 2.4). The virtual machine runs on top
of the operating system, which is demonstrated in Fig. 2.5.
The JVM is responsible for interpreting Java bytecode, and
translating this into actions or operating system calls. The JVM
is responsible for catering to the differences between different
platforms and architectures in a way that the developers need not
Physical Machine
be bothered about it.
JVM The JVM forms a part of a large system, the JRE. JRE varies
according to the underlying operating system and computer
Fig. 2.4 JVM Emulation Run on a architecture. If JRE for a given environment is not available, it is
Physical CPU impossible to run the Java software.
16 Programming in Java

Java Runtime Environment


(JRE)

Java Virtual Machine (JVM)

Operating Systems
(Window, Unix, etc)

Hardware
(Intel, Motorola, Alpha, etc.)

Fig. 2.5 JVM Handles Translations

2.6 JAVA FEATURES


Here we list the basic features that make Java a powerful, object-oriented, and popular
programming language.
2.6.1 Platform Independence
Java was designed not only to be cross-platform in source form, like the previous languages
(C, C++), but also in compiled binary form. To achieve this, Java is compiled to an intermediate
form called the bytecode (see Figs 2.3 and 2.4). This bytecode is a platform-independent code
that is read by a special native program called the Java interpreter that executes the corresponding
native machine instructions. The Java compiler is also written in Java. The bytecodes are precisely
defined to remain uniform on all platforms.
The second important part of making Java cross-platform is the uniform definition of
architecture-dependent constructs. In contradiction to other languages, integers in Java are
always four bytes long, and floating point variables follow the IEEE floating point arithmetic
754 standard. You don’t have to worry about the meaning of any type, as it is not going to change
when you transit between different architectures, e.g., Pentium to Sparc. In Java, everything is
well defined. However, the virtual machine and some of its parts have to be written in native
code, thus making it platform-dependent.
2.6.2 Object Oriented
It is conceived that Java is a pure object-oriented language, meaning that the outermost level
of data structure in Java is the object. Everything in Java (constants, variables, and methods)
are defined inside a class and accessed through objects. Java has been developed in a way that
it allows the user to not only learn object-oriented programming but to apply and practise it.
But there are some constraints that violate the purity of Java. It was designed mainly for OOP,
but with some procedural elements. For example, Java supports primitive data types that are
not objects.
Getting Started with Java 17

2.6.3 Both Compiled and Interpreted


Java incorporates the elements of both interpretation and compilation. Here is more information
on these two approaches.
Interpretation
An interpreter reads one line of a program and executes it before going to the next line. The line
is parsed to its smallest operations, the corresponding machine-level code is found, and then
the instruction is executed (this could be done with something like the switch statement in C
with every possible operation-case listed). Basic was one of the earliest interpreted languages
where each text line was interpreted. Similarly, scripting languages like JavaScript, VBScript,
and PHP are also interpreted.
In interpretation, there are no intermediate steps between writing/modifying the code and
running it. The best part is: debugging is fast. Also, the programs are easily transportable to other
platforms (if an interpreter is available). The drawback is its slow performance.
Compilation
The program text file is first converted to native machine code with a program called a compiler.
A linker may also be required to connect together multiple code files together. The output of the
compiler is an executable code. C and C++ are both compiled languages.
The biggest advantage of a compiled language is its fast performance, since the machine
language code instructions load directly into the processor and get executed. In addition, the
compiler can perform certain optimization operations because it looks at the program as a whole
and not line by line. The disadvantages include slower debugging and reduced portability to
other platforms. The source code must be recompiled on the destination platform.
Java Approach
Java incorporates both interpretation and compilation. The text program is compiled to the
intermediate code, called bytecode, for the JVM. The JVM executes the bytecode instructions.
In other words, JVM interprets the bytecode. The bytecode can run on any platform on which a
JVM has been deployed. The program runs inside the JVM, so it does not bother which platform
it is getting executed on.
Thus, Java offers the best of both worlds. The compilation step allows for code optimization
and the JVM makes way for portability. Figure 2.4 will give you an idea about the two phases
involved in the execution of a Java source program, i.e., compile time and execution time (runtime).
Once the source code is converted to bytecode or class file, it is loaded so that it can be
processed by the execution engine of the JVM. Bytecode is loaded either through the bootstrap
class loader (sometimes referred to as the primordial class loader) or through a user-defined
class loader (sometimes referred to as the custom class loader). The bootstrap class loader (part
of the JVM) is responsible for loading trusted classes (e.g., basic Java class library classes).
User-defined class loaders (not part of JVM) are the subclasses of java.util.Class Loader class
that are compiled and instantiated just like any other Java class. The bytecode verifier verifies
the code and ensures that the code is fit to be executed by the JVM. Figure 2.6 shows the flow
of data and control from Java source code through the Java compiler to the JVM. The code is
not allowed to execute until it has passed the verifier’s test.
18 Programming in Java

Compile-Time Runtime

Java Class loader


source (Bytecode
loader)

Bytecode
Bytecode
moves through
Java compiler verifier
network or
file system

Machine code
Interpreter
generator
Java
bytecode
Operating system

Hardware

Fig. 2.6 Compilation and Interpretation in Java

But there remains the drawback of an extra compilation step after every correction during
debugging. Also, the interpretation of bytecode is still slower in many cases than a program in
local machine code. Advanced JVM can ameliorate this, and in many cases, reach speeds similar
to programs compiled to local machine code.
2.6.4 Java is Robust
The type checking of Java is at least as strong as that of C++. The compile-time and runtime
checks in Java catch many errors and make them crash-proof. The program cannot crash the
system. To sum up, Java is one of the most robust languages to have ever evolved. Automatic
garbage collection of allocated memory is the biggest contributor here.
2.6.5 JAVA Language Security Features
Java has several language features that protect the integrity of the security system and prevent
several common attacks.
Security Through Definition Java is strict in its definition of the language:
  All primitive data types in the language have a specific size.

  All operations are defined to be performed in a specific order.


Security Through Lack of Pointer Arithmetic Java does not have pointer arithmetic, so Java
programmers cannot forge a pointer to memory. All methods and instance variables are referred
to with their symbolic names. Users cannot write a code that interprets system variables or
accesses private information stored in a system.
Security Through Garbage Collection Garbage collection makes Java programs more secure
and robust by automatically freeing memory, once it is no longer needed.
Getting Started with Java 19

Security Through Strict Compile-Time Checking The Java compiler performs extensive,
stringent compile-time checking so that as many errors as possible can be detected by the
compiler. The Java language is strongly typed, that is:
  Objects cannot be cast to a subclass without an explicit runtime check.

  References to methods and variables of a class are checked to ensure that the objects

are of the same class.


  Primitives and objects are not interconvertible.

Strict compilation checks make Java programs more robust and avoid runtime errors. The
bytecode verifier runs the bytecode generated by the compiler when an applet is loaded and
makes security checks. The compiler also ensures that a program does not access any uninitialized
variables.
Java Security Model
Java’s security model is focused on protecting users from hostile programs downloaded from
untrusted sources across a network. Programs downloaded over the Internet are executed in a
sandbox. It cannot take any action outside the boundaries specified by the sandbox.
The sandbox for untrusted Java applets, for example, prohibits many activities, including
  Reading or writing to the local disk

  Making a network connection to any host, except the host from which the applet came

  Creating a new process

  Loading a new dynamic library and directly calling a native method

By making it impossible for the downloaded code to perform certain actions, Java’s security
model protects the user from the threat of hostile codes.
Sandbox—Definition
Traditionally, you had to trust a software before you ran it. You achieved security by allowing
a software from trusted sources only, and by regularly scanning for viruses. Once a software
gets access to your system, it has full control and if it is malicious, it can damage your system
because there are no restrictions placed on the software by the computer. So, in the first place,
you prevent malicious code from ever gaining access to your system.
The sandbox security model makes it easier to work with the software that comes from untrusted
sources by restricting codes from untrusted sources from taking any actions that could possibly
harm your system. The advantage is—you don’t need to figure out what code is trusted and what
is not. In addition to that, you don’t need to scan for viruses as well. The sandbox is made up of
the following components operating together.
Class Loader It is the first link in the security chain. It fetches executable codes from the
network and enforces the namespace hierarchy.
Bytecode Verifier The verifier checks that the applet conforms to the Java language guarantees
and that there are no violations like stack overflows, namespace violations, illegal data type
casts, etc.
Security Manager It enforces the boundary of the sandbox. Whenever an applet performs an
action which is a potential violation, the security manager decides whether it is approved or not.
20 Programming in Java

2.6.6 Java is Multithreaded


To explore this property, you must know the meaning of multithreading.It can be explained well
with the help of an example. Consider a four-gas burner on which food is cooked. The cook,
in order to save time, puts milk to boil on one gas burner, rice on the other, makes chapattis on
the third, and vegetable on the fourth. The cook switches between all the items to be cooked so
that neither of the items are red-heated to lose their taste. He may lower/brighten up the gas as
and when required. Here the cook is the processor and the four items being cooked are threads.
The processor (cook) switches from one thread to another.
A thread can be loosely defined as a separate stream of execution that takes place simultaneously
and independent of everything else that might be happening. Threads are independent parts of a
process that run concurrently. Using threads, a program cannot hold the CPU for a long duration
intentionally (e.g. infinite loop). The beauty of multithreading is that the other tasks that are not
stuck in the loop can continue processing without having to wait for the stuck task to finish.
Threads in Java can place locks on shared resources so that while one thread is using it, no other
thread is allowed to access it. This is achieved with the help of synchronization.
More about threads and its implementation will be taken up later in Chapter 8.
2.6.7 Other Features
Automatic Memory Management
Automatic garbage collection (memory management) is handled by the JVM. To create an instance
of a class, the ‘new’ operator is used (refer to Chapter 4). However, Java automatically removes
objects that are not being referenced. This is known as garbage collection. The advantages and
disadvantages of garbage collection are listed below.
Advantages
  Reduces the possibility of memory leaks, since memory is freed as needed. A memory leak
occurs when the memory allocated is not released, resulting in an unnecessary consumption
of all the available memory.
  Memory corruption does not occur.
Disadvantage
  Garbage collection is considered one of the greatest bottlenecks in the speed of execution.
Dynamic Binding
The linking of data and methods to where they are located is done at runtime. New classes can
be loaded at runtime. Linking is done on-the-fly, i.e., on-demand.
Good Performance
Interpretation of byte code slowed performance in early versions, but advanced virtual machines
with adaptive optimization and just-in-time compilation (combined with other features) provide
high speed code execution.
Built-in Networking
Java was designed with networking in mind and comes with many classes to develop sophisticated
Internet communications. A detailed discussion on this topic is taken up later in Chapter 11.
Getting Started with Java 21

No Pointers
Java uses references instead of pointers. A reference provides access to objects. The programmer
is relieved from the overhead of pointer manipulation.
No Global Variables
In Java, the global namespace is the class hierarchy and so, one cannot create a variable outside
the class. It is extremely difficult to ensure that a global variable is manipulated in a consistent
manner. Java allows a modified type of the global variable called static variable.

class Example 2.7 PROGRAM STRUCTURE


Class and Instance A Java application consists of a collection of classes. A class is
variables
a template. An object is defined as an instance of the class. Each
Method ABC instance (object) contains the members (fields and methods)
Local variables specified in the class. A field is one that holds a value. A method
Instruction
defines operations on the fields and values that are passed as
Method XYZ arguments to the method (see Fig. 2.7).
Local variables Let us now create our first Java program. Example 2.1 below
Instruction shows a very simple Java program which displays a string on the
console. It has just one print statement (the program is explained
Fig. 2.7 Program Structure in Section 2.7.3).

Example 2.1 First Java Program


L1 /* Call this file"Example.java".*/
L2 class Example {
L3 //your program starts execution with a call to main()
L4 public static void main (String args[ ]){
L5 System.out.println(“This is a simple Java program”);
L6 }
L7 }

2.7.1 How to Execute a Java Program?


There are three easy steps for successfully executing the Java program:
1. Entering the Source Code The above program (Example 2.1) can be written in any
text editor (like Notepad) but make sure it is written exactly the same way it is shown.
2. Saving the Source Code Now that you’ve written the code in Notepad, this is how
you’ll save it
  Select File | Save As from the notepad menu.
  In the ‘File name’ field, type “Example.java” within double quotes.
  In the ‘Save as type’ field select All Files (*.*).

  Click enter to save the file.


22 Programming in Java

3. Compiling and Running the Source Java programs are compiled using DOS. For
opening OS, type cmd at the run prompt and move to the folder that contains the saved
Example.java file. Now compile the program using javac, specifying the name of the
source file on the command line as shown below. (Assuming the file was saved in a
folder ‘javaeg’ in the C drive.)
C:\>cd javaeg // change to directory javaeg using cd command
C:\javaeg\>javac Example.java

The javac compiler creates a file called Example.class (in the same directory). This class
contains the bytecode version of the program. This bytecode will be executed by the Java
interpreter using java followed by the class name as shown below.
C:\javaeg\>java Example

Output
This is a simple Java program

2.7.2 Why Save as Example.java?


When the Java source code is compiled, each individual class is put in its own output file named
after the class and using the .class extension. That is why it is a good idea to give the Java
source files the same name as that of the class they contain. The name of the .class file will
match exactly with the name of the source file.
In many programming languages, the name of the source code file can be arbitrary. This is
not so with Java. In the above example, the name of the source file should be Example.java. In
Java, a source file is a normal text file that contains one or more class definitions.
The extension for the source file must be .java. By convention, the name of the file and the
name of class should be same (even the case should match) and that is why we named the above
example as Example.java. Java is case-sensitive. So example and Example are two different
class names.

Note You can also provide a different name for naming a source file. For example, the above
example can be saved as First.java. But in that case, when you compile the file, the .class
that will be generated will have the name Example.class. So for executing the program, you
have to mention java Example on the command line. This may lead to confusion, so it is
advised that the name of the Java file should match with the name of the class defined in the
file (case-wise also). Also note that in case the source file contains more than one classes
defined within itself, the java file name should match exactly with the class name that contains
the main method.

2.7.3 Explanation
L1 The program begins with the comment:
/* Call this file “Example.java”.*/
The comments are ignored by the compiler. Comments are a good way to induce documentation
in programming.
L2 The next line of code in the program is
class Example {
Getting Started with Java 23

This line uses the keyword class to declare that a new class is being defined followed by the
class name, i.e., Example. The entire class definition, including all its members, will be between
the opening curly brace ({ ) and the closing curly brace ( }).
L3 Another type of comment is used in this line.
// your program starts execution with a call to main()

This type of comment is called a single-line comment, and it begins with a double slash //.
L4 This line shows the main method for the class.
public static void main (String args []) {

This is the line from where the program will start its execution. All applications in Java start
execution from main(). Every complete Java Application must contain a root class where the
execution can begin. A root class must contain a main method defined with the header, as shown
in this line. Let us take a brief look at the attributes of main().
public It is an access specifier used to specify that the code can be called from anywhere.main()is
declared public because it is called by codes outside the class it is a part of. It is called by the JVM.
static It is declared static because it allows main()to be called without having to instantiate
the class. JVM need not create an instance of the class (i.e. object of the class) for calling the
main()method.
void It does not return a value. The keyword void simply tells the compiler that main()does not
return anything back to the caller, i.e., JVM.
String args[]It holds optional command line arguments passed to the class through the java
command line. The curly bracket at the end marks the beginning of the main method and it
ends in L6.

Note The Java compiler will compile classes that do not contain a main () method, but the
Java interpreter has no way to run these classes.

L5 It shows a print statement. If you want to display anything on the standard output, this
statement is used.
System.out.println ("This is a simple Java program");

This line prints the string "This is a simple Java Program" on the standard output. System is
a predefined class. The string (mentioned in double quotes) passed to the println method is
displayed as it is on the standard output. All statements in Java are terminated by a semicolon (;).
Lines other than println()don’t end with a semicolon because they are technically not statements.
L6 The closing curly bracket marks the closing of the main method.
L7 The closing curly bracket marks the closing of the class.

2.8 JAVA IMPROVEMENTS


Features of different versions of Java are discussed in the following sections.
2.8.1 Java 5.0 Features
We present a host of features in Java 5 and later discuss some of the improvements in Java 5.
24 Programming in Java

Autoboxing and Unboxing


Chapter 3 explains that Java has primitive types like int for integers, and Chapter 4 explains
classes and objects. The difference between the two types is very important. In Chapter 6, we
examine the so-called autoboxing and unboxing features added to J2SE 5.0 that removes the
need for explicit conversions in most cases and thus improves code readability and removes
boilerplate codes and sources of errors.
Enhanced for Loop
Chapter 3 looks at several types of looping structures available in Java, one of which is the for
loop (quite similar to the C/C++ for loop). Version 5.0 includes an enhanced for loop syntax
that reduces code complexity and enhances readability. We introduce the enhanced for loop in
Chapter 4 and describe the object types with which the enhanced for loop works.
Enumerated Types
Chapter 6 presents a feature of C/C++ that many programmers have missed in Java. An
enumerated type has been added with the enum keyword. The new enumerated type includes all
the features of C/C++ enum including type safety.
StringBuilder Class
We will be discussing this class in Chapter 6, along with the older StringBuffer class. It offers
better performance than StringBuffer class.
Static Import
Release 5.0 includes a new technique for accessing Java static methods and constants in another
class without the need to include the full package and class name every time they are used. (We
will explain the terms class, package, static, import, etc. in Chapters 4 and 7). The ‘static
import’ facility makes your code easier to write and less error-prone. We will discuss static
import in more detail in Chapter 7 after discussing import in general.
Metadata
The metadata facility (annotation) is designed to reduce much of the boilerplate code that would
be required in the earlier versions of Java. Annotations, though not a part of the program, provide
information about the program to the compiler. This information can be used to detect errors and
supply warnings. Annotations begin with ‘@’. The javac compiler processes some annotations
and some require the annotation-processing tool, apt.
Formatted I/O and Varargs
In Chapter 9, we discuss how to format numerical output with Java. Version 5.0 adds the ability
to produce formatted output easily in the form of a printf()method that behaves similar to
the printf() function in C/C++. There is also a formatted input feature (Scanner class) that is
described in Chapter 9. Both these features rely on ‘varargs,’ which stands for variable argument
list in which the number of parameters passed to a Java method is not known when the source
is constructed (also known as variable arity methods) (see Chapter 4 for varargs).
Getting Started with Java 25

Graphics System Improvements


Release 5.0 includes numerous bug fixes and minor tweaks to Java’s graphics subsystems known
as AWT and Swing, including reduced memory usage. The biggest improvement is that it is no
longer necessary to call getContentPane() when adding Swing components.
New Concurrency Features
Chapter 8 discusses Java’s multithreading support that has been present since Version 1.0.
Release 5.0 enhances the multithreading features of Java. Some of these additions depend upon
the generics concept, so we wait until Chapter 10 to introduce these important new capabilities.
Generics
In Chapter 10, we introduce the new generics feature, an important subject that we will cover
in detail. Java is type-safe, which simply means that every variable has a well-defined type and
that only compatible types can be assigned to each other. However, the use of generics adds a
greater amount of compile-time safety to the Java language. The use of generics allows objects
of only a specified type to be added to a collection, thereby enhancing the runtime safety and
correctness of the program; otherwise a compile-time error occurs.
Other new features in J2SE 5.0 include core XML support, improvements to Unicode,
improvements to Java’s database connectivity package known as JDBC, and an improved,
high-compression format for JAR files that can greatly reduce download times for applets and
other networking applications.
Java 2 platform Standard Edition 5.0 (J2SE 5.0) dealt with improvements in the ease of
development (EoD) category. The new EoD features were all about syntax shortcuts that greatly
reduce the amount of code that must be entered, making coding faster and error-free. Some
features enable improved compile-time type checking, thus producing fewer runtime errors.
Apart from EoD category, new multithreading and concurrency features were added that provide
capabilities previously unavailable. The designers of J2SE considered quality, stability, and
compatibility to be the most important aspect of the new release. A lot of efforts were made
to ensure compatibility with previous versions of Java. Faster JVM startup time and smaller
memory footprint were important goals. These have been achieved through careful tuning of
the software and the use of class data sharing. It is much easier to watch memory usage, detect
and respond to a low-memory condition in Java 5.
2.8.2 Java 6 Features
Some of the major enhancements to Java 6 are given below.
Collections API
The motive was to provide bidirectional collection access. New interfaces have been added like
Deque, BlockingDeque, etc. and existing classes like Linked List, TreeSet, and TreeMap have
been modified to implement these new interfaces. A bunch of new classes have been added like
ArrayDeque, ConcurrentSkipListSet, etc.

Input/Output
A new class named Console has been added to the java.io package. It contains methods to
access character-based console. New methods have been added to File class.
26 Programming in Java

Jar and Zip Enhancements


Two new compressed streams have been added.
  java.util.zip.DeflaterInputStream:for compressing data
  java.util.zip.InflaterOutputStream:fordecompressing data
These classes are useful for transmitting compressed data over a network.
Enhancements Common to Java Web Start and Java Plug-in
All dialogs have been redesigned to be more user-friendly. Caching can be disabled via the Java
control panel. A new support for SSL/TSL is added.
Enhanced Network Interface
It provides a number of new methods for accessing state and configuration information relating
to a system’s network adapters. This includes information such as MAC addresses and MTU
size (discussed in Chapter 11).
Splash Screen
Applications can display the splash screen even before the virtual machine starts.
Java 6 also enhanced the monitoring and mangement API and made significant changes to
JConsole.

2.8.3 Java 7 Features


A number of features have been added in Java 7 such as revised switch…case to accept strings,
multi-catch statements in exception handling,try-with-resource statements, the new file input
output API, the fork and join framework and a few others.
String in switch…case Statement
Java 7 added strings to be used in switch…case statements apart from primitives (short, byte,
int, char), enumerated type and few wrapper classes (discussed in Chapter 3).
Unicode 6.0.0 Support
Java 7 supports Unicode 6.0.0. A new string representation is used to express unicode characters
(discussed in Chapter 6).
Binary Literals and Numeric Literals (with Underscores)
Java 7 added binary literals and underscores to be used with numeric literals. This feature is
particularly useful in increasing the readability of larger literals with a long sequence of numbers
(discussed in Chapter 3).
Automatic Resource Management
A new try with resources statement is introduced so that resources specified with try are released/
nullified when try block exits. There is no need to manually free up the resources using finally
block as was the case with earlier versions of Java (discussed in Chapter 7).
Improved Exception Handling
Java 7 introduced a multi-catch block where multiple exceptions can be caught using a single
catch block (discussed in Chapter 7).
Getting Started with Java 27

nio 2.0 (Non-blocking I/O)—New File System API


java.nio.file package was created in Java 7 to include classes and interfaces like Path,Paths,
File System, File Systems and others. Simplified methods to efficiently copy, move, create
links and receive file/directory change notifications were also incorporated (Chapter 9).
Fork and Join Fork and Join Framework is incorporated in Java 7 to have a more efficient
kind of parallel processing. The task is divided (forked) into smaller task such that no thread is
idle and whose results are combined (joined) to achieve the desired outputs. The classes for the
Fork-Join mechanism are ForkJoinPool and ForkJoinTask.
Supporting Dynamism Java compiler performs the type checking of variables, methods,
arguments etc. Java 7 incorporates a new feature invokedynamic to let JVM resolve type
information at runtime like few other dynamic languages and incorporate non-java language
requirements.
Diamond Operator The Generics declaration, prior to Java 7, required the types to be declared
on both the sides of the declaration. Java 7 onwards the compiler can deduce the type on the right
side, using the diamond operator (< >), by looking at the left-hand-side declaration.
Swing Enhancements Swings added a host of features like AWT and Swing components can
be used together without any problems,JLayer class, Nimbus look and feel, HSV color selection
tab in the JColorChooser class and more (see Chapter 15 for details).
Java FX 2.2.3 Java FX provides the new GUI toolkit for creating rich cross-platform user
interfaces across different types of devices like TV, mobile, desktop etc. Java FX is bundled
with JDK 7.
2.8.4 Brief Comparison of Different Releases
Table 2.1 presents a brief comparison of different releases of Java.
Table 2.1 Java JDK Major Releases and their Differences

Version Name New Features Introduced


1.0 Oak Java released to public.
1.1 Sparkler Added a totally new event model, using Listeners, anonymous classes, and inner classes.
1.2 Playground Added Array List and other Collections, added swing. Added DSA code signing.
Added buffered image.
1.3 Kestrel java.util.Timer,java.lang.StrictMath,java.awt.print.Page Attributes, java.
media.sound (MIDI) Hotspot introduced. RMI can now also use CORBA’s IIOP protocol.
Added RSA code signing.
1.4 Merlin Added regexes, assertions, and nio.
1.5 Tiger Added StringBuilder, java.util.concurrent, generics, enumerations and, annotations.
1.6 Mustang Applet splash screens, table sorting, true double buffering, digitally signed XML files,
JavaCompilerTool, JDBC 4.0, smart card API, Console.readPassword, improved drag
and drop.
1.7 Dolphin Automatic resource management, String in switch…case, Fork and join framework,
dynamism support, Unicode 6 supported, Java Fx 2.2.3.
1.8 Not yet There is still on-going discussion on what should be included.
released
28 Programming in Java

2.9 DIFFERENCES BETWEEN JAVA AND C++


Here is a technical overview of the differences between Java and C++. The following points list
out the aspects that are present in Java and absent in C++.
Multiple Inheritance Not Allowed Multilevel inheritance is enforced, which makes the design
clearer. Multiple inheritance among classes is not supported in Java. Interfaces are used for
supporting multiple inheritance.
Common Parent All classes are single-rooted. The class Object is the parent of all the classes
in Java.
Packages The concept of packages is used, i.e., a large, hierarchical namespace is provided.
This prevents naming ambiguities in libraries.
In-source Documentation In-source code documentation comments are provided. Documenta-
tion keywords are provided, e.g. @author, @version, etc.
All Codes Inside Class Unlike C++, all parts of a Java program reside inside the class. Global
data declaration outside the class is not allowed. However, static data within classes is supported.
Operator Overloading Operator overloading is not supported in Java but a few operators are
already overloaded by Java, e.g. ‘+’. Programmers do not have the option of overloading operators.
Explicit boolean Type boolean is an explicit type, different from int. Only two boolean literals
are provided, i.e. true and false. These cannot be compared with integers 0 and 1 as used in
some other languages.
Array Length Accessible All array objects in Java have a length variable associated with them
to determine the length of the array.
go to Instead of goto, break and continue are supported.
Pointers There are no pointers in Java.
Null Pointers Reasonably Caught Null pointers are caught by a NullPointerException.
Memory Management The use of garbage collection prevents memory leaks and referencing
freed memory.
Automatic Variable Initialization All variables are automatically initialized, except local
variables.
Runtime Checking of Container Bounds The bounds of containers (arrays, strings, etc.) are
checked at runtime and an IndexOutOfBoundsException is thrown if necessary.
Platform Independence C++ is not a platform-independent language whereas Java is.
Sizes of the Integer Types Defined The sizes of the integer types byte, short, int, and long
are defined to be 1, 2, 4, and 8 bytes.
Unicode Provided Unicode represents the characters in most of the languages, e.g. Japanese,
Latin, etc.
String Class An explicit predefined String class is provided along with StringBuffer and
new StringBuilder class.
Another Random Scribd Document
with Unrelated Content
The Project Gutenberg eBook of Ireland in
Travail
This ebook is for the use of anyone anywhere in the United States
and most other parts of the world at no cost and with almost no
restrictions whatsoever. You may copy it, give it away or re-use it
under the terms of the Project Gutenberg License included with this
ebook or online at www.gutenberg.org. If you are not located in the
United States, you will have to check the laws of the country where
you are located before using this eBook.

Title: Ireland in Travail

Author: Joice NanKivell Loch


Sydney Loch

Release date: September 29, 2020 [eBook #63334]


Most recently updated: October 18, 2024

Language: English

Credits: Produced by Craig Kirkwood and the Online Distributed


Proofreading Team at https://www.pgdp.net (This file was
produced from images generously made available by The
Internet Archive/American Libraries.)

*** START OF THE PROJECT GUTENBERG EBOOK IRELAND IN


TRAVAIL ***
IRELAND IN TRAVAIL

TO
E. A. N.
AND
G. M. L.
IRELAND IN TRAVAIL

BY JOICE M. NANKIVELL
AUTHOR OF “THE SOLITARY PEDESTRIAN”

AND SYDNEY LOCH


AUTHOR OF “THE STRAITS IMPREGNABLE”

LONDON
JOHN MURRAY, ALBEMARLE STREET, W.
1922
All rights reserved
CONTENTS
CHAPTER PAGE
I. 47—Agent (S. L.) 1
Called up—Another acquaintance—Below the
surface—Through a window.
II. We Cross to Dublin (J. M. N.) 10
On board—After curfew—We arrive.
III. I come across 47 (S. L.) 17
Stephen’s Green—On the stroke—Cumann na
mBan—Good advice.
IV. Finding a Roof (J. M. N.) 27
Mrs. Slaney—We take a flat—Au revoir.
V. We settle in (J. M. N.) 34
Mrs. Slaney indignant—We dine.
VI. We make Acquaintances (J. M. N., S. L.) 38
A Beau Brummell—Signs of the times—An
introduction—Money for nothing—A tram ride.
VII. The Birth of Sinn Fein (S. L.) 48
The beginning—The Celtic revival—The Phœnix—
Capital versus Labour—Murder gang—Bad to
worse—Black-and-Tans—Disturbed areas—
Reprisal.
VIII. Autumn wears out (S. L.) 66
The game of bluff—Passers-by—Wanted men—
Templemore—Our mutual friend—Hard at work
—A lonely life.
IX. The Hunger Strike (S. L.) 81
The great fast—A Dublin funeral—The night watch
—A mysterious visitor—Kevin Barry—November
ends.
X. Bloody Sunday (J. M. N.) 94
Terrible news—A Sunday evening—Unhonoured
and unsung.
XI. Aftermath (S. L.) 101
In full cry—In the crowd—A chance meeting.
XII. Visit to a Top Story (J. M. N.) 109
Watching and waiting—Money for nothing—Au
revoir.
XIII. From the Housetop (S. L., J. M. N.) 116
The Central Hotel—A brief haven—A top story—
Down below—Lies, all lies!—Loyalist and
Republican—The first raid—England’s market
garden.
XIV. An At Home (J. M. N.) 133
A Christmas box—Old Meg—Curlewed—A
Unionist.
XV. Height of the Terror (S. L.) 142
Day by day—Building a Republic—President De
Valera—The pendulum—Irish Bulletin—
Reprisals—The gods must laugh.
XVI. The Minister of Propaganda (J. M. N.) 156
A piece of news—An innocent man—Real dotes.
XVII. Capture of a Cabinet Minister (J. M. N.) 162
Mrs. Slaney is uneasy—Open, the military!—
Harbouring rebels—His tea.
XVIII. Winter wears out (S. L.) 170
Spreading the news—A Republican—Propaganda
—Waste! Waste!—Day and night—The City
ambushes.
XIX. Mrs. O’Grady’s Forebodings (J. M. N.) 183
Mrs. O’Grady is prudent—Enter Mrs. Slaney.
XX. To Dublin Castle (S. L.) 189
Raided again—A new acquaintance—A find—A
late call—The journey done.
XXI. Inside the Castle (S. L.) 200
To bed—The Auxiliary at home—Into the fire—
Thirteen at table—An outing.
XXII. Lost: A Husband (J. M. N.) 211
A strained situation—Gelignite!—Next morning—
Dublin Castle—In the maze—Room 13—F
Company—Found.
XXIII. Last Weeks of War (S. L.) 229
Spring and peace—The Customs House—The
Auxiliary Cadets—A brisk affair—Ballykinler—
Under the whip—Mrs. Slaney indignant.
XXIV. The Coming of Summer (S. L.) 244
Corner-boys—Hands up—Erskine Childers—The
phantom army—In Phœnix Park—The old order
changeth.
XXV. The Eve of Peace (J. M. N.) 257
Ambushed—Only another ambush—Patriots—The
final raid—To rack and ruin.
XXVI. The Twelfth of July (S. L.) 268
North and South—King William—The great day—
The trysting-ground—Patches of splendour.
XXVII. Truce (S. L.) 279
Changed times—The final settlement—The last of
47—Dail Eireann—Leave them there.
XXVIII. Last of Ireland (J. M. N.) 291
An avatar—Good-bye to Ireland.
XXIX. Looking Back (S. L.) 297
Hag-ridden—Two alternatives—The hopeful
present.
IRELAND IN TRAVAIL
CHAPTER I
47—AGENT
In the wonderful August weather of 1920, my wife and I were in our
London flat sighing for cooler places. The season had come to an
end with less than its usual glory, and for days taxis and growlers,
topheavy with luggage, had been carrying fleeing Londoners to
country and to sea. The holidays had begun; but England, still
limping from the late war, had lost the holiday spirit: indeed the
world was restless as if it had come through painful convulsions to
kick spasmodically for a while. We were restless too.
Ireland was one of the world’s sores. It was near at hand. Should we
go and see for ourselves? The middle of August had come, and we
could not make up our minds.
On the hottest of those mornings I wandered into Hyde Park, and
where the riders turn their horses about, on the very last chair of the
row, leaning forward, rubbing his chin on his stick, I came across 47
—Agent of the secret service. He had seen me coming along, and
patted the next seat in invitation as if we had met yesterday.
“I thought you were at the other end of the world.”
He answered, “I’m here.”
How I met 47; how it came about that he revealed his secret to me;
how it was that we became friends, has nothing to do with this
story. Sometimes I saw a lot of him; sometimes he passed out of my
life for a year.
Before I had known 47 six months I had learned this, that a secret
service agent, if he is to be more than a common spy, what the
French term a mouchard, a fellow who gleans his news among
servant girls and the like, must have something of a statesman’s
vision to carry him on his way. He must have that sense of the future
which lifts him beyond the individual and the matter of the moment
to think in nations and down centuries. Thus is lessened the pang he
feels as he bruises the individual, as the vivisectionist tortures the
beast that beasts and men shall be freed of pain.
“Come to dinner to-night,” I said. “We are always talking of you.”
“I’m crossing to Ireland to-night.”
“Ireland? Are you working there?”
He nodded. “I’m going to make a beginning. All the fellows who are
resting have been called up. Things are going from bad to worse.”
“Are they worse than the papers make out?”
“They are bad enough. I’ve not seen for myself yet; but the Irish
Republican Army has grown into a moderately disciplined and fairly
numerous fighting affair, and seems to be getting bolder. Thousands
of the young men belong to it. They don’t wear uniform, and those
who aren’t known to the military and police, and so aren’t on the
run, live as ordinary citizens until they are called on for some stunt.
They’re a secret organisation, and we ought to be the people for
them.”
“Are you glad to be off?” I said.
“Damn glad,” he answered. “I’ll be able to see for myself. One man
tells you the country is in the clutches of a murder gang, and the
next that some nobler spasm convulses it. All the same I hear work
in Ireland is trickier than Continental stunts. On the Continent you
have the majority of the nation indifferent to you, and only the
official part to circumvent; but in Ireland they say half the nation is
waiting to give a man away.”
“Why didn’t you come and say you were off?”
“I got orders this morning.”
“We have been thinking of having a look at Ireland. My wife’s
interested in adoption work, and wants to start it over there. We
can’t make up our minds.”
He looked round. “You?”
“Both of us. D’you think we’d find it worth while?”
“Probably. Why not come over? You’re people with nothing to do.”
“If we do, we’re going to be strictly neutral,” I said. “We want to
meet the other side.”
He nodded. “It’s not always easy. That’s what a good many want to
do. You may do it if you stay neutral.”
“We’re going to do it.”
“Then make up your minds. You’re sure to run across me if you
come to Dublin.” He looked at the watch on his wrist and said, “I
must go.” But he did not get up.
“You’ve got the pip,” I said.
“I’m glad to be on the road,” he answered, rubbing his chin on his
stick again; “but it’s a solemn business.” He became suddenly very
stern. “An agent requires a better courage than a soldier’s. Once he
enters enemy country he does not hear a word in favour of his
cause. The very newspapers he must read denounce the
Government whose servant he is. Day after day he wages his lonely
war.
“The man I meet at the Hibernian Hotel at twelve o’clock to-morrow
is to be my ‘cousin,’ as we call it. It is my privilege to pour into his
ears all my troubles, and he will do his best for me. Once a day,
once or twice a week as may be arranged, he will appear at this
place or that place at such and such an hour to take my information.
This information he will pass on to another man, and this third man
is the link with Dublin Castle.
“My wife and I will have no other loyal acquaintances, no other
person in sympathy with us. While the Irish situation stays as it is
we shall have only each other to lean on. Now and again we may
pass an acquaintance in the street, and we shall go by without a
word, without a nod. How many times must we join in the laugh
against us? How many times must we sneer when we love? How
many times must we applaud when we scorn?”
He looked in front of him and said in a low voice, “Betray once more,
47, that a traitor may be destroyed. Deny once again, 47, that a liar’s
mouth may be stopped. Listen this time, 47, that some one else shall
listen no more. Stifle your humanity. Fight your lonely fight.”
He got up, nodded, and departed.
I returned to lunch and told my wife I had come across 47. She was
thrilled now at the idea of Ireland, and when lunch was over we had
nearly made up our minds. I had to leave her in the evening, it was
the case of a theatre, and as I walked out of that same theatre,
somebody was at my side. He was the only other secret service man
I knew; the introduction had come through 47. Such is life.
He was resplendent. The background of lights and women and
motors purring at the kerb was just what he wanted. We strolled
back together along Piccadilly, and he was in his best vein. He asked
after my wife, and from her he got on to women in general. He
began to philosophise presently and said:
“You can’t beat a really good woman.” Then he shook his head. “But
most women are the devil.”
“Not all.”
“Most.”
He drew up his lip like a dog.
“I remember once in Vienna there was an actress, an agent of the
Austrian Government, who was so dangerous that one after another
of our fellows had to pull out half-way because they were losing
their heads.” He nodded and went on showing his eye-tooth. “But
one day there came along an agent less susceptible than the others
and—he broke her neck.”
“One of her unlucky days?”
“Yes, he broke her neck.”
There was a pause.
“The clock was over there. This agent looked at it, and it had long
gone midnight. She had been home from the theatre some time.
The supper things were on the table: supper was over. She was
standing in the middle of the room, and when she heard him coming
up behind, she leaned back bored for an embrace. She was unused
to a refusal. She had in mind to suck this man dry and afterwards
toss him away like an empty wine bottle. She put her head back,
smiling. He slipped his arm round her neck and—it’s not difficult if
you know the way.”
This man had the most wonderful personality in the world. He grew
more and more splendid all the time.
“He who runs may read. In our service a man receives certain
payments for his harassing life. The agent lives two lives at one and
the same time. He lives the life of the citizen, pays his milk bill,
shops with his women friends, breakfasts, lunches, dines, and all the
time he is living a second life below the surface. He sees the moves
in the war raging about him; he remarks man after man go down.
There is no cry. These are the deaths that never get into the papers.
If recorded at all they are recorded as accidents or found dead. He
sees the messages passed at the street corners, and the friend
strolling at his side sees one man giving another a light. He sees this
wanted man go by, he sees that sign put up, he asks himself why is
this man here, what is that woman doing there? And his friend
recognises only the beggar girl whining on the doorstep, and the
cabman flourishing his whip.”
We were passing under a street lamp. He had become magnificent.
His eyes were shining. He had swollen like a pouter pigeon.
“When the time comes for us to leave the service we cannot. We are
offered rest, we are offered peace; at last has come opportunity for
our stretched nerves to recover. But we must continue to be au
courant with affairs. So nearly every agent dies in harness.
“But, of course, besides receiving payment, an agent pays for this
life. He makes payment in several ways. One way is that he finally
comes to believe nothing, to trust nobody. He weighs up what his
best friend says. And another payment is that the life brings a man
in the end to neutral feelings. He is cold sometimes—yes. Wet—yes.
Tired—yes. Even a little depressed sometimes. But not elated. Never
surprised.
“It’s fifteen years since I was surprised.”
And then at Hyde Park Corner, the place where I had last seen 47,
he was gone, and I was left to stroll home alone.
My wife was still up.
“I’ve just met our other friend,” I said, shutting the door.
“What does he say?”
“He’s going over in a day or two. He was at the top of his form.”
Then I gave out what I had been given, and she listened with her
eyes jumping out of her head. Her mind, and accordingly my mind,
was made up half-way through. At the end she jerked upright in the
armchair and cried—
“But let’s go and see for ourselves, and I’ll try and get my ‘Baby
Exchange’ going. Let’s.”
“By all means.”
This was very late at night or very early in the morning.
Now it is time to ask if the world possesses one true history book.
History can only be approximate, for events are without limit, and
man is limited. Each observer of Irish affairs has been watching
Ireland through the windows of his temperament and his
opportunities, and where a man has seen this thing, his neighbour
has seen another.
Humbly, then, we put down what we have to tell, endeavouring to
fill these pages with the spirit of the times rather than with a tedious
list of events.
CHAPTER II
WE CROSS TO DUBLIN

“Any firearms?” A lamp flashed on a pair of khaki legs. “Any


firearms?” asked the man with the lamp again in a feeble attempt at
cheerfulness.
I was trying to be cheerful too; but it was the middle of the night
and very cold, and I had lost a husband.
A soft cloud of steam rose from the engine of the train that had just
disgorged me.
All along the platform were weary passengers and flashing lamps. A
silk stocking slid to the platform from my suitcase. The stooping
Customs man bumped his finger on a darning-needle and muttered
under his breath. A little farther along the platform I could see a
woman burdened with a baby struggling to shut an over full
portmanteau.
“Why are you going to Ireland?” grumbled the man with the lamp.
“Last place to live in. Right. Next, please. One minute, Paddy. What’s
in that parcel?”
A youth who was trying to slip through the crowd stood sullenly.
I was jostled up a gangway by the moving people, still clutching my
keys.
The boat was crowded. It seemed impossible that any one else
could get on, and there were hundreds to come.
My belated husband had deserted me in the confusion. I picked him
up presently on the boat.
“Have you seen about a berth?” he asked.
I shook my head and penetrated to the women’s cabin. It was the
most uncomfortable place I had ever seen. I struggled past heaps of
rugs and luggage, and stumbled over legs as far as the stewardess,
an overworked woman, who answered me impolitely. There was no
berth left, and I struggled up to the deck again through the
descending people with my heart in my boots. There was nothing
but a cold, hard seat and the whistling wind.
Scraps of conversation reached us in between the noises. People
who had fared as badly as we had stood about in sulky groups. Dour
Northerners clustered together and eyed a party of priests. On the
hatches some Tommies lifted up their voices in song, and round the
deck paced military officers with suffering faces.
It was an evil night.
In the early morning I, who had never thought to see a dawn again,
caught a glimpse of Dublin Bay.
The shattered boatload poured along the platform. I stood by the
small luggage while my husband went to pounce on the rest from
the hold. A long-lipped porter weighed up my wealth.
“What time does the train go?”
“Half-seven.”
“It’s been a choppy night.”
“It has.” An Irishman never says yes or no. I learned that quickly.
“Here’s himself coming back.”
My husband turned up. “You’ve been christened Himself,” I said. “I’m
going to call you that while we’re in Ireland.”
“Do you feel pretty bad?” he answered.
“Awful.” I subsided on an unknown person’s luggage. Himself
wandered about, and the long-lipped porter, having decided we were
worth while, wandered after him doing as little as possible.
I was put into a train, and from that train we emerged at last.
Himself went to get a garry, and once more I did sentinel duty over
the luggage.
A youth with a dirty grey cap pulled over his eyes and a trench coat
on eyed me from behind a pillar-box. I stared back and he seemed
to retire. Presently I saw his head round the other side of the pillar-
box. He chewed a small green leaf.
We piled our things up on the garry. The soft clean air curled round
my face and I breathed contentedly.
The jarvey was a cheerful soul, and was prepared to be talkative as
we balanced ourselves on the side of his swaying car. The youth who
was chewing a leaf propped himself against a lamp-post and
watched our departure. I wondered why we fascinated him.
“Sure,” said the jarvey, “I don’t know how I stand at all, at all, not
from one minute to another. It’s this way, mum. First a Shinner
comes along and sez he, ‘Jarvey, did ye drive a military man home
last night?’ ‘Faith,’ sez I, ‘and how should I be after knowing if he
was military or not?’ ‘It’s up to you, jarvey,’ sez he, ‘and mighty
quick, too,’ and out he pulls a bit iv a gun and sticks it in my
stomach. And, mum, what is a poor jarvey to do? Then up comes
another man. ‘Jarvey,’ sez he, ‘that was a Shinner you was talking to.
What were you after telling him?’ ‘He was no Shinner,’ sez I. ‘Glory
be, how am I to know his persuasion?’ ‘It’s lies,’ he sez quick like, ‘all
lies, jarvey, and you find the damn truth or it’ll be worse for ye,’ and
out comes another gun and into the stomach of me. Och, it’s bad
days, and it’s not I who be caring how soon peace comes.”
“You don’t like either side, then?”
“Like thim? Now what I’m telling you is true. It was half-twelve the
other night, and I was coming home——”
“After curfew?”
“It was. They let jarveys through. It was half-twelve and I was
coming home, when up runs a man with a gun and on to my car.
‘Drive, jarvey,’ he sez, ‘back along the road you’ve come.’ So I whips
me horse and away we go. We had gone a goodish bit when we
sees the light of an armoured car. Out skips the man. ‘Your life if ye
split,’ he sez, and disappears in the dark.
“The car spotted me at once. ‘What are ye doing at this time iv
night?’ sez the officer. ‘I’m going back to me stables,’ sez I. ‘Where
are your stables?’ sez he. ‘Leeson Lane,’ sez I. ‘Then it do be away
from your stables you are going,’ sez he. ‘Get out iv that car, jarvey,’
and all the guns in the armoured car poked round at me.
“Sure it was two lorry loads iv military by this time. ‘Take him home,’
sez one, ‘and let him go. He’s only a poor old jarvey.’ ‘Poor old jarvey
be damned,’ sez the other, ‘it’s Mike Collins himself maybe.’ ‘Have ye
seen Mike Collins, jarvey?’ sez the other. ‘How should I be after
knowing him?’ sez I. ‘Who was the fare you put down?’ ‘There was
no fare,’ I sez. ‘I took a party home and was going back to stables
and I fell asleep. The old mare must have turned herself round.’
“They laughed at that, and the Black-and-Tans was all for running
me into the Castle; but the military, God save them, was for me
being just a poor old jarvey, and they stood by me and jumped me
into the car and drove me back to stables to see who I was, and
then they took me back to the old mare and let me go. Och, but it
was a night what with one and another, and it was after curfew
when I was home, I was that tormented with them all. They pulled
me up every short way and jumped me into a car to see who I was
and then back again to the old mare. It’s no time for a jarvey, mum.”
We were rattling along the Liffey. The tide was out and the few
seagulls were investigating the city’s discarded biscuit tins in the
mud on either side of the water. All along the embankment were
men—old men, young men, boys. They propped the walls, they
dozed upon the bridges, they watched the Guinness brewery carts
rumbling backwards and forwards. Some looked at us with blank
faces; but the majority looked into the mud that the tide had left.
Finally we reached the hotel just as I was beginning to understand
the jarvey’s speech.
“How much?” Himself let the coins in his pocket jingle.
“Four shillings.” The reply was given unblushingly. I could see the
hotel porter reckoning his tip.
We had a large room looking down on the main street. A stream of
people passed.
“Give a poor old woman a penny, sir,” I heard a beggar woman
whine. “Mother iv God! a penny for the poor old woman.” She
headed a man off, running in front of him and jerking the head of a
wretched baby as she ran. “A penny for the love of God!”
The man escaped to be waylaid by two others.
“What a lot of fat beggars!” I exclaimed.
The chambermaid walked listlessly to the window and looked out. A
man in well cut clothes had tossed a penny to the ground, and the
beggars had fallen upon it.
“Those men do be spotters,” said the chambermaid for my benefit.
“Spotters? What do you mean?”
“Spies,” she answered briefly.
“How can you tell?”
She sniffed. “They’re not Dublin. They’re military. Will you be taking
your breakfast here or downstairs?”
“Here, thanks. And get me a bath ready. I’ll go to bed for a bit.”
The stream of people increased as I watched. It was a listless
stream. The only thing in a hurry was a lorry of armed soldiers
jostling at breakneck speed through the traffic.
“For the Lord’s sake, let’s get some breakfast!” Himself exclaimed in
the middle of my watch.
CHAPTER III
I COME ACROSS 47

It was past eleven o’clock when I left my wife and wandered out of
the hotel and across O’Connell Bridge. The tide was high, and
something about the lights that lay upon the Liffey waters, and
something about the numerous bridges spanning the river, brought
me dreams of Venice.
It is said there is truth in first impressions. I had a first impression of
Dublin then. In that shining summer weather the city, which was at
once so pleasantly conceived and so down at heels, impressed me
as some likeable person fallen upon a sick bed.
Was it that I was reading into the face of the city what I expected to
see? I had wondered at the suspicion of the guests in the hotel, who
sat surly and apart. Now against the embankment of the river
shabby men and youths leaned, cooling their heels. They smoked
and spat and contemplated the traffic, which was controlled by
magnificent policemen as tall as trees. There appeared to be a
barbers’ strike in progress, as outside the barber’s shop loitered
sundry young men who would have been the better for a shave.
These people displayed a board with “Strike on Here” printed in big
letters, and whenever some customer, maddened by a two months’
growth of hair, vanished into the shop, they would shout after him in
raucous tones, “Strike on there!”
The crowd looked worried and suspicious of itself, and surely it was
evident to him who had eyes to see that war, none the less real
because waged below the surface, was going on, and nobody knew
who was for this side and who for the other.
Yes, war—rumbling through the streets in the guise of heavy military
waggons, tramping round the corners in parties of tin-hatted
soldiers, flying up and down the quays in lorries choked with dapper-
looking men wearing Balmoral bonnets, rushing up this road and
that in Crossley tenders, filled with less romantic men in black
uniforms and peaked caps.
I passed over O’Connell Bridge, up Westmoreland Street, and out of
it between two grave stone buildings; that across the way an
eloquent curving place, once a parliament, and now suffering from a
changed greatness as the Bank of Ireland; this, to my left, the grave
grey face of Trinity, with its arch like a mouth, through which could
be seen cobbled walks removed from the wear and tear of the rest
of the city.
Then to the left and up Dawson Street, past the Mansion House, an
uninspired building, into one of the noble squares that the city
possesses. The heart of this square was a public garden called
Stephen’s Green. I crossed the road, which was wide and straight,
and entered the park by a little gate in the iron railings.
The sun poured out of the sky, and the place was full of nurses and
babies. Two lakes, divided by a bridge, filled all the centre of the
place, and ducks and seagulls and small children disputed for bits of
bread round the edges. It was the scene one meets in all city parks;
but it was specially charming owing to the sun and the twisting
walks.
I was looking for a chair when I discovered 47 strolling down the
path. He had seen me; he always saw me first. He looked just the
same as when we had said good-bye at Hyde Park Corner.
“So you came over?” he said.
“Yes.”
“You’ll find it worth while.”
The place was the best in the gardens for a talk. Two chairs were
beside us. We sat down with mutual consent.
“I have been over a week,” he said. “I put up at the Gresham. That’s
in Sackville Street. I had to get in touch first thing. I was to meet my
‘cousin’ in the lounge of the Hibernian Hotel, Dawson Street, at a
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookgate.com

You might also like