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

Programming in Java 2nd edition Edition Choudhary pdf download

The document provides information about the book 'Programming in Java, 2nd Edition' by Sachin Malhotra and Saurabh Choudhary, detailing its publication by Oxford University Press and its educational significance. It covers the evolution of Java as a programming language, its features, and the comprehensive content structure of the book, which includes practical examples and exercises to aid learning. Additionally, it highlights updates in the second edition, including enhancements aligned with Java Standard Edition 7.

Uploaded by

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

Programming in Java 2nd edition Edition Choudhary pdf download

The document provides information about the book 'Programming in Java, 2nd Edition' by Sachin Malhotra and Saurabh Choudhary, detailing its publication by Oxford University Press and its educational significance. It covers the evolution of Java as a programming language, its features, and the comprehensive content structure of the book, which includes practical examples and exercises to aid learning. Additionally, it highlights updates in the second edition, including enhancements aligned with Java Standard Edition 7.

Uploaded by

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

Programming in Java 2nd edition Edition

Choudhary download

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

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


Get Your Digital Files Instantly: PDF, ePub, MOBI and More
Quick Digital Downloads: PDF, ePub, MOBI and Other Formats

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/

Java Programming 8th Edition Joyce Farrell

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

Java Programming 6th Edition Joyce Farrell

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

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/
JXTA Java P2P Programming 1st Edition Daniel Brookshier

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

Java Network Programming Third Edition Elliotte Rusty


Harold

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

Beginning Programming with Java For Dummies 3rd Edition


Barry Burd

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

Programming in C 2nd Edition Safari

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

Programming in Scala 2nd 2nd Edition Martin Odersky

https://ebookgate.com/product/programming-in-scala-2nd-2nd-
edition-martin-odersky/
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.
Other documents randomly have
different content
learned a great deal. "No-Account Johnny" became one of the best
scholars in the little mission-school.
ZACHARY AND THE BOY.
Zachary was an Indian of the Mohegan tribe, and belonged to the
royal family of his people. He was one of the best of hunters, never
returning empty-handed from the chase. But he was a poor,
miserable drunkard. He had learned from the white man how to
drink "fire-water," and had become so fond of it that he was drunk
nearly all the time when he was not hunting. When he had reached
the age of fifty years, several of his superiors in the tribe died,
leaving only one person between him and the position of chief.
One day Zachary was returning from hunting, and while on his way
began to think of his past life and of his future prospects. "What a
fool I have been," said he to himself, "having lived so long to act so
foolishly. How can such a drunken wretch as I ever hope to be the
chief of my tribe? What will my people think and say of me? I am
not worthy to fill the place of the great Uncas. I will drink no more!"
When he reached his wigwam, he told his wife and friends that he
would never, as long as he lived, taste any drink but water. And he
kept this resolution to the day of his death.
Many of the whites who heard this story could not believe it. They
said Zachary had been so long in the habit of drinking that he could
not live without it, and they had no doubt that he often took a glass
slyly when no one was looking on. Among these was a young man,
the son of the governor of one of the New England colonies; for this
story I am telling you is about matters which took place many years
ago, before America was a separate nation, and when what are now
States were called colonies, and governed by rulers sent over from
England.
Zachary had by this time become the chief in his tribe, and the
governor invited him one day to dine with him. While they were
seated at the table the governor's son thought he would try the
temperance principles of the old chief, and offering him a glass of
beer, said: "Zachary, this beer is excellent, will you taste it?"
The old man dropped his knife and fork, and leaning over the table,
looked with a sharp eye upon the youth, and said: "John, you do not
know what you are doing! Boy, you are serving the devil! Do you
want to make me what I once was, a poor, miserable man, unfit to
govern my tribe? John, the acorn grows into an oak; the cub
becomes a bear; the brook swells into a river; and a single spark of
fire will spread through a whole forest. So one drop of your beer
would make me want more, and then I should want something
stronger, and I would drink rum until I became as wretched as I
once was. Do you not know that I am an Indian? I tell you that I
am; and that if I begin to drink beer I cannot stop without tasting
rum. John, while you live, never again tempt a man to break a good
resolution."
The young man knew not what to say. He felt that he had done a
mean thing in trying to get old Zachary to break his pledge. His
parents were deeply affected at the scene, and often reminded their
son of it afterward, charging him never to forget it; and he did not.
For years after the Indian chief died, John made frequent visits to
his grave, repeating to himself the valuable lesson he had learned,
never to tempt a man to break a good resolution.
Men, and children too, who are trying to become better, ought to be
helped, not hindered. Kind words and kind deeds will greatly
encourage them; but to frown upon them, to sneer at them, or to
make sport of them, is often a sure way of making them as bad as
ever.—The Christian.
TRUST IN PROVIDENCE.
On a bridge I was standing one morning,
And watching the current roll by,
When suddenly into the water
There fell an unfortunate fly.

The fishes that swam to the surface,


Were looking for something to eat,
And I thought that the hapless young insect
Would surely afford them a treat.

"Poor thing," I exclaimed with compassion,


"Thy trials and dangers abound,
For if thou escap'st being eaten,
Thou canst not escape being drowned."

No sooner the sentence was spoken,


Than lo, like an angel of love,
I saw, to the waters beneath me,
A leaflet descend from above.

It glided serene on the streamlet,


'Twas an ark to the poor little fly;
Which, soon to the land reascending,
Spread its wings to the breezes to dry.

Oh, sweet was the truth that was whispered,


That mortals should never despair,
For He that takes care of an insect,
Much more for His children will care.

And though, to our short-sighted vision,


No way of escape may appear,
Let us trust, for when least we expect it,
The help of our Father is near.
THE WIFE.
Dr. Livingstone, in his travels in Africa, came one night to the house
of Mozinkwa, a friendly man, with a pleasant-looking wife and fine
family of children, very "black, but comely." Perhaps their hospitable,
kind ways made them look handsome to the lonely missionary, so far
from home and friends. He was caught in a heavy rain, but he and
his companions received a warm welcome and plenty of food from
this friendly couple, till they were able to proceed.
They had a large garden, cultivated by the wife, with yams, sweet
potatoes, and other vegetables growing in it, and all surrounded by
a fine hedge of the banian tree. Under some larger trees, in the
middle of the yard, stood the huts in which they lived, and no doubt
the fine-looking little children played many happy days under their
mother's care in the shade.
When Dr. Livingstone took his leave of this interesting family, the
wife asked him to bring her some cloth from the white man's
country. When he returned, after a long journey, he was surprised to
find the pleasant home silent and deserted; the garden given up to
wild weeds, and the huts in ruins, and no sign of life in the spot
where he last saw a large family of frolicking children. Poor
Mozinkwa's wife was dead and in her grave under the large trees,
while the huts, garden, and hedge, of which she had been so proud,
were fast going to ruin; for, according to the custom of that heathen
country, a man can never continue to live where a favorite wife has
died. He is so lonely and sorrowful when he thinks of the happy
times they have had together, that he cannot stay where everything
reminds him of his loss. If ever he visits the spot again, it is to pray
to his dead wife and make some offering. So for want of a
knowledge of the Friend of Sinners, who binds up the wounded
heart, they must move from place to place, and can never have any
settled villages in that part of the country.
How different would the scene have been on Dr. Livingstone's return,
if poor Mozinkwa and his wife had been Christians. Then he might
have been happy even in his loneliness, for he would have prayed to
God for strength to bear his loss, and read the Bible, and taught his
children to live so as to meet their mother in heaven. Instead of
flying from place to place to forget their troubles, those poor
Africans might have permanently happy homes, if they knew the
peace the gospel gives.
A HOTTENTOT'S LOVE FOR HER
TEACHERS, AND THE POWER OF
PRAYER.
During the persecution to which the Moravian missionaries in South
Africa were exposed some years ago, a woman, living about an
hour's walk from the mission house, had a daughter who attended
the school, and had become a Christian. One day this girl returned
home in terror, bringing her little sister. Her mother inquired the
reason; she replied: "We and our teachers are all to be shot dead,
and I have brought my sister back, that you may at least keep one
child; but as for me, I will return to my teachers and suffer with
them."
"What!" said her mother, "do you mean to go and be killed?"
"Yes," replied the poor girl; "for it is written in the Bible, 'Whoever
will lose his life for my sake, shall find it.'"
Her mother was much affected, and taking up her younger daughter,
said, "My child, where you are there will I be."
The party then set off for Bavian's Kloof, weeping all the way. When
they had arrived at the top of the hill which commanded a view of
the settlement, they saw a number of the natives approaching it, as
if to attack the missionaries. The Hottentot woman and her children
fell upon their knees and cried fervently to God, beseeching Him to
prevent the enemy from hurting their beloved teachers. When they
again looked up, they saw the men going towards another
plantation, at some distance from the mission. The woman and
children went to Bavian's Kloof, and found the Hottentots there all in
tears, some kneeling, some prostrate on their faces, crying to God,
and their most urgent prayers seemed to be, "Preserve the teachers
whom Thou hast sent us."
THE LIVING SACRIFICE.
Amid the forest's silent shades
Where nature reigns supreme,
A little band had met to hear
The glorious gospel theme.

I gazed upon the dusky forms


Of Indians gathered there,
And thought how once the red man owned
Those lands so rich and fair.

But now he roams throughout the plains


Where once his fathers dwelt,
A poor heart-stricken wanderer,
For him none pity felt.

But hark! the preacher's solemn tone


My wand'ring thoughts recall;
He preaches Jesus crucified,
Jesus who died for all.

He tells, with simple eloquence,


How the Good Shepherd came
To save the erring sheep He loved,
From ruin and from shame.

He speaks of sad Gethsemane,


Then tells the eager crowd,
How Jesus Christ was crucified
By cruel men and proud.

And at his words like forest trees


Moved by the rushing blast,
O'er the proud hearts of those dark men
A wondrous change then passed.

They wept—nature's lone children wept


At th t tt l fl
At that sweet tale of love—
To think that Jesus died that they
Might dwell with Him above.

And one of that wild forest's sons,


Of tall and noble frame,
While tears bedewed his manly cheek,
Towards the preacher came.

"What? did the blessed Saviour die


And shed His blood for me?
Was it for my sins Jesus wept
In dark Gethsemane?

"What can poor Indian give to Thee,


Jesus, for love like thine?
The lands my fathers once possessed
Are now no longer mine;

"Our hunting-grounds are all upturned


By the proud white man's plough,
My rifle and my dog, alas!
Are my sole riches now.

"Yet these I fain would give to Him


On Calvary's cross who bled;
Will Christ accept so mean a gift?"—
The stranger shook his head.

The Indian chief a moment paused,


And downward cast his eyes:
Then suddenly from round his neck
His blanket he unties.

"This, with my rifle and my dog,


Are all I have to give;
Yet these to Jesus I would bring;
He died that I might live!
He died that I might live!

"Stranger! will Jesus Christ receive


These tokens of my love?"
The preacher answered, "Gifts like these
Please not the God above."

The humble child of ignorance


His head in sorrow bent;
Absorbing thought unto his brow
Its saddening influence lent.

He raised his head, a gleam of hope


O'er his dark features passed,
As when on some deep streamlet's breast
The sun's bright beams are cast.

His eyes were filled with glistening tears,


And earnest was his tone;
"Here is poor Indian! Jesus, take,
And make him all thine own."

A thrill of joy passed through the crowd,


To see how grace divine
Could cause the heart of th' Indian chief
With heav'nly love to shine;—

Such love as made him yield with joy


Body and soul to Him
Whose watchful care can never fail,
Whose love can ne'er grow dim.
SAAT.
Sir Samuel Baker and his wife made a dangerous and toilsome
journey into the burning regions of Central Africa. From a book of
travel and adventure published by him we glean such portions as
relate to their faithful servant, Saat, the African boy.
When a child of six years old, minding his father's goats in the
desert, Saat was captured by a hostile Arab tribe, and thrust into a
sack, which was placed on a camel's back, and thus he was carried
hundreds of miles from home. Every time that the poor child
screamed or offered resistance he was threatened that he would be
killed by his cruel captors. Saat shortly found himself in the hands of
a slave-dealer, by whom he was offered to the Egyptian government
as a drummer-boy, but being too small was rejected. A fellow slave
told little Saat of an Austrian mission-house in the very town in
which they were, that would protect and care for him if he could
escape to it. Thither the little boy fled, and found shelter for some
time, gaining such instruction as his mind could receive, together
with other little waifs and strays, which the missionaries had
received at different times.
Sickness reduced the number of the good men who had cared for
and taught the children, and they found it necessary to turn adrift
the friendless little ones, who apparently without result had been
watched and tended, and little Saat, "the one grain of gold," was a
second time without a home. But God guided him on a good way.
One evening Sir Samuel Baker and his wife were sitting in their
courtyard on the Nile, when a starved, miserable boy crept up to
them, and crouching in the dust, begged to be allowed to live with
them and be their boy. They did not take him then, and he came
again the next day, praying them to allow him to serve them. They
endeavored to discourage him by telling of the long and dangerous
journey they were about to take. Saat was firm; he would go with
them to the end of the world. Touched by the boy's story they went
to the mission to inquire the truth of it. There an excellent character
was given of him, with the remark that he must have been turned
out by mistake. This determined the traveller to adopt him. A good
washing and a new suit of clothes made Saat quite respectable, and
being well-disposed he soon made himself useful. Mrs. Baker taught
him to sew, and Sir Samuel gave him lessons in shooting. When his
day's work was done, he was allowed to sit by his mistress while she
told him stories from the Bible and from the history of Europe. There
was plenty of time for such talk, the long, weary journey in the Nile
boat, which they had just commenced, enabling that gentle lady to
instruct the poor ignorant boy thrown on her hands. Their native
servants robbed, betrayed, and deserted the travellers at every turn,
but among them little Saat shone as a bright star, honest, truthful,
and devoted to those who had rescued him from starvation, and he
daily won their love. To him they most probably owed their lives, as
he detected and exposed to them a plan their servants had agreed
on, to seize their master's arms and leave him in the desert, or
murder him and his wife if they met with resistance.
This child of the sun seemed to have all the best points of a happy
English boy; he delighted in active sports and shooting with his light
gun. Through dangers and distresses he was always bright and
cheerful. Saat was sometimes in mischief, too, and he spoilt two
watches by trying to examine their inside works. He was very fond
of a drum; but a camel which carried it rolled over and spoilt that
musical instrument; then he destroyed a tin kettle and a tin cup by
drumming on them. Neither watch nor tinware could be replaced
when shops were thousands of miles away. Once, when he was not
well, a powder was given him to take, and he asked if he should eat
the paper it was in.
Sir Samuel followed his plans for his journey through all obstacles,
and Saat's name is never mentioned, except in praise. He endured
hunger and thirst, and rejoiced with his kind protectors in the
success of their undertaking. During these years of travel, sickness
and death had visited their little band, but as yet the boy had been
spared; but on the homeward journey his time came,—that fearful
sickness, the plague, attacked the vessel in which the party
journeyed: first one was smitten, then another, and then it was Saat.
Mrs. Baker herself nursed the sick boy with tender care, but he lay
day and night in delirium. At last came a calm; he was gently
washed and dressed in clean clothes, and laid to rest. He slept; his
mistress hoped it was the sleep of recovery; but a kind servant
presently covered the boy's face while tears ran down her cheeks.
Saat was dead. The boat was stopped, and the faithful boy was
sadly buried beneath a tree, the wonderful river Nile rolling by his
grave.
Saat was converted from Paganism to Christianity, and reached his
home and rest in heaven.
THE PSALM OF THE SLAVE.
God heard it; and he is free.
Loud he sang the Psalm of David,
He a negro and enslaved,
Sang of Israel's victory;
Sang of Zion bright and free.

In that hour when night is calmest,


Sang he from the Hebrew Psalmist,
In a voice so sweet and clear,
That I could not choose but hear—

Songs of triumph and ascription,


Such as reached the swarth Egyptian,
When upon the Red-Sea coast
Perished Pharaoh and his host.

And the voice of his devotion,


Filled my soul with strange emotion;
For its tones by turns were glad,
Sweetly solemn, wildly sad.

Paul and Silas in their prison,


Sang of Christ, the Lord arisen;
And an earthquake's arm of might
Broke their dungeon-gates at night.

But, alas! what holy angel


Brings the slave this glad evangel?
And what earthquake's arm of night
Breaks his dungeon-gates at night?
Longfellow.
THE MISSIONARY BOX.
A few years ago two young Africans went to England to obtain an
education, and then return to Africa to teach their countrymen the
gospel of Jesus Christ. One of them, George Nicol, while staying
near London, walked a considerable distance. In his walk he came to
Hampstead Heath, from which he could see the city of London
before him. The principal buildings attracted his attention. A laborer
who was breaking stones on the other side of the road, kept looking
at him; no doubt it seemed strange to him to see a colored man
looking at the view he had himself seen every day for many years
past; and in his eyes, perhaps, the wonder would be increased by
seeing the African dressed like a respectable Englishman.
While George Nicol stood gazing on the scene the laborer kept
peeping at him from time to time, but never thought of speaking.
Presently George Nicol turned to him, and asked in good English,
what a certain building was which he saw in the distance. The
laborer answered civilly that it was St. Paul's Church; and then
replied to several other questions, till he had pointed out the chief
buildings of the great city, which could be seen from the hill on
which they were standing.
When this was done, after a short pause the African said: "Well, my
friend, you have here a very large and magnificent city; but, after
all, it is not to be compared to the city of God, the heavenly
Jerusalem, which I hope you and I will both see one day."
If the honest laborer was surprised before, his astonishment was
much greater now.
"Why," said he, "do you know anything about such things?"
"Yes, thank God," replied the African, "I am happy to say I do. It
was not always so. I was once in darkness, and knew nothing of the
true God; but good missionaries from England came, and taught me
about Jesus Christ; and now I live in hope of one day seeing Him in
that beautiful city, the heavenly Jerusalem, where I shall dwell with
Him forever."
By this time the good Englishman had thrown down the hammer
with which he had been breaking stones. He came across the road,
and grasping Nicol's hand exclaimed, "Why, then, you are one of
them that I have been praying for these twenty years. I never put a
penny into the missionary box without saying, 'God bless the colored
man.'"
It rejoiced the heart of the good African not a little to find in the
humble stone-breaker a friend who had taken such a deep interest
in the people of Africa. And if his pleasure was so great, the laborer's
was not less, for he saw in George Nicol an answer to his prayers,
and a sure proof that his missionary money had not been spent in
vain. He felt the truth of the words, "Cast thy bread upon the
waters, for thou shalt find it after many days."
HE NEVER TOLD A LIE.
Mungo Park, in the account of his African travels, relates that a
negro youth was killed by a shot from a party of Moors. His mother
walked before the corpse, as it was carried home, frantic with grief,
clapping her hands, and declaring her son's good qualities. "He
never told a lie," cried the bereaved mother; "he never told a lie; no,
never."
DADDY DAVY.
One winter evening, when a little orphan in my seventh year, I
climbed upon my grandfather's knee, and begged that he would "tell
me a story." The candles were not yet lighted in the parlor, but the
glowing fire sent forth its red blaze, and its cheering heat seemed
more grateful from a fall of snow, which was rapidly collecting in
piles of fleecy whiteness on the lawn.
I had taken my favorite seat on the evening I have mentioned, just
as a poor negro with scarcely any covering appeared at the window,
and supplicated charity. His dark skin was deeply contrasted with the
unblemished purity of the falling snow, whilst his trembling limbs
seemed hardly able to support his shivering frame; and there he
stood, perishing in the land of boasted hospitality and freedom!
With all the active benevolence which my grandfather possessed, he
still retained the usual characteristics of the hardy seaman. He
discouraged everything which bore the smallest resemblance to
indolence. The idle vagrant dared not approach his residence; but he
prized the man of industrious habits, however lowly his station; and
his influence was ever extended to aid the destitute and to right the
injured.
On his first going to sea he had been cabin-boy on board a Liverpool
ship; he afterwards lived several years in the island of Trinidad, in
the West Indies, where the slaves were rigorously treated. He there
became well acquainted with the colored people, and now he no
sooner saw the dark face of the poor perishing creature at his
window, than he hastily rang the bell, and a footman entered.
"Robert," said he, "go and bring that poor fellow in here."
"Poor fellow, did you say?" inquired Robert.
"Yes, yes," replied my grandfather, "yonder man, fetch him here to
me."
The servant quitted the room, and it was not without some feelings
of fear, as well as hopes of amusement that, a few minutes
afterwards, I saw the poor African stand bowing before the parlor
door. The twilight had faded away, and except the reflection from
the snow, night had thrown its sable shadows on the scene; but as
the bright gleam of the fire shed its red hue upon the features of the
negro, and flashed upon his rolling eyes, he presented rather a
terrific appearance to my young mind.
"Come in!" exclaimed my grandfather in a shrill voice; but the poor
fellow stood hesitatingly on the border of the carpet till the
command was repeated with more sternness than before, and then
the trembling African advanced a few steps towards the easy-chair in
which the veteran was sitting.
Never shall I forget the abject figure which the poor creature
displayed. He was a tall, large-boned man, but was evidently bent
down under the pressure of sickness and of want rather than of age.
A pair of old canvas trowsers hung loosely on his legs, but his feet
were quite naked. On the upper part of his body was a striped
flannel shirt, one of the sleeves of which was torn away. He had no
covering for his head; and the snow which had fallen on it having
melted in the warmth of the room, large, transparent drops of clear
water hung glistening on his thick woolly hair.
His look was inclined downwards, as if fearful of meeting the stern
gaze of my grandfather, who scanned him with the most minute
attention, not unmingled with agitation. Every joint of the poor
fellow's limbs shook as if struck with ague, and the cold seemed to
have contracted his sinews; for he crouched his body together, as if
to shrink from the keen blast. Tears were trickling down his cheek,
and his spirit seemed bowed to the earth by distress.
"Tell me," said my grandfather, "what brought you to England, and
what you mean by strolling about the country here as a beggar? I
may order you to be put in the stocks."
"Ah, massa," replied the negro, "buckra never have stocks in dis
country; yet he die if massa neber give him something to fill hungry
stomach."
While he was speaking my grandfather was restless and impatient.
He removed me from his knee, and looked with more earnestness at
the poor man, who never raised his head. "We have beggars enough
of our own nation," said my grandfather.
"Massa speak true," replied the African, meekly; "distress live
everywhere; come like race-horse, but go away softly, softly."
Again my grandfather looked sharply at the features of the man and
showed signs of agitation in his own. "Softly, softly," said he, "that's
just your cant. I know the whole gang of you, but you are not going
to deceive me; now wouldn't you sacrifice me and all I am worth for
a bunch of plantains?"
"Massa have eat the plantains, den," said the man, "and yet massa
think hard of poor negur who work to make them grow. God
Almighty send rain—God Almighty send sun—but God Almighty send
negur too."
"Well, well," said my grandfather, softening his voice, "God is no
respecter of colors, and we must not let you starve, daddy; so,
Robert, tell the cook to get some warm broth, and bid her bear a
hand about it."
"God forever bless massa," exclaimed the poor man, as he listened
to the order, and keenly directed his eye towards the person who
had issued it; but my grandfather had turned his head toward me,
so his face was not seen by the grateful man.
"So I suppose you are some runaway slave?" said my grandfather,
harshly.
"No, massa," rejoined the African, "no, massa; never run away—I
free man. Good buckra give freedom; but then I lose kind massa,
and"——
"Ay, ay," replied my grandfather, "but what about Plantation Joseph,
in Trinidad?"
"Ky!" responded the man, as his eyes were bent upon his questioner,
who again hid his face; "de buckra knows ebery ting; him like the
angel of light to know the secret of the heart."
"Come nearer to the fire, Daddy Davy," said my grandfather, as he
bent down to stir the burning coals with the poker.
Never shall I forget the look of the African; joy, wonder, and
admiration were pictured in his face, as he exclaimed, while
advancing forward—
"De buckra know my name too!—how dis?"
My grandfather having kindled a bright flame that illuminated the
whole room, turned his face towards the African; but no sooner had
the poor fellow caught sight of his features than, throwing himself at
his feet, he clasped the old sailor's knees, exclaiming, "My own
massa!—what for you give Davy him freedom? and now do poor
negur die for want! but no, neber see de day to go dead, now me
find my massa."
"Willie, my boy," said my grandfather, turning to me, "fetch my
pocket-handkerchief off the sofa."
I immediately obeyed, but I used the handkerchief two or three
times to wipe the tears from my eyes before I delivered it to him.
At this moment Robert opened the door, and said the broth was
ready, but stood with amazement to see the half-naked man at his
master's feet.
"Go, Davy," said my grandfather, "go and get some food; and,
Robert, tell the cook to have a warm bath ready, and the housemaid
must run a pan of coals over the little bed in the blue room, and put
some extra blankets on. You can sleep without a nightcap, I dare
say, Davy. There, go along, Davy, go along;" and the gratified negro
left the room with unfeigned ejaculations of "Gor Amighty for eber
bless kind massa!"
As soon as the door was closed, and I was once more seated on my
grandfather's knee, he commenced his usual practice of holding
converse with himself. "What could have brought him here?" said he.
"I gave him his freedom, and a piece of land to cultivate. There was
a pretty hut upon it, too, with a double row of cocoa-nut trees in
front, and a garden of plantains behind, and a nice plot of guinea-
grass for a cow, and another of buckwheat—what has become of it
all I wonder? Bless me, how time flies! it seems but the other day
that I saved the fellow from a couple of bullets, and he repaid the
debt by rescuing my Betsy—ah, poor dear! She was your mother,
William, and he snatched her from a dreadful and terrific fate. How
these things crowd upon my mind! The earthquake shook every
building to its foundation—the ground yawned in horrible deformity,
and your poor mother—we can see her gravestone from the
drawing-room window, you know, for she died since we have been
here, and left her old father's heart a dreary blank. Yet not so either,
my child," pressing me to his breast and laying his hoary head on
mine, "not so either, for she bequeathed you to my guardian care,
and you are now the solace of my gray hairs."
I afterwards learned that Davy had rescued my dear mother from
destruction, at the risk of his own life, during an earthquake in
Trinidad, for which my grandfather had given him his freedom,
together with the hut and the land. But he had no protector in the
west: the slaves plundered his property; sickness came, and no
medical attendant would minister to his wants without the
accustomed fee; he contracted debts, and his ground was sold to
the estate on which it was situated, to pay the lawyers. He quitted
the island of Trinidad to go to Berbice; but, being wrecked near
Mahaica Creek, on the east coast of Demerara, he lost his free
papers, was seized by the government, and sold as a slave, to pay
the expense of advertising and his keep. He fortunately fell into the
hands of a kind master, who at his death once more set him at
liberty, and he had come to England in the hope of bettering his
condition. But here misfortune still pursued him: the gentleman
whom he accompanied died on the passage; he could obtain no
employment on his landing; he had been plundered of what little
money he possessed, and had since wandered about the country till
the evening that he implored charity and found a home.
My worthy grandfather is now numbered with the dead; and I love
to sit upon his gravestone at the evening hour; it seems as if I were
once more placed upon his knee, and listening to his tales of bygone
years. But Daddy Davy is still in existence, and living with me.
Indeed, whilst I have been writing, I have had occasion to put
several questions to him on the subject, and he has been fidgeting
about the room to try and ascertain what I was relating respecting
him.
"I am only giving a sketch of my grandfather, Davy," said I.
"Catch, massa! what he call catch?"
"About the schooner, and Trinidad, and the earthquake, Davy."
"And da old massa what sleep in de Werk-en-rust?"
"Yes, Davy, and the snow-storm."
"Ah, da buckra good man! Davy see him noder time up dare,"
pointing toward the sky. "Gor Amighty for eber bless kind massa!"
AN AGED CHRISTIAN.
"One afternoon," writes an American missionary in Africa, "I went to
see old Father Scott, an aged dying African. He sent me word he
would like to see me. He is in an old dilapidated shanty. A few
boards knocked together, raised about a foot from the floor, served
as a bedstead. The straw bed we made for him on our first arrival. A
little bench, on which were two Bibles and an earthen jar for water,
was all the furniture he possessed. He is dependent for food and
care on his neighbors, as he is perfectly helpless.
A woman who was near brought me a stool, and I sat down beside
him. He was delighted to see me; he told me he had served the Lord
for forty years. He had been a Methodist preacher for many years,
and had often preached three times a day, though he could never
read a word. He would get some boy to read to him several chapters
in the Bible, till he got hold of just the text that would suit him. I
was very much surprised at his familiarity with the Bible. He could
tell me where to find almost any passage.
I could not but look at that poor old man, with his few privileges,
and compare them with those of our more favored people. As I
looked at him in his penury, witnessed his happiness and his implicit
faith, and saw how near home he was, I felt that he was really to be
envied. Who can doubt the power of Divine grace? I read to him,
and talked to him on the glories of the resurrection, and the
mansions our Saviour has prepared for those who love Him; and
then I left him with the promise of soon seeing him again. He is
almost blind. He begged me not to forget him in my prayers. He is
dying of old age, yet no one knows how old he is.
UNCLE JACK.
He was a remarkable African slave of Virginia. It is probable he was
brought to James River in the last slave-ship that brought slaves to
that State. Such was the regard in which he was held that, on the
death of his master, several benevolent persons subscribed a
sufficient sum to purchase his freedom.
Uncle Jack's talents were of a high order, and his knowledge of
human nature very remarkable. Dr. Rice, of Richmond, said of him,
"The old man's acquaintance with the Scriptures is wonderful. Many
of his interpretations of obscure passages are singularly just and
striking." He spoke pure English. A few anecdotes will convey a good
idea of his ready and apt mode of illustration. A person addicted to
horse-racing and card-playing, stopped Uncle Jack on the road and
said, "Old man, you Christians say a great deal about the way to
heaven being narrow. Now if this is so, a great many who profess to
be travelling it will not find it half wide enough."
"That's very true," was the reply, "of all that have merely a name to
live, and all like you."
"Why refer to me," said the man; "if the road is wide enough for
any, it is for me."
"By no means," said Uncle Jack. "You will want to take along a card-
table, or a race-horse or two. Now there is no room along this way
for such things."
A man who prided himself on his morality said to Uncle Jack: "Old
man, I am as good as I need to be. I can't help thinking so, because
God blesses me as much as he does you Christians; and I don't
know what more I want than He gives me."
To this the old preacher replied, with great seriousness, "Just so with
the hogs. I have often looked at them, rooting among the leaves in
the woods, and finding just as many acorns as they needed; and yet
I never saw one of them look up to the tree from whence the acorns
fell."
On one occasion some unruly persons undertook to arrest and whip
him, and also several of his hearers, for holding religious meetings.
After the arrest one of the men thus accosted Uncle Jack, "Well, old
fellow, you are the ringleader of these meetings, and we have been
anxious to catch you; now what have you to say for yourself?"
"Nothing at all, master," was the reply.
"What! nothing to say against being whipped! how is that?"
"I have been wondering a long time," said the old Christian, "how it
was that so good a man as the Apostle Paul should have been
whipped three times for preaching the Gospel, while such an
unworthy man as I am should have been permitted to preach twenty
years without getting a lick." The young men immediately released
him.
Uncle Jack died in 1843, aged one hundred years.
—Blake's Biographical Dictionary.
CHRISTIAN KINDNESS.
In one of my early journeys, says Moffat, with some of my
companions, we came to a heathen village on the borders of Orange
River, South Africa. We had travelled far, and were hungry, thirsty,
and fatigued. From the fear of being exposed to lions, we preferred
remaining at the village to proceeding further during the night. The
people of the village rather roughly directed us to halt at a distance.
We asked for water, but they would not supply it. I offered the three
or four buttons which still remained on my jacket for a little milk;
this also was refused. We had the prospect of another hungry night
at a distance from water, though within sight of the river. We found
it difficult to reconcile ourselves to our lot; for in addition to repeated
rebuffs, the manner of the villagers excited suspicion.
When twilight drew on, a woman approached from the height
beyond which the village lay. She bore on her head a bundle of
wood, and had a vessel of milk in her hand. The latter, without
opening her lips, she handed to us, laid down the wood, and
returned to the village. A second time she approached with a
cooking-vessel on her head, a leg of mutton in one hand, and water
in the other. She sat down without saying a word, prepared the fire,
and put on the meat. We asked again and again who she was. She
remained silent until affectionately entreated to give us a reason for
such unlooked-for kindness to strangers. A tear stole down her sable
cheek as she replied: "I love Him whose servants you are; and
surely it is my duty to give you a cup of cold water in His name. My
heart is full; therefore I cannot speak the joy I feel to see you in this
out-of-the-way place."
On learning a little of her history, we found she was a solitary light
burning in a dark place. I asked her how she kept up the life of God
in her soul, in the entire absence of the communion of saints. She
drew from her bosom a copy of the Dutch New Testament, which
she had received from brother Helm when in his school several years
since, before she had been compelled by her connections to retire to
her present seclusion. "This," she said, "is the fountain whence I
drink: this is the oil which makes my lamp burn."
I looked on the precious relic, and the reader may imagine how I
felt, and my companions with me, when we met with this disciple,
and mingled our sympathies and prayers together at the throne of
our heavenly Father.
GRATITUDE OF SLAVES.
BY DR. LETTSOM.
Dr. Lettsom was born in the West Indies, and inherited fifty slaves,
which was all the property his father left him. He gave freedom to
his slaves; and during a long life, with a large practice as a physician
in London, he kept up a correspondence with some of those who
were indebted to him for their liberty. When he went to the West
Indies to settle his father's estate, he made a visit to Tortola, and
wrote to a friend as follows:
"I frequently accompanied Major John Pickering to his plantations,
and as he passed his numerous negroes saluted him in a loud song,
which they continued as long as he remained in sight. I was also a
melancholy witness to their attachment to him after his death. He
expired suddenly, and when few of his friends were near him. I
remember I held his hand when the final period arrived, but he had
scarcely breathed his last breath before it was known to his slaves,
and instantly about five hundred of them surrounded the house and
insisted on seeing their master.
"They commenced a dismal and mournful yell, which was
communicated from one plantation to another, till the whole island of
Tortola was in agitation, and crowds of negroes were accumulating
around us. Distressed as I was by the loss of my relation and friend,
I could not be insensible to the danger of a general insurrection; or,
if they entered the house, which was constructed of wood, and
mounted into his chamber, there was danger of its falling by their
weight and crushing us in its ruins.
"In this dilemma I had resolution enough to secure the doors, and
thereby prevent sudden intrusion. After this precaution I addressed
them through a window, assuring them that if they would enter the
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