0% found this document useful (0 votes)
31 views

Java 2

Uploaded by

digitalm4044
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

Java 2

Uploaded by

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

JAVA

Test it Now

Where it is used?

According to Sun, 3 billion devices run java. There are many devices where java is currently
used. Some of them are as follows:

1. Desktop Applications such as acrobat reader, media player, antivirus etc.


2. Web Applications such as irctc.co.in, javatpoint.com etc.
3. Enterprise Applications such as banking applications.
4. Mobile
5. Embedded System
6. Smart Card
7. Robotics
8. Games etc.

Types of Java Applications

There are mainly 4 type of applications that can be created using java programming:

1) Standalone Application

It is also known as desktop application or window-based application. An application that we


need to install on every machine such as media player, antivirus etc. AWT and Swing are used in
java for creating standalone applications.

2) Web Application

An application that runs on the server side and creates dynamic page, is called web application.
Currently, servlet, jsp, struts, jsf etc. technologies are used for creating web applications in java.

3) Enterprise Application

An application that is distributed in nature, such as banking applications etc. It has the advantage
of high level security, load balancing and clustering. In java, EJB is used for creating enterprise
applications.

4) Mobile Application

An application that is created for mobile devices. Currently Android and Java ME are used for
creating mobile applications.

Uday Singh(MCA), 09199511858 / 09835613557 Page 1


JAVA

History of Java

Java history is interesting to know. The history of java starts from Green Team. Java team
members (also known as Green Team), initiated a revolutionary task to develop a language for
digital devices such as set-top boxes, televisions etc.

For the green team members, it was an advance concept at that time. But, it was suited for
internet programming. Later, Java technology as incorporated by Netscape.

James Gosling

Currently, Java is used in internet programming, mobile devices, games, e-business solutions etc.
There are given the major points that describes the history of java.

1) James Gosling, Mike Sheridan, and Patrick Naughton initiated the Java language project in
June 1991. The small team of sun engineers called Green Team.

2) Originally designed for small, embedded systems in electronic appliances like set-top boxes.

3) Firstly, it was called "Greentalk" by James Gosling and file extension was .gt.

4) After that, it was called Oak and was developed as a part of the Green project.

5) Why Oak? Oak is a symbol of strength and choosen as a national tree of many countries like
U.S.A., France, Germany, Romania etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 2


JAVA

6) In 1995, Oak was renamed as "Java" because it was already a trademark by Oak
Technologies.

7) Why they choosed java name for java language?

The team gathered to choose a new name. The suggested words were "dynamic",
"revolutionary", "Silk", "jolt", "DNA" etc. They wanted something that reflected the essence of
the technology: revolutionary, dynamic, lively, cool, unique, and easy to spell and fun to say.

According to James Gosling "Java was one of the top choices along with Silk". Since java was
so unique, most of the team members preferred java.

8) Java is an island of Indonesia where first coffee was produced (called java coffee).

9) Notice that Java is just a name not an acronym.

10) Originally developed by James Gosling at Sun Microsystems (which is now a subsidiary of
Oracle Corporation) and released in 1995.

11) In 1995, Time magazine called Java one of the Ten Best Products of 1995.

12) JDK 1.0 released in(January 23, 1996).

Java Version History

There are many java versions that has been released. Current stable release of Java is Java SE 8.

1. JDK Alpha and Beta (1995)


2. JDK 1.0 (23rd Jan, 1996)
3. JDK 1.1 (19th Feb, 1997)
4. J2SE 1.2 (8th Dec, 1998)
5. J2SE 1.3 (8th May, 2000)
6. J2SE 1.4 (6th Feb, 2002)
7. J2SE 5.0 (30th Sep, 2004)
8. Java SE 6 (11th Dec, 2006)
9. Java SE 7 (28th July, 2011)
10. Java SE 8 (18th March, 2014)

Uday Singh(MCA), 09199511858 / 09835613557 Page 3


JAVA

Features of Java

There is given many features of java. They are also known as java buzzwords. The Java Features
given below are simple and easy to understand.

1. Simple
2. Object-Oriented
3. Platform independent
4. Secured
5. Robust
6. Architecture neutral
7. Portable
8. Dynamic
9. Interpreted
10. High Performance
11. Multithreaded
12. Distributed

Simple
According to Sun, Java language is simple because:

syntax is based on C++ (so easier for programmers to learn it after C++).

removed many confusing and/or rarely-used features e.g., explicit pointers, operator
overloading etc.

No need to remove unreferenced objects because there is Automatic Garbage Collection in


java.

Object-oriented

Object-oriented means we organize our software as a combination of different types of objects


that incorporates both data and behaviour.

Object-oriented programming(OOPs) is a methodology that simplify software development


and maintenance by providing some rules.

Basic concepts of OOPs are:

1. Object
2. Class
3. Inheritance
4. Polymorphism

Uday Singh(MCA), 09199511858 / 09835613557 Page 4


JAVA

5. Abstraction
6. Encapsulation

Platform Independent

A platform is the hardware or software environment in which a program runs. There are two
types of platforms software-based and hardware-based. Java provides software-based
platform. The Java platform differs from most other platforms in the sense that it's a software-
based platform that runs on top of other hardware-based platforms.It has two components:
1. Runtime Environment
2. API(Application Programming Interface)

Java code can be run on multiple platforms e.g.Windows,Linux,Sun Solaris,Mac/OS etc. Java
code is compiled by the compiler and converted into bytecode.This bytecode is a platform
independent code because it can be run on multiple platforms i.e. Write Once and Run
Anywhere(WORA).

Secured

Java is secured because:

Uday Singh(MCA), 09199511858 / 09835613557 Page 5


JAVA

• No explicit pointer
• Programs run inside virtual machine sandbox.

• Classloader- adds security by separating the package for the classes of the local file
system from those that are imported from network sources.
• Bytecode Verifier- checks the code fragments for illegal code that can violate access
right to objects.
• Security Manager- determines what resources a class can access such as reading and
writing to the local disk.

These security are provided by java language. Some security can also be provided by
application developer through SSL,JAAS,cryptography etc.

Robust
Robust simply means strong. Java uses strong memory management. There are lack of
pointers that avoids security problem. There is automatic garbage collection in java. There is
exception handling and type checking mechanism in java. All these points makes java robust.

Architecture-neutral
There is no implementation dependent features e.g. size of primitive types is set.

Portable
We may carry the java bytecode to any platform.

High-performance
Java is faster than traditional interpretation since byte code is "close" to native code still
somewhat slower than a compiled language (e.g., C++)

Uday Singh(MCA), 09199511858 / 09835613557 Page 6


JAVA

Distributed
We can create distributed applications in java. RMI and EJB are used for creating distributed
applications. We may access files by calling the methods from any machine on the internet.

Multi-threaded

A thread is like a separate program, executing concurrently. We can write Java programs that
deal with many tasks at once by defining multiple threads. The main advantage of multi-
threading is that it shares the same memory. Threads are important for multi-media, Web
applications etc.

Simple Program of Java

To create a simple java program, you need to create a class that contains main method. Let's
understand the requirement first.

Requirement for Hello Java Example


For executing any java program, you need to
• installthe JDK .
• set path of the jdk/bin directory
• create the java program
• compile and run the java program

Creating hello java example

Let's create the hello java program:

class Simple
{
public static void main(String args[])
{
System.out.println("Hello Java");
}
}

Test it Now

Save this file as Simple.java

To compile: javac Simple.java

To execute: java Simple

Uday Singh(MCA), 09199511858 / 09835613557 Page 7


JAVA

Output:Hello Java
Understanding first java program

Let's see what is the meaning of class, public, static, void, main, String[], System.out.println().

• class keyword is used to declare a class in java.


• public keyword is an access modifier which represents visibility, it means it is visible to
all.
• static is a keyword, if we declare any method as static, it is known as static method. The
core advantage of static method is that there is no need to create object to invoke the
static method. The main method is executed by the JVM, so it doesn't require to create
object to invoke the main method. So it saves memory.
• void is the return type of the method, it means it doesn't return any value.
• main represents startup of the program.
• String[] args is used for command line argument. We will learn it later.
• System.out.println() is used print statement. We will learn about the internal working of
System.out.println statement later.

To write the simple program, open notepad by start menu -> All Programs -> Accessories ->
notepad and write simple program as displayed below:

As displayed in the above diagram, write the simple program of java in notepad and saved it as
Simple.java. To compile and run this program, you need to open command prompt bystart
menu -> All Programs -> Accessories -> command prompt.

Uday Singh(MCA), 09199511858 / 09835613557 Page 8


JAVA

To compile and run the above program, go to your current directory first; my current directory
is c:\new . Write here:

To compile: javac Simple.java

To execute: java Simple

How many ways can we write a java program

There are many ways to write a java program. The modifications that can be done in a java
program are given below:

1) By changing sequence of the modifiers, method prototype is not changed.

Let's see the simple code of main method.

1. static public void main(String args[])

2) subscript notation in java array can be used after type, before variable or after variable.

Let's see the different codes to write the main method.

1. public static void main(String[] args)


2. public static void main(String []args)
3. public static void main(String args[])

3) You can provide var-args support to main method by passing 3 ellipses (dots)

Uday Singh(MCA), 09199511858 / 09835613557 Page 9


JAVA

Let's see the simple code of using var-args in main method. We will learn about var-args later in
Java New Features chapter.

1. public static void main(String... args)

4) Having semicolon at the end of class in java is optional.

Let's see the simple code.

class A
{
static public void main(String... args)
{
System.out.println("hello java4");
}
};

Valid java main method signature

1. public static void main(String[] args)


2. public static void main(String []args)
3. public static void main(String args[])
4. public static void main(String... args)
5. static public void main(String[] args)
6. public static final void main(String[] args)
7. final public static void main(String[] args)
8. final strictfp public static void main(String[] args)

Invalid java main method signature

1. public void main(String[] args)


2. static void main(String[] args)
3. public void static main(String[] args)
4. abstract public static void main(String[] args)

Resolving an error "javac is not recognized as an internal or external command" ?

If there occurs a problem like displayed in the below figure, you need to set path. Since DOS
doesn't know javac or java, we need to set path. Path is not required in such a case if you save
your program inside the jdk/bin folder. But its good approach to set path.

Uday Singh(MCA), 09199511858 / 09835613557 Page 10


JAVA

Internal Details of Hello Java Program

What happens while compiling and running the java program.

What happens at compile time?

At compile time, java file is compiled by Java Compiler (It does not interact with OS) and
converts the java code into bytecode.

What happens at runtime?

At runtime, following steps are performed:

Uday Singh(MCA), 09199511858 / 09835613557 Page 11


JAVA

Classloader: is the subsystem of JVM that is used to load class files.

Bytecode Verifier: checks the code fragments for illegal code that can violate access right to
objects.

Interpreter: read bytecode stream then execute the instructions.

Q)Can you save a java source file by other name than the class name?

Yes, if the class is not public. It is explained in the figure given below:

To compile: javac Hard.java

To execute: java Simple

Uday Singh(MCA), 09199511858 / 09835613557 Page 12


JAVA

Q)Can you have multiple classes in a java source file?

Yes, like the figure given below illustrates:

How to set path in Java

The path is required to be set for using tools such as javac, java etc.

If you are saving the java source file inside the jdk/bin directory, path is not required to be set
because all the tools will be available in the current directory.

But If you are having your java file outside the jdk/bin folder, it is necessary to set path of JDK.

There are 2 ways to set java path:

1. temporary
2. permanent

1) How to set Temporary Path of JDK in Windows

To set the temporary path of JDK, you need to follow following steps:

• Open command prompt


• copy the path of jdk/bin directory
• write in command prompt: set path=copied_path

For Example:
set path=C:\Program Files\Java\jdk1.6.0_23\bin
Uday Singh(MCA), 09199511858 / 09835613557 Page 13
JAVA

Let's see it in the figure given below:

Difference between JDK, JRE and JVM

Understanding the difference between JDK, JRE and JVM is important in Java. We are
having brief overview of JVM here.

If you want to get the detailed knowledge of Java Virtural Machine, move to the next page.
Firstly, let's see the basic differences between the JDK, JRE and JVM.

JVM

JVM (Java Virtual Machine) is an abstract machine. It is a specification that provides


runtime environment in which java bytecode can be executed.

JVMs are available for many hardware and software platforms. JVM, JRE and JDK are
platform dependent because configuration of each OS differs. But, Java is platform
independent.

The JVM performs following main tasks:


• Loads code
• Verifies code
• Executes code

Uday Singh(MCA), 09199511858 / 09835613557 Page 14


JAVA

• Provides runtime environment

JRE
JRE is an acronym for Java Runtime Environment.It is used to provide runtime
environment.It is the implementation of JVM.It physically exists.It contains set of
libraries + other files that JVM uses at runtime.

Implementation of JVMs are also actively released by other companies besides Sun Micro
Systems.

JDK
JDK is an acronym for Java Development Kit.It physically exists.It contains JRE +
development tools.

JVM (Java Virtual Machine)

JVM (Java Virtual Machine) is an abstract machine. It is a specification that provides runtime
environment in which java bytecode can be executed.

JVMs are available for many hardware and software platforms (i.e.JVM is plateform dependent).

Uday Singh(MCA), 09199511858 / 09835613557 Page 15


JAVA

What is JVM?

It is:

1. A specification where working of Java Virtual Machine is specified. But implementation


provider is independent to choose the algorithm. Its implementation has been provided by
Sun and other companies.
2. An implementation Its implementation is known as JRE (Java Runtime Environment).
3. Runtime Instance Whenever you write java command on the command prompt to run
the java class, and instance of JVM is created.

What it does?

The JVM performs following operation:

• Loads code
• Verifies code
• Executes code
• Provides runtime environment

JVM provides definitions for the:

• Memory area
• Class file format
• Register set
• Garbage-collected heap
• Fatal error reporting etc.

Internal Architecture of JVM


Let's understand the internal architecture of JVM. It contains classloader, memory area,
execution engine etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 16


JAVA

1) Classloader:

Classloader is a subsystem of JVM that is used to load class files.

2) Class(Method) Area:

Class(Method) Area stores per-class structures such as the runtime constant pool,
field and method data, the code for methods.

3) Heap:

It is the runtime data area in which objects are allocated.

4) Stack:
Java Stack stores frames.It holds local variables and partial results, and plays a part in method
invocation and return.

Each thread has a private JVM stack, created at the same time as thread.

A new frame is created each time a method is invoked. A frame is destroyed when its method
invocation completes.

Uday Singh(MCA), 09199511858 / 09835613557 Page 17


JAVA

5) Program Counter Register:

PC (program counter) register. It contains the address of the Java virtual machine instruction
currently being executed.

6) Native Method Stack:

It contains all the native methods used in the application.

7) Execution Engine:
It contains:

1) A virtual processor

2) Interpreter:Read bytecode stream then execute the instructions.

3) Just-In-Time(JIT) compiler:It is used to improve the performance.JIT compiles parts of


the byte code that have similar functionality at the same time, and hence reduces the amount
of time needed for compilation.Here the term ?compiler? refers to a translator from the
instruction set of a Java virtual machine (JVM) to the instruction set of a specific CPU.

Variable and Datatype in Java

Variable is a name of memory location. There are three types of variables: local, instance and
static. There are two types of datatypes in java, primitive and non-primitive.

Variable
Variable is name of reserved area allocated in memory.

1. int data=50;//Here data is variable


2.
Types of Variable

There are three types of variables in java


• local variable

Uday Singh(MCA), 09199511858 / 09835613557 Page 18


JAVA

• instance variable
• static variable

Local Variable

A variable that is declared inside the method is called local variable.

Instance Variable

A variable that is declared inside the class but outside the method is called instance variable .
It is not declared as static.

Static variable

A variable that is declared as static is called static variable. It cannot be local.

Example to understand the types of variables

class A
{
int data=50;//instance variable
static int m=100;//static variable
void method()
{
int n=90;//local variable

Uday Singh(MCA), 09199511858 / 09835613557 Page 19


JAVA

}
}//end of class

Data Types in Java

In java, there are two types of data types


• primitive datatypes
• non-primitive data types

Data Type Default Value Default size

boolean false 1 bit

char '\u0000' 2 byte

byte 0 1 byte

Uday Singh(MCA), 09199511858 / 09835613557 Page 20


JAVA

short 0 2 byte

int 0 4 byte

long 0L 8 byte

float 0.0f 4 byte

double 0.0d 8 byte

Why char uses 2 byte in java and what is \u0000 ?

because java uses unicode system rather than ASCII code system. \u0000 is the lowest range of
unicode system.

Unicode System

Unicode is a universal international standard character encoding that is capable of representing


most of the world's written languages.

Why java uses Unicode System?

Before Unicode, there were many language standards:

• ASCII (American Standard Code for Information Interchange) for the United States.
• ISO 8859-1 for Western European Language.
• KOI-8 for Russian.
• GB18030 and BIG-5 for chinese, and so on.

This caused two problems:


1. A particular code value corresponds to different letters in the various language
standards.
2. The encodings for languages with large character sets have variable length.Some
common characters are encoded as single bytes, other require two or more byte.

To solve these problems, a new language standard was developed i.e. Unicode System.

Uday Singh(MCA), 09199511858 / 09835613557 Page 21


JAVA

In unicode, character holds 2 byte, so java also uses 2 byte for characters.

lowest value:\u0000

highest value:\uFFFF

Operators in java

Operator in java is a symbol that is used to perform operations. There are many types of
operators in java such as unary operator, arithmetic operator, relational operator, shift operator,
bitwise operator, ternary operator and assignment operator.

Operators Precedence

postfix expr++ expr--

unary ++expr --expr +expr -expr ~ !

multiplicative */%

additive +-

shift << >> >>>

relational < > <= >= instanceof

equality == !=

bitwise AND &

bitwise exclusive OR ^

bitwise inclusive OR |

logical AND &&

logical OR ||

ternary ?:

assignment = += -= *= /= %= &= ^= |= <<= >>= >>>=

Uday Singh(MCA), 09199511858 / 09835613557 Page 22


JAVA

Java Programs

Java programs are frequently asked in the interview. These programs can be asked from control
statements, array, string, oops etc. Let's see the list of java programs.

1) Fibonacci series

Write a java program to print fibonacci series without using recursion and using recursion.

Input: 10

Output: 0 1 1 2 3 5 8 13 21 34

2) Prime number

Write a java program to check prime number.

Input: 44

Output: not prime number

Input: 7

Output: prime number

3) Palindrome number

Write a java program to check palindrome number.

Input: 329

Output: not palindrome number

Input: 12321

Output: palindrome number

4) Factorial number

Uday Singh(MCA), 09199511858 / 09835613557 Page 23


JAVA

Write a java program to print factorial of a number.

Input: 5

Output: 120

Input: 6

Output: 720

5) Armstrong number

Write a java program to check Armstrong number.

Input: 153

Output: Armstrong number

Input: 22

Output: not Armstrong number

Java OOPs Concepts

Object Oriented Programming is a paradigm that provides many concepts such


as inheritance, data binding, polymorphism etc.

Simula is considered as the first object-oriented programming language. The programming


paradigm where everything is represented as an object, is known as truly object-oriented
programming language.

Smalltalk is considered as the first truly object-oriented programming language.

OOPs (Object Oriented Programming System)

Uday Singh(MCA), 09199511858 / 09835613557 Page 24


JAVA

Object means a real word entity such as pen, chair, table etc. Object-Oriented Programming is
a methodology or paradigm to design a program using classes and objects. It simplifies the
software development and maintenance by providing some concepts:

• Object
• Class
• Inheritance
• Polymorphism
• Abstraction
• Encapsulation

Object

Any entity that has state and behavior is known as an object. For example: chair, pen, table,
keyboard, bike etc. It can be physical and logical.

Class

Collection of objects is called class. It is a logical entity.

Inheritance

When one object acquires all the properties and behaviours of parent object i.e. known as
inheritance. It provides code reusability. It is used to achieve runtime polymorphism.

Polymorphism

Uday Singh(MCA), 09199511858 / 09835613557 Page 25


JAVA

When one task is performed by different ways i.e. known as polymorphism. For example: to
convense the customer differently, to draw something e.g. shape or rectangle etc.

In java, we use method overloading and method overriding to achieve polymorphism.

Another example can be to speak something e.g. cat speaks meaw, dog barks woof etc.

Abstraction

Hiding internal details and showing functionality is known as abstraction. For example:
phone call, we don't know the internal processing.

In java, we use abstract class and interface to achieve abstraction.

Encapsulation

Binding (or wrapping) code and data together into a single unit is known as encapsulation.
For example: capsule, it is wrapped with different medicines.

A java class is the example of encapsulation. Java bean is the fully encapsulated class because all
the data members are private here.

Advantage of OOPs over Procedure-oriented programming language

1)OOPs makes development and maintenance easier where as in Procedure-oriented


programming language it is not easy to manage if code grows as project size grows.

2)OOPs provides data hiding whereas in Procedure-oriented prgramming language a global


data can be accessed from anywhere.

3)OOPs provides ability to simulate real-world event much more effectively. We can provide
the solution of real word problem if we are using the Object-Oriented Programming language.

Uday Singh(MCA), 09199511858 / 09835613557 Page 26


JAVA

What is difference between object-oriented programming language and object-based


programming language?
Object based programming language follows all the features of OOPs except Inheritance.
JavaScript and VBScript are examples of object based programming languages.

Java Naming conventions

Java naming convention is a rule to follow as you decide what to name your identifiers such as
class, package, variable, constant, method etc.

But, it is not forced to follow. So, it is known as convention not rule.

All the classes, interfaces, packages, methods and fields of java programming language are given
according to java naming convention.

Advantage of naming conventions in java

By using standard Java naming conventions, you make your code easier to read for yourself and
for other programmers. Readability of Java program is very important. It indicates thatless
time is spent to figure out what the code does.

Name Convention

class name should start with uppercase letter and be a noun e.g. String,
Color, Button, System, Thread etc.

interface should start with uppercase letter and be an adjective e.g.


name Runnable, Remote, ActionListener etc.

method should start with lowercase letter and be a verb e.g.

Uday Singh(MCA), 09199511858 / 09835613557 Page 27


JAVA

name actionPerformed(), main(), print(), println() etc.

variable should start with lowercase letter e.g. firstName,


name orderNumber etc.

package should be in lowercase letter e.g. java, lang, sql, util etc.
name

constants should be in uppercase letter. e.g. RED, YELLOW,


name MAX_PRIORITY etc.

CamelCase in java naming conventions

Java follows camelcase syntax for naming the class, interface, method and variable.

If name is combined with two words, second word will start with uppercase letter always e.g.
actionPerformed(), firstName, ActionEvent, ActionListener etc.

Object and Class in Java

In object-oriented programming technique, we design a program using objects and classes.

Object is the physical as well as logical entity whereas class is the logical entity only.

Object in Java

An entity that has state and behavior is known as an object e.g. chair, bike, marker, pen, table,
car etc. It can be physical or logical (tengible and intengible). The example of integible object is
banking system.

Uday Singh(MCA), 09199511858 / 09835613557 Page 28


JAVA

An object has three characteristics:

• state: represents data (value) of an object.


• behavior: represents the behavior (functionality) of an object such as deposit, withdraw
etc.
• identity: Object identity is typically implemented via a unique ID. The value of the ID is
not visible to the external user. But,it is used internally by the JVM to identify each
object uniquely.

For Example: Pen is an object. Its name is Reynolds, color is white etc. known as its state. It is
used to write, so writing is its behavior.

Object is an instance of a class. Class is a template or blueprint from which objects are
created. So object is the instance(result) of a class.

Class in Java
A class is a group of objects that has common properties. It is a template or blueprint from
which objects are created.

A class in java can contain:

• data member
• method
• constructor
• block
• class and interface

Syntax to declare a class:

class <class_name>
{
data member;
method;
}
Simple Example of Object and Class

In this example, we have created a Student class that have two data members id and name. We
are creating the object of the Student class by new keyword and printing the objects value.

Uday Singh(MCA), 09199511858 / 09835613557 Page 29


JAVA

class Student1
{
int id;//data member (also instance variable)
String name;//data member(also instance variable)

public static void main(String args[])


{
Student1 s1=new Student1();//creating an object of Student
System.out.println(s1.id);
System.out.println(s1.name);
}
}

Test it Now

Output:0 null

Instance variable in Java


A variable that is created inside the class but outside the method, is known as instance
variable.Instance variable doesn't get memory at compile time.It gets memory at runtime when
object(instance) is created.That is why, it is known as instance variable.

Method in Java
In java, a method is like function i.e. used to expose behaviour of an object.

Advantage of Method

• Code Reusability
• Code Optimization

new keyword
The new keyword is used to allocate memory at runtime.

Example of Object and class that maintains the records of students

In this example, we are creating the two objects of Student class and initializing the value to
these objects by invoking the insertRecord method on it. Here, we are displaying the state
(data) of the objects by invoking the displayInformation method.

Uday Singh(MCA), 09199511858 / 09835613557 Page 30


JAVA

class Student2
{
int rollno;
String name;

void insertRecord(int r, String n)


{ //method
rollno=r;
name=n;
}

void displayInformation()
{
System.out.println(rollno+" "+name);

}//method

public static void main(String args[])


{
Student2 s1=new Student2();
Student2 s2=new Student2();

s1.insertRecord(111,"Karan");
s2.insertRecord(222,"Aryan");

s1.displayInformation();
s2.displayInformation();

}
}

Test it Now

111 Karan
222 Aryan

Uday Singh(MCA), 09199511858 / 09835613557 Page 31


JAVA

As you see in the above figure, object gets the memory in Heap area and reference variable
refers to the object allocated in the Heap memory area. Here, s1 and s2 both are reference
variables that refer to the objects allocated in memory.

Another Example of Object and Class

There is given another example that maintains the records of Rectangle class. Its exaplanation
is same as in the above Student class example.

class Rectangle
{
int length;
int width;

void insert(int l,int w)


{
length=l;
width=w;
}

void calculateArea()
{
System.out.println(length*width);
}

public static void main(String args[])


{
Rectangle r1=new Rectangle();
Rectangle r2=new Rectangle();

Uday Singh(MCA), 09199511858 / 09835613557 Page 32


JAVA

r1.insert(11,5);
r2.insert(3,15);

r1.calculateArea();
r2.calculateArea();
}
}

Output:55
45
What are the different ways to create an object in Java?

There are many ways to create an object in java. They are:


• By new keyword
• By newInstance() method
• By clone() method
• By factory method etc.

Annonymous object

Annonymous simply means nameless.An object that have no reference is known as


annonymous object.

If you have to use an object only once, annonymous object is a good approach.

class Calculation
{

void fact(int n)
{
int fact=1;
for(int i=1;i<=n;i++)
{
fact=fact*i;
}
System.out.println("factorial is "+fact);
}

public static void main(String args[])


{

Uday Singh(MCA), 09199511858 / 09835613557 Page 33


JAVA

new Calculation().fact(5);//calling method with annonymou


s object
}
}

Output:Factorial is 120

Creating multiple objects by one type only

We can create multiple objects by one type only as we do in case of primitives.

1. Rectangle r1=new Rectangle(),r2=new Rectangle();//creating two objects


Let's see the example:

class Rectangle
{
int length;
int width;

void insert(int l,int w)


{
length=l;
width=w;
}
void calculateArea()
{
System.out.println(length*width);
}

public static void main(String args[])


{
Rectangle r1=new Rectangle(),r2=new Rectangle();//creating two objects

r1.insert(11,5);
r2.insert(3,15);

r1.calculateArea();
r2.calculateArea();
}
}
Output:55
45

Uday Singh(MCA), 09199511858 / 09835613557 Page 34


JAVA

Method Overloading in Java

If a class have multiple methods by same name but different parameters, it is known as Method
Overloading.

If we have to perform only one operation, having same name of the methods increases the
readability of the program.

Suppose you have to perform addition of the given numbers but there can be any number of
arguments, if you write the method such as a(int,int) for two parameters, and b(int,int,int) for
three parameters then it may be difficult for you as well as other programmers to understand the
behaviour of the method because its name differs. So, we perform method overloading to figure
out the program quickly.

Advantage of method overloading?

Method overloading increases the readability of the program.

Different ways to overload the method


There are two ways to overload the method in java

1. By changing number of arguments


2. By changing the data type

In java, Methood Overloading is not possible by changing the return type of the method.

1)Example of Method Overloading by changing the no. of arguments

In this example, we have created two overloaded methods, first sum method performs addition of
two numbers and second sum method performs addition of three numbers.

Uday Singh(MCA), 09199511858 / 09835613557 Page 35


JAVA

class Calculation
{
void sum(int a,int b)
{
System.out.println(a+b);
}
void sum(int a,int b,int c)
{
System.out.println(a+b+c);
}

public static void main(String args[])


{
Calculation obj=new Calculation();
obj.sum(10,10,10);
obj.sum(20,20);

}
}
Test it Now

Output:30
40

2)Example of Method Overloading by changing data type of argument

In this example, we have created two overloaded methods that differs in data type. The first sum
method receives two integer arguments and second sum method receives two double arguments.

class Calculation2
{
void sum(int a,int b)
{
System.out.println(a+b);
}
void sum(double a,double b)
{
System.out.println(a+b);
}

public static void main(String args[])


{
Calculation2 obj=new Calculation2();
obj.sum(10.5,10.5);
obj.sum(20,20);

Uday Singh(MCA), 09199511858 / 09835613557 Page 36


JAVA

}
}
Test it Now

Output:21.0
40
Que) Why Method Overloaing is not possible by changing the return type of method?

In java, method overloading is not possible by changing the return type of the method because
there may occur ambiguity. Let's see how ambiguity may occur:

because there was problem:

class Calculation3
{
int sum(int a,int b)
{
System.out.println(a+b);
}
double sum(int a,int b)
{
System.out.println(a+b);
}

public static void main(String args[])


{
Calculation3 obj=new Calculation3();
int result=obj.sum(20,20); //Compile Time Error

}
}
Test it Now

int result=obj.sum(20,20); //Here how can java determine which sum() method should be called

Can we overload main() method?

Yes, by method overloading. You can have any number of main methods in a class by method
overloading. Let's see the simple example:

class Overloading1
{

Uday Singh(MCA), 09199511858 / 09835613557 Page 37


JAVA

public static void main(int a)


{
System.out.println(a);
}

public static void main(String args[])


{

System.out.println("main() method invoked");


main(10);
}
}
Test it Now

Output:main() method invoked


10
Method Overloading and TypePromotion

One type is promoted to another implicitly if no matching datatype is found. Let's understand the
concept by the figure given below:

As displayed in the above diagram, byte can be promoted to short, int, long, float or double. The
short datatype can be promoted to int,long,float or double. The char datatype can be promoted to
int,long,float or double and so on.

Example of Method Overloading with TypePromotion

class OverloadingCalculation1
{

Uday Singh(MCA), 09199511858 / 09835613557 Page 38


JAVA

void sum(int a,long b)


{
System.out.println(a+b);
}
void sum(int a,int b,int c)
{
System.out.println(a+b+c);
}

public static void main(String args[])


{
OverloadingCalculation1 obj=new OverloadingCalculation1();
obj.sum(20,20);//now second int literal will be promoted to long
obj.sum(20,20,20);

}
}

Test it Now

Output:40
60
Example of Method Overloading with TypePromotion if matching found

If there are matching type arguments in the method, type promotion is not performed.

class OverloadingCalculation2
{
void sum(int a,int b)
{
System.out.println("int arg method invoked");
}
void sum(long a,long b)
{
System.out.println("long arg method invoked");
}

public static void main(String args[])


{
OverloadingCalculation2 obj=new OverloadingCalculation2();
obj.sum(20,20);//now int arg sum() method gets invoked
}
}
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 39


JAVA

Output:int arg method invoked

Example of Method Overloading with TypePromotion in case ambiguity

If there are no matching type arguments in the method, and each method promotes similar
number of arguments, there will be ambiguity.

class OverloadingCalculation3
{
void sum(int a,long b)
{
System.out.println("a method invoked");
}
void sum(long a,int b)
{
System.out.println("b method invoked");
}

public static void main(String args[])


{
OverloadingCalculation3 obj=new OverloadingCalculation3();
obj.sum(20,20);//now ambiguity
}
}
Test it Now

Output:Compile Time Error

One type is not de-promoted implicitly for example double cannot be depromoted to any type
implicitely.

Uday Singh(MCA), 09199511858 / 09835613557 Page 40


JAVA

Constructor in Java

Constructor in java is a special type of method that is used to initialize the object.

Java constructor is invoked at the time of object creation. It constructs the values i.e. provides
data for the object that is why it is known as constructor.

Rules for creating java constructor

There are basically two rules defined for the constructor.

1. Constructor name must be same as its class name


2. Constructor must have no explicit return type

Types of java constructors

There are two types of constructors:

1. Default constructor (no-arg constructor)


2. Parameterized constructor

Java Default Constructor

A constructor that have no parameter is known as default constructor.

Syntax of default constructor:


1.
2. <class_name>()
3. {
4. }

Example of default constructor

In this example, we are creating the no-arg constructor in the Bike class. It will be invoked
at the time of object creation.

Uday Singh(MCA), 09199511858 / 09835613557 Page 41


JAVA

class Bike1
{

Bike1()
{
System.out.println("Bike is created");
}
public static void main(String args[])
{
Bike1 b=new Bike1();
}
}
Test it Now

Output:

Bike is created

Rule: If there is no constructor in a class, compiler automatically creates a default


constructor.

Q) What is the purpose of default constructor?

Default constructor provides the default values to the object like 0, null etc. depending on the
type.

Example of default constructor that displays the default values

class Student3
{ {
int id;
String name;

void display()

Uday Singh(MCA), 09199511858 / 09835613557 Page 42


JAVA

{
System.out.println(id+" "+name);
}

public static void main(String args[])


{
Student3 s1=new Student3();
Student3 s2=new Student3();
s1.display();
s2.display();
}
}}

}
Test it Now

Output:

0 null
0 null

Explanation:In the above class,you are not creating any constructor so compiler provides you
a default constructor.Here 0 and null values are provided by default constructor.

Java parameterized constructor

A constructor that have parameters is known as parameterized constructor.

Why use parameterized constructor?

Parameterized constructor is used to provide different values to the distinct objects.

Example of parameterized constructor

In this example, we have created the constructor of Student class that have two parameters.
We can have any number of parameters in the constructor.

Class Student4

Uday Singh(MCA), 09199511858 / 09835613557 Page 43


JAVA

{
{
int id;
String name;

Student4(int i,String n)
{
id = i;
name = n;
}
void display()
{
System.out.println(id+" "+name);
}

public static void main(String args[])


{
Student4 s1 = new Student4(111,"Karan");
Student4 s2 = new Student4(222,"Aryan");
s1.display();
s2.display();
}
}
Test it Now

Output:

111 Karan
222 Aryan

Constructor Overloading in Java

Constructor overloading is a technique in Java in which a class can have any number of
constructors that differ in parameter lists.The compiler differentiates these constructors by
taking into account the number of parameters in the list and their type.

Example of Constructor Overloading

Uday Singh(MCA), 09199511858 / 09835613557 Page 44


JAVA

cclass Student5
{
int id;
String name;
int age;
Student5(int i,String n){
id = i;
name = n;
}
Student5(int i,String n,int a){
id = i;
name = n;
age=a;
}
void display(){System.out.println(id+" "+name+" "+age);}

public static void main(String args[]){


Student5 s1 = new Student5(111,"Karan");
Student5 s2 = new Student5(222,"Aryan",25);
s1.display();
s2.display();
}
}
Test it Now

Output:

111 Karan 0
222 Aryan 25

Difference between constructor and method in java

There are many differences between constructors and methods. They are given below.

Java Constructor Java Method

Constructor is used to initialize the Method is used to expose


state of an object. behaviour of an object.

Constructor must not have return Method must have return

Uday Singh(MCA), 09199511858 / 09835613557 Page 45


JAVA

type. type.

Constructor is invoked implicitly. Method is invoked


explicitly.

The java compiler provides a default Method is not provided by


constructor if you don't have any compiler in any case.
constructor.

Constructor name must be same as the Method name may or may


class name. not be same as class
name.

Java Copy Constructor

There is no copy constructor in java. But, we can copy the values of one object to another like
copy constructor in C++.

There are many ways to copy the values of one object into another in java. They are:

• By constructor
• By assigning the values of one object into another
• By clone() method of Object class

In this example, we are going to copy the values of one object into another using java
constructor.
class Student6{
int id;
String name;
Student6(int i,String n){
id = i;
name = n;
}

Student6(Student6 s){
id = s.id;
name =s.name;
}
void display(){System.out.println(id+" "+name);}

public static void main(String args[]){


Student6 s1 = new Student6(111,"Karan");
Student6 s2 = new Student6(s1);

Uday Singh(MCA), 09199511858 / 09835613557 Page 46


JAVA

s1.display();
s2.display();
}
}
Test it Now

Output:

111 Karan
111 Karan

Copying values without constructor

We can copy the values of one object into another by assigning the objects values to another
object. In this case, there is no need to create the constructor.

class Student7{
int id;
String name;
Student7(int i,String n){
id = i;
name = n;
}
Student7(){}
void display(){System.out.println(id+" "+name);}

public static void main(String args[]){


Student7 s1 = new Student7(111,"Karan");
Student7 s2 = new Student7();
s2.id=s1.id;
s2.name=s1.name;
s1.display();
s2.display();
}
}
Test it Now

Output:

111 Karan
111 Karan
Q) Does constructor return any value?

Ans:yes, that is current class instance (You cannot use return type yet it returns a value).

Uday Singh(MCA), 09199511858 / 09835613557 Page 47


JAVA

Can constructor perform other tasks instead of initialization?

Yes, like object creation, starting a thread, calling method etc. You can perform any operation in
the constructor as you perform in the method.

Java static keyword

The static keyword in java is used for memory management mainly. We can apply java static
keyword with variables, methods, blocks and nested class. The static keyword belongs to the
class than instance of the class.

The static can be:

1. variable (also known as class variable)


2. method (also known as class method)
3. block
4. nested class

1) Java static variable

If you declare any variable as static, it is known static variable.

• The static variable can be used to refer the common property of all objects (that is not
unique for each object) e.g. company name of employees,college name of students etc.
• The static variable gets memory only once in class area at the time of class loading.

Advantage of static variable

It makes your program memory efficient (i.e it saves memory).

Understanding problem without static variable

class Student{
int rollno;
String name;
String college="ITS";
}

Suppose there are 500 students in my college, now all instance data members will get memory
each time when object is created.All student have its unique rollno and name so instance data
member is good.Here, college refers to the common property of all objects.If we make it
static,this field will get memory only once.

Java static property is shared to all objects.

Uday Singh(MCA), 09199511858 / 09835613557 Page 48


JAVA

Example of static variable


//Program of static variable

class Student8{
int rollno;
String name;
static String college ="ITS";

Student8(int r,String n){


rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);
}

public static void main(String args[]){


Student8 s1 = new Student8(111,"Karan");
Student8 s2 = new Student8(222,"Aryan");

s1.display();
s2.display();
}
}
Test it Now

Output:111 Karan ITS


222 Aryan ITS

Uday Singh(MCA), 09199511858 / 09835613557 Page 49


JAVA

Program of counter without static variable

In this example, we have created an instance variable named count which is incremented in the
constructor. Since instance variable gets the memory at the time of object creation, each object
will have the copy of the instance variable, if it is incremented, it won't reflect to other objects.
So each objects will have the value 1 in the count variable.

class Counter{
int count=0;//will get memory when instance is created

Counter(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter c1=new Counter();


Counter c2=new Counter();
Counter c3=new Counter();

}
}
Test it Now

Output:1
1
1

Program of counter by static variable


As we have mentioned above, static variable will get the memory only once, if any object
changes the value of the static variable, it will retain its value.

class Counter2{
static int count=0;//will get memory only once and retain its value

Counter2(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter2 c1=new Counter2();


Counter2 c2=new Counter2();

Uday Singh(MCA), 09199511858 / 09835613557 Page 50


JAVA

Counter2 c3=new Counter2();

}
}
Test it Now

Output:1
2
3

2) Java static method

If you apply static keyword with any method, it is known as static method.

o A static method belongs to the class rather than object of a class.


o A static method can be invoked without the need for creating an instance of a class.
o static method can access static data member and can change the value of it.

Example of static method


//Program of changing the common property of all objects(static fi
eld).

class Student9{
int rollno;
String name;
static String college = "ITS";

static void change(){


college = "BBDIT";
}

Student9(int r, String n){


rollno = r;
name = n;
}

void display (){System.out.println(rollno+" "+name+" "+colleg


e);}

public static void main(String args[]){


Student9.change();

Student9 s1 = new Student9 (111,"Karan");


Student9 s2 = new Student9 (222,"Aryan");
Student9 s3 = new Student9 (333,"Sonoo");

Uday Singh(MCA), 09199511858 / 09835613557 Page 51


JAVA

s1.display();
s2.display();
s3.display();
}
}
Test it Now

Output:111 Karan BBDIT


222 Aryan BBDIT
333 Sonoo BBDIT
Another example of static method that performs normal calculation
//Program to get cube of a given number by static method

class Calculate{
static int cube(int x){
return x*x*x;
}

public static void main(String args[]){


int result=Calculate.cube(5);
System.out.println(result);
}
}
Test it Now

Output:125
Restrictions for static method
There are two main restrictions for the static method. They are:

1. The static method can not use non static data member or call non-static method
directly.
2. this and super cannot be used in static context.

class A{
int a=40;//non static

public static void main(String args[]){


System.out.println(a);
}
}
Test it Now

Output:Compile Time Error

Uday Singh(MCA), 09199511858 / 09835613557 Page 52


JAVA

Q) why java main method is static?


Ans) because object is not required to call static method if it were non-static method, jvm
create object first then call main() method that will lead the problem of extra memory
allocation.

3) Java static block

o Is used to initialize the static data member.


o It is executed before main method at the time of classloading.

Example of static block


class A2{
static{System.out.println("static block is invoked");}
public static void main(String args[]){
System.out.println("Hello main");
}
}
Test it Now

Output:static block is invoked


Hello main

Q) Can we execute a program without main() method?

Ans) Yes, one of the way is static block but in previous version of JDK not in JDK 1.7.

class A3{
static{
System.out.println("static block is invoked");
System.exit(0);
}
}
Test it Now

Output:static block is invoked (if not JDK7)

In JDK7 and above, output will be:

Output:Error: Main method not found in class A3, please define the main method as:
public static void main(String[] args)

Uday Singh(MCA), 09199511858 / 09835613557 Page 53


JAVA

this keyword in java

There can be a lot of usage of java this keyword. In java, this is a reference variable that refers
to the current object.

Usage of java this keyword

Here is given the 6 usage of java this keyword.

1. this keyword can be used to refer current class instance variable.


2. this() can be used to invoke current class constructor.
3. this keyword can be used to invoke current class method (implicitly)
4. this can be passed as an argument in the method call.
5. this can be passed as argument in the constructor call.
6. this keyword can also be used to return the current class instance.

Suggestion: If you are beginner to java, lookup only two usage of this keyword.

1) The this keyword can be used to refer current class instance variable.
If there is ambiguity between the instance variable and parameter, this keyword resolves the
problem of ambiguity.

Understanding the problem without this keyword

Let's understand the problem if we don't use this keyword by the example given below:

class Student10{
int id;
String name;

Student10(int id,String name){


Uday Singh(MCA), 09199511858 / 09835613557 Page 54
JAVA

id = id;
name = name;
}
void display(){System.out.println(id+" "+name);}

public static void main(String args[]){


Student10 s1 = new Student10(111,"Karan");
Student10 s2 = new Student10(321,"Aryan");
s1.display();
s2.display();
}
}
Test it Now

Output:0 null
0 null
In the above example, parameter (formal arguments) and instance variables are same that is
why we are using this keyword to distinguish between local variable and instance variable.

Solution of the above problem by this keyword

//example of this keyword


class Student11{
int id;
String name;

Student11(int id,String name){


this.id = id;
this.name = name;
}
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
Student11 s1 = new Student11(111,"Karan");
Student11 s2 = new Student11(222,"Aryan");
s1.display();
s2.display();
}
}
Test it Now

Output111 Karan
222 Aryan

Uday Singh(MCA), 09199511858 / 09835613557 Page 55


JAVA

If local variables(formal arguments) and instance variables are different, there is no need to
use this keyword like in the following program:

Program where this keyword is not required

class Student12{
int id;
String name;

Student12(int i,String n){


id = i;
name = n;
}
void display(){System.out.println(id+" "+name);}
public static void main(String args[]){
Student12 e1 = new Student12(111,"karan");
Student12 e2 = new Student12(222,"Aryan");
e1.display();
e2.display();
}
}
Test it Now

Output:111 Karan
222 Aryan

Uday Singh(MCA), 09199511858 / 09835613557 Page 56


JAVA

2) this() can be used to invoked current class constructor.

The this() constructor call can be used to invoke the current class constructor (constructor
chaining). This approach is better if you have many constructors in the class and want to reuse
that constructor.

//Program of this() constructor call (constructor chaining)

class Student13{
int id;
String name;
Student13(){System.out.println("default constructor is invoked");}

Student13(int id,String name){


this ();//it is used to invoked current class constructor.
this.id = id;
this.name = name;
}
void display(){System.out.println(id+" "+name);}

public static void main(String args[]){


Student13 e1 = new Student13(111,"karan");
Student13 e2 = new Student13(222,"Aryan");
e1.display();
e2.display();
}
}
Test it Now

Output:
default constructor is invoked
default constructor is invoked
111 Karan
222 Aryan

Where to use this() constructor call?


The this() constructor call should be used to reuse the constructor in the constructor. It
maintains the chain between the constructors i.e. it is used for constructor chaining. Let's see
the example given below that displays the actual use of this keyword.

class Student14{
int id;
String name;
String city;

Uday Singh(MCA), 09199511858 / 09835613557 Page 57


JAVA

Student14(int id,String name){


this.id = id;
this.name = name;
}
Student14(int id,String name,String city){
this(id,name);//now no need to initialize id and name
this.city=city;
}
void display(){System.out.println(id+" "+name+" "+city);}

public static void main(String args[]){


Student14 e1 = new Student14(111,"karan");
Student14 e2 = new Student14(222,"Aryan","delhi");
e1.display();
e2.display();
}
}
Test it Now

Output:111 Karan null


222 Aryan delhi

Rule: Call to this() must be the first statement in constructor.

class Student15{
int id;
String name;
Student15(){System.out.println("default constructor is invoked");}

Student15(int id,String name){


id = id;
name = name;
this ();//must be the first statement
}
void display(){System.out.println(id+" "+name);}

public static void main(String args[]){


Student15 e1 = new Student15(111,"karan");
Student15 e2 = new Student15(222,"Aryan");
e1.display();
e2.display();
}
}
Test it Now

Output:Compile Time Error


Uday Singh(MCA), 09199511858 / 09835613557 Page 58
JAVA

3)The this keyword can be used to invoke current class method (implicitly).
You may invoke the method of the current class by using the this keyword. If you don't use
the this keyword, compiler automatically adds this keyword while invoking the method. Let's
see the example

class S{
void m(){
System.out.println("method is invoked");
}
void n(){
this.m();//no need because compiler does it for you.
}
void p(){
n();//complier will add this to invoke n() method as this.n()
}
public static void main(String args[]){
S s1 = new S();
s1.p();
}
}
Test it Now

Output:method is invoked

4) this keyword can be passed as an argument in the method.


The this keyword can also be passed as an argument in the method. It is mainly used in the
event handling. Let's see the example:

class S2{
void m(S2 obj){
System.out.println("method is invoked");
}
void p(){

Uday Singh(MCA), 09199511858 / 09835613557 Page 59


JAVA

m(this);
}

public static void main(String args[]){


S2 s1 = new S2();
s1.p();
}
}
Test it Now

Output:method is invoked

Application of this that can be passed as an argument:


In event handling (or) in a situation where we have to provide reference of a class to another
one.

5) The this keyword can be passed as argument in the constructor call.


We can pass the this keyword in the constructor also. It is useful if we have to use one object
in multiple classes. Let's see the example:

class B{
A4 obj;
B(A4 obj){
this.obj=obj;
}
void display(){
System.out.println(obj.data);//using data member of A4 class
}
}

class A4{
int data=10;
A4(){
B b=new B(this);
b.display();
}
public static void main(String args[]){
A4 a=new A4();
}
}
Test it Now

Output:10

Uday Singh(MCA), 09199511858 / 09835613557 Page 60


JAVA

6) The this keyword can be used to return current class instance.


We can return the this keyword as an statement from the method. In such case, return type of
the method must be the class type (non-primitive). Let's see the example:

Syntax of this that can be returned as a statement


return_type method_name(){
return this;
}
Example of this keyword that you return as a statement from the method
class A{
A getA(){
return this;
}
void msg(){System.out.println("Hello java");}
}

class Test1{
public static void main(String args[]){
new A().getA().msg();
}
}
Test it Now

Output:Hello java

Proving this keyword


Let's prove that this keyword refers to the current class instance variable. In this program, we
are printing the reference variable and this, output of both variables are same.

class A5{
void m(){
System.out.println(this);//prints same reference ID
}

public static void main(String args[]){


A5 obj=new A5();
System.out.println(obj);//prints the reference ID

obj.m();
}
}
Test it Now

Output:A5@22b3ea59

Uday Singh(MCA), 09199511858 / 09835613557 Page 61


JAVA

A5@22b3ea59

Inheritance in Java
Inheritance in java is a mechanism in which one object acquires all the properties and
behaviors of parent object.

The idea behind inheritance in java is that you can create new classes that are built upon existing
classes. When you inherit from an existing class, you can reuse methods and fields of parent
class, and you can add new methods and fields also.

Inheritance represents the IS-A relationship, also known as parent-child relationship.

Why use inheritance in java


• For Method Overriding (so runtime polymorphism can be achieved).
• For Code Reusability.

Syntax of Java Inheritance

class Subclass-name extends Superclass-name


{
//methods and fields
}

The extends keyword indicates that you are making a new class that derives from an existing
class.

In the terminology of Java, a class that is inherited is called a super class. The new class is called
a subclass.

Uday Singh(MCA), 09199511858 / 09835613557 Page 62


JAVA

Understanding the simple example of inheritance

As displayed in the above figure, Programmer is the subclass and Employee is the superclass.
Relationship between two classes is Programmer IS-A Employee.It means that Programmer is
a type of Employee.

class Employee{
float salary=40000;
}
class Programmer extends Employee{
int bonus=10000;
public static void main(String args[]){
Programmer p=new Programmer();
System.out.println("Programmer salary is:"+p.salary);
System.out.println("Bonus of Programmer is:"+p.bonus);
}
}
Test it Now

Programmer salary is:40000.0


Bonus of programmer is:10000

In the above example, Programmer object can access the field of own class as well as of
Employee class i.e. code reusability.

Types of inheritance in java

Uday Singh(MCA), 09199511858 / 09835613557 Page 63


JAVA

On the basis of class, there can be three types of inheritance in java: single, multilevel and
hierarchical.

In java programming, multiple and hybrid inheritance is supported through interface only. We
will learn about interfaces later.

Note: Multiple inheritance is not supported in java through class.

When a class extends multiple classes i.e. known as multiple inheritance. For Example:

Uday Singh(MCA), 09199511858 / 09835613557 Page 64


JAVA

Q) Why multiple inheritance is not supported in java?

To reduce the complexity and simplify the language, multiple inheritance is not supported in
java.

Consider a scenario where A, B and C are three classes. The C class inherits A and B classes. If
A and B classes have same method and you call it from child class object, there will be
ambiguity to call method of A or B class.

Since compile time errors are better than runtime errors, java renders compile time error if you
inherit 2 classes. So whether you have same method or different, there will be compile time error
now.

class A{
void msg(){System.out.println("Hello");}
}
class B{
void msg(){System.out.println("Welcome");}
}
class C extends A,B{//suppose if it were

Public Static void main(String args[]){


C obj=new C();
obj.msg();//Now which msg() method would be invoked?
}
}
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 65


JAVA

Compile Time Error

Aggregation in Java

If a class have an entity reference, it is known as Aggregation. Aggregation represents HAS-A


relationship.

Consider a situation, Employee object contains many informations such as id, name, emailId etc.
It contains one more object named address, which contains its own informations such as city,
state, country, zipcode etc. as given below.

class Employee{
int id;
String name;
Address address;//Address is a class
...
}

In such case, Employee has an entity reference address, so relationship is Employee HAS-A
address.

Why use Aggregation?


• For Code Reusability.

Simple Example of Aggregation

In this example, we have created the reference of Operation class in the Circle class.

class Operation{
int square(int n){
return n*n;
}
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 66


JAVA

class Circle{
Operation op;//aggregation
double pi=3.14;

double area(int radius){


op=new Operation();
int rsquare=op.square(radius);//code reusability (i.e. delegates th
e method call).
return pi*rsquare;
}

public static void main(String args[]){


Circle c=new Circle();
double result=c.area(5);
System.out.println(result);
}
}
Test it Now

Output:78.5

When use Aggregation?


• Code reuse is also best achieved by aggregation when there is no is-a relationship.
• Inheritance should be used only if the relationship is-a is maintained throughout the
lifetime of the objects involved; otherwise, aggregation is the best choice.

Understanding meaningful example of Aggregation

In this example, Employee has an object of Address, address object contains its own
informations such as city, state, country etc. In such case relationship is Employee HAS-A
address.

Address.java

public class Address {


String city,state,country;

public Address(String city, String state, String country) {


this.city = city;
this.state = state;
this.country = country;
}
Uday Singh(MCA), 09199511858 / 09835613557 Page 67
JAVA

Emp.java

public class Emp {


int id;
String name;
Address address;

public Emp(int id, String name,Address address) {


this.id = id;
this.name = name;
this.address=address;
}

void display(){
System.out.println(id+" "+name);
System.out.println(address.city+" "+address.state+" "+addr
ess.country);
}

public static void main(String[] args) {


Address address1=new Address("gzb","UP","india");
Address address2=new Address("gno","UP","india");

Emp e=new Emp(111,"varun",address1);


Emp e2=new Emp(112,"arun",address2);

e.display();
e2.display();

}
}
Test it Now

Output:111 varun
gzb UP india
112 arun
gno UP india

Method Overriding in Java

If subclass (child class) has the same method as declared in the parent class, it is known
as method overriding in java.

Uday Singh(MCA), 09199511858 / 09835613557 Page 68


JAVA

In other words, If subclass provides the specific implementation of the method that has been
provided by one of its parent class, it is known as method overriding.

Usage of Java Method Overriding


o Method overriding is used to provide specific implementation of a method that is already
provided by its super class.
o Method overriding is used for runtime polymorphism

Rules for Java Method Overriding

1. method must have same name as in the parent class


2. method must have same parameter as in the parent class.
3. must be IS-A relationship (inheritance).

Understanding the problem without method overriding

Let's understand the problem that we may face in the program if we don't use method overriding.

class Vehicle{
void run(){System.out.println("Vehicle is running");}
}
class Bike extends Vehicle{

public static void main(String args[]){


Bike obj = new Bike();
obj.run();
}
}
Test it Now

Output:Vehicle is running

Problem is that I have to provide a specific implementation of run() method in subclass that is
why we use method overriding.

Example of method overriding

In this example, we have defined the run method in the subclass as defined in the parent class but
it has some specific implementation. The name and parameter of the method is same and there is
IS-A relationship between the classes, so there is method overriding.

class Vehicle{

Uday Singh(MCA), 09199511858 / 09835613557 Page 69


JAVA

void run(){System.out.println("Vehicle is running");}


}
class Bike2 extends Vehicle{
void run(){System.out.println("Bike is running safely");}

public static void main(String args[]){


Bike2 obj = new Bike2();
obj.run();
}
Test it Now

Output:Bike is running safely

Real example of Java Method Overriding

Consider a scenario, Bank is a class that provides functionality to get rate of interest. But, rate of
interest varies according to banks. For example, SBI, ICICI and AXIS banks could provide 8%,
7% and 9% rate of interest.

class Bank{
int getRateOfInterest(){return 0;}
}

class SBI extends Bank{


int getRateOfInterest(){return 8;}
}

class ICICI extends Bank{


int getRateOfInterest(){return 7;}
}
class AXIS extends Bank{
int getRateOfInterest(){return 9;}
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 70


JAVA

class Test2{
public static void main(String args[]){
SBI s=new SBI();
ICICI i=new ICICI();
AXIS a=new AXIS();
System.out.println("SBI Rate of Interest: "+s.getRateOfInterest());

System.out.println("ICICI Rate of Interest: "+i.getRateOfInterest()


);
System.out.println("AXIS Rate of Interest: "+a.getRateOfInterest()
);
}
}
Test it Now

Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

Can we override static method?

No, static method cannot be overridden. It can be proved by runtime polymorphism, so we will
learn it later.

Why we cannot override static method?

because static method is bound with class whereas instance method is bound with object. Static
belongs to class area and instance belongs to heap area.

Can we override java main method?

No, because main is a static method.

Difference between method Overloading and Method Overriding in java

There are many differences between method overloading and method overriding in java. A list of
differences between method overloading and method overriding are given below:

No. Method Overloading Method Overriding


1) Method overloading is used to increase Method overriding is used to
the readability of the program. provide the specific
implementation of the method

Uday Singh(MCA), 09199511858 / 09835613557 Page 71


JAVA

that is already provided by its


super class.
2) Method overloading is performed within Method overriding occurs in
class. two classes that have IS-A
(inheritance) relationship.
3) In case of method In case of method
overloading, parameter must be overriding,parameter must be
different. same.
4) Method overloading is the example Method overriding is the
of compile time polymorphism. example of run time
polymorphism.
5) In java, method overloading can't be Return type must be same or
performed by changing return type of covariant in method
the method only. Return type can be overriding.
same or different in method overloading.
But you must have to change the
parameter.

Java Method Overloading example

class OverloadingExample{
static int add(int a,int b){return a+b;}
static int add(int a,int b,int c){return a+b+c;}
}

Java Method Overriding example

class Animal{
void eat(){System.out.println("eating...");}
}
class Dog extends Animal{
void eat(){System.out.println("eating bread...");}
}
Covariant Return Type

The covariant return type specifies that the return type may vary in the same direction as the
subclass.

Uday Singh(MCA), 09199511858 / 09835613557 Page 72


JAVA

Before Java5, it was not possible to override any method by changing the return type. But now,
since Java5, it is possible to override method by changing the return type if subclass overrides
any method whose return type is Non-Primitive but it changes its return type to subclass type.
Let's take a simple example:

Note: If you are beginner to java, skip this topic and return to it after OOPs concepts.

Simple example of Covariant Return Type

class A{
A get(){return this;}
}

class B1 extends A{
B1 get(){return this;}
void message(){System.out.println("welcome to covariant return type");}

public static void main(String args[]){


new B1().get().message();
}
}
Test it Now

Output:welcome to covariant return type

As you can see in the above example, the return type of the get() method of A class is A but the
return type of the get() method of B class is B. Both methods have different return type but it is
method overriding. This is known as covariant return type.

super keyword in java

The super keyword in java is a reference variable that is used to refer immediate parent class
object.

Whenever you create the instance of subclass, an instance of parent class is created implicitly i.e.
referred by super reference variable.

Usage of java super Keyword

1. super is used to refer immediate parent class instance variable.


2. super() is used to invoke immediate parent class constructor.
3. super is used to invoke immediate parent class method.

Uday Singh(MCA), 09199511858 / 09835613557 Page 73


JAVA

1) super is used to refer immediate parent class instance variable.

Problem without super keyword

class Vehicle{
int speed=50;
}
class Bike3 extends Vehicle{
int speed=100;
void display(){
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]){
Bike3 b=new Bike3();
b.display();
}
}
Test it Now

Output:100
In the above example Vehicle and Bike both class have a common property speed. Instance
variable of current class is refered by instance bydefault, but I have to refer parent class
instance variable that is why we use super keyword to distinguish between parent class
instance variable and current class instance variable.

Solution by super keyword

//example of super keyword

class Vehicle{
int speed=50;
}

class Bike4 extends Vehicle{


int speed=100;

void display(){
System.out.println(super.speed);//will print speed of Veh
icle now
}
public static void main(String args[]){
Bike4 b=new Bike4();
b.display();

Uday Singh(MCA), 09199511858 / 09835613557 Page 74


JAVA

}
Test it Now

Output:50

2) super is used to invoke parent class constructor.

The super keyword can also be used to invoke the parent class constructor as given below:

class Vehicle{
Vehicle(){System.out.println("Vehicle is created");}
}

class Bike5 extends Vehicle{


Bike5(){
super();//will invoke parent class constructor
System.out.println("Bike is created");
}
public static void main(String args[]){
Bike5 b=new Bike5();

}
}
Test it Now

Output:Vehicle is created
Bike is created

Note: super() is added in each class constructor automatically by compiler.

As we know well that default constructor is provided by compiler automatically but it also adds
super() for the first statement.If you are creating your own constructor and you don't have either

Uday Singh(MCA), 09199511858 / 09835613557 Page 75


JAVA

this() or super() as the first statement, compiler will provide super() as the first statement of the
constructor.

Another example of super keyword where super() is provided by the compiler implicitly.

class Vehicle{
Vehicle(){System.out.println("Vehicle is created");}
}

class Bike6 extends Vehicle{


int speed;
Bike6(int speed){
this.speed=speed;
System.out.println(speed);
}
public static void main(String args[]){
Bike6 b=new Bike6(10);
}
}
Test it Now

Output:Vehicle is created
10

3) super can be used to invoke parent class method

The super keyword can also be used to invoke parent class method. It should be used in case
subclass contains the same method as parent class as in the example given below:

class Person{
void message(){System.out.println("welcome");}
}

class Student16 extends Person{


void message(){System.out.println("welcome to java");}

void display(){
message();//will invoke current class message() method
super.message();//will invoke parent class message() method
}

public static void main(String args[]){


Student16 s=new Student16();
s.display();
}
}
Uday Singh(MCA), 09199511858 / 09835613557 Page 76
JAVA

Test it Now

Output:welcome to java
welcome
In the above example Student and Person both classes have message() method if we call
message() method from Student class, it will call the message() method of Student class not of
Person class because priority is given to local.

In case there is no method in subclass as parent, there is no need to use super. In the example
given below message() method is invoked from Student class but Student class does not have
message() method, so you can directly call message() method.

Program in case super is not required


class Person{
void message(){System.out.println("welcome");}
}

class Student17 extends Person{

void display(){
message();//will invoke parent class message() method
}

public static void main(String args[]){


Student17 s=new Student17();
s.display();
}
}
Test it Now

Output:welcome

Instance initializer block:


Instance Initializer block is used to initialize the instance data member. It run each time
when object of the class is created.

The initialization of the instance variable can be directly but there can be performed extra
operations while initializing the instance variable in the instance initializer block.

Que) What is the use of instance initializer block while we can directly assign a value in
instance data member? For example:

Uday Singh(MCA), 09199511858 / 09835613557 Page 77


JAVA

class Bike{
int speed=100;
}

Why use instance initializer block?

Suppose I have to perform some operations while assigning value to instance data member
e.g. a for loop to fill a complex array or error handling etc.

Example of instance initializer block


Let's see the simple example of instance initializer block the performs initialization.

class Bike7{
int speed;

Bike7(){System.out.println("speed is "+speed);}

{speed=100;}

public static void main(String args[]){


Bike7 b1=new Bike7();
Bike7 b2=new Bike7();
}
}
Test it Now

Output:speed is 100
speed is 100

There are three places in java where you can perform operations:
1. method
2. constructor
3. block

What is invoked firstly instance initializer block or constructor?

class Bike8{
int speed;

Bike8(){System.out.println("constructor is invoked");}

Uday Singh(MCA), 09199511858 / 09835613557 Page 78


JAVA

{System.out.println("instance initializer block invoked");}

public static void main(String args[]){


Bike8 b1=new Bike8();
Bike8 b2=new Bike8();
}
}
Test it Now

Output:instance initializer block invoked


constructor is invoked
instance initializer block invoked
constructor is invoked
In the above example, it seems that instance initializer block is firstly invoked but NO.
Instance intializer block is invoked at the time of object creation. The java compiler copies the
instance initializer block in the constructor after the first statement super(). So firstly,
constructor is invoked. Let's understand it by the figure given below:

Note: The java compiler copies the code of instance initializer block in every constructor.

Uday Singh(MCA), 09199511858 / 09835613557 Page 79


JAVA

Rules for instance initializer block :

There are mainly three rules for the instance initializer block. They are as follows:

1. The instance initializer block is created when instance of the class is created.
2. The instance initializer block is invoked after the parent class constructor is invoked (i.e.
after super() constructor call).
3. The instance initializer block comes in the order in which they appear.

Program of instance initializer block that is invoked after super()

class A{
A(){
System.out.println("parent class constructor invoked");
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 80


JAVA

}
class B2 extends A{
B2(){
super();
System.out.println("child class constructor invoked");
}

{System.out.println("instance initializer block is invoked");


}

public static void main(String args[]){


B2 b=new B2();
}
}
Test it Now

Output:parent class constructor invoked


instance initializer block is invoked
child class constructor invoked

Another example of instance block

class A{
A(){
System.out.println("parent class constructor invoked");
}
}

class B3 extends A{
B3(){
super();
System.out.println("child class constructor invoked");
}

B3(int a){
super();
System.out.println("child class constructor invoked "+a);
}

{System.out.println("instance initializer block is invoked");}

public static void main(String args[]){


B3 b1=new B3();
B3 b2=new B3(10);
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 81


JAVA

}
Test it Now

Output:parent class constructor invoked


instance initializer block is invoked
child class constructor invoked
parent class constructor invoked
instance initializer block is invoked
child class constructor invoked 10

Final Keyword In Java

The final keyword in java is used to restrict the user. The java final keyword can be used in
many context. Final can be:

1. variable
2. method
3. class

The final keyword can be applied with the variables, a final variable that have no value it is
called blank final variable or uninitialized final variable. It can be initialized in the constructor
only. The blank final variable can be static also which will be initialized in the static block only.
We will have detailed learning of these. Let's first learn the basics of final keyword.

1) Java final variable

If you make any variable as final, you cannot change the value of final variable(It will be
constant).

Uday Singh(MCA), 09199511858 / 09835613557 Page 82


JAVA

Example of final variable

There is a final variable speedlimit, we are going to change the value of this variable, but It can't
be changed because final variable once assigned a value can never be changed.

class Bike9{
final int speedlimit=90;//final variable
void run(){
speedlimit=400;
}
public static void main(String args[]){
Bike9 obj=new Bike9();
obj.run();
}
}//end of class
Test it Now

Output:Compile Time Error

2) Java final method

If you make any method as final, you cannot override it.

Example of final method


class Bike{
final void run(){System.out.println("running");}
}

class Honda extends Bike{


void run(){System.out.println("running safely with 100k
mph");}

public static void main(String args[]){


Honda honda= new Honda();
honda.run();
}
}
Test it Now

Output:Compile Time Error

3) Java final class

If you make any class as final, you cannot extend it.

Uday Singh(MCA), 09199511858 / 09835613557 Page 83


JAVA

Example of final class


final class Bike{}

class Honda1 extends Bike{


void run(){System.out.println("running safely with 100kmph");}

public static void main(String args[]){


Honda1 honda= new Honda();
honda.run();
}
}
Test it Now

Output:Compile Time Error

Q) Is final method inherited?

Ans) Yes, final method is inherited but you cannot override it. For Example:

class Bike{
final void run(){System.out.println("running...");}
}
class Honda2 extends Bike{
public static void main(String args[]){
new Honda2().run();
}
}
Test it Now

Output:running...

Q) What is blank or uninitialized final variable?

A final variable that is not initialized at the time of declaration is known as blank final variable.

If you want to create a variable that is initialized at the time of creating object and once
initialized may not be changed, it is useful. For example PAN CARD number of an employee.

It can be initialized only in constructor.

Uday Singh(MCA), 09199511858 / 09835613557 Page 84


JAVA

Example of blank final variable


class Student{
int id;
String name;
final String PAN_CARD_NUMBER;
...
}

Que) Can we initialize blank final variable?

Yes, but only in constructor. For example:

class Bike10{
final int speedlimit;//blank final variable

Bike10(){
speedlimit=70;
System.out.println(speedlimit);
}

public static void main(String args[]){


new Bike10();
}
}
Test it Now

Output:70

static blank final variable

A static final variable that is not initialized at the time of declaration is known as static blank
final variable. It can be initialized only in static block.

Example of static blank final variable


class A{
static final int data;//static blank final variable
static{ data=50;}
public static void main(String args[]){
System.out.println(A.data);
}
}

Q) What is final parameter?

If you declare any parameter as final, you cannot change the value of it.

Uday Singh(MCA), 09199511858 / 09835613557 Page 85


JAVA

class Bike11{
int cube(final int n){
n=n+2;//can't be changed as n is final
n*n*n;
}
public static void main(String args[]){
Bike11 b=new Bike11();
b.cube(5);
}
}
Test it Now

Output:Compile Time Error

Q) Can we declare a constructor final?

No, because constructor is never inherited.

Polymorphism in Java

Polymorphism in java is a concept by which we can perform a single action by different ways.
Polymorphism is derived from 2 greek words: poly and morphs. The word "poly" means many
and "morphs" means forms. So polymorphism means many forms.

There are two types of polymorphism in java: compile time polymorphism and runtime
polymorphism. We can perform polymorphism in java by method overloading and method
overriding.

If you overload static method in java, it is the example of compile time polymorphism. Here, we
will focus on runtime polymorphism in java.

Runtime Polymorphism in Java

Runtime polymorphism or Dynamic Method Dispatch is a process in which a call to an


overridden method is resolved at runtime rather than compile-time.

In this process, an overridden method is called through the reference variable of a superclass.
The determination of the method to be called is based on the object being referred to by the
reference variable.

Let's first understand the upcasting before Runtime Polymorphism.

Uday Singh(MCA), 09199511858 / 09835613557 Page 86


JAVA

Upcasting

When reference variable of Parent class refers to the object of Child class, it is known as
upcasting. For example:

class A{}
class B extends A{}
A a=new B();//upcasting

Example of Java Runtime Polymorphism

In this example, we are creating two classes Bike and Splendar. Splendar class extends Bike
class and overrides its run() method. We are calling the run method by the reference variable of
Parent class. Since it refers to the subclass object and subclass method overrides the Parent class
method, subclass method is invoked at runtime.

Since method invocation is determined by the JVM not compiler, it is known as runtime
polymorphism.

class Bike{
void run(){System.out.println("running");}
}
class Splender extends Bike{
void run(){System.out.println("running safely with 60km");}

public static void main(String args[]){


Bike b = new Splender();//upcasting
b.run();
}
}
Test it Now

Output:running safely with 60km.

Uday Singh(MCA), 09199511858 / 09835613557 Page 87


JAVA

Real example of Java Runtime Polymorphism

Consider a scenario, Bank is a class that provides method to get the rate of interest. But, rate of
interest may differ according to banks. For example, SBI, ICICI and AXIS banks could provide
8%, 7% and 9% rate of interest.

Note: It is also given in method overriding but there was no upcasting.

class Bank{
int getRateOfInterest(){return 0;}
}

class SBI extends Bank{


int getRateOfInterest(){return 8;}
}

class ICICI extends Bank{


int getRateOfInterest(){return 7;}
}
class AXIS extends Bank{
int getRateOfInterest(){return 9;}
}

class Test3{
public static void main(String args[]){
Bank b1=new SBI();
Bank b2=new ICICI();
Bank b3=new AXIS();
System.out.println("SBI Rate of Interest: "+b1.getRateOfIn
terest());
System.out.println("ICICI Rate of Interest: "+b2.getRateOf
Interest());

Uday Singh(MCA), 09199511858 / 09835613557 Page 88


JAVA

System.out.println("AXIS Rate of Interest: "+b3.getRateOf


Interest());
}
}
Test it Now

Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

Java Runtime Polymorphism with data member


Method is overridden not the datamembers, so runtime polymorphism can't be achieved by
data members.

In the example given below, both the classes have a datamember speedlimit, we are accessing
the datamember by the reference variable of Parent class which refers to the subclass object.
Since we are accessing the datamember which is not overridden, hence it will access the
datamember of Parent class always.

Rule: Runtime polymorphism can't be achieved by data members.

class Bike{
int speedlimit=90;
}
class Honda3 extends Bike{
int speedlimit=150;

public static void main(String args[]){


Bike obj=new Honda3();
System.out.println(obj.speedlimit);//90
}
Test it Now

Output:90

Java Runtime Polymorphism with Multilevel Inheritance

Let's see the simple example of Runtime Polymorphism with multilevel inheritance.

class Animal{
void eat(){System.out.println("eating");}
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 89


JAVA

class Dog extends Animal{


void eat(){System.out.println("eating fruits");}
}

class BabyDog extends Dog{


void eat(){System.out.println("drinking milk");}

public static void main(String args[]){


Animal a1,a2,a3;
a1=new Animal();
a2=new Dog();
a3=new BabyDog();

a1.eat();
a2.eat();
a3.eat();
}
}
Test it Now

Output: eating
eating fruits
drinking Milk

Try for Output


class Animal{
void eat(){System.out.println("animal is eating...");}
}

class Dog extends Animal{


void eat(){System.out.println("dog is eating...");}
}

class BabyDog1 extends Dog{


public static void main(String args[]){
Animal a=new BabyDog1();
a.eat();
}}
Test it Now

Output: Dog is eating

Since, BabyDog is not overriding the eat() method, so eat() method of Dog class is invoked.

Uday Singh(MCA), 09199511858 / 09835613557 Page 90


JAVA

Static Binding and Dynamic Binding

Connecting a method call to the method body is known as binding.

There are two types of binding

1. static binding (also known as early binding).


2. dynamic binding (also known as late binding).

Understanding Type

Let's understand the type of instance.

1) variables have a type

Each variable has a type, it may be primitive and non-primitive.

int data=30;

Here data variable is a type of int.

2) References have a type

class Dog{
public static void main(String args[]){
Dog d1;//Here d1 is a type of Dog
}
}

3) Objects have a type

An object is an instance of particular java class,but it is also an instance of its superclass.

class Animal{}

class Dog extends Animal{


public static void main(String args[]){
Dog d1=new Dog();
}

Uday Singh(MCA), 09199511858 / 09835613557 Page 91


JAVA

}
Here d1 is an instance of Dog class, but it is also an instance of Animal.

static binding

When type of the object is determined at compiled time(by the compiler), it is known as static
binding.

If there is any private, final or static method in a class, there is static binding.

Example of static binding


class Dog{
private void eat(){System.out.println("dog is eating...");}

public static void main(String args[]){


Dog d1=new Dog();
d1.eat();
}
}

Dynamic binding

When type of the object is determined at run-time, it is known as dynamic binding.

Example of dynamic binding


class Animal{
void eat(){System.out.println("animal is eating...");}
}

class Dog extends Animal{


void eat(){System.out.println("dog is eating...");}

public static void main(String args[]){


Animal a=new Dog();
a.eat();
}
}
Test it Now

Output:dog is eating...
In the above example object type cannot be determined by the compiler, because the instance
of Dog is also an instance of Animal.So compiler doesn't know its type, only its base type.

Uday Singh(MCA), 09199511858 / 09835613557 Page 92


JAVA

Java instanceof

The java instanceof operator is used to test whether the object is an instance of the specified
type (class or subclass or interface).

The instanceof in java is also known as typecomparison operator because it compares the
instance with type. It returns either true or false. If we apply the instanceof operator with any
variable that has null value, it returns false.

Simple example of java instanceof

Let's see the simple example of instance operator where it tests the current class.

1. class Simple1{
2. public static void main(String args[]){
3. Simple1 s=new Simple1();
4. System.out.println(s instanceof Simple);//true
5. }
6. }
Test it Now

Output:true

An object of subclass type is also a type of parent class. For example, if Dog extends Animal
then object of Dog can be referred by either Dog or Animal class.

Another example of java instanceof operator

1. class Animal{}
2. class Dog1 extends Animal{//Dog inherits Animal
3.
4. public static void main(String args[]){
5. Dog1 d=new Dog1();
6. System.out.println(d instanceof Animal);//true
7. }
8. }
Test it Now

Output:true

instanceof in java with a variable that have null value

Uday Singh(MCA), 09199511858 / 09835613557 Page 93


JAVA

If we apply instanceof operator with a variable that have null value, it returns false. Let's see the
example given below where we apply instanceof operator with the variable that have null value.

1. class Dog2{
2. public static void main(String args[]){
3. Dog2 d=null;
4. System.out.println(d instanceof Dog2);//false
5. }
6. }
Test it Now

Output:false

Downcasting with java instanceof operator

When Subclass type refers to the object of Parent class, it is known as downcasting. If we
perform it directly, compiler gives Compilation error. If you perform it by typecasting,
ClassCastException is thrown at runtime. But if we use instanceof operator, downcasting is
possible.

1. Dog d=new Animal();//Compilation error

If we perform downcasting by typecasting, ClassCastException is thrown at runtime.

1. Dog d=(Dog)new Animal();


2. //Compiles successfully but ClassCastException is thrown at runtime

Possibility of downcasting with instanceof

Let's see the example, where downcasting is possible by instanceof operator.

1. class Animal { }
2.
3. class Dog3 extends Animal {
4. static void method(Animal a) {
5. if(a instanceof Dog3){
6. Dog3 d=(Dog3)a;//downcasting
7. System.out.println("ok downcasting performed");
8. }
9. }
10.
11. public static void main (String [] args) {
12. Animal a=new Dog3();
13. Dog3.method(a);
14. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 94


JAVA

15.
16. }
Test it Now

Output:ok downcasting performed

Downcasting without the use of java instanceof

Downcasting can also be performed without the use of instanceof operator as displayed in the
following example:

1. class Animal { }
2. class Dog4 extends Animal {
3. static void method(Animal a) {
4. Dog4 d=(Dog4)a;//downcasting
5. System.out.println("ok downcasting performed");
6. }
7. public static void main (String [] args) {
8. Animal a=new Dog4();
9. Dog4.method(a);
10. }
11. }
Test it Now

Output:ok downcasting performed

Let's take closer look at this, actual object that is referred by a, is an object of Dog class. So if we
downcast it, it is fine. But what will happen if we write:

1. Animal a=new Animal();


2. Dog.method(a);
3. //Now ClassCastException but not in case of instanceof operator

Understanding Real use of instanceof in java

Let's see the real use of instanceof keyword by the example given below.

1. interface Printable{}
2. class A implements Printable{
3. public void a(){System.out.println("a method");}
4. }
5. class B implements Printable{
6. public void b(){System.out.println("b method");}
7. }
8.
9. class Call{

Uday Singh(MCA), 09199511858 / 09835613557 Page 95


JAVA

10. void invoke(Printable p){//upcasting


11. if(p instanceof A){
12. A a=(A)p;//Downcasting
13. a.a();
14. }
15. if(p instanceof B){
16. B b=(B)p;//Downcasting
17. b.b();
18. }
19.
20. }
21. }//end of Call class
22.
23. class Test4{
24. public static void main(String args[]){
25. Printable p=new B();
26. Call c=new Call();
27. c.invoke(p);
28. }
29. }
Test it Now

Output: b method

Abstract class in Java

A class that is declared with abstract keyword, is known as abstract class in java. It can have
abstract and non-abstract methods (method with body).

Before learning java abstract class, let's understand the abstraction in java first.

Abstraction in Java

Abstraction is a process of hiding the implementation details and showing only functionality to
the user.

Another way, it shows only important things to the user and hides the internal details for
example sending sms, you just type the text and send the message. You don't know the internal
processing about the message delivery.

Abstraction lets you focus on what the object does instead of how it does it.

Uday Singh(MCA), 09199511858 / 09835613557 Page 96


JAVA

Ways to achieve Abstaction

There are two ways to achieve abstraction in java

1. Abstract class (0 to 100%)


2. Interface (100%)

Abstract class in Java

A class that is declared as abstract is known as abstract class. It needs to be extended and its
method implemented. It cannot be instantiated.

Example abstract class


1. abstract class A{}

abstract method
A method that is declared as abstract and does not have implementation is known as abstract
method.

Example abstract method


1. abstract void printStatus();//no body and abstract
Example of abstract class that has abstract method

In this example, Bike the abstract class that contains only one abstract method run. It
implementation is provided by the Honda class.

1. abstract class Bike{


2. abstract void run();
3. }
4.
5. class Honda4 extends Bike{
6. void run(){System.out.println("running safely..");}
7.
8. public static void main(String args[]){
9. Bike obj = new Honda4();
10. obj.run();
11. }
12. }
Test it Now

running safely..

Uday Singh(MCA), 09199511858 / 09835613557 Page 97


JAVA

Understanding the real scenario of abstract class

In this example, Shape is the abstract class, its implementation is provided by the Rectangle and
Circle classes. Mostly, we don't know about the implementation class (i.e. hidden to the end
user) and object of the implementation class is provided by the factory method.

A factory method is the method that returns the instance of the class. We will learn about the
factory method later.

In this example, if you create the instance of Rectangle class, draw() method of Rectangle class
will be invoked.

File: TestAbstraction1.java

1. abstract class Shape{


2. abstract void draw();
3. }
4. //In real scenario, implementation is provided by others i.e. unknown by end user
5. class Rectangle extends Shape{
6. void draw(){System.out.println("drawing rectangle");}
7. }
8.
9. class Circle1 extends Shape{
10. void draw(){System.out.println("drawing circle");}
11. }
12.
13. //In real scenario, method is called by programmer or user
14. class TestAbstraction1{
15. public static void main(String args[]){
16. Shape s=new Circle1();//In real scenario, object is provided through method e.g. getShape() met
hod
17. s.draw();
18. }
19. }
Test it Now

drawing circle

Another example of abstract class in java

File: TestBank.java

1. abstract class Bank{


2. abstract int getRateOfInterest();

Uday Singh(MCA), 09199511858 / 09835613557 Page 98


JAVA

3. }
4.
5. class SBI extends Bank{
6. int getRateOfInterest(){return 7;}
7. }
8. class PNB extends Bank{
9. int getRateOfInterest(){return 7;}
10. }
11.
12. class TestBank{
13. public static void main(String args[]){
14. Bank b=new SBI();//if object is PNB, method of PNB will be invoked
15. int interest=b.getRateOfInterest();
16. System.out.println("Rate of Interest is: "+interest+" %");
17. }}
Test it Now

Rate of Interest is: 7 %

Abstract class having constructor, data member, methods etc.

An abstract class can have data member, abstract method, method body, constructor and even
main() method.

File: TestAbstraction2.java

1. //example of abstract class that have method body


2. abstract class Bike{
3. Bike(){System.out.println("bike is created");}
4. abstract void run();
5. void changeGear(){System.out.println("gear changed");}
6. }
7.
8. class Honda extends Bike{
9. void run(){System.out.println("running safely..");}
10. }
11. class TestAbstraction2{
12. public static void main(String args[]){
13. Bike obj = new Honda();
14. obj.run();
15. obj.changeGear();
16. }
17. }
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 99


JAVA

bike is created
running safely..
gear changed

Rule: If there is any abstract method in a class, that class must be abstract.

1. class Bike12{
2. abstract void run();
3. }
Test it Now

compile time error

Rule: If you are extending any abstract class that have abstract method, you must either
provide the implementation of the method or make this class abstract.

Another real scenario of abstract class

The abstract class can also be used to provide some implementation of the interface. In such
case, the end user may not be forced to override all the methods of the interface.

Note: If you are beginner to java, learn interface first and skip this example.

1. interface A{
2. void a();
3. void b();
4. void c();
5. void d();
6. }
7.
8. abstract class B implements A{
9. public void c(){System.out.println("I am C");}
10. }
11.
12. class M extends B{
13. public void a(){System.out.println("I am a");}
14. public void b(){System.out.println("I am b");}
15. public void d(){System.out.println("I am d");}
16. }
17.
18. class Test5{
19. public static void main(String args[]){
20. A a=new M();

Uday Singh(MCA), 09199511858 / 09835613557 Page 100


JAVA

21. a.a();
22. a.b();
23. a.c();
24. a.d();
25. }}
Test it Now

Output:I am a
I am b
I am c
I am d

Interface in Java

An interface in java is a blueprint of a class. It has static constants and abstract methods only.

The interface in java is a mechanism to achieve fully abstraction. There can be only abstract
methods in the java interface not method body. It is used to achieve fully abstraction and
multiple inheritance in Java.

Java Interface also represents IS-A relationship.

It cannot be instantiated just like abstract class.

Why use Java interface?

There are mainly three reasons to use interface. They are given below.

• It is used to achieve fully abstraction.


• By interface, we can support the functionality of multiple inheritance.
• It can be used to achieve loose coupling.

The java compiler adds public and abstract keywords before the interface method and public,
static and final keywords before data members.

In other words, Interface fields are public, static and final bydefault, and methods are public and
abstract.

Uday Singh(MCA), 09199511858 / 09835613557 Page 101


JAVA

Understanding relationship between classes and interfaces

As shown in the figure given below, a class extends another class, an interface extends another
interface but a class implements an interface.

Uday Singh(MCA), 09199511858 / 09835613557 Page 102


JAVA

Simple example of Java interface

In this example, Printable interface have only one method, its implementation is provided in
the A class.

1. interface printable{
2. void print();
3. }
4.
5. class A6 implements printable{
6. public void print(){System.out.println("Hello");}
7.
8. public static void main(String args[]){
9. A6 obj = new A6();
10. obj.print();
11. }
12. }
Test it Now

Output:Hello

Multiple inheritance in Java by interface

If a class implements multiple interfaces, or an interface extends multiple interfaces i.e. known
as multiple inheritance.

Uday Singh(MCA), 09199511858 / 09835613557 Page 103


JAVA

1. interface Printable{
2. void print();
3. }
4.
5. interface Showable{
6. void show();
7. }
8.
9. class A7 implements Printable,Showable{
10.
11. public void print(){System.out.println("Hello");}
12. public void show(){System.out.println("Welcome");}
13.
14. public static void main(String args[]){
15. A7 obj = new A7();
16. obj.print();
17. obj.show();
18. }
19. }
Test it Now

Output:Hello
Welcome

Q) Multiple inheritance is not supported through class in java but it is possible by interface,
why?

As we have explained in the inheritance chapter, multiple inheritance is not supported in case
of class. But it is supported in case of interface because there is no ambiguity as
implementation is provided by the implementation class. For example:

1. interface Printable{

Uday Singh(MCA), 09199511858 / 09835613557 Page 104


JAVA

2. void print();
3. }
4.
5. interface Showable{
6. void print();
7. }
8.
9. class testinterface1 implements Printable,Showable{
10.
11. public void print(){System.out.println("Hello");}
12.
13. public static void main(String args[]){
14. testinterface1 obj = new testinterface1();
15. obj.print();
16. }
17. }
Test it Now

Hello

As you can see in the above example, Printable and Showable interface have same methods but
its implementation is provided by class A, so there is no ambiguity.

Interface inheritance

A class implements interface but one interface extends another interface .

1. interface Printable{
2. void print();
3. }
4. interface Showable extends Printable{
5. void show();
6. }
7. class Testinterface2 implements Showable{
8.
9. public void print(){System.out.println("Hello");}
10. public void show(){System.out.println("Welcome");}
11.
12. public static void main(String args[]){
13. Testinterface2 obj = new Testinterface2();
14. obj.print();
15. obj.show();
16. }
17. }
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 105


JAVA

Hello
Welcome

Q) What is marker or tagged interface?

An interface that have no member is known as marker or tagged interface. For example:
Serializable, Cloneable, Remote etc. They are used to provide some essential information to the
JVM so that JVM may perform some useful operation.

1. //How Serializable interface is written?


2. public interface Serializable{
3. }

Nested Interface in Java

Note: An interface can have another interface i.e. known as nested interface. We will learn it in
detail in the nested classes chapter. For example:

1. interface printable{
2. void print();
3. interface MessagePrintable{
4. void msg();
5. }
6. }

Difference between abstract class and interface

Abstract class and interface both are used to achieve abstraction where we can declare the
abstract methods. Abstract class and interface both can't be instantiated.

But there are many differences between abstract class and interface that are given below.

Abstract class Interface

1) Abstract class can have abstract and non- Interface can have only abstract methods.
abstract methods.

2) Abstract class doesn't support multiple Interface supports multiple inheritance.


inheritance.

Uday Singh(MCA), 09199511858 / 09835613557 Page 106


JAVA

3) Abstract class can have final, non-final, Interface has only static and final
static and non-static variables. variables.

4) Abstract class can have static methods, Interface can't have static methods, main
main method and constructor. method or constructor.

5) Abstract class can provide the Interface can't provide the


implementation of interface. implementation of abstract class.

6) The abstract keyword is used to declare The interface keyword is used to declare
abstract class. interface.

7) Example: Example:
public class Shape{ public interface Drawable{
public abstract void draw(); void draw();
} }

Simply, abstract class achieves partial abstraction (0 to 100%) whereas interface achieves fully
abstraction (100%).

Example of abstract class and interface in Java

Let's see a simple example where we are using interface and abstract class both.

1. //Creating interface that has 4 methods


2. interface A{
3. void a();//bydefault, public and abstract
4. void b();
5. void c();
6. void d();
7. }
8.
9. //Creating abstract class that provides the implementation of one method of A interface
10. abstract class B implements A{
11. public void c(){System.out.println("I am C");}
12. }
13.
14. //Creating subclass of abstract class, now we need to provide the implementation of rest of the m
ethods
15. class M extends B{
16. public void a(){System.out.println("I am a");}
17. public void b(){System.out.println("I am b");}

Uday Singh(MCA), 09199511858 / 09835613557 Page 107


JAVA

18. public void d(){System.out.println("I am d");}


19. }
20.
21. //Creating a test class that calls the methods of A interface
22. class Test5{
23. public static void main(String args[]){
24. A a=new M();
25. a.a();
26. a.b();
27. a.c();
28. a.d();
29. }}
Test it Now

Output:

I am a
I am b
I am c
I am d
Java Package

A java package is a group of similar types of classes, interfaces and sub-packages.

Package in java can be categorized in two form, built-in package and user-defined package.

There are many built-in packages such as java, lang, awt, javax, swing, net, io, util, sql etc.

Here, we will have the detailed learning of creating and using user-defined packages.

Advantage of Java Package

1) Java package is used to categorize the classes and interfaces so that they can be easily
maintained.

2) Java package provides access protection.

3) Java package removes naming collision.

Uday Singh(MCA), 09199511858 / 09835613557 Page 108


JAVA

Simple example of java package

The package keyword is used to create a package in java.

1. //save as Simple.java
2. package mypack;
3. public class Simple{
4. public static void main(String args[]){
5. System.out.println("Welcome to package");
6. }
7. }

How to compile java package

If you are not using any IDE, you need to follow the syntax given below:

1. javac -d directory javafilename

For example

1. javac -d . Simple.java

Uday Singh(MCA), 09199511858 / 09835613557 Page 109


JAVA

The -d switch specifies the destination where to put the generated class file. You can use any
directory name like /home (in case of Linux), d:/abc (in case of windows) etc. If you want to
keep the package within the same directory, you can use . (dot).

How to run java package program

You need to use fully qualified name e.g. mypack.Simple etc to run the class.

To Compile: javac -d . Simple.java

To Run: java mypack.Simple

Output:Welcome to package
The -d is a switch that tells the compiler where to put the class file i.e. it represents
destination. The . represents the current folder.

How to access package from another package?

There are three ways to access the package from outside the package.
1. import package.*;
2. import package.classname;
3. fully qualified name.

1) Using packagename.*

If you use package.* then all the classes and interfaces of this package will be accessible but
not subpackages.

The import keyword is used to make the classes and interface of another package accessible to
the current package.

Example of package that import the packagename.*

1. //save by A.java
2.

Uday Singh(MCA), 09199511858 / 09835613557 Page 110


JAVA

3. package pack;
4. public class A{
5. public void msg(){System.out.println("Hello");}
6. }
1. //save by B.java
2.
3. package mypack;
4. import pack.*;
5.
6. class B{
7. public static void main(String args[]){
8. A obj = new A();
9. obj.msg();
10. }
11. }
Output:Hello

2) Using packagename.classname

If you import package.classname then only declared class of this package will be accessible.

Example of package by import package.classname

1. //save by A.java
2.
3. package pack;
4. public class A{
5. public void msg(){System.out.println("Hello");}
6. }
1. //save by B.java
2.
3. package mypack;
4. import pack.A;
5.
6. class B{
7. public static void main(String args[]){
8. A obj = new A();
9. obj.msg();
10. }
11. }
Output:Hello

3) Using fully qualified name

Uday Singh(MCA), 09199511858 / 09835613557 Page 111


JAVA

If you use fully qualified name then only declared class of this package will be accessible. Now
there is no need to import. But you need to use fully qualified name every time when you are
accessing the class or interface.

It is generally used when two packages have same class name e.g. java.util and java.sql packages
contain Date class.

Example of package by import fully qualified name

1. //save by A.java
2.
3. package pack;
4. public class A{
5. public void msg(){System.out.println("Hello");}
6. }
1. //save by B.java
2.
3. package mypack;
4. class B{
5. public static void main(String args[]){
6. pack.A obj = new pack.A();//using fully qualified name
7. obj.msg();
8. }
9. }
Output:Hello

Note: If you import a package, subpackages will not be imported.

If you import a package, all the classes and interface of that package will be imported excluding
the classes and interfaces of the subpackages. Hence, you need to import the subpackage as well.

Note: Sequence of the program must be package then import then class.

Uday Singh(MCA), 09199511858 / 09835613557 Page 112


JAVA

Subpackage in java

Package inside the package is called the subpackage. It should be created to categorize the
package further.

Let's take an example, Sun Microsystem has definded a package named java that contains many
classes like System, String, Reader, Writer, Socket etc. These classes represent a particular group
e.g. Reader and Writer classes are for Input/Output operation, Socket and ServerSocket classes
are for networking etc and so on. So, Sun has subcategorized the java package into subpackages
such as lang, net, io etc. and put the Input/Output related classes in io package, Server and
ServerSocket classes in net packages and so on.

The standard of defining package is domain.company.package e.g. com.javatpoint.bean or


org.sssit.dao.

Example of Subpackage
1. package com.javatpoint.core;
2. class Simple{
3. public static void main(String args[]){
4. System.out.println("Hello subpackage");
5. }
6. }
To Compile: javac -d . Simple.java

To Run: java com.javatpoint.core.Simple

Output:Hello subpackage

Uday Singh(MCA), 09199511858 / 09835613557 Page 113


JAVA

How to send the class file to another directory or drive?

There is a scenario, I want to put the class file of A.java source file in classes folder of c:
drive. For example:

1. //save as Simple.java
2.
3. package mypack;
4. public class Simple{
5. public static void main(String args[]){
6. System.out.println("Welcome to package");
7. }
8. }

To Compile:
e:\sources> javac -d c:\classes Simple.java

To Run:
To run this program from e:\source directory, you need to set classpath of the directory where
the class file resides.

Uday Singh(MCA), 09199511858 / 09835613557 Page 114


JAVA

e:\sources> set classpath=c:\classes;.;

e:\sources> java mypack.Simple

Another way to run this program by -classpath switch of java:


The -classpath switch can be used with javac and java tool.

To run this program from e:\source directory, you can use -classpath switch of java that tells
where to look for class file. For example:

e:\sources> java -classpath c:\classes mypack.Simple

Output:Welcome to package

Ways to load the class files or jar files


There are two ways to load the class files temporary and permanent.

• Temporary
o By setting the classpath in the command prompt
o By -classpath switch
• Permanent
o By setting the classpath in the environment variables
o By creating the jar file, that contains all the class files, and copying the jar file in
the jre/lib/ext folder.

Rule: There can be only one public class in a java source file and it must be saved by the
public class name.

1. //save as C.java otherwise Compilte Time Error


2.
3. class A{}
4. class B{}
5. public class C{}

How to put two public classes in a package?


If you want to put two public classes in a package, have two java source files containing one
public class, but keep the package name same. For example:

1. //save as A.java

Uday Singh(MCA), 09199511858 / 09835613557 Page 115


JAVA

2.
3. package javatpoint;
4. public class A{}
1. //save as B.java
2.
3. package javatpoint;
4. public class B{}

What is static import feature of Java5?


next>><<prev

Static Import:

The static import feature of Java 5 facilitate the java programmer to access any static member
of a class directly. There is no need to qualify it by the class name.

Advantage of static import:

•Less coding is required if you have access any static member of a class oftenly.

Disadvantage of static import:

•If you overuse the static import feature, it makes the program unreadable and
unmaintainable.

Simple Example of static import


1. import static java.lang.System.*;
2. class StaticImportExample{
3. public static void main(String args[]){
4.
5. out.println("Hello");//Now no need of System.out
6. out.println("Java");
7.
8. }
9. }
10.
Test it Now

Output:Hello
Java

Uday Singh(MCA), 09199511858 / 09835613557 Page 116


JAVA

What is the difference between import and static import?


The import allows the java programmer to access classes of a package without package
qualification whereas the static import feature allows to access the static members of a class
without the class qualification. The import provides accessibility to classes and interface whereas
static import provides accessibility to static members of the class.

What about package class?

Package class
The package class provides methods to get information about the specification and
implementation of a package. It provides methods such as getName(),
getImplementationTitle(), getImplementationVendor(), getImplementationVersion() etc.

Example of Package class

In this example, we are printing the details of java.lang package by invoking the methods of
package class.
1. class PackageInfo{
2. public static void main(String args[]){
3.
4. Package p=Package.getPackage("java.lang");
5.
6. System.out.println("package name: "+p.getName());
7.
8. System.out.println("Specification Title: "+p.getSpecificationTitle());
9. System.out.println("Specification Vendor: "+p.getSpecificationVendor());
10. System.out.println("Specification Version: "+p.getSpecificationVersion());
11.
12. System.out.println("Implementaion Title: "+p.getImplementationTitle());
13. System.out.println("Implementation Vendor: "+p.getImplementationVendor());
14. System.out.println("Implementation Version: "+p.getImplementationVersion());
15. System.out.println("Is sealed: "+p.isSealed());
16.
17.
18. }
19. }

Access Modifiers in java


1. private access modifier

Uday Singh(MCA), 09199511858 / 09835613557 Page 117


JAVA

2. Role of private constructor


3. default access modifier
4. protected access modifier
5. public access modifier
6. Applying access modifier with method overriding

There are two types of modifiers in java: access modifiers and non-access modifiers.

The access modifiers in java specifies accessibility (scope) of a data member, method,
constructor or class.

There are 4 types of java access modifiers:

1. private
2. default
3. protected
4. public

There are many non-access modifiers such as static, abstract, synchronized, native, volatile,
transient etc. Here, we will learn access modifiers.

1) private access modifier


The private access modifier is accessible only within class.

Simple example of private access modifier


In this example, we have created two classes A and Simple. A class contains private data
member and private method. We are accessing these private members from outside the class,
so there is compile time error.

1. class A{
2. private int data=40;
3. private void msg(){System.out.println("Hello java");}
4. }
5.
6. public class Simple{
7. public static void main(String args[]){
8. A obj=new A();
9. System.out.println(obj.data);//Compile Time Error
10. obj.msg();//Compile Time Error
11. }
12. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 118


JAVA

Role of Private Constructor


If you make any class constructor private, you cannot create the instance of that class from
outside the class. For example:

1. class A{
2. private A(){}//private constructor
3. void msg(){System.out.println("Hello java");}
4. }
5. public class Simple{
6. public static void main(String args[]){
7. A obj=new A();//Compile Time Error
8. }
9. }

Note: A class cannot be private or protected except nested class.

2) default access modifier


If you don't use any modifier, it is treated as default bydefault. The default modifier is
accessible only within package.

Example of default access modifier


In this example, we have created two packages pack and mypack. We are accessing the A
class from outside its package, since A class is not public, so it cannot be accessed from
outside the package.

1. //save by A.java
2. package pack;
3. class A{
4. void msg(){System.out.println("Hello");}
5. }
1. //save by B.java
2. package mypack;
3. import pack.*;
4. class B{
5. public static void main(String args[]){
6. A obj = new A();//Compile Time Error
7. obj.msg();//Compile Time Error
8. }
9. }

In the above example, the scope of class A and its method msg() is default so it cannot be
accessed from outside the package.

Uday Singh(MCA), 09199511858 / 09835613557 Page 119


JAVA

3) protected access modifier

The protected access modifier is accessible within package and outside the package but through
inheritance only.

The protected access modifier can be applied on the data member, method and constructor. It
can't be applied on the class.

Example of protected access modifier

In this example, we have created the two packages pack and mypack. The A class of pack
package is public, so can be accessed from outside the package. But msg method of this package
is declared as protected, so it can be accessed from outside the class only through inheritance.

1. //save by A.java
2. package pack;
3. public class A{
4. protected void msg(){System.out.println("Hello");}
5. }
1. //save by B.java
2. package mypack;
3. import pack.*;
4.
5. class B extends A{
6. public static void main(String args[]){
7. B obj = new B();
8. obj.msg();
9. }
10. }
Output:Hello

4) public access modifier


The public access modifier is accessible everywhere. It has the widest scope among all other
modifiers.

Example of public access modifier


1. //save by A.java
2.
3. package pack;
4. public class A{
5. public void msg(){System.out.println("Hello");}

Uday Singh(MCA), 09199511858 / 09835613557 Page 120


JAVA

6. }
1. //save by B.java
2.
3. package mypack;
4. import pack.*;
5.
6. class B{
7. public static void main(String args[]){
8. A obj = new A();
9. obj.msg();
10. }
11. }
Output:Hello

Understanding all java access modifiers

Let's understand the access modifiers by a simple table.

Access within within outside package by outside


Modifier class package subclass only package

Private Y N N N

Default Y Y N N

Protected Y Y Y N

Public Y Y Y Y

Java access modifiers with method overriding

If you are overriding any method, overridden method (i.e. declared in subclass) must not be more
restrictive.

1. class A{
2. protected void msg(){System.out.println("Hello java");}
3. }
4.
5. public class Simple extends A{
6. void msg(){System.out.println("Hello java");}//C.T.Error
7. public static void main(String args[]){

Uday Singh(MCA), 09199511858 / 09835613557 Page 121


JAVA

8. Simple obj=new Simple();


9. obj.msg();
10. }
11. }
The default modifier is more restrictive than protected. That is why there is compile time
error.

Encapsulation in Java

Encapsulation in java is a process of wrapping code and data together into a single unit, for
example capsule i.e. mixed of several medicines.

We can create a fully encapsulated class in java by making all the data members of the class
private. Now we can use setter and getter methods to set and get the data in it.

The Java Bean class is the example of fully encapsulated class.

Advantage of Encapsulation in java

By providing only setter or getter method, you can make the class read-only or write-only.

It provides you the control over the data. Suppose you want to set the value of id i.e. greater
than 100 only, you can write the logic inside the setter method.

Simple example of encapsulation in java

Let's see the simple example of encapsulation that has only one field with its setter and getter
methods.

1. //save as Student.java
2. package com.javatpoint;
3. public class Student{
4. private String name;
5.
6. public String getName(){
7. return name;
8. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 122


JAVA

9. public void setName(String name){


10. this.name=name
11. }
12. }
1. //save as Test.java
2. package com.javatpoint;
3. class Test{
4. public static void main(String[] args){
5. Student s=new Student();
6. s.setname("vijay");
7. System.out.println(s.getName());
8. }
9. }
Compile By: javac -d . Test.java
Run By: java com.javatpoint.Test
Output: vijay

Object class in Java

The Object class is the parent class of all the classes in java bydefault. In other words, it is the
topmost class of java.

The Object class is beneficial if you want to refer any object whose type you don't know. Notice
that parent class reference variable can refer the child class object, know as upcasting.

Let's take an example, there is getObject() method that returns an object but it can be of any type
like Employee,Student etc, we can use Object class reference to refer that object. For example:

1. Object obj=getObject();//we don't what object would be returned from this method

The Object class provides some common behaviours to all the objects such as object can be
compared, object can be cloned, object can be notified etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 123


JAVA

Methods of Object class


The Object class provides many methods. They are as follows:

Method Description

public final ClassgetClass() returns the Class class object of this


object. The Class class can further be
used to get the metadata of this class.

public int hashCode() returns the hashcode number for this


object.

public boolean equals(Object obj) compares the given object to this


object.

protected Object clone() throws creates and returns the exact copy
CloneNotSupportedException (clone) of this object.

public String toString() returns the string representation of


this object.

public final void notify() wakes up single thread, waiting on


this object's monitor.

Uday Singh(MCA), 09199511858 / 09835613557 Page 124


JAVA

public final void notifyAll() wakes up all the threads, waiting on


this object's monitor.

public final void wait(long causes the current thread to wait for
timeout)throws InterruptedException the specified milliseconds, until
another thread notifies (invokes
notify() or notifyAll() method).

public final void wait(long timeout,int causes the current thread to wait for
nanos)throws InterruptedException the specified miliseconds and
nanoseconds, until another thread
notifies (invokes notify() or
notifyAll() method).

public final void wait()throws causes the current thread to wait, until
InterruptedException another thread notifies (invokes
notify() or notifyAll() method).

protected void finalize()throws is invoked by the garbage collector


Throwable before object is being garbage
collected.

Object Cloning in Java

The object cloning is a way to create exact copy of


an object. For this purpose, clone() method of Object class is used to clone an object.

The java.lang.Cloneable interface must be implemented by the class whose object clone we
want to create. If we don't implement Cloneable interface, clone() method
generatesCloneNotSupportedException.

Uday Singh(MCA), 09199511858 / 09835613557 Page 125


JAVA

The clone() method is defined in the Object class. Syntax of the clone() method is as follows:

1. protected Object clone() throws CloneNotSupportedException

Why use clone() method ?

The clone() method saves the extra processing task for creating the exact copy of an object. If
we perform it by using the new keyword, it will take a lot of processing to be performed that is
why we use object cloning.

Advantage of Object cloning

Less processing task.

Example of clone() method (Object cloning)

Let's see the simple example of object cloning

1. class Student18 implements Cloneable{


2. int rollno;
3. String name;
4.
5. Student18(int rollno,String name){
6. this.rollno=rollno;
7. this.name=name;
8. }
9.
10. public Object clone()throws CloneNotSupportedException{
11. return super.clone();
12. }
13.
14. public static void main(String args[]){
15. try{
16. Student18 s1=new Student18(101,"amit");
17.
18. Student18 s2=(Student18)s1.clone();
19.
20. System.out.println(s1.rollno+" "+s1.name);
21. System.out.println(s2.rollno+" "+s2.name);
22.
23. }catch(CloneNotSupportedException c){}
24.
25. }
26. }
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 126


JAVA

Output:101 amit
101 amit
download the example of object cloning

As you can see in the above example, both reference variables have the same value. Thus, the
clone() copies the values of an object to another. So we don't need to write explicit code to copy
the value of an object to another.

If we create another object by new keyword and assign the values of another object to this one, it
will require a lot of processing on this object. So to save the extra processing task we use clone()
method.

Java Array

Normally, array is a collection of similar type of elements that have contiguous memory location.

Java array is an object the contains elements of similar data type. It is a data structure where we
store similar elements. We can store only fixed set of elements in a java array.

Array in java is index based, first element of the array is stored at 0 index.

Advantage of Java Array


• Code Optimization: It makes the code optimized, we can retrieve or sort the data easily.
• Random access: We can get any data located at any index position.

Disadvantage of Java Array


• Size Limit: We can store only fixed size of elements in the array. It doesn't grow its size
at runtime. To solve this problem, collection framework is used in java.

Uday Singh(MCA), 09199511858 / 09835613557 Page 127


JAVA

Types of Array in java

There are two types of array.

• Single Dimensional Array


• Multidimensional Array

Single Dimensional Array in java

Syntax to Declare an Array in java


1. dataType[] arr; (or)
2. dataType []arr; (or)
3. dataType arr[];

Instantiation of an Array in java


1. arrayRefVar=new datatype[size];
Example of single dimensional java array

Let's see the simple example of java array, where we are going to declare, instantiate, initialize
and traverse an array.

1. class Testarray{
2. public static void main(String args[]){
3.
4. int a[]=new int[5];//declaration and instantiation
5. a[0]=10;//initialization
6. a[1]=20;
7. a[2]=70;
8. a[3]=40;
9. a[4]=50;
10.
11. //printing array
12. for(int i=0;i<a.length;i++)//length is the property of array
13. System.out.println(a[i]);
14.
15. }}
Test it Now

Output: 10
20
70
40
50

Uday Singh(MCA), 09199511858 / 09835613557 Page 128


JAVA

Declaration, Instantiation and Initialization of Java Array

We can declare, instantiate and initialize the java array together by:

1. int a[]={33,3,4,5};//declaration, instantiation and initialization

Let's see the simple example to print this array.

1. class Testarray1{
2. public static void main(String args[]){
3.
4. int a[]={33,3,4,5};//declaration, instantiation and initialization
5.
6. //printing array
7. for(int i=0;i<a.length;i++)//length is the property of array
8. System.out.println(a[i]);
9.
10. }}
Test it Now

Output:33
3
4
5

Passing Array to method in java

We can pass the java array to method so that we can reuse the same logic on any array.

Let's see the simple example to get minimum number of an array using method.

1. class Testarray2{
2. static void min(int arr[]){
3. int min=arr[0];
4. for(int i=1;i<arr.length;i++)
5. if(min>arr[i])
6. min=arr[i];
7.
8. System.out.println(min);
9. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 129


JAVA

10.
11. public static void main(String args[]){
12.
13. int a[]={33,3,4,5};
14. min(a);//passing array to method
15.
16. }}
Test it Now

Output:3

Multidimensional array in java

In such case, data is stored in row and column based index (also known as matrix form).

Syntax to Declare Multidimensional Array in java


1. dataType[][] arrayRefVar; (or)
2. dataType [][]arrayRefVar; (or)
3. dataType arrayRefVar[][]; (or)
4. dataType []arrayRefVar[];

Example to instantiate Multidimensional Array in java


1. int[][] arr=new int[3][3];//3 row and 3 column

Example to initialize Multidimensional Array in java


1. arr[0][0]=1;
2. arr[0][1]=2;
3. arr[0][2]=3;
4. arr[1][0]=4;
5. arr[1][1]=5;
6. arr[1][2]=6;
7. arr[2][0]=7;
8. arr[2][1]=8;
9. arr[2][2]=9;
Example of Multidimensional java array

Let's see the simple example to declare, instantiate, initialize and print the 2Dimensional array.

1. class Testarray3{
2. public static void main(String args[]){
3.
4. //declaring and initializing 2D array
5. int arr[][]={{1,2,3},{2,4,5},{4,4,5}};
6.

Uday Singh(MCA), 09199511858 / 09835613557 Page 130


JAVA

7. //printing 2D array
8. for(int i=0;i<3;i++){
9. for(int j=0;j<3;j++){
10. System.out.print(arr[i][j]+" ");
11. }
12. System.out.println();
13. }
14.
15. }}
Test it Now

Output:1 2 3
245
445

What is class name of java array?

In java, array is an object. For array object, an proxy class is created whose name can be
obtained by getClass().getName() method on the object.

1. class Testarray4{
2. public static void main(String args[]){
3.
4. int arr[]={4,4,5};
5.
6. Class c=arr.getClass();
7. String name=c.getName();
8.
9. System.out.println(name);
10.
11. }}
Test it Now

Output:I

Copying a java array

We can copy an array to another by the arraycopy method of System class.

Syntax of arraycopy method


1. public static void arraycopy(
2. Object src, int srcPos,Object dest, int destPos, int length
3. )

Uday Singh(MCA), 09199511858 / 09835613557 Page 131


JAVA

Example of arraycopy method


1. class TestArrayCopyDemo {
2. public static void main(String[] args) {
3. char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
4. 'i', 'n', 'a', 't', 'e', 'd' };
5. char[] copyTo = new char[7];
6.
7. System.arraycopy(copyFrom, 2, copyTo, 0, 7);
8. System.out.println(new String(copyTo));
9. }
10. }
Test it Now

Output:caffein

Addition of 2 matrices in java

Let's see a simple example that adds two matrices.

1. class Testarray5{
2. public static void main(String args[]){
3. //creating two matrices
4. int a[][]={{1,3,4},{3,4,5}};
5. int b[][]={{1,3,4},{3,4,5}};
6.
7. //creating another matrix to store the sum of two matrices
8. int c[][]=new int[2][3];
9.
10. //adding and printing addition of 2 matrices
11. for(int i=0;i<2;i++){
12. for(int j=0;j<3;j++){
13. c[i][j]=a[i][j]+b[i][j];
14. System.out.print(c[i][j]+" ");
15. }
16. System.out.println();//new line
17. }
18.
19. }}
Test it Now

Output:2 6 8
6 8 10

Uday Singh(MCA), 09199511858 / 09835613557 Page 132


JAVA

Call by Value and Call by Reference in Java


There is only call by value in java, not call by reference. If we call a method passing a value,
it is known as call by value. The changes being done in the called method, is not affected in
the calling method.

Example of call by value in java


In case of call by value original value is not changed. Let's take a simple example:

1. class Operation{
2. int data=50;
3.
4. void change(int data){
5. data=data+100;//changes will be in the local variable only
6. }
7.
8. public static void main(String args[]){
9. Operation op=new Operation();
10.
11. System.out.println("before change "+op.data);
12. op.change(500);
13. System.out.println("after change "+op.data);
14.
15. }
16. }
download this example

Output:before change 50
after change 50

Another Example of call by value in java

In case of call by reference original value is changed if we made changes in the called method. If
we pass object in place of any primitive value, original value will be changed. In this example
we are passing object as a value. Let's take a simple example:

1. class Operation2{
2. int data=50;
3.
4. void change(Operation2 op){
5. op.data=op.data+100;//changes will be in the instance variable
6. }
7.
8.

Uday Singh(MCA), 09199511858 / 09835613557 Page 133


JAVA

9. public static void main(String args[]){


10. Operation2 op=new Operation2();
11.
12. System.out.println("before change "+op.data);
13. op.change(op);//passing object
14. System.out.println("after change "+op.data);
15.
16. }
17. }
Output:before change 50
after change 150

Java Command Line Arguments


1. Command Line Argument
2. Simple example of command-line argument
3. Example of command-line argument that prints all the values

The java command-line argument is an argument i.e. passed at the time of running the java
program.

The arguments passed from the console can be received in the java program and it can be used as
an input.

So, it provides a convenient way to check the behavior of the program for the different values.
You can pass N (1,2,3 and so on) numbers of arguments from the command prompt.

Simple example of command-line argument in java


In this example, we are receiving only one argument and printing it. To run this java program,
you must pass at least one argument from the command prompt.

1. class CommandLineExample{
2. public static void main(String args[]){
3. System.out.println("Your first argument is: "+args[0]);
4. }
5. }
1. compile by > javac CommandLineExample.java
2. run by > java CommandLineExample sonoo
Output: Your first argument is: sonoo

Example of command-line argument that prints all the values


In this example, we are printing all the arguments passed from the command-line. For this

Uday Singh(MCA), 09199511858 / 09835613557 Page 134


JAVA

purpose, we have traversed the array using for loop.

1. class A{
2. public static void main(String args[]){
3.
4. for(int i=0;i<args.length;i++)
5. System.out.println(args[i]);
6.
7. }
8. }
1. compile by > javac A.java
2. run by > java A sonoo jaiswal 1 3 abc
Output: sonoo
jaiswal
1
3
abc

Difference between object and class

There are many differences between object and class. A list of differences between object and
class are given below:

No. Object Class

1) Object is an instance of a class. Class is a blueprint or


template from which
objects are created.

2) Object is a real world entity such as pen, Class is a group of


laptop, mobile, bed, keyboard, mouse, chair similar objects.
etc.

3) Object is a physical entity. Class is a logical entity.

4) Object is created through new Class is declared


keyword mainly e.g. usingclass keyword e.g.
Student s1=new Student(); class Student{}

5) Object is created many times as per Class is declared once.


requirement.

Uday Singh(MCA), 09199511858 / 09835613557 Page 135


JAVA

6) Object allocates memory when it is Class doesn't allocated


created. memory when it is
created.

7) There are many ways to create object in There is only one way to
java such as new keyword, newInstance() define class in java using
method, clone() method, factory method and class keyword.
deserialization.

Java String
1. Java String Handling
2. How to create string object
1. String literal
2. new keyword

Java String provides a lot of concepts that can be performed on a string such as compare,
concat, equals, split, length, replace, compareTo, intern, substring etc.

In java, string is basically an object that represents sequence of char values.

An array of characters works same as java string. For example:

1. char[] ch={'j','a','v','a','t','p','o','i','n','t'};
2. String s=new String(ch);

is same as:

1. String s="javatpoint";

The java.lang.String class implements Serializable, Comparable and CharSequence interfaces.

The java String is immutable i.e. it cannot be changed but a new instance is created. For mutable
class, you can use StringBuffer and StringBuilder class.

We will discuss about immutable string later. Let's first understand what is string in java and
how to create the string object.

Uday Singh(MCA), 09199511858 / 09835613557 Page 136


JAVA

What is String in java

Generally, string is a sequence of characters. But in java, string is an object that represents a
sequence of characters. String class is used to create string object.

How to create String object?


There are two ways to create String object:
1. By string literal
2. By new keyword

1) String Literal

Java String literal is created by using double quotes. For Example:

1. String s="welcome";

Each time you create a string literal, the JVM checks the string constant pool first. If the string
already exists in the pool, a reference to the pooled instance is returned. If string doesn't exist in
the pool, a new string instance is created and placed in the pool. For example:

1. String s1="Welcome";
2. String s2="Welcome";//will not create new instance

Uday Singh(MCA), 09199511858 / 09835613557 Page 137


JAVA

In the above example only one object will be created. Firstly JVM will not find any string object
with the value "Welcome" in string constant pool, so it will create a new object. After that it will
find the string with the value "Welcome" in the pool, it will not create new object but will return
the reference to the same instance.

Note: String objects are stored in a special memory area known as string constant pool.

Why java uses concept of string literal?

To make Java more memory efficient (because no new objects are created if it exists already in
string constant pool).

Uday Singh(MCA), 09199511858 / 09835613557 Page 138


JAVA

2) By new keyword
1. String s=new String("Welcome");//creates two objects and one reference variable

In such case, JVM will create a new string object in normal(non pool) heap memory and the
literal "Welcome" will be placed in the string constant pool. The variable s will refer to the
object in heap(non pool).

Java String Example


1. public class StringExample{
2. public static void main(String args[]){
3. String s1="java";//creating string by java string literal
4.
5. char ch[]={'s','t','r','i','n','g','s'};
6. String s2=new String(ch);//converting char array to string
7.
8. String s3=new String("example");//creating java string by new keyword
9.
10. System.out.println(s1);
11. System.out.println(s2);
12. System.out.println(s3);
13. }}
Test it Now

java
strings
example

Java String class methods

The java.lang.String class provides many useful methods to perform operations on sequence of
char values.

No. Method Description

1 char charAt(int index) returns char value for the


particular index

2 int length() returns string length

3 static String format(String format, returns formatted string

Uday Singh(MCA), 09199511858 / 09835613557 Page 139


JAVA

Object... args)

4 static String format(Locale l, String returns formatted string with


format, Object... args) given locale

5 String substring(int beginIndex) returns substring for given


begin index

6 String substring(int beginIndex, int returns substring for given


endIndex) begin index and end index

7 boolean contains(CharSequence s) returns true or false after


matching the sequence of
char value

8 static String join(CharSequence delimiter, returns a joined string


CharSequence... elements)

9 static String join(CharSequence delimiter, returns a joined string


Iterable<? extends CharSequence>
elements)

10 boolean equals(Object another) checks the equality of string


with object

11 boolean isEmpty() checks if string is empty

12 String concat(String str) concatinates specified string

13 String replace(char old, char new) replaces all occurrences of


specified char value

14 String replace(CharSequence old, replaces all occurrences of


CharSequence new) specified CharSequence

15 String trim() returns trimmed string


omitting leading and trailing
spaces

Uday Singh(MCA), 09199511858 / 09835613557 Page 140


JAVA

16 String split(String regex) returns splitted string


matching regex

17 String split(String regex, int limit) returns splitted string


matching regex and limit

18 String intern() returns interned string

19 int indexOf(int ch) returns specified char value


index

20 int indexOf(int ch, int fromIndex) returns specified char value


index starting with given
index

21 int indexOf(String substring) returns specified substring


index

22 int indexOf(String substring, int returns specified substring


fromIndex) index starting with given
index

23 String toLowerCase() returns string in lowercase.

24 String toLowerCase(Locale l) returns string in lowercase


using specified locale.

25 String toUpperCase() returns string in uppercase.

26 String toUpperCase(Locale l) returns string in uppercase


using specified locale.

Do You Know ?

• Why String objects are immutable?


• How to create an immutable class?
• What is string constant pool?
• What code is written by the compiler if you concat any string by + (string concatenation
operator)?

Uday Singh(MCA), 09199511858 / 09835613557 Page 141


JAVA

• What is the difference between StringBuffer and StringBuilder class?

What we will learn in String Handling ?


• Concept of String
• Immutable String
• String Comparison
• String Concatenation
• Concept of Substring
• String class methods and its usage
• StringBuffer class
• StringBuilder class
• Creating Immutable class
• toString() method
• StringTokenizer class

Immutable String in Java

In java, string objects are immutable. Immutable simply means unmodifiable or unchangeable.

Once string object is created its data or state can't be changed but a new string object is created.

Let's try to understand the immutability concept by the example given below:

1. class Testimmutablestring{
2. public static void main(String args[]){
3. String s="Sachin";
4. s.concat(" Tendulkar");//concat() method appends the string at the end
5. System.out.println(s);//will print Sachin because strings are immutable objects
6. }
7. }
Test it Now

Output:Sachin

Now it can be understood by the diagram given below. Here Sachin is not changed but a new
object is created with sachintendulkar. That is why string is known as immutable.

Uday Singh(MCA), 09199511858 / 09835613557 Page 142


JAVA

As you can see in the above figure that two objects are created but s reference variable still refers
to "Sachin" not to "Sachin Tendulkar".

But if we explicitely assign it to the reference variable, it will refer to "Sachin Tendulkar"
object.For example:

1. class Testimmutablestring1{
2. public static void main(String args[]){
3. String s="Sachin";
4. s=s.concat(" Tendulkar");
5. System.out.println(s);
6. }
7. }
Test it Now

Output:Sachin Tendulkar

Uday Singh(MCA), 09199511858 / 09835613557 Page 143


JAVA

In such case, s points to the "Sachin Tendulkar". Please notice that still sachin object is not
modified.

Why string objects are immutable in java?


Because java uses the concept of string literal.Suppose there are 5 reference variables,all
referes to one object "sachin".If one reference variable changes the value of the object, it will
be affected to all the reference variables. That is why string objects are immutable in java.

Java String compare

We can compare string in java on the basis of content and reference.

It is used in authentication (by equals() method), sorting (by compareTo() method), reference
matching (by == operator) etc.

There are three ways to compare string in java:

1. By equals() method
2. By = = operator
3. By compareTo() method

1) String compare by equals() method

The String equals() method compares the original content of the string. It compares values of
string for equality. String class provides two methods:

o public boolean equals(Object another) compares this string to the specified object.

Uday Singh(MCA), 09199511858 / 09835613557 Page 144


JAVA

o public boolean equalsIgnoreCase(String another) compares this String to another


string, ignoring case.

1. class Teststringcomparison1{
2. public static void main(String args[]){
3. String s1="Sachin";
4. String s2="Sachin";
5. String s3=new String("Sachin");
6. String s4="Saurav";
7. System.out.println(s1.equals(s2));//true
8. System.out.println(s1.equals(s3));//true
9. System.out.println(s1.equals(s4));//false
10. }
11. }
Test it Now

Output:true
true
false
1. class Teststringcomparison2{
2. public static void main(String args[]){
3. String s1="Sachin";
4. String s2="SACHIN";
5.
6. System.out.println(s1.equals(s2));//false
7. System.out.println(s1.equalsIgnoreCase(s3));//true
8. }
9. }
Test it Now

Output:false
true
Click me for more about equals() method

2) String compare by == operator

The = = operator compares references not values.

1. class Teststringcomparison3{
2. public static void main(String args[]){
3. String s1="Sachin";
4. String s2="Sachin";
5. String s3=new String("Sachin");
6. System.out.println(s1==s2);//true (because both refer to same instance)

Uday Singh(MCA), 09199511858 / 09835613557 Page 145


JAVA

7. System.out.println(s1==s3);//false(because s3 refers to instance created in nonpool)


8. }
9. }
Test it Now

Output:true
false

3) String compare by compareTo() method

The String compareTo() method compares values lexicographically and returns an integer value
that describes if first string is less than, equal to or greater than second string.

Suppose s1 and s2 are two string variables. If:

o s1 == s2 :0
o s1 > s2 :positive value
o s1 < s2 :negative value

1. class Teststringcomparison4{
2. public static void main(String args[]){
3. String s1="Sachin";
4. String s2="Sachin";
5. String s3="Ratan";
6. System.out.println(s1.compareTo(s2));//0
7. System.out.println(s1.compareTo(s3));//1(because s1>s3)
8. System.out.println(s3.compareTo(s1));//-1(because s3 < s1 )
9. }
10. }
Test it Now

Output:0
1
-1
String Concatenation in Java

In java, string concatenation forms a new string that is the combination of multiple strings. There
are two ways to concat string in java:

1. By + (string concatenation) operator


2. By concat() method

1) String Concatenation by + (string concatenation) operator

Uday Singh(MCA), 09199511858 / 09835613557 Page 146


JAVA

Java string concatenation operator (+) is used to add strings. For Example:

1. class TestStringConcatenation1{
2. public static void main(String args[]){
3. String s="Sachin"+" Tendulkar";
4. System.out.println(s);//Sachin Tendulkar
5. }
6. }
Test it Now

Output:Sachin Tendulkar

The Java compiler transforms above code to this:

1. String s=(new StringBuilder()).append("Sachin").append(" Tendulkar).toString();

In java, String concatenation is implemented through the StringBuilder (or StringBuffer) class
and its append method. String concatenation operator produces a new string by appending the
second operand onto the end of the first operand. The string concatenation operator can concat
not only string but primitive values also. For Example:

1. class TestStringConcatenation2{
2. public static void main(String args[]){
3. String s=50+30+"Sachin"+40+40;
4. System.out.println(s);//80Sachin4040
5. }
6. }
Test it Now

80Sachin4040

Note: After a string literal, all the + will be treated as string concatenation operator.

2) String Concatenation by concat() method

The String concat() method concatenates the specified string to the end of current string. Syntax:

1. public String concat(String another)

Let's see the example of String concat() method.

1. class TestStringConcatenation3{
2. public static void main(String args[]){
3. String s1="Sachin ";
4. String s2="Tendulkar";

Uday Singh(MCA), 09199511858 / 09835613557 Page 147


JAVA

5. String s3=s1.concat(s2);
6. System.out.println(s3);//Sachin Tendulkar
7. }
8. }
Test it Now

Sachin Tendulkar

Substring in Java

A part of string is called substring. In other words, substring is a subset of another string. In case
of substring startIndex is inclusive and endIndex is exclusive.

Note: Index starts from 0.

You can get substring from the given string object by one of the two methods:

1. public String substring(int startIndex): This method returns new String object
containing the substring of the given string from specified startIndex (inclusive).
2. public String substring(int startIndex, int endIndex): This method returns new String
object containing the substring of the given string from specified startIndex to endIndex.

In case of string:

o startIndex: inclusive
o endIndex: exclusive

Let's understand the startIndex and endIndex by the code given below.

1. String s="hello";
2. System.out.println(s.substring(0,2));//he

In the above substring, 0 points to h but 2 points to e (because end index is exclusive).

Example of java substring

1. public class TestSubstring{


2. public static void main(String args[]){
3. String s="Sachin Tendulkar";
4. System.out.println(s.substring(6));//Tendulkar
5. System.out.println(s.substring(0,6));//Sachin
6. }
7. }
Test it Now

Uday Singh(MCA), 09199511858 / 09835613557 Page 148


JAVA

Tendulkar
Sachin

Java String class methods

The java.lang.String class provides a lot of methods to work on string. By the help of these
methods, we can perform operations on string such as trimming, concatenating, converting,
comparing, replacing strings etc.

Java String is a powerful concept because everything is treated as a string if you submit any form
in window based, web based or mobile application.

Let's see the important methods of String class.

Java String toUpperCase() and toLowerCase() method

The java string toUpperCase() method converts this string into uppercase letter and string
toLowerCase() method into lowercase letter.

1. String s="Sachin";
2. System.out.println(s.toUpperCase());//SACHIN
3. System.out.println(s.toLowerCase());//sachin
4. System.out.println(s);//Sachin(no change in original)
Test it Now

SACHIN
sachin
Sachin

Java String trim() method

The string trim() method eliminates white spaces before and after string.

1. String s=" Sachin ";


2. System.out.println(s);// Sachin
3. System.out.println(s.trim());//Sachin
Test it Now

Sachin
Sachin

Java String startsWith() and endsWith() method


1. String s="Sachin";
2. System.out.println(s.startsWith("Sa"));//true

Uday Singh(MCA), 09199511858 / 09835613557 Page 149


JAVA

3. System.out.println(s.endsWith("n"));//true
Test it Now

true
true

Java String charAt() method

The string charAt() method returns a character at specified index.

1. String s="Sachin";
2. System.out.println(s.charAt(0));//S
3. System.out.println(s.charAt(3));//h
Test it Now

S
h

Java String length() method

The string length() method returns length of the string.

1. String s="Sachin";
2. System.out.println(s.length());//6
Test it Now

Java String intern() method

A pool of strings, initially empty, is maintained privately by the class String.

When the intern method is invoked, if the pool already contains a string equal to this String
object as determined by the equals(Object) method, then the string from the pool is returned.
Otherwise, this String object is added to the pool and a reference to this String object is returned.

1. String s=new String("Sachin");


2. String s2=s.intern();
3. System.out.println(s2);//Sachin
Test it Now

Sachin

Uday Singh(MCA), 09199511858 / 09835613557 Page 150


JAVA

Java String valueOf() method

The string valueOf() method coverts given type such as int, long, float, double, boolean, char and
char array into string.

1. int a=10;
2. String s=String.valueOf(a);
3. System.out.println(s+10);

Output:

1010

Java String replace() method

The string replace() method replaces all occurrence of first sequence of character with second
sequence of character.

1. String s1="Java is a programming language. Java is a platform. Java is an Island.";


2. String replaceString=s1.replace("Java","Kava");//replaces all occurrences of "Java" to "Kava"
3. System.out.println(replaceString);

Output:

Kava is a programming language. Kava is a platform. Kava is an Island.


Java StringBuffer class

Java StringBuffer class is used to created mutable (modifiable) string. The StringBuffer class in
java is same as String class except it is mutable i.e. it can be changed.

Note: Java StringBuffer class is thread-safe i.e. multiple threads cannot access it
simultaneously. So it is safe and will result in an order.

Important Constructors of StringBuffer class


1. StringBuffer(): creates an empty string buffer with the initial capacity of 16.
2. StringBuffer(String str): creates a string buffer with the specified string.
3. StringBuffer(int capacity): creates an empty string buffer with the specified capacity as
length.

Important methods of StringBuffer class


1. public synchronized StringBuffer append(String s): is used to append the specified
string with this string. The append() method is overloaded like append(char),
append(boolean), append(int), append(float), append(double) etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 151


JAVA

2. public synchronized StringBuffer insert(int offset, String s): is used to insert the
specified string with this string at the specified position. The insert() method is
overloaded like insert(int, char), insert(int, boolean), insert(int, int), insert(int, float),
insert(int, double) etc.
3. public synchronized StringBuffer replace(int startIndex, int endIndex, String str): is
used to replace the string from specified startIndex and endIndex.
4. public synchronized StringBuffer delete(int startIndex, int endIndex): is used to
delete the string from specified startIndex and endIndex.
5. public synchronized StringBuffer reverse(): is used to reverse the string.
6. public int capacity(): is used to return the current capacity.
7. public void ensureCapacity(int minimumCapacity): is used to ensure the capacity at
least equal to the given minimum.
8. public char charAt(int index): is used to return the character at the specified position.
9. public int length(): is used to return the length of the string i.e. total number of
characters.
10. public String substring(int beginIndex): is used to return the substring from the
specified beginIndex.
11. public String substring(int beginIndex, int endIndex): is used to return the substring
from the specified beginIndex and endIndex.

What is mutable string

A string that can be modified or changed is known as mutable string. StringBuffer and
StringBuilder classes are used for creating mutable string.

1) StringBuffer append() method

The append() method concatenates the given argument with this string.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer("Hello ");
4. sb.append("Java");//now original string is changed
5. System.out.println(sb);//prints Hello Java
6. }
7. }

2) StringBuffer insert() method

The insert() method inserts the given string with this string at the given position.

1. class A{
2. public static void main(String args[]){

Uday Singh(MCA), 09199511858 / 09835613557 Page 152


JAVA

3. StringBuffer sb=new StringBuffer("Hello ");


4. sb.insert(1,"Java");//now original string is changed
5. System.out.println(sb);//prints HJavaello
6. }
7. }

3) StringBuffer replace() method

The replace() method replaces the given string from the specified beginIndex and endIndex.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer("Hello");
4. sb.replace(1,3,"Java");
5. System.out.println(sb);//prints HJavalo
6. }
7. }

4) StringBuffer delete() method

The delete() method of StringBuffer class deletes the string from the specified beginIndex to
endIndex.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer("Hello");
4. sb.delete(1,3);
5. System.out.println(sb);//prints Hlo
6. }
7. }

5) StringBuffer reverse() method

The reverse() method of StringBuilder class reverses the current string.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer("Hello");
4. sb.reverse();
5. System.out.println(sb);//prints olleH
6. }
7. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 153


JAVA

6) StringBuffer capacity() method

The capacity() method of StringBuffer class returns the current capacity of the buffer. The
default capacity of the buffer is 16. If the number of character increases from its current capacity,
it increases the capacity by (oldcapacity*2)+2. For example if your current capacity is 16, it will
be (16*2)+2=34.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer();
4. System.out.println(sb.capacity());//default 16
5. sb.append("Hello");
6. System.out.println(sb.capacity());//now 16
7. sb.append("java is my favourite language");
8. System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
9. }
10. }

7) StringBuffer ensureCapacity() method

The ensureCapacity() method of StringBuffer class ensures that the given capacity is the
minimum to the current capacity. If it is greater than the current capacity, it increases the
capacity by (oldcapacity*2)+2. For example if your current capacity is 16, it will be
(16*2)+2=34.

1. class A{
2. public static void main(String args[]){
3. StringBuffer sb=new StringBuffer();
4. System.out.println(sb.capacity());//default 16
5. sb.append("Hello");
6. System.out.println(sb.capacity());//now 16
7. sb.append("java is my favourite language");
8. System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
9. sb.ensureCapacity(10);//now no change
10. System.out.println(sb.capacity());//now 34
11. sb.ensureCapacity(50);//now (34*2)+2
12. System.out.println(sb.capacity());//now 70
13. }
14. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 154


JAVA

Java StringBuilder class

Java StringBuilder class is used to create mutable (modifiable) string. The Java StringBuilder
class is same as StringBuffer class except that it is non-synchronized. It is available since JDK
1.5.

Important Constructors of StringBuilder class

1. StringBuilder(): creates an empty string Builder with the initial capacity of 16.
2. StringBuilder(String str): creates a string Builder with the specified string.
3. StringBuilder(int length): creates an empty string Builder with the specified capacity as
length.

Important methods of StringBuilder class

Method Description

public StringBuilder is used to append the specified string with this


append(String s) string. The append() method is overloaded like
append(char), append(boolean), append(int),
append(float), append(double) etc.

public StringBuilder is used to insert the specified string with this


insert(int offset, String s) string at the specified position. The insert()
method is overloaded like insert(int, char),
insert(int, boolean), insert(int, int), insert(int,
float), insert(int, double) etc.

public StringBuilder is used to replace the string from specified


replace(int startIndex, int startIndex and endIndex.
endIndex, String str)

public StringBuilder is used to delete the string from specified


delete(int startIndex, int startIndex and endIndex.
endIndex)

public StringBuilder is used to reverse the string.


reverse()

public int capacity() is used to return the current capacity.

Uday Singh(MCA), 09199511858 / 09835613557 Page 155


JAVA

public void is used to ensure the capacity at least equal to the


ensureCapacity(int given minimum.
minimumCapacity)

public char charAt(int is used to return the character at the specified


index) position.

public int length() is used to return the length of the string i.e. total
number of characters.

public String substring(int is used to return the substring from the specified
beginIndex) beginIndex.

public String substring(int is used to return the substring from the specified
beginIndex, int endIndex) beginIndex and endIndex.

Java StringBuilder Examples

Let's see the examples of different methods of StringBuilder class.

1) StringBuilder append() method

The StringBuilder append() method concatenates the given argument with this string.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder("Hello ");
4. sb.append("Java");//now original string is changed
5. System.out.println(sb);//prints Hello Java
6. }
7. }

2) StringBuilder insert() method

The StringBuilder insert() method inserts the given string with this string at the given position.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder("Hello ");
4. sb.insert(1,"Java");//now original string is changed
5. System.out.println(sb);//prints HJavaello
6. }
7. }
Uday Singh(MCA), 09199511858 / 09835613557 Page 156
JAVA

3) StringBuilder replace() method

The StringBuilder replace() method replaces the given string from the specified beginIndex and
endIndex.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder("Hello");
4. sb.replace(1,3,"Java");
5. System.out.println(sb);//prints HJavalo
6. }
7. }

4) StringBuilder delete() method

The delete() method of StringBuilder class deletes the string from the specified beginIndex to
endIndex.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder("Hello");
4. sb.delete(1,3);
5. System.out.println(sb);//prints Hlo
6. }
7. }

5) StringBuilder reverse() method

The reverse() method of StringBuilder class reverses the current string.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder("Hello");
4. sb.reverse();
5. System.out.println(sb);//prints olleH
6. }
7. }

6) StringBuilder capacity() method

The capacity() method of StringBuilder class returns the current capacity of the Builder. The
default capacity of the Builder is 16. If the number of character increases from its current
capacity, it increases the capacity by (oldcapacity*2)+2. For example if your current capacity is
16, it will be (16*2)+2=34.

1. class A{

Uday Singh(MCA), 09199511858 / 09835613557 Page 157


JAVA

2. public static void main(String args[]){


3. StringBuilder sb=new StringBuilder();
4. System.out.println(sb.capacity());//default 16
5. sb.append("Hello");
6. System.out.println(sb.capacity());//now 16
7. sb.append("java is my favourite language");
8. System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
9. }
10. }

7) StringBuilder ensureCapacity() method

The ensureCapacity() method of StringBuilder class ensures that the given capacity is the
minimum to the current capacity. If it is greater than the current capacity, it increases the
capacity by (oldcapacity*2)+2. For example if your current capacity is 16, it will be
(16*2)+2=34.

1. class A{
2. public static void main(String args[]){
3. StringBuilder sb=new StringBuilder();
4. System.out.println(sb.capacity());//default 16
5. sb.append("Hello");
6. System.out.println(sb.capacity());//now 16
7. sb.append("java is my favourite language");
8. System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
9. sb.ensureCapacity(10);//now no change
10. System.out.println(sb.capacity());//now 34
11. sb.ensureCapacity(50);//now (34*2)+2
12. System.out.println(sb.capacity());//now 70
13. }
14. }

Difference between String and StringBuffer

There are many differences between String and StringBuffer. A list of differences between String
and StringBuffer are given below:

No. String StringBuffer

1) String class is immutable. StringBuffer class is


mutable.

Uday Singh(MCA), 09199511858 / 09835613557 Page 158


JAVA

2) String is slow and consumes more memory StringBuffer is fast and


when you concat too many strings because consumes less memory when
every time it creates new instance. you cancat strings.

3) String class overrides the equals() method StringBuffer class doesn't


of Object class. So you can compare the override the equals() method
contents of two strings by equals() method. of Object class.

Performance Test of String and StringBuffer

1. public class ConcatTest{


2. public static String concatWithString() {
3. String t = "Java";
4. for (int i=0; i<10000; i++){
5. t = t + "Tpoint";
6. }
7. return t;
8. }
9. public static String concatWithStringBuffer(){
10. StringBuffer sb = new StringBuffer("Java");
11. for (int i=0; i<10000; i++){
12. sb.append("Tpoint");
13. }
14. return sb.toString();
15. }
16. public static void main(String[] args){
17. long startTime = System.currentTimeMillis();
18. concatWithString();
19. System.out.println("Time taken by Concating with String: "+(System.currentTimeMillis()-
startTime)+"ms");
20. startTime = System.currentTimeMillis();
21. concatWithStringBuffer();
22. System.out.println("Time taken by Concating with StringBuffer: "+(System.currentTimeMi
llis()-startTime)+"ms");
23. }
24. }
Time taken by Concating with String: 578ms
Time taken by Concating with StringBuffer: 0ms

String and StringBuffer HashCode Test

As you can see in the program given below, String returns new hashcode value when you concat
string but StringBuffer returns same.

Uday Singh(MCA), 09199511858 / 09835613557 Page 159


JAVA

1. public class InstanceTest{


2. public static void main(String args[]){
3. System.out.println("Hashcode test of String:");
4. String str="java";
5. System.out.println(str.hashCode());
6. str=str+"tpoint";
7. System.out.println(str.hashCode());
8.
9. System.out.println("Hashcode test of StringBuffer:");
10. StringBuffer sb=new StringBuffer("java");
11. System.out.println(sb.hashCode());
12. sb.append("tpoint");
13. System.out.println(sb.hashCode());
14. }
15. }
Hashcode test of String:
3254818
229541438
Hashcode test of StringBuffer:
118352462
118352462
Difference between StringBuffer and StringBuilder

There are many differences between StringBuffer and StringBuilder. A list of differences
between StringBuffer and StringBuilder are given below:

No. StringBuffer StringBuilder

1) StringBuffer is synchronized i.e. thread safe. StringBuilder is non-synchronized i.e. not


It means two threads can't call the methods thread safe. It means two threads can call the
of StringBuffer simultaneously. methods of StringBuilder simultaneously.

2) StringBuffer is less efficient than StringBuilder is more efficient than


StringBuilder. StringBuffer.

StringBuffer Example

1. public class BufferTest{


2. public static void main(String[] args){
3. StringBuffer buffer=new StringBuffer("hello");
4. buffer.append("java");
5. System.out.println(buffer);
6. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 160


JAVA

7. }
hellojava

StringBuilder Example

1. public class BuilderTest{


2. public static void main(String[] args){
3. StringBuilder builder=new StringBuilder("hello");
4. builder.append("java");
5. System.out.println(builder);
6. }
7. }
hellojava

Performance Test of StringBuffer and StringBuilder

Let's see the code to check the performance of StringBuffer and StringBuilder classes.

1. public class ConcatTest{


2. public static void main(String[] args){
3. long startTime = System.currentTimeMillis();
4. StringBuffer sb = new StringBuffer("Java");
5. for (int i=0; i<10000; i++){
6. sb.append("Tpoint");
7. }
8. System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() -
startTime) + "ms");
9. startTime = System.currentTimeMillis();
10. StringBuilder sb2 = new StringBuilder("Java");
11. for (int i=0; i<10000; i++){
12. sb2.append("Tpoint");
13. }
14. System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() -
startTime) + "ms");
15. }
16. }
Time taken by StringBuffer: 16ms
Time taken by StringBuilder: 0ms

How to create Immutable class?


There are many immutable classes like String, Boolean, Byte, Short, Integer, Long, Float,
Double etc. In short, all the wrapper classes and String class is immutable. We can also create
immutable class by creating final class that have final data members as the example given

Uday Singh(MCA), 09199511858 / 09835613557 Page 161


JAVA

below:

Example to create Immutable class


In this example, we have created a final class named Employee. It have one final datamember,
a parameterized constructor and getter method.

1. public final class Employee{


2. final String pancardNumber;
3.
4. public Employee(String pancardNumber){
5. this.pancardNumber=pancardNumber;
6. }
7.
8. public String getPancardNumber(){
9. return pancardNumber;
10. }
11.
12. }

The above class is immutable because:


•The instance variable of the class is final i.e. we cannot change the value of it after
creating an object.
•The class is final so we cannot create the subclass.
•There is no setter methods i.e. we have no option to change the value of the instance
variable.

These points makes this class as immutable.

Java toString() method

If you want to represent any object as a string, toString() method comes into existence.

The toString() method returns the string representation of the object.

If you print any object, java compiler internally invokes the toString() method on the object. So
overriding the toString() method, returns the desired output, it can be the state of an object etc.
depends on your implementation.

Advantage of Java toString() method

By overriding the toString() method of the Object class, we can return values of the object, so we
don't need to write much code.

Uday Singh(MCA), 09199511858 / 09835613557 Page 162


JAVA

Understanding problem without toString() method

Let's see the simple code that prints reference.

1. class Student{
2. int rollno;
3. String name;
4. String city;
5.
6. Student(int rollno, String name, String city){
7. this.rollno=rollno;
8. this.name=name;
9. this.city=city;
10. }
11.
12. public static void main(String args[]){
13. Student s1=new Student(101,"Raj","lucknow");
14. Student s2=new Student(102,"Vijay","ghaziabad");
15.
16. System.out.println(s1);//compiler writes here s1.toString()
17. System.out.println(s2);//compiler writes here s2.toString()
18. }
19. }
Output:Student@1fee6fc
Student@1eed786
As you can see in the above example, printing s1 and s2 prints the hashcode values of the
objects but I want to print the values of these objects. Since java compiler internally calls
toString() method, overriding this method will return the specified values. Let's understand it
with the example given below:

Example of Java toString() method

Now let's see the real example of toString() method.

1. class Student{
2. int rollno;
3. String name;
4. String city;
5.
6. Student(int rollno, String name, String city){
7. this.rollno=rollno;

Uday Singh(MCA), 09199511858 / 09835613557 Page 163


JAVA

8. this.name=name;
9. this.city=city;
10. }
11.
12. public String toString(){//overriding the toString() method
13. return rollno+" "+name+" "+city;
14. }
15. public static void main(String args[]){
16. Student s1=new Student(101,"Raj","lucknow");
17. Student s2=new Student(102,"Vijay","ghaziabad");
18.
19. System.out.println(s1);//compiler writes here s1.toString()
20. System.out.println(s2);//compiler writes here s2.toString()
21. }
22. }
download this example of toString method

Output:101 Raj lucknow


102 Vijay ghaziabad
StringTokenizer in Java
1. StringTokenizer
2. Methods of StringTokenizer
3. Example of StringTokenizer

The java.util.StringTokenizer class allows you to break a string into tokens. It is simple way to
break string.

It doesn't provide the facility to differentiate numbers, quoted strings, identifiers etc. like
StreamTokenizer class. We will discuss about the StreamTokenizer class in I/O chapter.

Constructors of StringTokenizer class

There are 3 constructors defined in the StringTokenizer class.

Constructor Description

StringTokenizer(String str) creates StringTokenizer with specified string.

StringTokenizer(String str, creates StringTokenizer with specified string


String delim) and delimeter.

StringTokenizer(String str, creates StringTokenizer with specified string,


String delim, boolean delimeter and returnValue. If return value is

Uday Singh(MCA), 09199511858 / 09835613557 Page 164


JAVA

returnValue) true, delimiter characters are considered to be


tokens. If it is false, delimiter characters serve to
separate tokens.

Methods of StringTokenizer class

The 6 useful methods of StringTokenizer class are as follows:

Public method Description

boolean hasMoreTokens() checks if there is more tokens available.

String nextToken() returns the next token from the StringTokenizer


object.

String nextToken(String returns the next token based on the delimeter.


delim)

boolean hasMoreElements() same as hasMoreTokens() method.

Object nextElement() same as nextToken() but its return type is


Object.

int countTokens() returns the total number of tokens.

Simple example of StringTokenizer class

Let's see the simple example of StringTokenizer class that tokenizes a string "my name is khan"
on the basis of whitespace.

1. import java.util.StringTokenizer;
2. public class Simple{
3. public static void main(String args[]){
4. StringTokenizer st = new StringTokenizer("my name is khan"," ");
5. while (st.hasMoreTokens()) {
6. System.out.println(st.nextToken());
7. }
8. }
9. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 165


JAVA

Output:my
name
is
khan

Example of nextToken(String delim) method of StringTokenizer class


1. import java.util.*;
2.
3. public class Test {
4. public static void main(String[] args) {
5. StringTokenizer st = new StringTokenizer("my,name,is,khan");
6.
7. // printing next token
8. System.out.println("Next token is : " + st.nextToken(","));
9. }
10. }
Output:Next token is : my

StringTokenizer class is deprecated now. It is recommended to use split() method of String


class or regex (Regular Expression).

Java String charAt

The java string charAt() method returns a char value at the given index number. The index
number starts from 0.

Signature

The signature of string charAt() method is given below:

1. public char charAt(int index)

Parameter

index : index number, starts with 0

Uday Singh(MCA), 09199511858 / 09835613557 Page 166


JAVA

Returns

char value

Specified by

CharSequence interface

Throws

IndexOutOfBoundsException : if index is negative value or greater than this string length.

Java String charAt() method example

1. public class CharAtExample{


2. public static void main(String args[]){
3. String name="javatpoint";
4. char ch=name.charAt(4);//returns the char value at the 4th index
5. System.out.println(ch);
6. }}
Test it Now

t
Java String compareTo

The java string compareTo() method compares the given string with current string
lexicographically. It returns positive number, negative number or 0.

If first string is greater than second string, it returns positive number (difference of character
value). If first string is less than second string, it returns negative number and if first string is
equal to second string, it returns 0.

1. s1 > s2 => positive number


2. s1 < s2 => negative number
3. s1 == s2 => 0

Signature
1. public int compareTo(String anotherString)

Uday Singh(MCA), 09199511858 / 09835613557 Page 167


JAVA

Parameters

anotherString: represents string that is to be compared with current string

Returns

an integer value

Java String compareTo() method example

1. public class LastIndexOfExample{


2. public static void main(String args[]){
3. String s1="hello";
4. String s2="hello";
5. String s3="meklo";
6. String s4="hemlo";
7. System.out.println(s1.compareTo(s2));
8. System.out.println(s1.compareTo(s3));
9. System.out.println(s1.compareTo(s4));
10. }}

Output:

0
-5
-1
Java String concat

The java string concat() method combines specified string at the end of this string. It returns
combined string. It is like appending another string.

Signature

The signature of string concat() method is given below:

1. public String concat(String anotherString)

Uday Singh(MCA), 09199511858 / 09835613557 Page 168


JAVA

Parameter

anotherString : another string i.e. to be combined at the end of this string.

Returns

combined string

Java String concat() method example

1. public class ConcatExample{


2. public static void main(String args[]){
3. String s1="java string";
4. s1.concat("is immutable");
5. System.out.println(s1);
6. s1=s1.concat(" is immutable so assign it explicitly");
7. System.out.println(s1);
8. }}
Test it Now

java string
java string is immutable so assign it explicitly
Java String contains

The java string contains() method searches the sequence of characters in this string. It
returns true if sequence of char values are found in this string otherwise returns false.

Signature

The signature of string contains() method is given below:

1. public boolean contains(CharSequence sequence)

Parameter

sequence : specifies the sequence of characters to be searched.

Uday Singh(MCA), 09199511858 / 09835613557 Page 169


JAVA

Returns

true if sequence of char value exists, otherwise false.

Throws

NullPointerException : if sequence is null.

Java String contains() method example

1. class ContainsExample{
2. public static void main(String args[]){
3. String name="what do you know about me";
4. System.out.println(name.contains("do you know"));
5. System.out.println(name.contains("about"));
6. System.out.println(name.contains("hello"));
7. }}
Test it Now

true
true
false
Java String endsWith

The java string endsWith() method checks if this string ends with given suffix. It returns true if
this string ends with given suffix else returns false.

Signature

The syntax or signature of endsWith() method is given below.

1. public boolean endsWith(String suffix)

Parameter

suffix : Sequence of character

Uday Singh(MCA), 09199511858 / 09835613557 Page 170


JAVA

Returns

true or false

Java String endsWith() method example

1. public class EndsWithExample{


2. public static void main(String args[]){
3. String s1="java by javatpoint";
4. System.out.println(s1.endsWith("t"));
5. System.out.println(s1.startsWith("point"));
6. }}

Output:

true
true
Java String equals

The java string equals() method compares the two given strings based on the content of the
string. If any character is not matched, it returns false. If all characters are matched, it returns
true.

The String equals() method overrides the equals() method of Object class.

Signature
1. public boolean equals(Object anotherObject)

Parameter

anotherObject : another object i.e. compared with this string.

Returns

true if characters of both strings are equal otherwise false.

Uday Singh(MCA), 09199511858 / 09835613557 Page 171


JAVA

Overrides

equals() method of java Object class.

Java String equals() method example

1. public class EqualsExample{


2. public static void main(String args[]){
3. String s1="javatpoint";
4. String s2="javatpoint";
5. String s3="JAVATPOINT";
6. String s4="python";
7. System.out.println(s1.equals(s2));//true because content and case is same
8. System.out.println(s1.equals(s3));//false because case is not same
9. System.out.println(s1.equals(s4));//false because content is not same
10. }}
Test it Now

true
false
false
Java String format

The java string format() method returns the formatted string by given locale, format and
arguments.

If you don't specify the locale in String.format() method, it uses default locale by
callingLocale.getDefault() method.

The format() method of java language is like sprintf() function in c language and printf() method
of java language.

Signature

There are two type of string format() method:

1. public static String format(String format, Object... args)


2. and,
3. public static String format(Locale locale, String format, Object... args)

Uday Singh(MCA), 09199511858 / 09835613557 Page 172


JAVA

Parameters

locale : specifies the locale to be applied on the format() method.

format : format of the string.

args : arguments for the format string. It may be zero or more.

Returns

formatted string

Throws

NullPointerException : if format is null.

IllegalFormatException : if format is illegal or incompatible.

Java String format() method example

1. public class FormatExample{


2. public static void main(String args[]){
3. String name="sonoo";
4. String sf1=String.format("name is %s",name);
5. String sf2=String.format("value is %f",32.33434);
6. String sf3=String.format("value is %32.12f",32.33434);//returns 12 char fractional part filling wi
th 0
7.
8. System.out.println(sf1);
9. System.out.println(sf2);
10. System.out.println(sf3);
11. }}
Test it Now

name is sonoo
value is 32.334340
value is 32.334340000000

Uday Singh(MCA), 09199511858 / 09835613557 Page 173


JAVA

Java String getBytes()

The java string getBytes() method returns the byte array of the string. In other words, it returns
sequence of bytes.

Signature

There are 3 variant of getBytes() method. The signature or syntax of string getBytes() method is
given below:

1. public byte[] getBytes()


2. public byte[] getBytes(Charset charset)
3. public byte[] getBytes(String charsetName)throws UnsupportedEncodingException

Returns

sequence of bytes.

Java String getBytes() method example

1. public class StringGetBytesExample{


2. public static void main(String args[]){
3. String s1="ABCDEFG";
4. byte[] barr=s1.getBytes();
5. for(int i=0;i<barr.length;i++){
6. System.out.println(barr[i]);
7. }
8. }}
Test it Now

Output:

65
66
67
68
69
70
71

Uday Singh(MCA), 09199511858 / 09835613557 Page 174


JAVA

Java String indexOf

The java string indexOf() method returns index of given character value or substring. If it is not
found, it returns -1. The index counter starts from zero.

Signature

There are 4 types of indexOf method in java. The signature of indexOf methods are given below:

No. Method Description

1 int indexOf(int ch) returns index position for the given char
value

2 int indexOf(int ch, int returns index position for the given char
fromIndex) value and from index

3 int indexOf(String substring) returns index position for the given


substring

4 int indexOf(String substring, int returns index position for the given
fromIndex) substring and from index

Parameters

ch: char value i.e. a single character e.g. 'a'

fromIndex: index position from where index of the char value or substring is retured

substring: substring to be searched in this string

Returns

index of the string

Uday Singh(MCA), 09199511858 / 09835613557 Page 175


JAVA

Java String indexOf() method example

1. public class IndexOfExample{


2. public static void main(String args[]){
3. String s1="this is index of example";
4. //passing substring
5. int index1=s1.indexOf("is");//returns the index of is substring
6. int index2=s1.indexOf("index");//returns the index of index substring
7. System.out.println(index1+" "+index2);//2 8
8.
9. //passing substring with from index
10. int index3=s1.indexOf("is",4);//returns the index of is substring after 4th index
11. System.out.println(index3);//5 i.e. the index of another is
12.
13. //passing char value
14. int index4=s1.indexOf('s');//returns the index of s char value
15. System.out.println(index4);//3
16. }}
Test it Now

2 8
5
3
Java String intern

The java string intern() method returns the interned string. It returns the canonical
representation of string.

It can be used to return string from pool memory, if it is created by new keyword.

Signature

The signature of intern method is given below:

1. public String intern()

Returns

interned string

Uday Singh(MCA), 09199511858 / 09835613557 Page 176


JAVA

Java String intern() method example

1. public class InternExample{


2. public static void main(String args[]){
3. String s1=new String("hello");
4. String s2="hello";
5. String s3=s1.intern();//returns string from pool, now it will be same as s2
6. System.out.println(s1==s2);//false because reference is different
7. System.out.println(s2==s3);//true because reference is same
8. }}
Test it Now

false
true
Java String isEmpty

The java string isEmpty() method checks if this string is empty. It returns true, if length of
string is 0 otherwise false.

The isEmpty() method of String class is included in java string since JDK 1.6.

Signature

The signature or syntax of string isEmpty() method is given below:

1. public boolean isEmpty()

Returns

true if length is 0 otherwise false.

Since

1.6

Java String isEmpty() method example

1. public class IsEmptyExample{

Uday Singh(MCA), 09199511858 / 09835613557 Page 177


JAVA

2. public static void main(String args[]){


3. String s1="";
4. String s2="javatpoint";
5.
6. System.out.println(s1.isEmpty());
7. System.out.println(s2.isEmpty());
8. }}
Test it Now

true
false
Java String join

The java string join() method returns a string joined with given delimiter. In string join method,
delimiter is copied for each elements.

In case of null element, "null" is added. The join() method is included in java string since JDK
1.8.

There are two types of join() methods in java string.

Signature

The signature or syntax of string join method is given below:

1. public static String join(CharSequence delimiter, CharSequence... elements)


2. and
3. public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

Parameters

delimiter : char value to be added with each element

elements : char value to be attached with delimiter

Returns

joined string with delimiter

Uday Singh(MCA), 09199511858 / 09835613557 Page 178


JAVA

Throws

NullPointerException if element or delimiter is null.

Since

1.8

Java String join() method example

1. public class StringJoinExample{


2. public static void main(String args[]){
3. String joinString1=String.join("-","welcome","to","javatpoint");
4. System.out.println(joinString1);
5. }}
Test it Now

welcome-to-javatpoint
Java String lastIndexOf

The java string lastIndexOf() method returns last index of the given character value or
substring. If it is not found, it returns -1. The index counter starts from zero.

Signature

There are 4 types of lastIndexOf method in java. The signature of lastIndexOf methods are given
below:

No. Method Description

1 int lastIndexOf(int ch) returns last index position for the given
char value

2 int lastIndexOf(int ch, int returns last index position for the given
fromIndex) char value and from index

Uday Singh(MCA), 09199511858 / 09835613557 Page 179


JAVA

3 int lastIndexOf(String substring) returns last index position for the given
substring

4 int lastIndexOf(String substring, returns last index position for the given
int fromIndex) substring and from index

Parameters

ch: char value i.e. a single character e.g. 'a'

fromIndex: index position from where index of the char value or substring is retured

substring: substring to be searched in this string

Returns

last index of the string

Java String lastIndexOf() method example

1. public class LastIndexOfExample{


2. public static void main(String args[]){
3. String s1="this is index of example";//there are 2 's' characters in this sentence
4. int index1=s1.lastIndexOf('s');//returns last index of 's' char value
5. System.out.println(index1);//6
6. }}

Output:

6
Java String length

The java string length() method length of the string. It returns count of total number of
characters. The length of java string is same as the unicode code units of the string.

Uday Singh(MCA), 09199511858 / 09835613557 Page 180


JAVA

Signature

The signature of the string length() method is given below:

1. public int length()

Specified by

CharSequence interface

Returns

length of characters

Java String length() method example

1. public class LengthExample{


2. public static void main(String args[]){
3. String s1="javatpoint";
4. String s2="python";
5. System.out.println("string length is: "+s1.length());//10 is the length of javatpoint string
6. System.out.println("string length is: "+s2.length());//6 is the length of python string
7. }}
Test it Now

string length is: 10


string length is: 6
Java String replace

The java string replace() method returns a string replacing all the old char or CharSequence to
new char or CharSequence.

Since JDK 1.5, a new replace() method is introduced, allowing you to replace a sequence of char
values.

Signature

There are two type of replace methods in java string.

Uday Singh(MCA), 09199511858 / 09835613557 Page 181


JAVA

1. public String replace(char oldChar, char newChar)


2. and
3. public String replace(CharSequence target, CharSequence replacement)

The second replace method is added since JDK 1.5.

Parameters

oldChar : old character

newChar : new character

target : target sequence of characters

replacement : replacement sequence of characters

Returns

replaced string

Java String replace(char old, char new) method example

1. public class ReplaceExample1{


2. public static void main(String args[]){
3. String s1="javatpoint is a very good website";
4. String replaceString=s1.replace('a','e');//replaces all occurrences of 'a' to 'e'
5. System.out.println(replaceString);
6. }}
Test it Now

jevetpoint is e very good website

Java String replace(CharSequence target, CharSequence replacement) method example

1. public class ReplaceExample2{


2. public static void main(String args[]){
3. String s1="my name is khan my name is java";
4. String replaceString=s1.replace("is","was");//replaces all occurrences of "is" to "was"

Uday Singh(MCA), 09199511858 / 09835613557 Page 182


JAVA

5. System.out.println(replaceString);
6. }}
Test it Now

my name was khan my name was java

Java String replaceAll

The java string replaceAll() method returns a string replacing all the sequence of characters
matching regex and replacement string.

Signature
1. public String replaceAll(String regex, String replacement)

Parameters

regex : regular expression

replacement : replacement sequence of characters

Returns

replaced string

Java String replaceAll() example: replace character

Let's see an example to replace all the occurrences of a single character.

1. public class ReplaceAllExample1{


2. public static void main(String args[]){
3. String s1="javatpoint is a very good website";
4. String replaceString=s1.replaceAll("a","e");//replaces all occurrences of "a" to "e"
5. System.out.println(replaceString);
6. }}
jevetpoint is e very good website

Java String replaceAll() example: replace word

Let's see an example to replace all the occurrences of single word or set of words.

Uday Singh(MCA), 09199511858 / 09835613557 Page 183


JAVA

1. public class ReplaceAllExample2{


2. public static void main(String args[]){
3. String s1="My name is Khan. My name is Bob. My name is Sonoo.";
4. String replaceString=s1.replaceAll("is","was");//replaces all occurrences of "is" to "was"
5. System.out.println(replaceString);
6. }}
My name was Khan. My name was Bob. My name was Sonoo.

Java String replaceAll() example: remove white spaces

Let's see an example to remove all the occurrences of white spaces.

1. public class ReplaceAllExample3{


2. public static void main(String args[]){
3. String s1="My name is Khan. My name is Bob. My name is Sonoo.";
4. String replaceString=s1.replaceAll("\\s","");
5. System.out.println(replaceString);
6. }}
MynamewasKhan.MynamewasBob.MynamewasSonoo.

Java String split

The java string split() method splits this string against given regular expression and returns a
char array.

Signature

There are two signature for split() method in java string.

1. public String split(String regex)


2. and,
3. public String split(String regex, int limit)

Parameter

regex : regular expression to be applied on string.

limit : limit for the number of strings in array. If it is zero, it will returns all the strings matching
regex.

Uday Singh(MCA), 09199511858 / 09835613557 Page 184


JAVA

Returns

array of strings

Throws

PatternSyntaxException if pattern for regular expression is invalid

Since

1.4

Java String split() method example

The given example returns total number of words in a string excluding space only. It also
includes special characters.

1. public class SplitExample{


2. public static void main(String args[]){
3. String s1="java string split method by javatpoint";
4. String[] words=s1.split("\\s");//splits the string based on string
5. //using java foreach loop to print elements of string array
6. for(String w:words){
7. System.out.println(w);
8. }
9. }}
Test it Now

java
string
split
method
by
javatpoint

Java String split() method with regex and length example

1. public class SplitExample2{

Uday Singh(MCA), 09199511858 / 09835613557 Page 185


JAVA

2. public static void main(String args[]){


3. String s1="welcome to split world";
4. System.out.println("returning words:");
5. for(String w:s1.split("\\s",0)){
6. System.out.println(w);
7. }
8. System.out.println("returning words:");
9. for(String w:s1.split("\\s",1)){
10. System.out.println(w);
11. }
12. System.out.println("returning words:");
13. for(String w:s1.split("\\s",2)){
14. System.out.println(w);
15. }
16.
17. }}
Test it Now

returning words:
welcome
to
split
world
returning words:
welcome to split world
returning words:
welcome
to split world

Java String startsWith

The java string startsWith() method checks if this string starts with given prefix. It returns true
if this string starts with given prefix else returns false.

Signature

The syntax or signature of startWith() method is given below.

1. public boolean startsWith(String prefix)


2. public boolean startsWith(String prefix, int offset)

Uday Singh(MCA), 09199511858 / 09835613557 Page 186


JAVA

Parameter

prefix : Sequence of character

Returns

true or false

Java String startsWith() method example

1. public class StartsWithExample{


2. public static void main(String args[]){
3. String s1="java string split method by javatpoint";
4. System.out.println(s1.startsWith("ja"));
5. System.out.println(s1.startsWith("java string"));
6. }}

Output:

true
true

Java String substring

The java string substring() method returns a part of the string.

We pass begin index and end index number position in the java substring method where start
index is inclusive and end index is exclusive. In other words, start index starts from 0 whereas
end index starts from 1.

There are two types of substring methods in java string.

Signature
1. public String substring(int startIndex)
2. and
3. public String substring(int startIndex, int endIndex)

Uday Singh(MCA), 09199511858 / 09835613557 Page 187


JAVA

If you don't specify endIndex, java substring() method will return all the characters from
startIndex.

Parameters

startIndex : starting index is inclusive

endIndex : ending index is exclusive

Returns

specified string

Throws

StringIndexOutOfBoundsException if start index is negative value or end index is lower than


starting index.

Java String substring() method example

1. public class SubstringExample{


2. public static void main(String args[]){
3. String s1="javatpoint";
4. System.out.println(s1.substring(2,4));//returns va
5. System.out.println(s1.substring(2));//returns vatpoint
6. }}
Test it Now

va
vatpoint
Java String toCharArray

The java string toCharArray() method converts this string into character array. It returns a
newly created character array, its length is similar to this string and its contents are initialized
with the characters of this string.

Uday Singh(MCA), 09199511858 / 09835613557 Page 188


JAVA

Signature

The signature or syntax of string toCharArray() method is given below:

1. public char[] toCharArray()

Returns

character array

Java String toCharArray() method example

1. public class StringToCharArrayExample{


2. public static void main(String args[]){
3. String s1="hello";
4. char[] ch=s1.toCharArray();
5. for(int i=0;i<ch.length;i++){
6. System.out.print(ch[i]);
7. }
8. }}

Output:

hello
Java String toLowerCase()

The java string toLowerCase() method returns the string in lowercase letter. In other words, it
converts all characters of the string into lower case letter.

The toLowerCase() method works same as toLowerCase(Locale.getDefault()) method. It


internally uses the default locale.

Signature

There are two variant of toLowerCase() method. The signature or syntax of string toLowerCase()
method is given below:

1. public String toLowerCase()


2. public String toLowerCase(Locale locale)

Uday Singh(MCA), 09199511858 / 09835613557 Page 189


JAVA

The second method variant of toLowerCase(), converts all the characters into lowercase using
the rules of given Locale.

Returns

string in lowercase letter.

Java String toLowerCase() method example

1. public class StringLowerExample{


2. public static void main(String args[]){
3. String s1="JAVATPOINT HELLO stRIng";
4. String s1lower=s1.toLowerCase();
5. System.out.println(s1lower);
6. }}
Test it Now

Output:

javatpoint hello string

Java String toUpperCase

The java string toUpperCase() method returns the string in uppercase letter. In other words, it
converts all characters of the string into upper case letter.

The toUpperCase() method works same as toUpperCase(Locale.getDefault()) method. It


internally uses the default locale.

Signature

There are two variant of toUpperCase() method. The signature or syntax of string toUpperCase()
method is given below:

1. public String toUpperCase()


2. public String toUpperCase(Locale locale)

Uday Singh(MCA), 09199511858 / 09835613557 Page 190


JAVA

The second method variant of toUpperCase(), converts all the characters into uppercase using the
rules of given Locale.

Returns

string in uppercase letter.

Java String toUpperCase() method example

1. public class StringUpperExample{


2. public static void main(String args[]){
3. String s1="hello string";
4. String s1upper=s1.toUpperCase();
5. System.out.println(s1upper);
6. }}
Test it Now

Output:

HELLO STRING
Java String trim

The java string trim() method eliminates leading and trailing spaces. The unicode value of
space character is '\u0020'. The trim() method in java string checks this unicode value before and
after the string, if it exists then removes the spaces and returns the omitted string.

The string trim() method doesn't omits middle spaces.

Signature

The signature or syntax of string trim method is given below:

1. public String trim()

Returns

string with omitted leading and trailing spaces

Uday Singh(MCA), 09199511858 / 09835613557 Page 191


JAVA

Java String trim() method example

1. public class StringTrimExample{


2. public static void main(String args[]){
3. String s1=" hello string ";
4. System.out.println(s1+"javatpoint");//without trim()
5. System.out.println(s1.trim()+"javatpoint");//with trim()
6. }}
Test it Now

hello string javatpoint


hello stringjavatpoint

ava String valueOf

The java string valueOf() method converts different types of values into string. By the help of
string valueOf() method, you can convert int to string, long to string, boolean to string, character
to string, float to string, double to string, object to string and char array to string.

Signature

The signature or syntax of string valueOf() method is given below:

1. public static String valueOf(boolean b)


2. public static String valueOf(char c)
3. public static String valueOf(char[] c)
4. public static String valueOf(int i)
5. public static String valueOf(long l)
6. public static String valueOf(float f)
7. public static String valueOf(double d)
8. public static String valueOf(Object o)

Returns

string representation of given value

Java String valueOf() method example

Uday Singh(MCA), 09199511858 / 09835613557 Page 192


JAVA

1. public class StringValueOfExample{


2. public static void main(String args[]){
3. int value=30;
4. String s1=String.valueOf(value);
5. System.out.println(s1+10);//concatenating string with 10
6. }}

Output:

3010
Java Regex

The Java Regex or Regular Expression is an API to define pattern for searching or
manipulating strings.

It is widely used to define constraint on strings such as password and email validation. After
learning java regex tutorial, you will be able to test your own regular expressions by the Java
Regex Tester Tool.

Java Regex API provides 1 interface and 3 classes in java.util.regex package.

java.util.regex package

It provides following classes and interface for regular expressions. The Matcher and Pattern
classes are widely used in java regular expression.

1. MatchResult interface
2. Matcher class
3. Pattern class
4. PatternSyntaxException class

Matcher class

It implements MatchResult interface. It is a regex engine i.e. used to perform match operations
on a character sequence.

No. Method Description

1 boolean test whether the regular expression matches the pattern.


matches()

Uday Singh(MCA), 09199511858 / 09835613557 Page 193


JAVA

2 boolean find() finds the next expression that matches the pattern.

3 boolean find(int finds the next expression that matches the pattern from
start) the given start number.

Pattern class

It is the compiled version of a regular expression. It is used to define a pattern for the regex
engine.

No. Method Description

1 static Pattern compile(String compiles the given regex and return the
regex) instance of pattern.

2 Matcher creates a matcher that matches the given


matcher(CharSequence input) input with pattern.

3 static boolean matches(String It works as the combination of compile and


regex, CharSequence input) matcher methods. It compiles the regular
expression and matches the given input
with the pattern.

4 String[] split(CharSequence splits the given input string around matches


input) of given pattern.

5 String pattern() returns the regex pattern.

Example of Java Regular Expressions

There are three ways to write the regex example in java.

1. import java.util.regex.*;
2. public class RegexExample1{
3. public static void main(String args[]){
4. //1st way
5. Pattern p = Pattern.compile(".s");//. represents single character
6. Matcher m = p.matcher("as");

Uday Singh(MCA), 09199511858 / 09835613557 Page 194


JAVA

7. boolean b = m.matches();
8.
9. //2nd way
10. boolean b2=Pattern.compile(".s").matcher("as").matches();
11.
12. //3rd way
13. boolean b3 = Pattern.matches(".s", "as");
14.
15. System.out.println(b+" "+b2+" "+b3);
16. }}
Test it Now

Output

true true true

Regular Expression . Example

The . (dot) represents a single character.

1. import java.util.regex.*;
2. class RegexExample2{
3. public static void main(String args[]){
4. System.out.println(Pattern.matches(".s", "as"));//true (2nd char is s)
5. System.out.println(Pattern.matches(".s", "mk"));//false (2nd char is not s)
6. System.out.println(Pattern.matches(".s", "mst"));//false (has more than 2 char)
7. System.out.println(Pattern.matches(".s", "amms"));//false (has more than 2 char)
8. System.out.println(Pattern.matches("..s", "mas"));//true (3rd char is s)
9. }}
Test it Now

Regex Character classes

No. Character Class Description

1 [abc] a, b, or c (simple class)

2 [^abc] Any character except a, b, or c (negation)

3 [a-zA-Z] a through z or A through Z, inclusive (range)

Uday Singh(MCA), 09199511858 / 09835613557 Page 195


JAVA

4 [a-d[m-p]] a through d, or m through p: [a-dm-p] (union)

5 [a-z&&[def]] d, e, or f (intersection)

6 [a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction)

7 [a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction)

Regular Expression Character classes Example

1. import java.util.regex.*;
2. class RegexExample3{
3. public static void main(String args[]){
4. System.out.println(Pattern.matches("[amn]", "abcd"));//false (not a or m or n)
5. System.out.println(Pattern.matches("[amn]", "a"));//true (among a or m or n)
6. System.out.println(Pattern.matches("[amn]", "ammmna"));//false (m and a comes more than onc
e)
7. }}
Test it Now

Regex Quantifiers

The quantifiers specify the number of occurrences of a character.

Regex Description

X? X occurs once or not at all

X+ X occurs once or more times

X* X occurs zero or more times

X{n} X occurs n times only

X{n,} X occurs n or more times

X{y,z} X occurs at least y times but less than z times

Uday Singh(MCA), 09199511858 / 09835613557 Page 196


JAVA

Regular Expression Character classes and Quantifiers Example

1. import java.util.regex.*;
2. class RegexExample4{
3. public static void main(String args[]){
4. System.out.println("? quantifier ....");
5. System.out.println(Pattern.matches("[amn]?", "a"));//true (a or m or n comes one time)
6. System.out.println(Pattern.matches("[amn]?", "aaa"));//false (a comes more than one time)
7. System.out.println(Pattern.matches("[amn]?", "aammmnn"));//false (a m and n comes more than
one time)
8. System.out.println(Pattern.matches("[amn]?", "aazzta"));//false (a comes more than one time)
9. System.out.println(Pattern.matches("[amn]?", "am"));//false (a or m or n must come one time)
10.
11. System.out.println("+ quantifier ....");
12. System.out.println(Pattern.matches("[amn]+", "a"));//true (a or m or n once or more times)
13. System.out.println(Pattern.matches("[amn]+", "aaa"));//true (a comes more than one time)
14. System.out.println(Pattern.matches("[amn]+", "aammmnn"));//true (a or m or n comes more than
once)
15. System.out.println(Pattern.matches("[amn]+", "aazzta"));//false (z and t are not matching pattern)

16.
17. System.out.println("* quantifier ....");
18. System.out.println(Pattern.matches("[amn]*", "ammmna"));//true (a or m or n may come zero or
more times)
19.
20. }}
Test it Now

Regex Metacharacters

The regular expression metacharacters work as a short codes.

Regex Description

. Any character (may or may not match terminator)

\d Any digits, short of [0-9]

\D Any non-digit, short for [^0-9]

Uday Singh(MCA), 09199511858 / 09835613557 Page 197


JAVA

\s Any whitespace character, short for [\t\n\x0B\f\r]

\S Any non-whitespace character, short for [^\s]

\w Any word character, short for [a-zA-Z_0-9]

\W Any non-word character, short for [^\w]

\b A word boundary

\B A non word boundary

Regular Expression Metacharacters Example

1. import java.util.regex.*;
2. class RegexExample5{
3. public static void main(String args[]){
4. System.out.println("metacharacters d....");\\d means digit
5.
6. System.out.println(Pattern.matches("\\d", "abc"));//false (non-digit)
7. System.out.println(Pattern.matches("\\d", "1"));//true (digit and comes once)
8. System.out.println(Pattern.matches("\\d", "4443"));//false (digit but comes more than once)
9. System.out.println(Pattern.matches("\\d", "323abc"));//false (digit and char)
10.
11. System.out.println("metacharacters D....");\\D means non-digit
12.
13. System.out.println(Pattern.matches("\\D", "abc"));//false (non-digit but comes more than once)
14. System.out.println(Pattern.matches("\\D", "1"));//false (digit)
15. System.out.println(Pattern.matches("\\D", "4443"));//false (digit)
16. System.out.println(Pattern.matches("\\D", "323abc"));//false (digit and char)
17. System.out.println(Pattern.matches("\\D", "m"));//true (non-digit and comes once)
18.
19. System.out.println("metacharacters D with quantifier....");
20. System.out.println(Pattern.matches("\\D*", "mak"));//true (non-
digit and may come 0 or more times)
21.
22. }}
Test it Now

Regular Expression Question 1

Uday Singh(MCA), 09199511858 / 09835613557 Page 198


JAVA

1. /*Create a regular expression that accepts alpha numeric characters only. Its
2. length must be 6 characters long only.*/
3.
4. import java.util.regex.*;
5. class RegexExample6{
6. public static void main(String args[]){
7. System.out.println(Pattern.matches("[a-zA-Z0-9]{6}", "arun32"));//true
8. System.out.println(Pattern.matches("[a-zA-Z0-9]{6}", "kkvarun32"));//false (more than 6 char)
9. System.out.println(Pattern.matches("[a-zA-Z0-9]{6}", "JA2Uk2"));//true
10. System.out.println(Pattern.matches("[a-zA-Z0-9]{6}", "arun$2"));//false ($ is not matched)
11. }}

Test it Now

Regular Expression Question 2

1. /*Create a regular expression that accepts 10 digit numeric characters


2. starting with 7, 8 or 9 only.*/
3.
4. import java.util.regex.*;
5. class RegexExample7{
6. public static void main(String args[]){
7. System.out.println("by character classes and quantifiers ...");
8. System.out.println(Pattern.matches("[789]{1}[0-9]{9}", "9953038949"));//true
9. System.out.println(Pattern.matches("[789][0-9]{9}", "9953038949"));//true
10.
11. System.out.println(Pattern.matches("[789][0-9]{9}", "99530389490"));//false (11 characters)
12. System.out.println(Pattern.matches("[789][0-9]{9}", "6953038949"));//false (starts from 6)
13. System.out.println(Pattern.matches("[789][0-9]{9}", "8853038949"));//true
14.
15. System.out.println("by metacharacters ...");
16. System.out.println(Pattern.matches("[789]{1}\\d{9}", "8853038949"));//true
17. System.out.println(Pattern.matches("[789]{1}\\d{9}", "3853038949"));//false (starts from 3)
18.
19. }}

Exception Handling in Java


1. Exception Handling
2. Advantage of Exception Handling
3. Hierarchy of Exception classes
4. Types of Exception
5. Scenarios where exception may occur

Uday Singh(MCA), 09199511858 / 09835613557 Page 199


JAVA

The exception handling in java is one of the powerful mechanism to handle the runtime
errors so that normal flow of the application can be maintained.

In this page, we will learn about java exception, its type and the difference between checked and
unchecked exceptions.

What is exception

Dictionary Meaning: Exception is an abnormal condition.

In java, exception is an event that disrupts the normal flow of the program. It is an object which
is thrown at runtime.

What is exception handling

Exception Handling is a mechanism to handle runtime errors such as ClassNotFound, IO, SQL,
Remote etc.

Advantage of Exception Handling

The core advantage of exception handling is to maintain the normal flow of the application.
Exception normally disrupts the normal flow of the application that is why we use exception
handling. Let's take a scenario:

1. statement 1;
2. statement 2;
3. statement 3;
4. statement 4;
5. statement 5;//exception occurs
6. statement 6;
7. statement 7;
8. statement 8;
9. statement 9;
10. statement 10;

Suppose there is 10 statements in your program and there occurs an exception at statement 5, rest
of the code will not be executed i.e. statement 6 to 10 will not run. If we perform exception
handling, rest of the exception will be executed. That is why we use exception handling in java.

Uday Singh(MCA), 09199511858 / 09835613557 Page 200


JAVA

Do You Know ?

•What is the difference between checked and unchecked exceptions ?


•What happens behind the code int data=50/0; ?
•Why use multiple catch block ?
•Is there any possibility when finally block is not executed ?
•What is exception propagation ?
•What is the difference between throw and throws keyword ?
•What are the 4 rules for using exception handling with method overriding ?

Hierarchy of Java Exception classes

Uday Singh(MCA), 09199511858 / 09835613557 Page 201


JAVA

Types of Exception

There are mainly two types of exceptions: checked and unchecked where error is considered as
unchecked exception. The sun microsystem says there are three types of exceptions:

1. Checked Exception
2. Unchecked Exception
3. Error

Difference between checked and unchecked exceptions

1) Checked Exception

The classes that extend Throwable class except RuntimeException and Error are known as
checked exceptions e.g.IOException, SQLException etc. Checked exceptions are checked at
compile-time.

2) Unchecked Exception

The classes that extend RuntimeException are known as unchecked exceptions e.g.
ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException etc. Unchecked
exceptions are not checked at compile-time rather they are checked at runtime.

3) Error

Error is irrecoverable e.g. OutOfMemoryError, VirtualMachineError, AssertionError etc.

Common scenarios where exceptions may occur

There are given some scenarios where unchecked exceptions can occur. They are as follows:

1) Scenario where ArithmeticException occurs

If we divide any number by zero, there occurs an ArithmeticException.

1. int a=50/0;//ArithmeticException

Uday Singh(MCA), 09199511858 / 09835613557 Page 202


JAVA

2) Scenario where NullPointerException occurs

If we have null value in any variable, performing any operation by the variable occurs an
NullPointerException.

1. String s=null;
2. System.out.println(s.length());//NullPointerException

3) Scenario where NumberFormatException occurs

The wrong formatting of any value, may occur NumberFormatException. Suppose I have a
string variable that have characters, converting this variable into digit will occur
NumberFormatException.

1. String s="abc";
2. int i=Integer.parseInt(s);//NumberFormatException

4) Scenario where ArrayIndexOutOfBoundsException occurs

If you are inserting any value in the wrong index, it would result
ArrayIndexOutOfBoundsException as shown below:

1. int a[]=new int[5];


2. a[10]=50; //ArrayIndexOutOfBoundsException

Java Exception Handling Keywords

There are 5 keywords used in java exception handling.

1. try
2. catch
3. finally
4. throw
5. throws

Java try-catch

Java try block

Uday Singh(MCA), 09199511858 / 09835613557 Page 203


JAVA

Java try block is used to enclose the code that might throw an exception. It must be used within
the method.

Java try block must be followed by either catch or finally block.

Syntax of java try-catch

1. try{
2. //code that may throw exception
3. }catch(Exception_class_Name ref){}

Syntax of try-finally block

1. try{
2. //code that may throw exception
3. }finally{}

Java catch block

Java catch block is used to handle the Exception. It must be used after the try block only.

You can use multiple catch block with a single try.

Problem without exception handling

Let's try to understand the problem if we don't use try-catch block.

1. public class Testtrycatch1{


2. public static void main(String args[]){
3. int data=50/0;//may throw exception
4. System.out.println("rest of the code...");
5. }
6. }
Test it Now

Output:

Exception in thread main java.lang.ArithmeticException:/ by zero

As displayed in the above example, rest of the code is not executed (in such case, rest of the
code... statement is not printed).

Uday Singh(MCA), 09199511858 / 09835613557 Page 204


JAVA

There can be 100 lines of code after exception. So all the code after exception will not be
executed.

Solution by exception handling

Let's see the solution of above problem by java try-catch block.

1. public class Testtrycatch2{


2. public static void main(String args[]){
3. try{
4. int data=50/0;
5. }catch(ArithmeticException e){System.out.println(e);}
6. System.out.println("rest of the code...");
7. }
8. }
Test it Now

Output:

Exception in thread main java.lang.ArithmeticException:/ by zero


rest of the code...

Now, as displayed in the above example, rest of the code is executed i.e. rest of the code...
statement is printed.

Internal working of java try-catch block

Uday Singh(MCA), 09199511858 / 09835613557 Page 205


JAVA

The JVM firstly checks whether the exception is handled or not. If exception is not handled,
JVM provides a default exception handler that performs the following tasks:

• Prints out exception description.


• Prints the stack trace (Hierarchy of methods where the exception occurred).
• Causes the program to terminate.

But if exception is handled by the application programmer, normal flow of the application is
maintained i.e. rest of the code is executed.

Java catch multiple exceptions

Java Multi catch block

Uday Singh(MCA), 09199511858 / 09835613557 Page 206


JAVA

If you have to perform different tasks at the occurrence of different Exceptions, use java multi
catch block.

Let's see a simple example of java multi-catch block.

1. public class TestMultipleCatchBlock{


2. public static void main(String args[]){
3. try{
4. int a[]=new int[5];
5. a[5]=30/0;
6. }
7. catch(ArithmeticException e){System.out.println("task1 is completed");}
8. catch(ArrayIndexOutOfBoundsException e){System.out.println("task 2 completed");}
9. catch(Exception e){System.out.println("common task completed");}
10.
11. System.out.println("rest of the code...");
12. }
13. }
Test it Now

Output:task1 completed
rest of the code...

Rule: At a time only one Exception is occured and at a time only one catch block is executed.

Rule: All catch blocks must be ordered from most specific to most general i.e. catch for
ArithmeticException must come before catch for Exception .

1. class TestMultipleCatchBlock1{
2. public static void main(String args[]){
3. try{
4. int a[]=new int[5];
5. a[5]=30/0;
6. }
7. catch(Exception e){System.out.println("common task completed");}
8. catch(ArithmeticException e){System.out.println("task1 is completed");}
9. catch(ArrayIndexOutOfBoundsException e){System.out.println("task 2 completed");}
10. System.out.println("rest of the code...");
11. }
12. }
Test it Now

Output:

Compile-time error

Uday Singh(MCA), 09199511858 / 09835613557 Page 207


JAVA

Java Nested try block

The try block within a try block is known as nested try block in java.

Why use nested try block

Sometimes a situation may arise where a part of a block may cause one error and the entire block
itself may cause another error. In such cases, exception handlers have to be nested.

Syntax:
1. ....
2. try
3. {
4. statement 1;
5. statement 2;
6. try
7. {
8. statement 1;
9. statement 2;
10. }
11. catch(Exception e)
12. {
13. }
14. }
15. catch(Exception e)
16. {
17. }
18. ....

Java nested try example

Let's see a simple example of java nested try block.

1. class Excep6{
2. public static void main(String args[]){
3. try{
4. try{
5. System.out.println("going to divide");
6. int b =39/0;
7. }catch(ArithmeticException e){System.out.println(e);}
8.
9. try{
10. int a[]=new int[5];
11. a[5]=4;
12. }catch(ArrayIndexOutOfBoundsException e){System.out.println(e);}

Uday Singh(MCA), 09199511858 / 09835613557 Page 208


JAVA

13.
14. System.out.println("other statement);
15. }catch(Exception e){System.out.println("handeled");}
16.
17. System.out.println("normal flow..");
18. }
19. }

Java finally block

Java finally block is a block that is used to execute important code such as closing connection,
stream etc.

Java finally block is always executed whether exception is handled or not.

Java finally block must be followed by try or catch block.

Uday Singh(MCA), 09199511858 / 09835613557 Page 209


JAVA

Note: If you don't handle exception, before terminating the program, JVM executes finally
block(if any).

Why use java finally

o Finally block in java can be used to put "cleanup" code such as closing a file, closing
connection etc.

Usage of Java finally

Uday Singh(MCA), 09199511858 / 09835613557 Page 210


JAVA

Let's see the different cases where java finally block can be used.

Case 1

Let's see the java finally example where exception doesn't occur.

1. class TestFinallyBlock{
2. public static void main(String args[]){
3. try{
4. int data=25/5;
5. System.out.println(data);
6. }
7. catch(NullPointerException e){System.out.println(e);}
8. finally{System.out.println("finally block is always executed");}
9. System.out.println("rest of the code...");
10. }
11. }
Test it Now

Output:5
finally block is always executed
rest of the code...

Case 2

Let's see the java finally example where exception occurs and not handled.

1. class TestFinallyBlock1{
2. public static void main(String args[]){
3. try{
4. int data=25/0;
5. System.out.println(data);
6. }
7. catch(NullPointerException e){System.out.println(e);}
8. finally{System.out.println("finally block is always executed");}
9. System.out.println("rest of the code...");
10. }
11. }
Test it Now

Output:finally block is always executed


Exception in thread main java.lang.ArithmeticException:/ by zero

Case 3

Let's see the java finally example where exception occurs and handled.

Uday Singh(MCA), 09199511858 / 09835613557 Page 211


JAVA

1. public class TestFinallyBlock2{


2. public static void main(String args[]){
3. try{
4. int data=25/0;
5. System.out.println(data);
6. }
7. catch(ArithmeticException e){System.out.println(e);}
8. finally{System.out.println("finally block is always executed");}
9. System.out.println("rest of the code...");
10. }
11. }
Test it Now

Output:Exception in thread main java.lang.ArithmeticException:/ by zero


finally block is always executed
rest of the code...

Rule: For each try block there can be zero or more catch blocks, but only one finally block.

Note: The finally block will not be executed if program exits(either by calling System.exit() or
by causing a fatal error that causes the process to abort).

Java throw exception

Java throw keyword

The Java throw keyword is used to explicitly throw an exception.

We can throw either checked or uncheked exception in java by throw keyword. The throw
keyword is mainly used to throw custom exception. We will see custom exceptions later.

The syntax of java throw keyword is given below.

1. throw exception;

Let's see the example of throw IOException.

1. throw new IOException("sorry device error);

java throw keyword example

Uday Singh(MCA), 09199511858 / 09835613557 Page 212


JAVA

In this example, we have created the validate method that takes integer value as a parameter. If
the age is less than 18, we are throwing the ArithmeticException otherwise print a message
welcome to vote.

1. public class TestThrow1{


2. static void validate(int age){
3. if(age<18)
4. throw new ArithmeticException("not valid");
5. else
6. System.out.println("welcome to vote");
7. }
8. public static void main(String args[]){
9. validate(13);
10. System.out.println("rest of the code...");
11. }
12. }
Test it Now

Output:

Exception in thread main java.lang.ArithmeticException:not valid


Java Exception propagation
An exception is first thrown from the top of the stack and if it is not caught, it drops down the
call stack to the previous method,If not caught there, the exception again drops down to the
previous method, and so on until they are caught or until they reach the very bottom of the call
stack.This is called exception propagation.

Rule: By default Unchecked Exceptions are forwarded in calling chain (propagated).

Program of Exception Propagation

1. class TestExceptionPropagation1{
2. void m(){
3. int data=50/0;
4. }
5. void n(){
6. m();
7. }
8. void p(){
9. try{
10. n();
11. }catch(Exception e){System.out.println("exception handled");}
12. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 213


JAVA

13. public static void main(String args[]){


14. TestExceptionPropagation1 obj=new TestExceptionPropagation1();
15. obj.p();
16. System.out.println("normal flow...");
17. }
18. }
Test it Now

Output:exception handled
normal flow...

In the above example exception occurs in m() method where it is not handled,so it is propagated
to previous n() method where it is not handled, again it is propagated to p() method where
exception is handled.

Exception can be handled in any method in call stack either in main() method,p() method,n()
method or m() method.

Rule: By default, Checked Exceptions are not forwarded in calling chain (propagated).

Program which describes that checked exceptions are not propagated

1. class TestExceptionPropagation2{
2. void m(){
3. throw new java.io.IOException("device error");//checked exception
4. }
5. void n(){
6. m();

Uday Singh(MCA), 09199511858 / 09835613557 Page 214


JAVA

7. }
8. void p(){
9. try{
10. n();
11. }catch(Exception e){System.out.println("exception handeled");}
12. }
13. public static void main(String args[]){
14. TestExceptionPropagation2 obj=new TestExceptionPropagation2();
15. obj.p();
16. System.out.println("normal flow");
17. }
18. }
Test it Now

Output:Compile Time Error


Java throws keyword

The Java throws keyword is used to declare an exception. It gives an information to the
programmer that there may occur an exception so it is better for the programmer to provide the
exception handling code so that normal flow can be maintained.

Exception Handling is mainly used to handle the checked exceptions. If there occurs any
unchecked exception such as NullPointerException, it is programmers fault that he is not
performing check up before the code being used.

Syntax of java throws


1. return_type method_name() throws exception_class_name{
2. //method code
3. }

Which exception should be declared

Ans) checked exception only, because:

• unchecked Exception: under your control so correct your code.


• error: beyond your control e.g. you are unable to do anything if there occurs
VirtualMachineError or StackOverflowError.

Advantage of Java throws keyword

Now Checked Exception can be propagated (forwarded in call stack).

Uday Singh(MCA), 09199511858 / 09835613557 Page 215


JAVA

It provides information to the caller of the method about the exception.

Java throws example

Let's see the example of java throws clause which describes that checked exceptions can be
propagated by throws keyword.

1. import java.io.IOException;
2. class Testthrows1{
3. void m()throws IOException{
4. throw new IOException("device error");//checked exception
5. }
6. void n()throws IOException{
7. m();
8. }
9. void p(){
10. try{
11. n();
12. }catch(Exception e){System.out.println("exception handled");}
13. }
14. public static void main(String args[]){
15. Testthrows1 obj=new Testthrows1();
16. obj.p();
17. System.out.println("normal flow...");
18. }
19. }
Test it Now

Output:

exception handled
normal flow...

Rule: If you are calling a method that declares an exception, you must either caught or
declare the exception.
There are two cases:
1. Case1:You caught the exception i.e. handle the exception using try/catch.
2. Case2:You declare the exception i.e. specifying throws with the method.

Uday Singh(MCA), 09199511858 / 09835613557 Page 216


JAVA

Case1: You handle the exception


• In case you handle the exception, the code will be executed fine whether exception
occurs during the program or not.

1. import java.io.*;
2. class M{
3. void method()throws IOException{
4. throw new IOException("device error");
5. }
6. }
7. public class Testthrows2{
8. public static void main(String args[]){
9. try{
10. M m=new M();
11. m.method();
12. }catch(Exception e){System.out.println("exception handled");}
13.
14. System.out.println("normal flow...");
15. }
16. }
Test it Now

Output:exception handled
normal flow...

Case2: You declare the exception


• A)In case you declare the exception, if exception does not occur, the code will be
executed fine.
• B)In case you declare the exception if exception occures, an exception will be thrown at
runtime because throws does not handle the exception.

A)Program if exception does not occur


1. import java.io.*;
2. class M{
3. void method()throws IOException{
4. System.out.println("device operation performed");
5. }
6. }
7. class Testthrows3{
8. public static void main(String args[])throws IOException{//declare exception
9. M m=new M();
10. m.method();
11.
12. System.out.println("normal flow...");
13. }
Uday Singh(MCA), 09199511858 / 09835613557 Page 217
JAVA

14. }
Test it Now

Output:device operation performed


normal flow...

B)Program if exception occurs

1. import java.io.*;
2. class M{
3. void method()throws IOException{
4. throw new IOException("device error");
5. }
6. }
7. class Testthrows4{
8. public static void main(String args[])throws IOException{//declare exception
9. M m=new M();
10. m.method();
11.
12. System.out.println("normal flow...");
13. }
14. }
Test it Now

Output:Runtime Exception

Difference between throw and throws


Click me for details

Que) Can we rethrow an exception?

Yes, by throwing same exception in catch block.

Difference between throw and throws in Java

There are many differences between throw and throws keywords. A list of differences between
throw and throws are given below:

No. throw throws

1) Java throw keyword is used to Java throws keyword is used to declare

Uday Singh(MCA), 09199511858 / 09835613557 Page 218


JAVA

explicitly throw an exception. an exception.

2) Checked exception cannot be Checked exception can be propagated


propagated using throw only. with throws.

3) Throw is followed by an Throws is followed by class.


instance.

4) Throw is used within the Throws is used with the method


method. signature.

5) You cannot throw multiple You can declare multiple exceptions e.g.
exceptions. public void method()throws
IOException,SQLException.

Java throw example

1. void m(){
2. throw new ArithmeticException("sorry");
3. }

Java throws example

1. void m()throws ArithmeticException{


2. //method code
3. }

Java throw and throws example

1. void m()throws ArithmeticException{


2. throw new ArithmeticException("sorry");
3. }

Difference between final, finally and finalize

There are many differences between final, finally and finalize. A list of differences between
final, finally and finalize are given below:

No. final finally finalize

Uday Singh(MCA), 09199511858 / 09835613557 Page 219


JAVA

1) Final is used to apply Finally is used to Finalize is used to


restrictions on class, method place important perform clean up
and variable. Final class code, it will be processing just
can't be inherited, final executed whether before object is
method can't be overridden exception is garbage collected.
and final variable value can't handled or not.
be changed.

2) Final is a keyword. Finally is a block. Finalize is a


method.

Java final example

1. class FinalExample{
2. public static void main(String[] args){
3. final int x=100;
4. x=200;//Compile Time Error
5. }}

Java finally example

1. class FinallyExample{
2. public static void main(String[] args){
3. try{
4. int x=300;
5. }catch(Exception e){System.out.println(e);}
6. finally{System.out.println("finally block is executed");}
7. }}

Java finalize example

1. class FinalizeExample{
2. public void finalize(){System.out.println("finalize called");}
3. public static void main(String[] args){
4. FinalizeExample f1=new FinalizeExample();
5. FinalizeExample f2=new FinalizeExample();
6. f1=null;
7. f2=null;
8. System.gc();
9. }}
ExceptionHandling with MethodOverriding in Java
There are many rules if we talk about methodoverriding with exception handling. The Rules

Uday Singh(MCA), 09199511858 / 09835613557 Page 220


JAVA

are as follows:
•If the superclass method does not declare an exception
o If the superclass method does not declare an exception, subclass overridden
method cannot declare the checked exception but it can declare unchecked
exception.
•If the superclass method declares an exception
o If the superclass method declares an exception, subclass overridden method
can declare same, subclass exception or no exception but cannot declare parent
exception.

If the superclass method does not declare an exception

1) Rule: If the superclass method does not declare an exception, subclass overridden method
cannot declare the checked exception.

1. import java.io.*;
2. class Parent{
3. void msg(){System.out.println("parent");}
4. }
5.
6. class TestExceptionChild extends Parent{
7. void msg()throws IOException{
8. System.out.println("TestExceptionChild");
9. }
10. public static void main(String args[]){
11. Parent p=new TestExceptionChild();
12. p.msg();
13. }
14. }
Test it Now

Output:Compile Time Error

2) Rule: If the superclass method does not declare an exception, subclass overridden method
cannot declare the checked exception but can declare unchecked exception.

1. import java.io.*;
2. class Parent{
3. void msg(){System.out.println("parent");}
4. }
5.

Uday Singh(MCA), 09199511858 / 09835613557 Page 221


JAVA

6. class TestExceptionChild1 extends Parent{


7. void msg()throws ArithmeticException{
8. System.out.println("child");
9. }
10. public static void main(String args[]){
11. Parent p=new TestExceptionChild1();
12. p.msg();
13. }
14. }
Test it Now

Output:child

If the superclass method declares an exception

1) Rule: If the superclass method declares an exception, subclass overridden method can
declare same, subclass exception or no exception but cannot declare parent exception.

Example in case subclass overridden method declares parent exception


1. import java.io.*;
2. class Parent{
3. void msg()throws ArithmeticException{System.out.println("parent");}
4. }
5.
6. class TestExceptionChild2 extends Parent{
7. void msg()throws Exception{System.out.println("child");}
8.
9. public static void main(String args[]){
10. Parent p=new TestExceptionChild2();
11. try{
12. p.msg();
13. }catch(Exception e){}
14. }
15. }
Test it Now

Output:Compile Time Error

Example in case subclass overridden method declares same exception


1. import java.io.*;
2. class Parent{
3. void msg()throws Exception{System.out.println("parent");}
4. }
5.

Uday Singh(MCA), 09199511858 / 09835613557 Page 222


JAVA

6. class TestExceptionChild3 extends Parent{


7. void msg()throws Exception{System.out.println("child");}
8.
9. public static void main(String args[]){
10. Parent p=new TestExceptionChild3();
11. try{
12. p.msg();
13. }catch(Exception e){}
14. }
15. }
Test it Now

Output:child

Example in case subclass overridden method declares subclass exception


1. import java.io.*;
2. class Parent{
3. void msg()throws Exception{System.out.println("parent");}
4. }
5.
6. class TestExceptionChild4 extends Parent{
7. void msg()throws ArithmeticException{System.out.println("child");}
8.
9. public static void main(String args[]){
10. Parent p=new TestExceptionChild4();
11. try{
12. p.msg();
13. }catch(Exception e){}
14. }
15. }
Test it Now

Output:child

Example in case subclass overridden method declares no exception


1. import java.io.*;
2. class Parent{
3. void msg()throws Exception{System.out.println("parent");}
4. }
5.
6. class TestExceptionChild5 extends Parent{
7. void msg(){System.out.println("child");}
8.
9. public static void main(String args[]){

Uday Singh(MCA), 09199511858 / 09835613557 Page 223


JAVA

10. Parent p=new TestExceptionChild5();


11. try{
12. p.msg();
13. }catch(Exception e){}
14. }
15. }
Test it Now

Output:child
Java Custom Exception

If you are creating your own Exception that is known as custom exception or user-defined
exception. Java custom exceptions are used to customize the exception according to user need.

By the help of custom exception, you can have your own exception and message.

Let's see a simple example of java custom exception.

1. class InvalidAgeException extends Exception{


2. InvalidAgeException(String s){
3. super(s);
4. }
5. }
1. class TestCustomException1{
2.
3. static void validate(int age)throws InvalidAgeException{
4. if(age<18)
5. throw new InvalidAgeException("not valid");
6. else
7. System.out.println("welcome to vote");
8. }
9.
10. public static void main(String args[]){
11. try{
12. validate(13);
13. }catch(Exception m){System.out.println("Exception occured: "+m);}
14.
15. System.out.println("rest of the code...");
16. }
17. }
Test it Now

Output:Exception occured: InvalidAgeException:not valid


rest of the code...

Uday Singh(MCA), 09199511858 / 09835613557 Page 224


JAVA

next →← prev

Java Inner Class


1. Java Inner classes
2. Advantage of Inner class
3. Difference between nested class and inner class
4. Types of Nested classes

Java inner class or nested class is a class i.e. declared inside the class or interface.

We use inner classes to logically group classes and interfaces in one place so that it can be
more readable and maintainable.

Additionally, it can access all the members of outer class including private data members and
methods.

Syntax of Inner class

1. class Java_Outer_class{
2. //code
3. class Java_Inner_class{
4. //code
5. }
6. }

Advantage of java inner classes

There are basically three advantages of inner classes in java. They are as follows:

1) Nested classes represent a special type of relationship that is it can access all the members
(data members and methods) of outer class including private.

2) Nested classes are used to develop more readable and maintainable code because it
logically group classes and interfaces in one place only.

3) Code Optimization: It requires less code to write.

Do You Know
o What is the internal code generated by the compiler for member inner class ?
o What are the two ways to create annonymous inner class ?
o Can we access the non-final local variable inside the local inner class ?
o How to access the static nested class ?
o Can we define an interface within the class ?

Uday Singh(MCA), 09199511858 / 09835613557 Page 225


JAVA

o Can we define a class within the interface ?

Difference between nested class and inner class in Java

Inner class is a part of nested class. Non-static nested classes are known as inner classes.

Types of Nested classes


There are two types of nested classes non-static and static nested classes.The non-static nested
classes are also known as inner classes.
1. Non-static nested class(inner class)
o a)Member inner class
o b)Annomynous inner class
o c)Local inner class
2. Static nested class

Type Description

Member Inner A class created within class and outside method.


Class

Anonymous Inner A class created for implementing interface or extending


Class class. Its name is decided by the java compiler.

Local Inner Class A class created within method.

Static Nested A static class created within class.


Class

Nested Interface An interface

Java Member inner class

A non-static class that is created inside a class but outside a method is called member inner class.

Syntax:

1. class Outer{
2. //code
3. class Inner{

Uday Singh(MCA), 09199511858 / 09835613557 Page 226


JAVA

4. //code
5. }
6. }

Java Member inner class example

In this example, we are creating msg() method in member inner class that is accessing the private
data member of outer class.

1. class TestMemberOuter1{
2. private int data=30;
3. class Inner{
4. void msg(){System.out.println("data is "+data);}
5. }
6. public static void main(String args[]){
7. TestMemberOuter1 obj=new TestMemberOuter1();
8. TestMemberOuter1.Inner in=obj.new Inner();
9. in.msg();
10. }
11. }
Test it Now

Output:

data is 30

Internal working of Java member inner class

The java compiler creates two class files in case of inner class. The class file name of inner class
is "Outer$Inner". If you want to instantiate inner class, you must have to create the instance of
outer class. In such case, instance of inner class is created inside the instance of outer class.

Internal code generated by the compiler

The java compiler creates a class file named Outer$Inner in this case. The Member inner class
have the reference of Outer class that is why it can access all the data members of Outer class
including private.

1. import java.io.PrintStream;
2. class Outer$Inner
3. {
4. final Outer this$0;
5. Outer$Inner()
6. { super();
7. this$0 = Outer.this;

Uday Singh(MCA), 09199511858 / 09835613557 Page 227


JAVA

8. }
9. void msg()
10. {
11. System.out.println((new StringBuilder()).append("data is ")
12. .append(Outer.access$000(Outer.this)).toString());
13. }
14. }
Java Anonymous inner class

A class that have no name is known as anonymous inner class in java. It should be used if you
have to override method of class or interface. Java Anonymous inner class can be created by two
ways:

1. Class (may be abstract or concrete).


2. Interface

Java anonymous inner class example using class


1. abstract class Person{
2. abstract void eat();
3. }
4. class TestAnonymousInner{
5. public static void main(String args[]){
6. Person p=new Person(){
7. void eat(){System.out.println("nice fruits");}
8. };
9. p.eat();
10. }
11. }
Test it Now

Output:

nice fruits

Internal working of given code

1. Person p=new Person(){


2. void eat(){System.out.println("nice fruits");}
3. };
1. A class is created but its name is decided by the compiler which extends the Person class
and provides the implementation of the eat() method.
2. An object of Anonymous class is created that is referred by p reference variable of Person
type.

Uday Singh(MCA), 09199511858 / 09835613557 Page 228


JAVA

Internal class generated by the compiler

1. import java.io.PrintStream;
2. static class TestAnonymousInner$1 extends Person
3. {
4. TestAnonymousInner$1(){}
5. void eat()
6. {
7. System.out.println("nice fruits");
8. }
9. }

Java anonymous inner class example using interface

1. interface Eatable{
2. void eat();
3. }
4. class TestAnnonymousInner1{
5. public static void main(String args[]){
6. Eatable e=new Eatable(){
7. public void eat(){System.out.println("nice fruits");}
8. };
9. e.eat();
10. }
11. }
Test it Now

Output:

nice fruits

Internal working of given code

It performs two main tasks behind this code:

1. Eatable p=new Eatable(){


2. void eat(){System.out.println("nice fruits");}
3. };
1. A class is created but its name is decided by the compiler which implements the Eatable
interface and provides the implementation of the eat() method.
2. An object of Anonymous class is created that is referred by p reference variable of
Eatable type.

Internal class generated by the compiler


1. import java.io.PrintStream;

Uday Singh(MCA), 09199511858 / 09835613557 Page 229


JAVA

2. static class TestAnonymousInner1$1 implements Eatable


3. {
4. TestAnonymousInner1$1(){}
5. void eat(){System.out.println("nice fruits");}
6. }
Java Local inner class

A class i.e. created inside a method is called local inner class in java. If you want to invoke the
methods of local inner class, you must instantiate this class inside the method.

Java local inner class example

1. public class localInner1{


2. private int data=30;//instance variable
3. void display(){
4. class Local{
5. void msg(){System.out.println(data);}
6. }
7. Local l=new Local();
8. l.msg();
9. }
10. public static void main(String args[]){
11. localInner1 obj=new localInner1();
12. obj.display();
13. }
14. }
Test it Now

Output:

30

Internal class generated by the compiler

In such case, compiler creates a class named Simple$1Local that have the reference of the outer
class.

1. import java.io.PrintStream;
2. class localInner1$Local
3. {
4. final localInner1 this$0;
5. localInner1$Local()
6. {
7. super();
8. this$0 = Simple.this;

Uday Singh(MCA), 09199511858 / 09835613557 Page 230


JAVA

9. }
10. void msg()
11. {
12. System.out.println(localInner1.access$000(localInner1.this));
13. }
14. }

Rule: Local variable can't be private, public or protected.

Rules for Java Local Inner class

1) Local inner class cannot be invoked from outside the method.

2) Local inner class cannot access non-final local variable till JDK 1.7. Since JDK 1.8, it is
possible to access the non-final local variable in local inner class.

Example of local inner class with local variable


1. class localInner2{
2. private int data=30;//instance variable
3. void display(){
4. int value=50;//local variable must be final till jdk 1.7 only
5. class Local{
6. void msg(){System.out.println(value);}
7. }
8. Local l=new Local();
9. l.msg();
10. }
11. public static void main(String args[]){
12. localInner2 obj=new localInner2();
13. obj.display();
14. }
15. }
Test it Now

Output:

50
Java static nested class

A static class i.e. created inside a class is called static nested class in java. It cannot access non-
static data members and methods. It can be accessed by outer class name.

o It can access static data members of outer class including private.


o Static nested class cannot access non-static (instance) data member or method.
Uday Singh(MCA), 09199511858 / 09835613557 Page 231
JAVA

Java static nested class example with instance method

1. class TestOuter1{
2. static int data=30;
3. static class Inner{
4. void msg(){System.out.println("data is "+data);}
5. }
6. public static void main(String args[]){
7. TestOuter1.Inner obj=new TestOuter1.Inner();
8. obj.msg();
9. }
10. }
Test it Now

Output:

data is 30

In this example, you need to create the instance of static nested class because it has instance
method msg(). But you don't need to create the object of Outer class because nested class is static
and static properties, methods or classes can be accessed without object.

Internal class generated by the compiler


1. import java.io.PrintStream;
2. static class TestOuter1$Inner
3. {
4. TestOuter1$Inner(){}
5. void msg(){
6. System.out.println((new StringBuilder()).append("data is ")
7. .append(TestOuter1.data).toString());
8. }
9. }

Java static nested class example with static method

If you have the static member inside static nested class, you don't need to create instance of static
nested class.

1. class TestOuter2{
2. static int data=30;
3. static class Inner{
4. static void msg(){System.out.println("data is "+data);}
5. }
6. public static void main(String args[]){
7. TestOuter2.Inner.msg();//no need to create the instance of static nested class

Uday Singh(MCA), 09199511858 / 09835613557 Page 232


JAVA

8. }
9. }
Test it Now

Output:

data is 30
Java Nested Interface

An interface i.e. declared within another interface or class is known as nested interface. The
nested interfaces are used to group related interfaces so that they can be easy to maintain. The
nested interface must be referred by the outer interface or class. It can't be accessed directly.

Points to remember for nested interfaces

There are given some points that should be remembered by the java programmer.

o Nested interface must be public if it is declared inside the interface but it can have any
access modifier if declared within the class.
o Nested interfaces are declared static implicitely.

Syntax of nested interface which is declared within the interface


1. interface interface_name{
2. ...
3. interface nested_interface_name{
4. ...
5. }
6. }

Syntax of nested interface which is declared within the class


1. class class_name{
2. ...
3. interface nested_interface_name{
4. ...
5. }
6. }

Example of nested interface which is declared within the interface


In this example, we are going to learn how to declare the nested interface and how we can
access it.

1. interface Showable{
2. void show();
3. interface Message{

Uday Singh(MCA), 09199511858 / 09835613557 Page 233


JAVA

4. void msg();
5. }
6. }
7.
8. class TestNestedInterface1 implements Showable.Message{
9. public void msg(){System.out.println("Hello nested interface");}
10.
11. public static void main(String args[]){
12. Showable.Message message=new TestNestedInterface1();//upcasting here
13. message.msg();
14. }
15. }
Test it Now

download the example of nested interface

Output:hello nested interface


As you can see in the above example, we are acessing the Message interface by its outer
interface Showable because it cannot be accessed directly. It is just like almirah inside the
room, we cannot access the almirah directly because we must enter the room first. In
collection frameword, sun microsystem has provided a nested interface Entry. Entry is the
subinterface of Map i.e. accessed by Map.Entry.

Internal code generated by the java compiler for nested interface Message
The java compiler internally creates public and static interface as displayed below:.

1. public static interface Showable$Message


2. {
3. public abstract void msg();
4. }

Example of nested interface which is declared within the class


Let's see how can we define an interface inside the class and how can we access it.

1. class A{
2. interface Message{
3. void msg();
4. }
5. }
6.
7. class TestNestedInterface2 implements A.Message{
8. public void msg(){System.out.println("Hello nested interface");}
9.

Uday Singh(MCA), 09199511858 / 09835613557 Page 234


JAVA

10. public static void main(String args[]){


11. A.Message message=new TestNestedInterface2();//upcasting here
12. message.msg();
13. }
14. }
Test it Now

Output:hello nested interface

Can we define a class inside the interface?

Yes, If we define a class inside the interface, java compiler creates a static nested class. Let's see
how can we define a class within the interface:

1. interface M{
2. class A{}
3. }
next →← prev

Multithreading in Java
1. Multithreading
2. Multitasking
3. Process-based multitasking
4. Thread-based multitasking
5. What is Thread

Multithreading in java is a process of executing multiple threads simultaneously.

Thread is basically a lightweight sub-process, a smallest unit of processing. Multiprocessing


and multithreading, both are used to achieve multitasking.

But we use multithreading than multiprocessing because threads share a common memory
area. They don't allocate separate memory area so saves memory, and context-switching
between the threads takes less time than process.

Java Multithreading is mostly used in games, animation etc.

Advantage of Java Multithreading

1) It doesn't block the user because threads are independent and you can perform multiple
operations at same time.

Uday Singh(MCA), 09199511858 / 09835613557 Page 235


JAVA

2) You can perform many operations together so it saves time.

3) Threads are independent so it doesn't affect other threads if exception occur in a single
thread.

Multitasking

Multitasking is a process of executing multiple tasks simultaneously. We use multitasking to


utilize the CPU. Multitasking can be achieved by two ways:

o Process-based Multitasking(Multiprocessing)
o Thread-based Multitasking(Multithreading)

1) Process-based Multitasking (Multiprocessing)


o Each process have its own address in memory i.e. each process allocates separate
memory area.
o Process is heavyweight.
o Cost of communication between the process is high.
o Switching from one process to another require some time for saving and loading
registers, memory maps, updating lists etc.

2) Thread-based Multitasking (Multithreading)


o Threads share the same address space.
o Thread is lightweight.
o Cost of communication between the thread is low.

Note: At least one process is required for each thread.

What is Thread in java

A thread is a lightweight sub process, a smallest unit of processing. It is a separate path of


execution.

Threads are independent, if there occurs exception in one thread, it doesn't affect other
threads. It shares a common memory area.

Uday Singh(MCA), 09199511858 / 09835613557 Page 236


JAVA

As shown in the above figure, thread is executed inside the process. There is context-switching
between the threads. There can be multiple processes inside the OS and one process can have
multiple threads.

Uday Singh(MCA), 09199511858 / 09835613557 Page 237


JAVA

Life cycle of a Thread (Thread States)


1. Life cycle of a thread
1. New
2. Runnable
3. Running
4. Non-Runnable (Blocked)
5. Terminated

A thread can be in one of the five states. According to sun, there is only 4 states in thread life
cycle in javanew, runnable, non-runnable and terminated. There is no running state.

But for better understanding the threads, we are explaining it in the 5 states.

The life cycle of the thread in java is controlled by JVM. The java thread states are as follows:
1. New
2. Runnable
3. Running
4. Non-Runnable (Blocked)
5. Terminated

Uday Singh(MCA), 09199511858 / 09835613557 Page 238


JAVA

1) New

The thread is in new state if you create an instance of Thread class but before the invocation
of start() method.

2) Runnable

The thread is in runnable state after invocation of start() method, but the thread scheduler has not
selected it to be the running thread.

3) Running

The thread is in running state if the thread scheduler has selected it.

4) Non-Runnable (Blocked)

This is the state when the thread is still alive, but is currently not eligible to run.

Uday Singh(MCA), 09199511858 / 09835613557 Page 239


JAVA

5) Terminated

A thread is in terminated or dead state when its run() method exits.

How to create thread

There are two ways to create a thread:

1. By extending Thread class


2. By implementing Runnable interface.

Thread class:
Thread class provide constructors and methods to create and perform operations on a
thread.Thread class extends Object class and implements Runnable interface.

Commonly used Constructors of Thread class:


•Thread()
•Thread(String name)
•Thread(Runnable r)
•Thread(Runnable r,String name)

Commonly used methods of Thread class:


1. public void run(): is used to perform action for a thread.
2. public void start(): starts the execution of the thread.JVM calls the run() method on
the thread.
3. public void sleep(long miliseconds): Causes the currently executing thread to sleep
(temporarily cease execution) for the specified number of milliseconds.
4. public void join(): waits for a thread to die.
5. public void join(long miliseconds): waits for a thread to die for the specified
miliseconds.
6. public int getPriority(): returns the priority of the thread.
7. public int setPriority(int priority): changes the priority of the thread.
8. public String getName(): returns the name of the thread.
9. public void setName(String name): changes the name of the thread.
10. public Thread currentThread(): returns the reference of currently executing thread.
11. public int getId(): returns the id of the thread.
12. public Thread.State getState(): returns the state of the thread.
13. public boolean isAlive(): tests if the thread is alive.
14. public void yield(): causes the currently executing thread object to temporarily pause

Uday Singh(MCA), 09199511858 / 09835613557 Page 240


JAVA

and allow other threads to execute.


15. public void suspend(): is used to suspend the thread(depricated).
16. public void resume(): is used to resume the suspended thread(depricated).
17. public void stop(): is used to stop the thread(depricated).
18. public boolean isDaemon(): tests if the thread is a daemon thread.
19. public void setDaemon(boolean b): marks the thread as daemon or user thread.
20. public void interrupt(): interrupts the thread.
21. public boolean isInterrupted(): tests if the thread has been interrupted.
22. public static boolean interrupted(): tests if the current thread has been interrupted.

Runnable interface:
The Runnable interface should be implemented by any class whose instances are intended to
be executed by a thread. Runnable interface have only one method named run().

1. public void run(): is used to perform action for a thread.

Starting a thread:
start() method of Thread class is used to start a newly created thread. It performs following
tasks:
•A new thread starts(with new callstack).
•The thread moves from New state to the Runnable state.
•When the thread gets a chance to execute, its target run() method will run.

1)By extending Thread class:


1. class Multi extends Thread{
2. public void run(){
3. System.out.println("thread is running...");
4. }
5. public static void main(String args[]){
6. Multi t1=new Multi();
7. t1.start();
8. }
9. }
Output:thread is running...

Uday Singh(MCA), 09199511858 / 09835613557 Page 241


JAVA

Who makes your class object as thread object?


Thread class constructor allocates a new thread object.When you create object of Multi
class,your class constructor is invoked(provided by Compiler) fromwhere Thread class
constructor is invoked(by super() as first statement).So your Multi class object is thread object
now.

2)By implementing the Runnable interface:


1. class Multi3 implements Runnable{
2. public void run(){
3. System.out.println("thread is running...");
4. }
5.
6. public static void main(String args[]){
7. Multi3 m1=new Multi3();
8. Thread t1 =new Thread(m1);
9. t1.start();
10. }
11. }
Output:thread is running...
If you are not extending the Thread class,your class object would not be treated as a thread
object.So you need to explicitely create Thread class object.We are passing the object of your
class that implements Runnable so that your class run() method may execute.

Thread Scheduler in Java

Thread scheduler in java is the part of the JVM that decides which thread should run.

There is no guarantee that which runnable thread will be chosen to run by the thread scheduler.

Only one thread at a time can run in a single process.

The thread scheduler mainly uses preemptive or time slicing scheduling to schedule the threads.

Difference between preemptive scheduling and time slicing

Under preemptive scheduling, the highest priority task executes until it enters the waiting or dead
states or a higher priority task comes into existence. Under time slicing, a task executes for a
predefined slice of time and then reenters the pool of ready tasks. The scheduler then determines
which task should execute next, based on priority and other factors.

Uday Singh(MCA), 09199511858 / 09835613557 Page 242


JAVA

Sleep method in java

The sleep() method of Thread class is used to sleep a thread for the specified amount of time.

Syntax of sleep() method in java

The Thread class provides two methods for sleeping a thread:

o public static void sleep(long miliseconds)throws InterruptedException


o public static void sleep(long miliseconds, int nanos)throws InterruptedException

Example of sleep method in java

1. class TestSleepMethod1 extends Thread{


2. public void run(){
3. for(int i=1;i<5;i++){
4. try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
5. System.out.println(i);
6. }
7. }
8. public static void main(String args[]){
9. TestSleepMethod1 t1=new TestSleepMethod1();
10. TestSleepMethod1 t2=new TestSleepMethod1();
11.
12. t1.start();
13. t2.start();
14. }
15. }

Output:

1
1
2
2
3
3
4
4

As you know well that at a time only one thread is executed. If you sleep a thread for the
specified time,the thread shedular picks up another thread and so on.

Uday Singh(MCA), 09199511858 / 09835613557 Page 243


JAVA

Can we start a thread twice

No. After starting a thread, it can never be started again. If you does so,
anIllegalThreadStateException is thrown. In such case, thread will run once but for second time,
it will throw exception.

Let's understand it by the example given below:

1. public class TestThreadTwice1 extends Thread{


2. public void run(){
3. System.out.println("running...");
4. }
5. public static void main(String args[]){
6. TestThreadTwice1 t1=new TestThreadTwice1();
7. t1.start();
8. t1.start();
9. }
10. }
Test it Now

running
Exception in thread "main" java.lang.IllegalThreadStateException
What if we call run() method directly instead start() method?
•Each thread starts in a separate call stack.
•Invoking the run() method from main thread, the run() method goes onto the current call
stack rather than at the beginning of a new call stack.

1. class TestCallRun1 extends Thread{


2. public void run(){
3. System.out.println("running...");
4. }
5. public static void main(String args[]){
6. TestCallRun1 t1=new TestCallRun1();
7. t1.run();//fine, but does not start a separate call stack
8. }
9. }
Test it Now

Output:running...

Uday Singh(MCA), 09199511858 / 09835613557 Page 244


JAVA

Problem if you direct call run() method

1. class TestCallRun2 extends Thread{


2. public void run(){
3. for(int i=1;i<5;i++){
4. try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
5. System.out.println(i);
6. }
7. }
8. public static void main(String args[]){
9. TestCallRun2 t1=new TestCallRun2();
10. TestCallRun2 t2=new TestCallRun2();
11.
12. t1.run();
13. t2.run();
14. }
15. }
Test it Now

Output:1
2
3
4
5
1
2
3
4
5

As you can see in the above program that there is no context-switching because here t1 and t2
will be treated as normal object not thread object.

Uday Singh(MCA), 09199511858 / 09835613557 Page 245


JAVA

The join() method:


The join() method waits for a thread to die. In other words, it causes the currently running
threads to stop executing until the thread it joins with completes its task.

Syntax:
public void join()throws InterruptedException

public void join(long milliseconds)throws InterruptedException

Example of join() method

1. class TestJoinMethod1 extends Thread{


2. public void run(){
3. for(int i=1;i<=5;i++){
4. try{
5. Thread.sleep(500);
6. }catch(Exception e){System.out.println(e);}
7. System.out.println(i);
8. }
9. }
10. public static void main(String args[]){
11. TestJoinMethod1 t1=new TestJoinMethod1();
12. TestJoinMethod1 t2=new TestJoinMethod1();
13. TestJoinMethod1 t3=new TestJoinMethod1();
14. t1.start();
15. try{
16. t1.join();
17. }catch(Exception e){System.out.println(e);}
18.
19. t2.start();
20. t3.start();
21. }
22. }
Test it Now

Output:1
2
3
4
5
1
1
2
2

Uday Singh(MCA), 09199511858 / 09835613557 Page 246


JAVA

3
3
4
4
5
5

As you can see in the above example,when t1 completes its task then t2 and t3 starts
executing.

Example of join(long miliseconds) method

1. class TestJoinMethod2 extends Thread{


2. public void run(){
3. for(int i=1;i<=5;i++){
4. try{
5. Thread.sleep(500);
6. }catch(Exception e){System.out.println(e);}
7. System.out.println(i);
8. }
9. }
10. public static void main(String args[]){
11. TestJoinMethod2 t1=new TestJoinMethod2();
12. TestJoinMethod2 t2=new TestJoinMethod2();
13. TestJoinMethod2 t3=new TestJoinMethod2();
14. t1.start();
15. try{
16. t1.join(1500);
17. }catch(Exception e){System.out.println(e);}
18.
19. t2.start();
20. t3.start();
21. }
22. }
Test it Now

Output:1
2
3
1
4
1
2
5

Uday Singh(MCA), 09199511858 / 09835613557 Page 247


JAVA

2
3
3
4
4
5
5

In the above example,when t1 is completes its task for 1500 miliseconds(3 times) then t2 and
t3 starts executing.

getName(),setName(String) and getId() method:


public String getName()

public void setName(String name)

public long getId()

1. class TestJoinMethod3 extends Thread{


2. public void run(){
3. System.out.println("running...");
4. }
5. public static void main(String args[]){
6. TestJoinMethod3 t1=new TestJoinMethod3();
7. TestJoinMethod3 t2=new TestJoinMethod3();
8. System.out.println("Name of t1:"+t1.getName());
9. System.out.println("Name of t2:"+t2.getName());
10. System.out.println("id of t1:"+t1.getId());
11.
12. t1.start();
13. t2.start();
14.
15. t1.setName("Sonoo Jaiswal");
16. System.out.println("After changing name of t1:"+t1.getName());
17. }
18. }
Test it Now

Output:Name of t1:Thread-0
Name of t2:Thread-1
id of t1:8
running...

Uday Singh(MCA), 09199511858 / 09835613557 Page 248


JAVA

After changling name of t1:Sonoo Jaiswal


running...

The currentThread() method:


The currentThread() method returns a reference to the currently executing thread object.

Syntax:
public static Thread currentThread()

Example of currentThread() method

1. class TestJoinMethod4 extends Thread{


2. public void run(){
3. System.out.println(Thread.currentThread().getName());
4. }
5. }
6. public static void main(String args[]){
7. TestJoinMethod4 t1=new TestJoinMethod4();
8. TestJoinMethod4 t2=new TestJoinMethod4();
9.
10. t1.start();
11. t2.start();
12. }
13. }
Test it Now

Output:Thread-0
Thread-1

Naming a thread:
The Thread class provides methods to change and get the name of a thread.
1. public String getName(): is used to return the name of a thread.
2. public void setName(String name): is used to change the name of a thread.

Example of naming a thread:

1. class TestMultiNaming1 extends Thread{


2. public void run(){
3. System.out.println("running...");

Uday Singh(MCA), 09199511858 / 09835613557 Page 249


JAVA

4. }
5. public static void main(String args[]){
6. TestMultiNaming1 t1=new TestMultiNaming1();
7. TestMultiNaming1 t2=new TestMultiNaming1();
8. System.out.println("Name of t1:"+t1.getName());
9. System.out.println("Name of t2:"+t2.getName());
10.
11. t1.start();
12. t2.start();
13.
14. t1.setName("Sonoo Jaiswal");
15. System.out.println("After changing name of t1:"+t1.getName());
16. }
17. }
Test it Now

Output:Name of t1:Thread-0
Name of t2:Thread-1
id of t1:8
running...
After changeling name of t1:Sonoo Jaiswal
running...

The currentThread() method:

The currentThread() method returns a reference to the currently executing thread object.

Syntax of currentThread() method:


• public static Thread currentThread(): returns the reference of currently running
thread.

Uday Singh(MCA), 09199511858 / 09835613557 Page 250


JAVA

Example of currentThread() method:


1. class TestMultiNaming2 extends Thread{
2. public void run(){
3. System.out.println(Thread.currentThread().getName());
4. }
5. }
6. public static void main(String args[]){
7. TestMultiNaming2 t1=new TestMultiNaming2();
8. TestMultiNaming2 t2=new TestMultiNaming2();
9.
10. t1.start();
11. t2.start();
12. }
13. }
Test it Now

Output:Thread-0
Thread-1
Priority of a Thread (Thread Priority):
Each thread have a priority. Priorities are represented by a number between 1 and 10. In most
cases, thread schedular schedules the threads according to their priority (known as preemptive
scheduling). But it is not guaranteed because it depends on JVM specification that which
scheduling it chooses.

3 constants defiend in Thread class:

1. public static int MIN_PRIORITY


2. public static int NORM_PRIORITY
3. public static int MAX_PRIORITY

Default priority of a thread is 5 (NORM_PRIORITY). The value of MIN_PRIORITY is 1 and


the value of MAX_PRIORITY is 10.

Uday Singh(MCA), 09199511858 / 09835613557 Page 251


JAVA

Example of priority of a Thread:


1. class TestMultiPriority1 extends Thread{
2. public void run(){
3. System.out.println("running thread name is:"+Thread.currentThread().getName());
4. System.out.println("running thread priority is:"+Thread.currentThread().getPriority());
5.
6. }
7. public static void main(String args[]){
8. TestMultiPriority1 m1=new TestMultiPriority1();
9. TestMultiPriority1 m2=new TestMultiPriority1();
10. m1.setPriority(Thread.MIN_PRIORITY);
11. m2.setPriority(Thread.MAX_PRIORITY);
12. m1.start();
13. m2.start();
14.
15. }
16. }
Test it Now

Output:running thread name is:Thread-0


running thread priority is:10
running thread name is:Thread-1
running thread priority is:1

Daemon Thread in Java

Daemon thread in java is a service provider thread that provides services to the user thread. Its
life depend on the mercy of user threads i.e. when all the user threads dies, JVM terminates this
thread automatically.

There are many java daemon threads running automatically e.g. gc, finalizer etc.

You can see all the detail by typing the jconsole in the command prompt. The jconsole tool
provides information about the loaded classes, memory usage, running threads etc.

Points to remember for Daemon Thread in Java

• It provides services to user threads for background supporting tasks. It has no role in life
than to serve user threads.
• Its life depends on user threads.
• It is a low priority thread.

Uday Singh(MCA), 09199511858 / 09835613557 Page 252


JAVA

Why JVM terminates the daemon thread if there is no user thread?

The sole purpose of the daemon thread is that it provides services to user thread for background
supporting task. If there is no user thread, why should JVM keep running this thread. That is why
JVM terminates the daemon thread if there is no user thread.

Methods for Java Daemon thread by Thread class

The java.lang.Thread class provides two methods for java daemon thread.

No. Method Description

1) public void is used to mark the current thread as


setDaemon(boolean status) daemon thread or user thread.

2) public boolean isDaemon() is used to check that current is daemon.

Simple example of Daemon thread in java

File: MyThread.java

1. public class TestDaemonThread1 extends Thread{


2. public void run(){
3. if(Thread.currentThread().isDaemon()){//checking for daemon thread
4. System.out.println("daemon thread work");
5. }
6. else{
7. System.out.println("user thread work");
8. }
9. }
10. public static void main(String[] args){
11. TestDaemonThread1 t1=new TestDaemonThread1();//creating thread
12. TestDaemonThread1 t2=new TestDaemonThread1();
13. TestDaemonThread1 t3=new TestDaemonThread1();
14.
15. t1.setDaemon(true);//now t1 is daemon thread
16.
17. t1.start();//starting threads
18. t2.start();
19. t3.start();

Uday Singh(MCA), 09199511858 / 09835613557 Page 253


JAVA

20. }
21. }
Test it Now

Output

daemon thread work


user thread work
user thread work

Note: If you want to make a user thread as Daemon, it must not be started otherwise it will
throw IllegalThreadStateException.

File: MyThread.java

1. class TestDaemonThread2 extends Thread{


2. public void run(){
3. System.out.println("Name: "+Thread.currentThread().getName());
4. System.out.println("Daemon: "+Thread.currentThread().isDaemon());
5. }
6.
7. public static void main(String[] args){
8. TestDaemonThread2 t1=new TestDaemonThread2();
9. TestDaemonThread2 t2=new TestDaemonThread2();
10. t1.start();
11. t1.setDaemon(true);//will throw exception here
12. t2.start();
13. }
14. }
Test it Now

Output:exception in thread main: java.lang.IllegalThreadStateException


Java Thread Pool

Java Thread pool represents a group of worker threads that are waiting for the job and reuse
many times.

In case of thread pool, a group of fixed size threads are created. A thread from the thread pool is
pulled out and assigned a job by the service provider. After completion of the job, thread is
contained in the thread pool again.

Uday Singh(MCA), 09199511858 / 09835613557 Page 254


JAVA

Advantage of Java Thread Pool

Better performance It saves time because there is no need to create new thread.

Real time usage

It is used in Servlet and JSP where container creates a thread pool to process the request.

Example of Java Thread Pool

Let's see a simple example of java thread pool using ExecutorService and Executors.

File: WorkerThrad.java

1. import java.util.concurrent.ExecutorService;
2. import java.util.concurrent.Executors;
3. class WorkerThread implements Runnable {
4. private String message;
5. public WorkerThread(String s){
6. this.message=s;
7. }
8. public void run() {
9. System.out.println(Thread.currentThread().getName()+" (Start) message = "+message);
10. processmessage();//call processmessage method that sleeps the thread for 2 seconds
11. System.out.println(Thread.currentThread().getName()+" (End)");//prints thread name
12. }
13. private void processmessage() {
14. try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
15. }
16. }

File: JavaThreadPoolExample.java

1. public class TestThreadPool {


2. public static void main(String[] args) {
3. ExecutorService executor = Executors.newFixedThreadPool(5);//creating a pool of 5 thread
s
4. for (int i = 0; i < 10; i++) {
5. Runnable worker = new WorkerThread("" + i);
6. executor.execute(worker);//calling execute method of ExecutorService
7. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 255


JAVA

8. executor.shutdown();
9. while (!executor.isTerminated()) { }
10.
11. System.out.println("Finished all threads");
12. }
13. }
Test it Now

download this example

Output:

pool-1-thread-1 (Start) message = 0


pool-1-thread-2 (Start) message = 1
pool-1-thread-3 (Start) message = 2
pool-1-thread-5 (Start) message = 4
pool-1-thread-4 (Start) message = 3
pool-1-thread-2 (End)
pool-1-thread-2 (Start) message = 5
pool-1-thread-1 (End)
pool-1-thread-1 (Start) message = 6
pool-1-thread-3 (End)
pool-1-thread-3 (Start) message = 7
pool-1-thread-4 (End)
pool-1-thread-4 (Start) message = 8
pool-1-thread-5 (End)
pool-1-thread-5 (Start) message = 9
pool-1-thread-2 (End)
pool-1-thread-1 (End)
pool-1-thread-4 (End)
pool-1-thread-3 (End)
pool-1-thread-5 (End)
Finished all threads
Shutdown Hook

The shutdown hook can be used to perform cleanup resource or save the state when JVM shuts
down normally or abruptly. Performing clean resource means closing log file, sending some
alerts or something else. So if you want to execute some code before JVM shuts down, use
shutdown hook.
Uday Singh(MCA), 09199511858 / 09835613557 Page 256
JAVA

When does the JVM shut down?


The JVM shuts down when:

• user presses ctrl+c on the command prompt


• System.exit(int) method is invoked
• user logoff
• user shutdown etc.

The addShutdownHook(Runnable r) method

The addShutdownHook() method of Runtime class is used to register the thread with the Virtual
Machine. Syntax:

1. public void addShutdownHook(Runnable r){}

The object of Runtime class can be obtained by calling the static factory method getRuntime().
For example:

Runtime r = Runtime.getRuntime();

Factory method

The method that returns the instance of a class is known as factory method.

Simple example of Shutdown Hook


1. class MyThread extends Thread{
2. public void run(){
3. System.out.println("shut down hook task completed..");
4. }
5. }
6.
7. public class TestShutdown1{
8. public static void main(String[] args)throws Exception {
9.
10. Runtime r=Runtime.getRuntime();
11. r.addShutdownHook(new MyThread());
12.
13. System.out.println("Now main sleeping... press ctrl+c to exit");
14. try{Thread.sleep(3000);}catch (Exception e) {}
Uday Singh(MCA), 09199511858 / 09835613557 Page 257
JAVA

15. }
16. }
Test it Now

Output:Now main sleeping... press ctrl+c to exit


shut down hook task completed..

Note: The shutdown sequence can be stopped by invoking the halt(int) method of Runtime
class.

Same example of Shutdown Hook by annonymous class:


1. public class TestShutdown2{
2. public static void main(String[] args)throws Exception {
3.
4. Runtime r=Runtime.getRuntime();
5.
6. r.addShutdownHook(new Runnable(){
7. public void run(){
8. System.out.println("shut down hook task completed..");
9. }
10. }
11. );
12.
13. System.out.println("Now main sleeping... press ctrl+c to exit");
14. try{Thread.sleep(3000);}catch (Exception e) {}
15. }
16. }
Test it Now

Output:Now main sleeping... press ctrl+c to exit


shut down hook task completed..

How to perform single task by multiple threads?


If you have to perform single task by many threads, have only one run() method.For example:

Program of performing single task by multiple threads

1. class TestMultitasking1 extends Thread{

Uday Singh(MCA), 09199511858 / 09835613557 Page 258


JAVA

2. public void run(){


3. System.out.println("task one");
4. }
5. public static void main(String args[]){
6. TestMultitasking1 t1=new TestMultitasking1();
7. TestMultitasking1 t2=new TestMultitasking1();
8. TestMultitasking1 t3=new TestMultitasking1();
9.
10. t1.start();
11. t2.start();
12. t3.start();
13. }
14. }
Test it Now

Output:task one
task one
task one
Program of performing single task by multiple threads

1. class TestMultitasking2 implements Runnable{


2. public void run(){
3. System.out.println("task one");
4. }
5.
6. public static void main(String args[]){
7. Thread t1 =new Thread(new TestMultitasking2());//passing annonymous object of TestMultitask
ing2 class
8. Thread t2 =new Thread(new TestMultitasking2());
9.
10. t1.start();
11. t2.start();
12.
13. }
14. }
Test it Now

Output:task one
task one

Note: Each thread run in a separate callstack.

Uday Singh(MCA), 09199511858 / 09835613557 Page 259


JAVA

How to perform multiple tasks by multiple threads (multitasking in multithreading)?


If you have to perform multiple tasks by multiple threads,have multiple run() methods.For
example:

Program of performing two tasks by two threads

1. class Simple1 extends Thread{


2. public void run(){
3. System.out.println("task one");
4. }
5. }
6.
7. class Simple2 extends Thread{
8. public void run(){
9. System.out.println("task two");
10. }
11. }
12.
13. class TestMultitasking3{
14. public static void main(String args[]){
15. Simple1 t1=new Simple1();
16. Simple2 t2=new Simple2();

Uday Singh(MCA), 09199511858 / 09835613557 Page 260


JAVA

17.
18. t1.start();
19. t2.start();
20. }
21. }
Test it Now

Output:task one
task two

Same example as above by annonymous class that extends Thread class:


Program of performing two tasks by two threads

1. class TestMultitasking4{
2. public static void main(String args[]){
3. Thread t1=new Thread(){
4. public void run(){
5. System.out.println("task one");
6. }
7. };
8. Thread t2=new Thread(){
9. public void run(){
10. System.out.println("task two");
11. }
12. };
13.
14.
15. t1.start();
16. t2.start();
17. }
18. }
Test it Now

Output:task one
task two

Same example as above by annonymous class that implements Runnable interface:


Program of performing two tasks by two threads

1. class TestMultitasking5{
2. public static void main(String args[]){
3. Runnable r1=new Runnable(){
4. public void run(){
5. System.out.println("task one");
6. }
7. };
8.

Uday Singh(MCA), 09199511858 / 09835613557 Page 261


JAVA

9. Runnable r2=new Runnable(){


10. public void run(){
11. System.out.println("task two");
12. }
13. };
14.
15. Thread t1=new Thread(r1);
16. Thread t2=new Thread(r2);
17.
18. t1.start();
19. t2.start();
20. }
21. }
Test it Now

Output:task one
task two
Java Garbage Collection

In java, garbage means unreferenced objects.

Garbage Collection is process of reclaiming the runtime unused memory automatically. In other
words, it is a way to destroy the unused objects.

To do so, we were using free() function in C language and delete() in C++. But, in java it is
performed automatically. So, java provides better memory management.

Advantage of Garbage Collection


o It makes java memory efficient because garbage collector removes the unreferenced
objects from heap memory.
o It is automatically done by the garbage collector(a part of JVM) so we don't need to
make extra efforts.

How can an object be unreferenced?

There are many ways:

o By nulling the reference


o By assigning a reference to another
o By annonymous object etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 262


JAVA

1) By nulling a reference:
1. Employee e=new Employee();
2. e=null;

2) By assigning a reference to another:


1. Employee e1=new Employee();
2. Employee e2=new Employee();
3. e1=e2;//now the first object referred by e1 is available for garbage collection

3) By annonymous object:
1. new Employee();

finalize() method

The finalize() method is invoked each time before the object is garbage collected. This method
can be used to perform cleanup processing. This method is defined in Object class as:

1. protected void finalize(){}

Note: The Garbage collector of JVM collects only those objects that are created by new
keyword. So if you have created any object without new, you can use finalize method to
perform cleanup processing (destroying remaining objects).

gc() method

The gc() method is used to invoke the garbage collector to perform cleanup processing. The gc()
is found in System and Runtime classes.

1. public static void gc(){}

Note: Garbage collection is performed by a daemon thread called Garbage Collector(GC).


This thread calls the finalize() method before object is garbage collected.

Simple Example of garbage collection in java


1. public class TestGarbage1{
2. public void finalize(){System.out.println("object is garbage collected");}
3. public static void main(String args[]){
4. TestGarbage1 s1=new TestGarbage1();
5. TestGarbage1 s2=new TestGarbage1();
6. s1=null;
7. s2=null;
8. System.gc();
9. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 263


JAVA

10. }
Test it Now

object is garbage collected


object is garbage collected
Java Runtime class

Java Runtime class is used to interact with java runtime environment. Java Runtime class
provides methods to execute a process, invoke GC, get total and free memory etc. There is only
one instance of java.lang.Runtime class is available for one java application.

The Runtime.getRuntime() method returns the singleton instance of Runtime class.

Important methods of Java Runtime class

No. Method Description

1) public static Runtime getRuntime() returns the instance of


Runtime class.

2) public void exit(int status) terminates the current virtual


machine.

3) public void addShutdownHook(Thread registers new hook thread.


hook)

4) public Process exec(String executes given command in a


command)throws IOException separate process.

5) public int availableProcessors() returns no. of available


processors.

6) public long freeMemory() returns amount of free


memory in JVM.

7) public long totalMemory() returns amount of total


memory in JVM.

Java Runtime exec() method

1. public class Runtime1{

Uday Singh(MCA), 09199511858 / 09835613557 Page 264


JAVA

2. public static void main(String args[])throws Exception{


3. Runtime.getRuntime().exec("notepad");//will open a new notepad
4. }
5. }

Java Runtime freeMemory() and totalMemory() method

In the given program, after creating 10000 instance, free memory will be less than the previous
free memory. But after gc() call, you will get more free memory.

1. public class MemoryTest{


2. public static void main(String args[])throws Exception{
3. Runtime r=Runtime.getRuntime();
4. System.out.println("Total Memory: "+r.totalMemory());
5. System.out.println("Free Memory: "+r.freeMemory());
6.
7. for(int i=0;i<10000;i++){
8. new MemoryTest();
9. }
10. System.out.println("After creating 10000 instance, Free Memory: "+r.freeMemory());
11. System.gc();
12. System.out.println("After gc(), Free Memory: "+r.freeMemory());
13. }
14. }
Total Memory: 100139008
Free Memory: 99474824
After creating 10000 instance, Free Memory: 99310552
After gc(), Free Memory: 100182832
Synchronization in Java

Synchronization in java is the capability to control the access of multiple threads to any shared
resource.

Java Synchronization is better option where we want to allow only one thread to access the
shared resource.

Why use Synchronization

The synchronization is mainly used to

1. To prevent thread interference.


2. To prevent consistency problem.

Uday Singh(MCA), 09199511858 / 09835613557 Page 265


JAVA

Types of Synchronization

There are two types of synchronization

1. Process Synchronization
2. Thread Synchronization

Here, we will discuss only thread synchronization.

Thread Synchronization

There are two types of thread synchronization mutual exclusive and inter-thread communication.

1. Mutual Exclusive
1. Synchronized method.
2. Synchronized block.
3. static synchronization.
2. Cooperation (Inter-thread communication in java)

Mutual Exclusive

Mutual Exclusive helps keep threads from interfering with one another while sharing data. This
can be done by three ways in java:

1. by synchronized method
2. by synchronized block
3. by static synchronization

Concept of Lock in Java

Synchronization is built around an internal entity known as the lock or monitor. Every object has
an lock associated with it. By convention, a thread that needs consistent access to an object's
fields has to acquire the object's lock before accessing them, and then release the lock when it's
done with them.

From Java 5 the package java.util.concurrent.locks contains several lock implementations.

Uday Singh(MCA), 09199511858 / 09835613557 Page 266


JAVA

Understanding the problem without Synchronization

In this example, there is no synchronization, so output is inconsistent. Let's see the example:

1. Class Table{
2.
3. void printTable(int n){//method not synchronized
4. for(int i=1;i<=5;i++){
5. System.out.println(n*i);
6. try{
7. Thread.sleep(400);
8. }catch(Exception e){System.out.println(e);}
9. }
10.
11. }
12. }
13.
14. class MyThread1 extends Thread{
15. Table t;
16. MyThread1(Table t){
17. this.t=t;
18. }
19. public void run(){
20. t.printTable(5);
21. }
22.
23. }
24. class MyThread2 extends Thread{
25. Table t;
26. MyThread2(Table t){
27. this.t=t;
28. }
29. public void run(){
30. t.printTable(100);
31. }
32. }
33.
34. class TestSynchronization1{
35. public static void main(String args[]){
36. Table obj = new Table();//only one object
37. MyThread1 t1=new MyThread1(obj);
38. MyThread2 t2=new MyThread2(obj);
39. t1.start();
40. t2.start();

Uday Singh(MCA), 09199511858 / 09835613557 Page 267


JAVA

41. }
42. }
Output: 5
100
10
200
15
300
20
400
25
500

Java synchronized method

If you declare any method as synchronized, it is known as synchronized method.

Synchronized method is used to lock an object for any shared resource.

When a thread invokes a synchronized method, it automatically acquires the lock for that object
and releases it when the thread completes its task.

1. //example of java synchronized method


2. class Table{
3. synchronized void printTable(int n){//synchronized method
4. for(int i=1;i<=5;i++){
5. System.out.println(n*i);
6. try{
7. Thread.sleep(400);
8. }catch(Exception e){System.out.println(e);}
9. }
10.
11. }
12. }
13.
14. class MyThread1 extends Thread{
15. Table t;
16. MyThread1(Table t){
17. this.t=t;
18. }
19. public void run(){
20. t.printTable(5);
21. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 268


JAVA

22.
23. }
24. class MyThread2 extends Thread{
25. Table t;
26. MyThread2(Table t){
27. this.t=t;
28. }
29. public void run(){
30. t.printTable(100);
31. }
32. }
33.
34. public class TestSynchronization2{
35. public static void main(String args[]){
36. Table obj = new Table();//only one object
37. MyThread1 t1=new MyThread1(obj);
38. MyThread2 t2=new MyThread2(obj);
39. t1.start();
40. t2.start();
41. }
42. }
Output: 5
10
15
20
25
100
200
300
400
500

Example of synchronized method by using annonymous class

In this program, we have created the two threads by annonymous class, so less coding is
required.

1. //Program of synchronized method by using annonymous class


2. class Table{
3. synchronized void printTable(int n){//synchronized method
4. for(int i=1;i<=5;i++){
5. System.out.println(n*i);
6. try{

Uday Singh(MCA), 09199511858 / 09835613557 Page 269


JAVA

7. Thread.sleep(400);
8. }catch(Exception e){System.out.println(e);}
9. }
10.
11. }
12. }
13.
14. public class TestSynchronization3{
15. public static void main(String args[]){
16. final Table obj = new Table();//only one object
17.
18. Thread t1=new Thread(){
19. public void run(){
20. obj.printTable(5);
21. }
22. };
23. Thread t2=new Thread(){
24. public void run(){
25. obj.printTable(100);
26. }
27. };
28.
29. t1.start();
30. t2.start();
31. }
32. }
Output: 5
10
15
20
25
100
200
300
400
500

Synchronized block in java

Synchronized block can be used to perform synchronization on any specific resource of the
method.

Suppose you have 50 lines of code in your method, but you want to synchronize only 5 lines, you
can use synchronized block.

Uday Singh(MCA), 09199511858 / 09835613557 Page 270


JAVA

If you put all the codes of the method in the synchronized block, it will work same as the
synchronized method.

Points to remember for Synchronized block


• Synchronized block is used to lock an object for any shared resource.
• Scope of synchronized block is smaller than the method.

Syntax to use synchronized block


1. synchronized (object reference expression) {
2. //code block
3. }
Example of synchronized block

Let's see the simple example of synchronized block.

Program of synchronized block

1. class Table{
2.
3. void printTable(int n){
4. synchronized(this){//synchronized block
5. for(int i=1;i<=5;i++){
6. System.out.println(n*i);
7. try{
8. Thread.sleep(400);
9. }catch(Exception e){System.out.println(e);}
10. }
11. }
12. }//end of the method
13. }
14.
15. class MyThread1 extends Thread{
16. Table t;
17. MyThread1(Table t){
18. this.t=t;
19. }
20. public void run(){
21. t.printTable(5);
22. }
23.
24. }
25. class MyThread2 extends Thread{
26. Table t;
27. MyThread2(Table t){
28. this.t=t;

Uday Singh(MCA), 09199511858 / 09835613557 Page 271


JAVA

29. }
30. public void run(){
31. t.printTable(100);
32. }
33. }
34.
35. public class TestSynchronizedBlock1{
36. public static void main(String args[]){
37. Table obj = new Table();//only one object
38. MyThread1 t1=new MyThread1(obj);
39. MyThread2 t2=new MyThread2(obj);
40. t1.start();
41. t2.start();
42. }
43. }
Test it Now

Output:5
10
15
20
25
100
200
300
400
500

Same Example of synchronized block by using annonymous class:


//Program of synchronized block by using annonymous class

1. class Table{
2.
3. void printTable(int n){
4. synchronized(this){//synchronized block
5. for(int i=1;i<=5;i++){
6. System.out.println(n*i);
7. try{
8. Thread.sleep(400);
9. }catch(Exception e){System.out.println(e);}
10. }
11. }
12. }//end of the method

Uday Singh(MCA), 09199511858 / 09835613557 Page 272


JAVA

13. }
14.
15. public class TestSynchronizedBlock2{
16. public static void main(String args[]){
17. final Table obj = new Table();//only one object
18.
19. Thread t1=new Thread(){
20. public void run(){
21. obj.printTable(5);
22. }
23. };
24. Thread t2=new Thread(){
25. public void run(){
26. obj.printTable(100);
27. }
28. };
29.
30. t1.start();
31. t2.start();
32. }
33. }
Test it Now

Output:5
10
15
20
25
100
200
300
400
500

Static synchronization

If you make any static method as synchronized, the lock will be on the class not on object.

Uday Singh(MCA), 09199511858 / 09835613557 Page 273


JAVA

Problem without static synchronization

Suppose there are two objects of a shared class(e.g. Table) named object1 and object2.In case of
synchronized method and synchronized block there cannot be interference between t1 and t2 or
t3 and t4 because t1 and t2 both refers to a common object that have a single lock.But there can
be interference between t1 and t3 or t2 and t4 because t1 acquires another lock and t3 acquires
another lock.I want no interference between t1 and t3 or t2 and t4.Static synchronization solves
this problem.

Example of static synchronization

In this example we are applying synchronized keyword on the static method to perform static
synchronization.

1. class Table{
2.
3. synchronized static void printTable(int n){
4. for(int i=1;i<=10;i++){
5. System.out.println(n*i);
6. try{
7. Thread.sleep(400);
8. }catch(Exception e){}
9. }
10. }
11. }
12.
13. class MyThread1 extends Thread{
14. public void run(){

Uday Singh(MCA), 09199511858 / 09835613557 Page 274


JAVA

15. Table.printTable(1);
16. }
17. }
18.
19. class MyThread2 extends Thread{
20. public void run(){
21. Table.printTable(10);
22. }
23. }
24.
25. class MyThread3 extends Thread{
26. public void run(){
27. Table.printTable(100);
28. }
29. }
30.
31.
32.
33.
34. class MyThread4 extends Thread{
35. public void run(){
36. Table.printTable(1000);
37. }
38. }
39.
40. public class TestSynchronization4{
41. public static void main(String t[]){
42. MyThread1 t1=new MyThread1();
43. MyThread2 t2=new MyThread2();
44. MyThread3 t3=new MyThread3();
45. MyThread4 t4=new MyThread4();
46. t1.start();
47. t2.start();
48. t3.start();
49. t4.start();
50. }
51. }
Test it Now

Output: 1
2
3
4
5
6
7

Uday Singh(MCA), 09199511858 / 09835613557 Page 275


JAVA

8
9
10
10
20
30
40
50
60
70
80
90
100
100
200
300
400
500
600
700
800
900
1000
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

Same example of static synchronization by annonymous class

In this example, we are using annonymous class to create the threads.

1. class Table{
2.
3. synchronized static void printTable(int n){

Uday Singh(MCA), 09199511858 / 09835613557 Page 276


JAVA

4. for(int i=1;i<=10;i++){
5. System.out.println(n*i);
6. try{
7. Thread.sleep(400);
8. }catch(Exception e){}
9. }
10. }
11. }
12.
13. public class TestSynchronization5 {
14. public static void main(String[] args) {
15.
16. Thread t1=new Thread(){
17. public void run(){
18. Table.printTable(1);
19. }
20. };
21.
22. Thread t2=new Thread(){
23. public void run(){
24. Table.printTable(10);
25. }
26. };
27.
28. Thread t3=new Thread(){
29. public void run(){
30. Table.printTable(100);
31. }
32. };
33.
34. Thread t4=new Thread(){
35. public void run(){
36. Table.printTable(1000);
37. }
38. };
39. t1.start();
40. t2.start();
41. t3.start();
42. t4.start();
43.
44. }
45. }
Test it Now

Output: 1
2

Uday Singh(MCA), 09199511858 / 09835613557 Page 277


JAVA

3
4
5
6
7
8
9
10
10
20
30
40
50
60
70
80
90
100
100
200
300
400
500
600
700
800
900
1000
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

Uday Singh(MCA), 09199511858 / 09835613557 Page 278


JAVA

Synchronized block on a class lock:

The block synchronizes on the lock of the object denoted by the reference .class name .class. A
static synchronized method printTable(int n) in class Table is equivalent to the following
declaration:

1. static void printTable(int n) {


2. synchronized (Table.class) { // Synchronized block on class A
3. // ...
4. }
5. }
Deadlock in java

Deadlock in java is a part of multithreading. Deadlock can occur in a situation when a thread is
waiting for an object lock, that is acquired by another thread and second thread is waiting for an
object lock that is acquired by first thread. Since, both threads are waiting for each other to
release the lock, the condition is called deadlock.

Example of Deadlock in java


1. public class TestDeadlockExample1 {
2. public static void main(String[] args) {
3. final String resource1 = "ratan jaiswal";
4. final String resource2 = "vimal jaiswal";
5. // t1 tries to lock resource1 then resource2
6. Thread t1 = new Thread() {
7. public void run() {
8. synchronized (resource1) {
9. System.out.println("Thread 1: locked resource 1");
10.
11. try { Thread.sleep(100);} catch (Exception e) {}
12.
13. synchronized (resource2) {
14. System.out.println("Thread 1: locked resource 2");
15. }
16. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 279


JAVA

17. }
18. };
19.
20. // t2 tries to lock resource2 then resource1
21. Thread t2 = new Thread() {
22. public void run() {
23. synchronized (resource2) {
24. System.out.println("Thread 2: locked resource 2");
25.
26. try { Thread.sleep(100);} catch (Exception e) {}
27.
28. synchronized (resource1) {
29. System.out.println("Thread 2: locked resource 1");
30. }
31. }
32. }
33. };
34.
35.
36. t1.start();
37. t2.start();
38. }
39. }
40.
Output: Thread 1: locked resource 1
Thread 2: locked resource 2
Inter-thread communication in Java

Inter-thread communication or Co-operation is all about allowing synchronized threads to


communicate with each other.

Cooperation (Inter-thread communication) is a mechanism in which a thread is paused running in


its critical section and another thread is allowed to enter (or lock) in the same critical section to
be executed.It is implemented by following methods of Object class:

• wait()
• notify()
• notifyAll()

1) wait() method

Causes current thread to release the lock and wait until either another thread invokes the notify()
method or the notifyAll() method for this object, or a specified amount of time has elapsed.

Uday Singh(MCA), 09199511858 / 09835613557 Page 280


JAVA

The current thread must own this object's monitor, so it must be called from the synchronized
method only otherwise it will throw exception.

Method Description

public final void wait()throws waits until object is notified.


InterruptedException

public final void wait(long timeout)throws waits for the specified


InterruptedException amount of time.

2) notify() method

Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on
this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the
discretion of the implementation. Syntax:

public final void notify()

3) notifyAll() method

Wakes up all threads that are waiting on this object's monitor. Syntax:

public final void notifyAll()

Uday Singh(MCA), 09199511858 / 09835613557 Page 281


JAVA

Understanding the process of inter-thread communication

The point to point explanation of the above diagram is as follows:

1. Threads enter to acquire lock.


2. Lock is acquired by on thread.
3. Now thread goes to waiting state if you call wait() method on the object. Otherwise it
releases the lock and exits.
4. If you call notify() or notifyAll() method, thread moves to the notified state (runnable
state).
5. Now thread is available to acquire lock.
6. After completion of the task, thread releases the lock and exits the monitor state of the
object.

Why wait(), notify() and notifyAll() methods are defined in Object class not Thread class?

It is because they are related to lock and object has a lock.

Difference between wait and sleep?

Let's see the important differences between wait and sleep methods.

wait() sleep()

wait() method releases the lock sleep() method doesn't release the lock.

Uday Singh(MCA), 09199511858 / 09835613557 Page 282


JAVA

is the method of Object class is the method of Thread class

is the non-static method is the static method

is the non-static method is the static method

should be notified by notify() or after the specified amount of time,


notifyAll() methods sleep is completed.

Example of inter thread communication in java

Let's see the simple example of inter thread communication.

1. class Customer{
2. int amount=10000;
3.
4. synchronized void withdraw(int amount){
5. System.out.println("going to withdraw...");
6.
7. if(this.amount<amount){
8. System.out.println("Less balance; waiting for deposit...");
9. try{wait();}catch(Exception e){}
10. }
11. this.amount-=amount;
12. System.out.println("withdraw completed...");
13. }
14.
15. synchronized void deposit(int amount){
16. System.out.println("going to deposit...");
17. this.amount+=amount;
18. System.out.println("deposit completed... ");
19. notify();
20. }
21. }
22.
23. class Test{
24. public static void main(String args[]){
25. final Customer c=new Customer();
26. new Thread(){
27. public void run(){c.withdraw(15000);}
28. }.start();
29. new Thread(){
30. public void run(){c.deposit(10000);}

Uday Singh(MCA), 09199511858 / 09835613557 Page 283


JAVA

31. }.start();
32.
33. }}
Output: going to withdraw...
Less balance; waiting for deposit...
going to deposit...
deposit completed...
withdraw completed

next>><<prev

Interrupting a Thread:
If any thread is in sleeping or waiting state (i.e. sleep() or wait() is invoked), calling the
interrupt() method on the thread, breaks out the sleeping or waiting state throwing
InterruptedException. If the thread is not in the sleeping or waiting state, calling the
interrupt() method performs normal behaviour and doesn't interrupt the thread but sets the
interrupt flag to true. Let's first see the methods provided by the Thread class for thread
interruption.

The 3 methods provided by the Thread class for interrupting a thread

•public void interrupt()


•public static boolean interrupted()
•public boolean isInterrupted()

Example of interrupting a thread that stops working

In this example, after interrupting the thread, we are propagating it, so it will stop working.
If we don't want to stop the thread, we can handle it where sleep() or wait() method is
invoked. Let's first see the example where we are propagating the exception.

1. class TestInterruptingThread1 extends Thread{


2. public void run(){
3. try{
4. Thread.sleep(1000);
5. System.out.println("task");
6. }catch(InterruptedException e){
7. throw new RuntimeException("Thread interrupted..."+e);
8. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 284


JAVA

9.
10. }
11.
12. public static void main(String args[]){
13. TestInterruptingThread1 t1=new TestInterruptingThread1();
14. t1.start();
15. try{
16. t1.interrupt();
17. }catch(Exception e){System.out.println("Exception handled "+e);}
18.
19. }
20. }
Test it Now

download this example

Output:Exception in thread-0
java.lang.RuntimeException: Thread interrupted...
java.lang.InterruptedException: sleep interrupted
at A.run(A.java:7)

Example of interrupting a thread that doesn't stop working

In this example, after interrupting the thread, we handle the exception, so it will break out
the sleeping but will not stop working.

1. class TestInterruptingThread2 extends Thread{


2. public void run(){
3. try{
4. Thread.sleep(1000);
5. System.out.println("task");
6. }catch(InterruptedException e){
7. System.out.println("Exception handled "+e);
8. }
9. System.out.println("thread is running...");
10. }
11.
12. public static void main(String args[]){
13. TestInterruptingThread2 t1=new TestInterruptingThread2();
14. t1.start();
15.
16. t1.interrupt();
17.
18. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 285


JAVA

19. }
Test it Now

download this example

Output:Exception handled
java.lang.InterruptedException: sleep interrupted
thread is running...

Example of interrupting thread that behaves normally

If thread is not in sleeping or waiting state, calling the interrupt() method sets the
interrupted flag to true that can be used to stop the thread by the java programmer later.

1. class TestInterruptingThread3 extends Thread{


2.
3. public void run(){
4. for(int i=1;i<=5;i++)
5. System.out.println(i);
6. }
7.
8. public static void main(String args[]){
9. TestInterruptingThread3 t1=new TestInterruptingThread3();
10. t1.start();
11.
12. t1.interrupt();
13.
14. }
15. }
Test it Now

Output:1
2
3
4
5

What about isInterrupted and interrupted method?

The isInterrupted() method returns the interrupted flag either true or false. The static
interrupted() method returns the interrupted flag afterthat it sets the flag to false if it is

Uday Singh(MCA), 09199511858 / 09835613557 Page 286


JAVA

true.

1. public class TestInterruptingThread4 extends Thread{


2.
3. public void run(){
4. for(int i=1;i<=2;i++){
5. if(Thread.interrupted()){
6. System.out.println("code for interrupted thread");
7. }
8. else{
9. System.out.println("code for normal thread");
10. }
11.
12. }//end of for loop
13. }
14.
15. public static void main(String args[]){
16.
17. TestInterruptingThread4 t1=new TestInterruptingThread4();
18. TestInterruptingThread4 t2=new TestInterruptingThread4();
19.
20. t1.start();
21. t1.interrupt();
22.
23. t2.start();
24.
25. }
26. }
Test it Now

Output:Code for interrupted thread


code for normal thread
code for normal thread
code for normal thread

Reentrant Monitor in Java

According to Sun Microsystems, Java monitors are reentrant means java thread can reuse the
same monitor for different synchronized methods if method is called from the method.

Advantage of Reentrant Monitor

Uday Singh(MCA), 09199511858 / 09835613557 Page 287


JAVA

It eliminates the possibility of single thread deadlocking

Let's understand the java reentrant monitor by the example given below:

1. class Reentrant {
2. public synchronized void m() {
3. n();
4. System.out.println("this is m() method");
5. }
6. public synchronized void n() {
7. System.out.println("this is n() method");
8. }
9. }

In this class, m and n are the synchronized methods. The m() method internally calls the n()
method.

Now let's call the m() method on a thread. In the class given below, we are creating thread using
annonymous class.

1. public class ReentrantExample{


2. public static void main(String args[]){
3. final ReentrantExample re=new ReentrantExample();
4.
5. Thread t1=new Thread(){
6. public void run(){
7. re.m();//calling method of Reentrant class
8. }
9. };
10. t1.start();
11. }}
Test it Now

Output: this is n() method


this is m() method

Java I/O Tutorial

Java I/O (Input and Output) is used to process the input and produce the output based on the
input.

Java uses the concept of stream to make I/O operation fast. The java.io package contains all the

Uday Singh(MCA), 09199511858 / 09835613557 Page 288


JAVA

classes required for input and output operations.

We can perform file handling in java by java IO API.

Stream

A stream is a sequence of data.In Java a stream is composed of bytes. It's called a stream because
it's like a stream of water that continues to flow.

In java, 3 streams are created for us automatically. All these streams are attached with console.

1) System.out: standard output stream

2) System.in: standard input stream

3) System.err: standard error stream

Let's see the code to print output and error message to the console.

1. System.out.println("simple message");
2. System.err.println("error message");

Let's see the code to get input from console.

1. int i=System.in.read();//returns ASCII code of 1st character


2. System.out.println((char)i);//will print the character
Do You Know ?

•How to write a common data to multiple files using single stream only ?
•How can we access multiple files by single stream ?
•How can we improve the performance of Input and Output operation ?
•How many ways can we read data from the keyboard?
•What is console class ?
•How to compress and uncompress the data of a file?

OutputStream

Java application uses an output stream to write data to a destination, it may be a file,an
array,peripheral device or socket.

InputStream

Uday Singh(MCA), 09199511858 / 09835613557 Page 289


JAVA

Java application uses an input stream to read data from a source, it may be a file,an
array,peripheral device or socket.

Let's understand working of Java OutputStream and InputStream by the figure given below.

OutputStream class

OutputStream class is an abstract class.It is the superclass of all classes representing an output
stream of bytes. An output stream accepts output bytes and sends them to some sink.

Commonly used methods of OutputStream class


Method Description

1) public void write(int)throws is used to write a byte to the current


IOException: output stream.

2) public void write(byte[])throws is used to write an array of byte to the


IOException: current output stream.

3) public void flush()throws flushes the current output stream.


IOException:

4) public void close()throws is used to close the current output


IOException: stream.

Uday Singh(MCA), 09199511858 / 09835613557 Page 290


JAVA

InputStream class

InputStream class is an abstract class.It is the superclass of all classes representing an input
stream of bytes.

Commonly used methods of InputStream class


Method Description

1) public abstract int reads the next byte of data from the input
read()throws IOException: stream.It returns -1 at the end of file.

2) public int available()throws returns an estimate of the number of bytes


IOException: that can be read from the current input
stream.

3) public void close()throws is used to close the current input stream.


IOException:

Uday Singh(MCA), 09199511858 / 09835613557 Page 291


JAVA

FileInputStream and FileOutputStream (File Handling)

In Java, FileInputStream and FileOutputStream classes are used to read and write data in file. In
another words, they are used for file handling in java.

Java FileOutputStream class

Java FileOutputStream is an output stream for writing data to a file.

If you have to write primitive values then use FileOutputStream.Instead, for character-oriented
data, prefer FileWriter.But you can write byte-oriented as well as character-oriented data.

Example of Java FileOutputStream class


1. import java.io.*;
2. class Test{
3. public static void main(String args[]){
4. try{
5. FileOutputstream fout=new FileOutputStream("abc.txt");
6. String s="Sachin Tendulkar is my favourite player";
7. byte b[]=s.getBytes();//converting string into byte array
8. fout.write(b);
9. fout.close();
10. System.out.println("success...");
11. }catch(Exception e){system.out.println(e);}
12. }
13. }
Output:success...

Uday Singh(MCA), 09199511858 / 09835613557 Page 292


JAVA

Java FileInputStream class

Java FileInputStream class obtains input bytes from a file.It is used for reading streams of raw
bytes such as image data. For reading streams of characters, consider using FileReader.

It should be used to read byte-oriented data for example to read image, audio, video etc.

Example of FileInputStream class


1. import java.io.*;
2. class SimpleRead{
3. public static void main(String args[]){
4. try{
5. FileInputStream fin=new FileInputStream("abc.txt");
6. int i=0;
7. while((i=fin.read())!=-1){
8. System.out.println((char)i);
9. }
10. fin.close();
11. }catch(Exception e){system.out.println(e);}
12. }
13. }
Output:Sachin is my favourite player.

Uday Singh(MCA), 09199511858 / 09835613557 Page 293


JAVA

Example of Reading the data of current java file and writing it into another file

We can read the data of any file using the FileInputStream class whether it is java file, image
file, video file etc. In this example, we are reading the data of C.java file and writing it into
another file M.java.

1. import java.io.*;
2. class C{
3. public static void main(String args[])throws Exception{
4. FileInputStream fin=new FileInputStream("C.java");
5. FileOutputStream fout=new FileOutputStream("M.java");
6. int i=0;
7. while((i=fin.read())!=-1){
8. fout.write((byte)i);
9. }
10. fin.close();
11. }
12. }
Java ByteArrayOutputStream class

Java ByteArrayOutputStream class is used to write data into multiple files. In this stream, the
data is written into a byte array that can be written to multiple stream.

The ByteArrayOutputStream holds a copy of data and forwards it to multiple streams.

The buffer of ByteArrayOutputStream automatically grows according to data.

Closing the ByteArrayOutputStream has no effect.

Uday Singh(MCA), 09199511858 / 09835613557 Page 294


JAVA

Constructors of ByteArrayOutputStream class


Constructor Description

ByteArrayOutputStream() creates a new byte array output stream with the


initial capacity of 32 bytes, though its size
increases if necessary.

ByteArrayOutputStream(int creates a new byte array output stream, with a


size) buffer capacity of the specified size, in bytes.

Methods of ByteArrayOutputStream class


Method Description

1) public synchronized void writes the complete contents of this byte


writeTo(OutputStream out) throws array output stream to the specified
IOException output stream.

2) public void write(byte b) throws writes byte into this stream.


IOException

3) public void write(byte[] b) throws writes byte array into this stream.
IOException

4) public void flush() flushes this stream.

5) public void close() has no affect, it doesn't closes the


bytearrayoutputstream.

Java ByteArrayOutputStream Example

Let's see a simple example of java ByteArrayOutputStream class to write data into 2 files.

1. import java.io.*;
2. class S{
3. public static void main(String args[])throws Exception{
4. FileOutputStream fout1=new FileOutputStream("f1.txt");
5. FileOutputStream fout2=new FileOutputStream("f2.txt");
6.
7. ByteArrayOutputStream bout=new ByteArrayOutputStream();

Uday Singh(MCA), 09199511858 / 09835613557 Page 295


JAVA

8. bout.write(139);
9. bout.writeTo(fout1);
10. bout.writeTo(fout2);
11.
12. bout.flush();
13. bout.close();//has no effect
14. System.out.println("success...");
15. }
16. }
success...

Java SequenceInputStream class

Java SequenceInputStream class is used to read data from multiple streams. It reads data of
streams one by one.

Constructors of SequenceInputStream class:


Constructor Description

1) SequenceInputStream(InputStream s1, creates a new input stream by


InputStream s2) reading the data of two input
stream in order, first s1 and then
s2.

2) SequenceInputStream(Enumeration e) creates a new input stream by


reading the data of an
enumeration whose type is
InputStream.

Uday Singh(MCA), 09199511858 / 09835613557 Page 296


JAVA

Simple example of SequenceInputStream class

In this example, we are printing the data of two files f1.txt and f2.txt.

1. import java.io.*;
2. class Simple{
3. public static void main(String args[])throws Exception{
4. FileinputStream fin1=new FileinputStream("f1.txt");
5. FileinputStream fin2=new FileinputStream("f2.txt");
6.
7. SequenceinputStream sis=new SequenceinputStream(fin1,fin2);
8. int i;
9. while((i=sis.read())!=-1){
10. System.out.println((char)i);
11. }
12. sis.close();
13. fin1.close();
14. fin2.close();
15. }
16. }

Example of SequenceInputStream that reads the data from two files

In this example, we are writing the data of two files f1.txt and f2.txt into another file named
f3.txt.

1. //reading data of 2 files and writing it into one file


2.
3. import java.io.*;
4. class Simple{
5. public static void main(String args[])throws Exception{
6.
7. FileinputStream fin1=new FileinputStream("f1.txt");
8. FileinputStream fin2=new FileinputStream("f2.txt");
9.
10. FileOutputStream fout=new FileOutputStream("f3.txt");
11.
12. SequenceinputStream sis=new SequenceinputStream(fin1,fin2);
13. int i;
14. while((i.sisread())!=-1)
15. {
16. fout.write(i);
17. }
18. sis.close();
19. fout.close();

Uday Singh(MCA), 09199511858 / 09835613557 Page 297


JAVA

20. fin.close();
21. fin.close();
22.
23. }
24. }

Example of SequenceInputStream class that reads the data from multiple files using enumeration
If we need to read the data from more than two files, we need to have these information in the
Enumeration object. Enumeration object can be get by calling elements method of the Vector
class. Let's see the simple example where we are reading the data from the 4 files.

1. import java.io.*;
2. import java.util.*;
3.
4. class B{
5. public static void main(String args[])throws IOException{
6.
7. //creating the FileInputStream objects for all the files
8. FileInputStream fin=new FileInputStream("A.java");
9. FileInputStream fin2=new FileInputStream("abc2.txt");
10. FileInputStream fin3=new FileInputStream("abc.txt");
11. FileInputStream fin4=new FileInputStream("B.java");
12.
13. //creating Vector object to all the stream
14. Vector v=new Vector();
15. v.add(fin);
16. v.add(fin2);
17. v.add(fin3);
18. v.add(fin4);
19.
20. //creating enumeration object by calling the elements method
21. Enumeration e=v.elements();
22.
23. //passing the enumeration object in the constructor
24. SequenceInputStream bin=new SequenceInputStream(e);
25. int i=0;
26.
27. while((i=bin.read())!=-1){
28. System.out.print((char)i);
29. }
30.
31. bin.close();
32. fin.close();
33. fin2.close();
34. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 298


JAVA

35. }

Java BufferedOutputStream and BufferedInputStream

Java BufferedOutputStream class

Java BufferedOutputStream class uses an internal buffer to store data. It adds more efficiency
than to write data directly into a stream. So, it makes the performance fast.

Example of BufferedOutputStream class:

In this example, we are writing the textual information in the BufferedOutputStream object
which is connected to the FileOutputStream object. The flush() flushes the data of one stream
and send it into another. It is required if you have connected the one stream with another.

1. import java.io.*;
2. class Test{
3. public static void main(String args[])throws Exception{
4. FileOutputStream fout=new FileOutputStream("f1.txt");
5. BufferedOutputStream bout=new BufferedOutputStream(fout);
6. String s="Sachin is my favourite player";
7. byte b[]=s.getBytes();
8. bout.write(b);
9.
10. bout.flush();
11. bout.close();
12. fout.close();
13. System.out.println("success");
14. }
15. }

Output:

success...

Java BufferedInputStream class

Java BufferedInputStream class is used to read information from stream. It internally uses buffer
mechanism to make the performance fast.

Uday Singh(MCA), 09199511858 / 09835613557 Page 299


JAVA

Example of Java BufferedInputStream

Let's see the simple example to read data of file using BufferedInputStream.

1. import java.io.*;
2. class SimpleRead{
3. public static void main(String args[]){
4. try{
5. FileInputStream fin=new FileInputStream("f1.txt");
6. BufferedInputStream bin=new BufferedInputStream(fin);
7. int i;
8. while((i=bin.read())!=-1){
9. System.out.println((char)i);
10. }
11. bin.close();
12. fin.close();
13. }catch(Exception e){system.out.println(e);}
14. }
15. }

Output:

Sachin is my favourite player

Java FileWriter and FileReader (File Handling in java)

Java FileWriter and FileReader classes are used to write and read data from text files. These are
character-oriented classes, used for file handling in java.

Java has suggested not to use the FileInputStream and FileOutputStream classes if you have to
read and write the textual information.

Java FileWriter class

Java FileWriter class is used to write character-oriented data to the file.

Constructors of FileWriter class


Constructor Description

FileWriter(String file) creates a new file. It gets file name in string.

Uday Singh(MCA), 09199511858 / 09835613557 Page 300


JAVA

FileWriter(File file) creates a new file. It gets file name in File object.

Methods of FileWriter class


Method Description

1) public void write(String text) writes the string into FileWriter.

2) public void write(char c) writes the char into FileWriter.

3) public void write(char[] c) writes char array into FileWriter.

4) public void flush() flushes the data of FileWriter.

5) public void close() closes FileWriter.

Java FileWriter Example

In this example, we are writing the data in the file abc.txt.

1. import java.io.*;
2. class Simple{
3. public static void main(String args[]){
4. try{
5. FileWriter fw=new FileWriter("abc.txt");
6. fw.write("my name is sachin");
7. fw.close();
8. }catch(Exception e){System.out.println(e);}
9. System.out.println("success");
10. }
11. }

Output:

success...

Java FileReader class

Java FileReader class is used to read data from the file. It returns data in byte format like
FileInputStream class.

Uday Singh(MCA), 09199511858 / 09835613557 Page 301


JAVA

Constructors of FileWriter class


Constructor Description

FileReader(String It gets filename in string. It opens the given file in read


file) mode. If file doesn't exist, it throws
FileNotFoundException.

FileReader(File It gets filename in file instance. It opens the given file in


file) read mode. If file doesn't exist, it throws
FileNotFoundException.

Methods of FileReader class


Method Description

1) public int read() returns a character in ASCII form. It returns -1 at the end
of file.

2) public void closes FileReader.


close()

Java FileReader Example

In this example, we are reading the data from the file abc.txt file.

1. import java.io.*;
2. class Simple{
3. public static void main(String args[])throws Exception{
4. FileReader fr=new FileReader("abc.txt");
5. int i;
6. while((i=fr.read())!=-1)
7. System.out.println((char)i);
8.
9. fr.close();
10. }
11. }

Output:

my name is sachin

Uday Singh(MCA), 09199511858 / 09835613557 Page 302


JAVA

CharArrayWriter class:

The CharArrayWriter class can be used to write data to multiple files. This class implements the
Appendable interface. Its buffer automatically grows when data is written in this stream. Calling
the close() method on this object has no effect.

Example of CharArrayWriter class:

In this example, we are writing a common data to 4 files a.txt, b.txt, c.txt and d.txt.

1. import java.io.*;
2. class Simple{
3. public static void main(String args[])throws Exception{
4.
5. CharArrayWriter out=new CharArrayWriter();
6. out.write("my name is");
7.
8. FileWriter f1=new FileWriter("a.txt");
9. FileWriter f2=new FileWriter("b.txt");
10. FileWriter f3=new FileWriter("c.txt");
11. FileWriter f4=new FileWriter("d.txt");
12.
13. out.writeTo(f1);
14. out.writeTo(f2);
15. out.writeTo(f3);
16. out.writeTo(f4);
17.
18.
19. f1.close();
20. f2.close();
21. f3.close();
22. f4.close();
23. }
24. }

Reading data from keyboard:

There are many ways to read data from the keyboard. For example:

• InputStreamReader
• Console
• Scanner
• DataInputStream etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 303


JAVA

InputStreamReader class:

InputStreamReader class can be used to read data from keyboard.It performs two tasks:

• connects to input stream of keyboard


• converts the byte-oriented stream into character-oriented stream

BufferedReader class:

BufferedReader class can be used to read data line by line by readLine() method.

Example of reading data from keyboard by InputStreamReader and BufferdReader class:

In this example, we are connecting the BufferedReader stream with the InputStreamReader
stream for reading the line by line data from the keyboard.

1. //<b><i>Program of reading data</i></b>


2.
3. import java.io.*;
4. class G5{
5. public static void main(String args[])throws Exception{
6.
7. InputStreamReader r=new InputStreamReader(System.in);
8. BufferedReader br=new BufferedReader(r);
9.
10. System.out.println("Enter your name");
11. String name=br.readLine();
12. System.out.println("Welcome "+name);
13. }
14. }
Output:Enter your name
Amit
Welcome Amit

Uday Singh(MCA), 09199511858 / 09835613557 Page 304


JAVA

Another Example of reading data from keyboard by InputStreamReader and BufferdReader class
until the user writes stop

In this example, we are reading and printing the data until the user prints stop.

1. import java.io.*;
2. class G5{
3. public static void main(String args[])throws Exception{
4.
5. InputStreamReader r=new InputStreamReader(System.in);
6. BufferedReader br=new BufferedReader(r);
7.
8. String name="";
9.
10. while(name.equals("stop")){
11. System.out.println("Enter data: ");
12. name=br.readLine();
13. System.out.println("data is: "+name);
14. }
15.
16. br.close();
17. r.close();
18. }
19. }
Output:Enter data: Amit
data is: Amit
Enter data: 10
data is: 10
Enter data: stop

Uday Singh(MCA), 09199511858 / 09835613557 Page 305


JAVA

data is: stop


Java Console class

The Java Console class is be used to get input from console. It provides methods to read text and
password.

If you read password using Console class, it will not be displayed to the user.

The java.io.Console class is attached with system console internally. The Console class is
introduced since 1.5.

Let's see a simple example to read text from console.

1. String text=System.console().readLine();
2. System.out.println("Text is: "+text);

Methods of Console class

Let's see the commonly used methods of Console class.

Method Description

1) public String readLine() is used to read a single line of text from the
console.

2) public String readLine(String it provides a formatted prompt then reads


fmt,Object... args) the single line of text from the console.

3) public char[] readPassword() is used to read password that is not being


displayed on the console.

4) public char[] it provides a formatted prompt then reads


readPassword(String fmt,Object... the password that is not being displayed on
args) the console.

How to get the object of Console

System class provides a static method console() that returns the unique instance of Console class.

1. public static Console console(){}

Let's see the code to get the instance of Console class.

Uday Singh(MCA), 09199511858 / 09835613557 Page 306


JAVA

1. Console c=System.console();

Java Console Example

1. import java.io.*;
2. class ReadStringTest{
3. public static void main(String args[]){
4. Console c=System.console();
5. System.out.println("Enter your name: ");
6. String n=c.readLine();
7. System.out.println("Welcome "+n);
8. }
9. }

Output:

Enter your name: james gosling


Welcome james gosling

Java Console Example to read password

1. import java.io.*;
2. class ReadPasswordTest{
3. public static void main(String args[]){
4. Console c=System.console();
5. System.out.println("Enter password: ");
6. char[] ch=c.readPassword();
7. String pass=String.valueOf(ch);//converting char array into string
8. System.out.println("Password is: "+pass);
9. }
10. }

Output:

Enter password:
Password is: sonoo

Java Scanner class

There are various ways to read input from the keyboard, the java.util.Scanner class is one of
them.

The Java Scanner class breaks the input into tokens using a delimiter that is whitespace
bydefault. It provides many methods to read and parse various primitive values.

Uday Singh(MCA), 09199511858 / 09835613557 Page 307


JAVA

Java Scanner class is widely used to parse text for string and primitive types using regular
expression.

Java Scanner class extends Object class and implements Iterator and Closeable interfaces.

Commonly used methods of Scanner class

There is a list of commonly used Scanner class methods:

Method Description

public String next() it returns the next token from the scanner.

public String it moves the scanner position to the next line and
nextLine() returns the value as a string.

public byte nextByte() it scans the next token as a byte.

public short it scans the next token as a short value.


nextShort()

public int nextInt() it scans the next token as an int value.

public long it scans the next token as a long value.


nextLong()

public float it scans the next token as a float value.


nextFloat()

public double it scans the next token as a double value.


nextDouble()

Java Scanner Example to get input from console

Let's see the simple example of the Java Scanner class which reads the int, string and double
value as an input:

1. import java.util.Scanner;
2. class ScannerTest{
3. public static void main(String args[]){
4. Scanner sc=new Scanner(System.in);

Uday Singh(MCA), 09199511858 / 09835613557 Page 308


JAVA

5.
6. System.out.println("Enter your rollno");
7. int rollno=sc.nextInt();
8. System.out.println("Enter your name");
9. String name=sc.next();
10. System.out.println("Enter your fee");
11. double fee=sc.nextDouble();
12. System.out.println("Rollno:"+rollno+" name:"+name+" fee:"+fee);
13. sc.close();
14. }
15. }
download this scanner example

Output:

Enter your rollno


111
Enter your name
Ratan
Enter
450000
Rollno:111 name:Ratan fee:450000

Java Scanner Example with delimiter

Let's see the example of Scanner class with delimiter. The \s represents whitespace.

1. import java.util.*;
2. public class ScannerTest2{
3. public static void main(String args[]){
4. String input = "10 tea 20 coffee 30 tea buiscuits";
5. Scanner s = new Scanner(input).useDelimiter("\\s");
6. System.out.println(s.nextInt());
7. System.out.println(s.next());
8. System.out.println(s.nextInt());
9. System.out.println(s.next());
10. s.close();
11. }}

Output:

10
tea
20
coffee

Uday Singh(MCA), 09199511858 / 09835613557 Page 309


JAVA

java.io.PrintStream class:

The PrintStream class provides methods to write data to another stream. The PrintStream class
automatically flushes the data so there is no need to call flush() method. Moreover, its methods
don't throw IOException.

Commonly used methods of PrintStream class:


There are many methods in PrintStream class. Let's see commonly used methods of
PrintStream class:
•public void print(boolean b): it prints the specified boolean value.
•public void print(char c): it prints the specified char value.
•public void print(char[] c): it prints the specified character array values.
•public void print(int i): it prints the specified int value.
•public void print(long l): it prints the specified long value.
•public void print(float f): it prints the specified float value.
•public void print(double d): it prints the specified double value.
•public void print(String s): it prints the specified string value.
•public void print(Object obj): it prints the specified object value.
•public void println(boolean b): it prints the specified boolean value and terminates the
line.
•public void println(char c): it prints the specified char value and terminates the line.
•public void println(char[] c): it prints the specified character array values and
terminates the line.
•public void println(int i): it prints the specified int value and terminates the line.
•public void println(long l): it prints the specified long value and terminates the line.
•public void println(float f): it prints the specified float value and terminates the line.
•public void println(double d): it prints the specified double value and terminates the
line.
•public void println(String s): it prints the specified string value and terminates the
line./li>
•public void println(Object obj): it prints the specified object value and terminates the
line.
•public void println(): it terminates the line only.
•public void printf(Object format, Object... args): it writes the formatted string to the
current stream.
•public void printf(Locale l, Object format, Object... args): it writes the formatted
string to the current stream.
•public void format(Object format, Object... args): it writes the formatted string to the
current stream using specified format.
•public void format(Locale l, Object format, Object... args): it writes the formatted

Uday Singh(MCA), 09199511858 / 09835613557 Page 310


JAVA

string to the current stream using specified format.

Example of java.io.PrintStream class:


In this example, we are simply printing integer and string values.

1. import java.io.*;
2. class PrintStreamTest{
3. public static void main(String args[])throws Exception{
4.
5. FileOutputStream fout=new FileOutputStream("mfile.txt");
6. PrintStream pout=new PrintStream(fout);
7. pout.println(1900);
8. pout.println("Hello Java");
9. pout.println("Welcome to Java");
10. pout.close();
11. fout.close();
12.
13. }
14. }
download this PrintStream example

Example of printf() method of java.io.PrintStream class:


Let's see the simple example of printing integer value by format specifier.

1. class PrintStreamTest{
2. public static void main(String args[]){
3. int a=10;
4. System.out.printf("%d",a);//Note, out is the object of PrintStream class
5.
6. }
7. }
Output:10
Compressing and Uncompressing File

The DeflaterOutputStream and InflaterInputStream classes provide mechanism to compress and


uncompress the data in the deflate compression format.

Uday Singh(MCA), 09199511858 / 09835613557 Page 311


JAVA

DeflaterOutputStream class:

The DeflaterOutputStream class is used to compress the data in the deflate compression format.
It provides facility to the other compression filters, such as GZIPOutputStream.

Example of Compressing file using DeflaterOutputStream class

In this example, we are reading data of a file and compressing it into another file using
DeflaterOutputStream class. You can compress any file, here we are compressing the
Deflater.java file

1. import java.io.*;
2. import java.util.zip.*;
3.
4. class Compress{
5. public static void main(String args[]){
6.
7. try{
8. FileInputStream fin=new FileInputStream("Deflater.java");
9.
10. FileOutputStream fout=new FileOutputStream("def.txt");
11. DeflaterOutputStream out=new DeflaterOutputStream(fout);
12.
13. int i;
14. while((i=fin.read())!=-1){
15. out.write((byte)i);
16. out.flush();
17. }
18.
19. fin.close();
20. out.close();
21.
22. }catch(Exception e){System.out.println(e);}
23. System.out.println("rest of the code");
24. }
25. }
download this example

InflaterInputStream class:

The InflaterInputStream class is used to uncompress the file in the deflate compression format. It
provides facility to the other uncompression filters, such as GZIPInputStream class.

Uday Singh(MCA), 09199511858 / 09835613557 Page 312


JAVA

Example of uncompressing file using InflaterInputStream class

In this example, we are decompressing the compressed file def.txt into D.java .

1. import java.io.*;
2. import java.util.zip.*;
3.
4. class UnCompress{
5. public static void main(String args[]){
6.
7. try{
8. FileInputStream fin=new FileInputStream("def.txt");
9. InflaterInputStream in=new InflaterInputStream(fin);
10.
11. FileOutputStream fout=new FileOutputStream("D.java");
12.
13. int i;
14. while((i=in.read())!=-1){
15. fout.write((byte)i);
16. fout.flush();
17. }
18.
19. fin.close();
20. fout.close();
21. in.close();
22.
23. }catch(Exception e){System.out.println(e);}
24. System.out.println("rest of the code");
25. }
26. }
PipedInputStream and PipedOutputStream classes

The PipedInputStream and PipedOutputStream classes can be used to read and write data
simultaneously. Both streams are connected with each other using the connect() method of the
PipedOutputStream class.

Example of PipedInputStream and PipedOutputStream classes using threads

Here, we have created two threads t1 and t2. The t1 thread writes the data using the
PipedOutputStream object and the t2 thread reads the data from that pipe using the
PipedInputStream object. Both the piped stream object are connected with each other.

1. import java.io.*;

Uday Singh(MCA), 09199511858 / 09835613557 Page 313


JAVA

2. class PipedWR{
3. public static void main(String args[])throws Exception{
4. final PipedOutputStream pout=new PipedOutputStream();
5. final PipedInputStream pin=new PipedInputStream();
6.
7. pout.connect(pin);//connecting the streams
8. //creating one thread t1 which writes the data
9. Thread t1=new Thread(){
10. public void run(){
11. for(int i=65;i<=90;i++){
12. try{
13. pout.write(i);
14. Thread.sleep(1000);
15. }catch(Exception e){}
16. }
17. }
18. };
19. //creating another thread t2 which reads the data
20. Thread t2=new Thread(){
21. public void run(){
22. try{
23. for(int i=65;i<=90;i++)
24. System.out.println(pin.read());
25. }catch(Exception e){}
26. }
27. };
28. //starting both threads
29. t1.start();
30. t2.start();
31. }}

Uday Singh(MCA), 09199511858 / 09835613557 Page 314


JAVA

Serialization in Java
1. Serialization
2. Serializable Interface
3. Example of Serialization
4. Deserialization
5. Example of Deserialization
6. Serialization with Inheritance
7. Externalizable interface
8. Serialization and static datamember

Serialization in java is a mechanism of writing the state of an object into a byte stream.

It is mainly used in Hibernate, RMI, JPA, EJB, JMS technologies.

The reverse operation of serialization is calleddeserialization.

The String class and all the wrapper classes implements java.io.Serializable interface by
default.

Advantage of Java Serialization

It is mainly used to travel object's state on the network (known as marshaling).

java.io.Serializable interface

Serializable is a marker interface (has no body). It is just used to "mark" java classes which
support a certain capability.

It must be implemented by the class whose object you want to persist. Let's see the example
given below:

1. import java.io.Serializable;
2. public class Student implements Serializable{
3. int id;
4. String name;
5. public Student(int id, String name) {
6. this.id = id;
7. this.name = name;
8. }
9. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 315


JAVA

ObjectOutputStream class

The ObjectOutputStream class is used to write primitive data types and Java objects to an
OutputStream. Only objects that support the java.io.Serializable interface can be written to
streams.

Constructor
1) public ObjectOutputStream(OutputStream out) throws IOException {}creates
an ObjectOutputStream that writes to the specified OutputStream.

Important Methods
Method Description

1) public final void writeObject(Object writes the specified object to the


obj) throws IOException {} ObjectOutputStream.

2) public void flush() throws flushes the current output stream.


IOException {}

3) public void close() throws closes the current output stream.


IOException {}

Example of Java Serialization

In this example, we are going to serialize the object of Student class. The writeObject()
method of ObjectOutputStream class provides the functionality to serialize the object. We are
saving the state of the object in the file named f.txt.

1. import java.io.*;
2. class Persist{
3. public static void main(String args[])throws Exception{
4. Student s1 =new Student(211,"ravi");
5.
6. FileOutputStream fout=new FileOutputStream("f.txt");
7. ObjectOutputStream out=new ObjectOutputStream(fout);
8.
9. out.writeObject(s1);
10. out.flush();

Uday Singh(MCA), 09199511858 / 09835613557 Page 316


JAVA

11. System.out.println("success");
12. }
13. }
success
download this example of serialization

Deserialization in java

Deserialization is the process of reconstructing the object from the serialized state.It is the
reverse operation of serialization.

ObjectInputStream class

An ObjectInputStream deserializes objects and primitive data written using an


ObjectOutputStream.

Constructor
1) public ObjectInputStream(InputStream creates an ObjectInputStream
in) throws IOException {} that reads from the specified
InputStream.

Important Methods
Method Description

1) public final Object readObject() throws reads an object from the


IOException, ClassNotFoundException{} input stream.

2) public void close() throws IOException {} closes ObjectInputStream.

Example of Java Deserialization


1. import java.io.*;
2. class Depersist{
3. public static void main(String args[])throws Exception{
4.
5. ObjectInputStream in=new ObjectInputStream(new FileInputStream("f.txt"));
6. Student s=(Student)in.readObject();
7. System.out.println(s.id+" "+s.name);
8.
9. in.close();

Uday Singh(MCA), 09199511858 / 09835613557 Page 317


JAVA

10. }
11. }
211 ravi
download this example of deserialization

Java Serialization with Inheritance (IS-A Relationship)

If a class implements serializable then all its sub classes will also be serializable. Let's see the
example given below:

1. import java.io.Serializable;
2. class Person implements Serializable{
3. int id;
4. String name;
5. Person(int id, String name) {
6. this.id = id;
7. this.name = name;
8. }
9. }
1. class Student extends Person{
2. String course;
3. int fee;
4. public Student(int id, String name, String course, int fee) {
5. super(id,name);
6. this.course=course;
7. this.fee=fee;
8. }
9. }

Now you can serialize the Student class object that extends the Person class which is
Serializable.Parent class properties are inherited to subclasses so if parent class is Serializable,
subclass would also be.

Java Serialization with Aggregation (HAS-A Relationship)

If a class has a reference of another class, all the references must be Serializable otherwise
serialization process will not be performed. In such case, NotSerializableException is thrown
at runtime.

1. class Address{
2. String addressLine,city,state;

Uday Singh(MCA), 09199511858 / 09835613557 Page 318


JAVA

3. public Address(String addressLine, String city, String state) {


4. this.addressLine=addressLine;
5. this.city=city;
6. this.state=state;
7. }
8. }
1. import java.io.Serializable;
2. public class Student implements Serializable{
3. int id;
4. String name;
5. Address address;//HAS-A
6. public Student(int id, String name) {
7. this.id = id;
8. this.name = name;
9. }
10. }

Since Address is not Serializable, you can not serialize the instance of Student class.

Note: All the objects within an object must be Serializable.

Java Serialization with static data member

If there is any static data member in a class, it will not be serialized because static is the part
of class not object.

1. class Employee implements Serializable{


2. int id;
3. String name;
4. static String company="SSS IT Pvt Ltd";//it won't be serialized
5. public Student(int id, String name) {
6. this.id = id;
7. this.name = name;
8. }
9. }

Java Serialization with array or collection

Rule: In case of array or collection, all the objects of array or collection must be serializable.
If any object is not serialiizable, serialization will be failed.

Uday Singh(MCA), 09199511858 / 09835613557 Page 319


JAVA

Externalizable in java

The Externalizable interface provides the facility of writing the state of an object into a byte
stream in compress format. It is not a marker interface.

The Externalizable interface provides two methods:

•public void writeExternal(ObjectOutput out) throws IOException


•public void readExternal(ObjectInput in) throws IOException

Java Transient Keyword

If you don't want to serialize any data member of a class, you can mark it as transient.

Visit next page for more details.

Java Transient Keyword

Java transient keyword is used in serialization. If you define any data member as transient, it
will not be serialized.

Let's take an example, I have declared a class as Student, it has three data members id, name and
age. If you serialize the object, all the values will be serialized but I don't want to serialize one
value, e.g. age then we can declare the age data member as transient.

Example of Java Transient Keyword

In this example, we have created the two classes Student and PersistExample. The age data
member of the Student class is declared as transient, its value will not be serialized.

If you deserialize the object, you will get the default value for transient variable.

Let's create a class with transient variable.

1. import java.io.Serializable;
2. public class Student implements Serializable{
3. int id;
4. String name;
5. transient int age;//Now it will not be serialized
6. public Student(int id, String name,int age) {

Uday Singh(MCA), 09199511858 / 09835613557 Page 320


JAVA

7. this.id = id;
8. this.name = name;
9. this.age=age;
10. }
11. }

Now write the code to serialize the object.

1. import java.io.*;
2. class PersistExample{
3. public static void main(String args[])throws Exception{
4. Student s1 =new Student(211,"ravi",22);//creating object
5. //writing object into file
6. FileOutputStream f=new FileOutputStream("f.txt");
7. ObjectOutputStream out=new ObjectOutputStream(f);
8. out.writeObject(s1);
9. out.flush();
10.
11. out.close();
12. f.close();
13. System.out.println("success");
14. }
15. }

Output:

success

Now write the code for deserialization.

1. import java.io.*;
2. class DePersist{
3. public static void main(String args[])throws Exception{
4. ObjectInputStream in=new ObjectInputStream(new FileInputStream("f.txt"));
5. Student s=(Student)in.readObject();
6. System.out.println(s.id+" "+s.name+" "+s.age);
7. in.close();
8. }
9. }
211 ravi 0

As you can see, printing age of the student returns 0 because value of age was not serialized.

Uday Singh(MCA), 09199511858 / 09835613557 Page 321


JAVA

Java Networking

Java Networking is a concept of connecting two or more computing devices together so that we
can share resources.

Java socket programming provides facility to share data between different computing devices.

Advantage of Java Networking


1. sharing resources
2. centralize software management

Do You Know ?
• How to perform connection-oriented Socket Programming in networking ?
• How to display the data of any online web page ?
• How to get the IP address of any host name e.g. www.google.com ?
• How to perform connection-less socket programming in networking ?

Java Networking Terminology

The widely used java networking terminologies are given below:

1. IP Address
2. Protocol
3. Port Number
4. MAC Address
5. Connection-oriented and connection-less protocol
6. Socket

1) IP Address

IP address is a unique number assigned to a node of a network e.g. 192.168.0.1 . It is composed


of octets that range from 0 to 255.

It is a logical address that can be changed.

2) Protocol

A protocol is a set of rules basically that is followed for communication. For example:

• TCP
• FTP
• Telnet
• SMTP

Uday Singh(MCA), 09199511858 / 09835613557 Page 322


JAVA

• POP etc.

3) Port Number

The port number is used to uniquely identify different applications. It acts as a communication
endpoint between applications.

The port number is associated with the IP address for communication between two applications.

4) MAC Address

MAC (Media Access Control) Address is a unique identifier of NIC (Network Interface
Controller). A network node can have multiple NIC but each with unique MAC.

5) Connection-oriented and connection-less protocol

In connection-oriented protocol, acknowledgement is sent by the receiver. So it is reliable but


slow. The example of connection-oriented protocol is TCP.

But, in connection-less protocol, acknowledgement is not sent by the receiver. So it is not


reliable but fast. The example of connection-less protocol is UDP.

6) Socket

A socket is an endpoint between two way communication.

Visit next page for java socket programming.

Java AWT Tutorial

Java AWT (Abstract Windowing Toolkit) is an API to develop GUI or window-based


application in java.

Java AWT components are platform-dependent i.e. components are displayed according to the
view of operating system. AWT is heavyweight i.e. its components uses the resources of system.

The java.awt package provides classes for AWT api such as TextField, Label, TextArea,
RadioButton, CheckBox, Choice, List etc.

Java AWT Hierarchy

The hierarchy of Java AWT classes are given below.

Uday Singh(MCA), 09199511858 / 09835613557 Page 323


JAVA

Container

The Container is a component in AWT that can contain another components like buttons,
textfields, labels etc. The classes that extends Container class are known as container such as
Frame, Dialog and Panel.

Window

The window is the container that have no borders and menu bars. You must use frame, dialog or
another window for creating a window.

Uday Singh(MCA), 09199511858 / 09835613557 Page 324


JAVA

Panel

The Panel is the container that doesn't contain title bar and menu bars. It can have other
components like button, textfield etc.

Frame

The Frame is the container that contain title bar and can have menu bars. It can have other
components like button, textfield etc.

Useful Methods of Component class


Method Description

public void add(Component c) inserts a component on this component.

public void setSize(int width,int sets the size (width and height) of the
height) component.

public void defines the layout manager for the


setLayout(LayoutManager m) component.

public void setVisible(boolean changes the visibility of the component,


status) by default false.

Java AWT Example

To create simple awt example, you need a frame. There are two ways to create a frame in AWT.

o By extending Frame class (inheritance)


o By creating the object of Frame class (association)

Simple example of AWT by inheritance


1. import java.awt.*;
2. class First extends Frame{
3. First(){
4. Button b=new Button("click me");
5. b.setBounds(30,100,80,30);// setting button position

Uday Singh(MCA), 09199511858 / 09835613557 Page 325


JAVA

6.
7. add(b);//adding button into frame
8. setSize(300,300);//frame size 300 width and 300 height
9. setLayout(null);//no layout manager
10. setVisible(true);//now frame will be visible, by default not visible
11. }
12. public static void main(String args[]){
13. First f=new First();
14. }}
download this example

The setBounds(int xaxis, int yaxis, int width, int height) method is used in the above example
that sets the position of the awt button.

Simple example of AWT by association


1. import java.awt.*;
2. class First2{
3. First2(){
4. Frame f=new Frame();
5.
6. Button b=new Button("click me");
7. b.setBounds(30,50,80,30);

Uday Singh(MCA), 09199511858 / 09835613557 Page 326


JAVA

8.
9. f.add(b);
10. f.setSize(300,300);
11. f.setLayout(null);
12. f.setVisible(true);
13. }
14. public static void main(String args[]){
15. First2 f=new First2();
16. }}

Event and Listener (Java Event Handling)


Changing the state of an object is known as an event. For example, click on button, dragging
mouse etc. The java.awt.event package provides many event classes and Listener interfaces
for event handling.

Event classes and Listener interfaces:


Event Classes Listener Interfaces

ActionEvent ActionListener

MouseEvent MouseListener and MouseMotionListener

MouseWheelEvent MouseWheelListener

KeyEvent KeyListener

ItemEvent ItemListener

TextEvent TextListener

AdjustmentEvent AdjustmentListener

WindowEvent WindowListener

ComponentEvent ComponentListener

ContainerEvent ContainerListener

FocusEvent FocusListener

Uday Singh(MCA), 09199511858 / 09835613557 Page 327


JAVA

Steps to perform Event Handling

Following steps are required to perform event handling:

1. Implement the Listener interface and overrides its methods


2. Register the component with the Listener

For registering the component with the Listener, many classes provide the registration methods.
For example:

o Button
o public void addActionListener(ActionListener a){}
o MenuItem
o public void addActionListener(ActionListener a){}
o TextField
o public void addActionListener(ActionListener a){}
o public void addTextListener(TextListener a){}
o TextArea
o public void addTextListener(TextListener a){}
o Checkbox
o public void addItemListener(ItemListener a){}
o Choice
o public void addItemListener(ItemListener a){}
o List
o public void addActionListener(ActionListener a){}
o public void addItemListener(ItemListener a){}

EventHandling Codes:
We can put the event handling code into one of the following places:
1. Same class
2. Other class
3. Annonymous class

Example of event handling within class:


1. import java.awt.*;
2. import java.awt.event.*;
3.

Uday Singh(MCA), 09199511858 / 09835613557 Page 328


JAVA

4. class AEvent extends Frame implements ActionListener{


5. TextField tf;
6. AEvent(){
7.
8. tf=new TextField();
9. tf.setBounds(60,50,170,20);
10.
11. Button b=new Button("click me");
12. b.setBounds(100,120,80,30);
13.
14. b.addActionListener(this);
15.
16. add(b);add(tf);
17.
18. setSize(300,300);
19. setLayout(null);
20. setVisible(true);
21.
22. }
23.
24. public void actionPerformed(ActionEvent e){
25. tf.setText("Welcome");
26. }
27.
28. public static void main(String args[]){
29. new AEvent();
30. }
31. }
public void setBounds(int xaxis, int yaxis, int width, int height); have been used in the
above example that sets the position of the component it may be button, textfield etc.

Uday Singh(MCA), 09199511858 / 09835613557 Page 329


JAVA

2) Example of event handling by Outer class:


1. import java.awt.*;
2. import java.awt.event.*;
3. class AEvent2 extends Frame{
4. TextField tf;
5. AEvent2(){
6.
7. tf=new TextField();
8. tf.setBounds(60,50,170,20);
9.
10. Button b=new Button("click me");
11. b.setBounds(100,120,80,30);
12.
13. Outer o=new Outer(this);
14. b.addActionListener(o);//passing outer class instance
15.
16. add(b);add(tf);
17.
18. setSize(300,300);
19. setLayout(null);
20. setVisible(true);
21. }
22. public static void main(String args[]){

Uday Singh(MCA), 09199511858 / 09835613557 Page 330


JAVA

23. new AEvent2();


24. }
25. }
1. import java.awt.event.*;
2. class Outer implements ActionListener{
3. AEvent2 obj;
4. Outer(AEvent2 obj){
5. this.obj=obj;
6. }
7. public void actionPerformed(ActionEvent e){
8. obj.tf.setText("welcome");
9. }
10. }

3) Example of event handling by Annonymous class:


1. import java.awt.*;
2. import java.awt.event.*;
3. class AEvent3 extends Frame{
4. TextField tf;
5. AEvent3(){
6. tf=new TextField();
7. tf.setBounds(60,50,170,20);
8. Button b=new Button("click me");
9. b.setBounds(50,120,80,30);
10.
11. b.addActionListener(new ActionListener(){
12. public void actionPerformed(){
13. tf.setText("hello");
14. }
15. });
16. add(b);add(tf);
17. setSize(300,300);
18. setLayout(null);
19. setVisible(true);
20. }
21. public static void main(String args[]){
22. new AEvent3();
23. }
24. }

BorderLayout (LayoutManagers):

Uday Singh(MCA), 09199511858 / 09835613557 Page 331


JAVA

LayoutManagers:

The LayoutManagers are used to arrange components in a particular manner. LayoutManager is


an interface that is implemented by all the classes of layout managers. There are following
classes that represents the layout managers:

1. java.awt.BorderLayout
2. java.awt.FlowLayout
3. java.awt.GridLayout
4. java.awt.CardLayout
5. java.awt.GridBagLayout
6. javax.swing.BoxLayout
7. javax.swing.GroupLayout
8. javax.swing.ScrollPaneLayout
9. javax.swing.SpringLayout etc.

BorderLayout:

The BorderLayout is used to arrange the components in five regions: north, south, east, west and
center. Each region (area) may contain one component only. It is the default layout of frame or
window. The BorderLayout provides five constants for each region:

1. public static final int NORTH


2. public static final int SOUTH
3. public static final int EAST
4. public static final int WEST
5. public static final int CENTER

Constructors of BorderLayout class:


• BorderLayout(): creates a border layout but with no gaps between the components.
• JBorderLayout(int hgap, int vgap): creates a border layout with the given horizontal
and vertical gaps between the components.

Uday Singh(MCA), 09199511858 / 09835613557 Page 332


JAVA

Example of BorderLayout class:

1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class Border {
5. JFrame f;
6. Border(){
7. f=new JFrame();
8.
9. JButton b1=new JButton("NORTH");;
10. JButton b2=new JButton("SOUTH");;
11. JButton b3=new JButton("EAST");;
12. JButton b4=new JButton("WEST");;
13. JButton b5=new JButton("CENTER");;
14.
15. f.add(b1,BorderLayout.NORTH);
16. f.add(b2,BorderLayout.SOUTH);
17. f.add(b3,BorderLayout.EAST);
18. f.add(b4,BorderLayout.WEST);
19. f.add(b5,BorderLayout.CENTER);
20.
21. f.setSize(300,300);
22. f.setVisible(true);
23. }
24. public static void main(String[] args) {
25. new Border();

Uday Singh(MCA), 09199511858 / 09835613557 Page 333


JAVA

26. }
27. }
GridLayout
The GridLayout is used to arrange the components in rectangular grid. One component is
displayed in each rectangle.

Constructors of GridLayout class:


1. GridLayout(): creates a grid layout with one column per component in a row.
2. GridLayout(int rows, int columns): creates a grid layout with the given rows and
columns but no gaps between the components.
3. GridLayout(int rows, int columns, int hgap, int vgap): creates a grid layout with the
given rows and columns alongwith given horizontal and vertical gaps.

Example of GridLayout class:

1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class MyGridLayout{
5. JFrame f;
6. MyGridLayout(){
7. f=new JFrame();
8.
9. JButton b1=new JButton("1");

Uday Singh(MCA), 09199511858 / 09835613557 Page 334


JAVA

10. JButton b2=new JButton("2");


11. JButton b3=new JButton("3");
12. JButton b4=new JButton("4");
13. JButton b5=new JButton("5");
14. JButton b6=new JButton("6");
15. JButton b7=new JButton("7");
16. JButton b8=new JButton("8");
17. JButton b9=new JButton("9");
18.
19. f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);
20. f.add(b6);f.add(b7);f.add(b8);f.add(b9);
21.
22. f.setLayout(new GridLayout(3,3));
23. //setting grid layout of 3 rows and 3 columns
24.
25. f.setSize(300,300);
26. f.setVisible(true);
27. }
28. public static void main(String[] args) {
29. new MyGridLayout();
30. }
31. }

next>><<prev

FlowLayout
The FlowLayout is used to arrange the components in a line, one after another (in a flow).
It is the default layout of applet or panel.

Fields of FlowLayout class:


o public static final int LEFT
o public static final int RIGHT
o public static final int CENTER
o public static final int LEADING
o public static final int TRAILING

Constructors of FlowLayout class:


1. FlowLayout(): creates a flow layout with centered alignment and a default 5 unit
horizontal and vertical gap.
2. FlowLayout(int align): creates a flow layout with the given alignment and a
default 5 unit horizontal and vertical gap.
3. FlowLayout(int align, int hgap, int vgap): creates a flow layout with the given

Uday Singh(MCA), 09199511858 / 09835613557 Page 335


JAVA

alignment and the given horizontal and vertical gap.

Example of FlowLayout class:

1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class MyFlowLayout{
5. JFrame f;
6. MyFlowLayout(){
7. f=new JFrame();
8.
9. JButton b1=new JButton("1");
10. JButton b2=new JButton("2");
11. JButton b3=new JButton("3");
12. JButton b4=new JButton("4");
13. JButton b5=new JButton("5");
14.
15. f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);
16.
17. f.setLayout(new FlowLayout(FlowLayout.RIGHT));
18. //setting flow layout of right alignment
19.
20. f.setSize(300,300);
21. f.setVisible(true);

Uday Singh(MCA), 09199511858 / 09835613557 Page 336


JAVA

22. }
23. public static void main(String[] args) {
24. new MyFlowLayout();
25. }
26. }

BoxLayout class:
The BoxLayout is used to arrange the components either vertically or horizontally. For this
purpose, BoxLayout provides four constants. They are as follows:

Note: BoxLayout class is found in javax.swing package.

Fields of BoxLayout class:


1. public static final int X_AXIS
2. public static final int Y_AXIS
3. public static final int LINE_AXIS
4. public static final int PAGE_AXIS

Constructor of BoxLayout class:


1. BoxLayout(Container c, int axis): creates a box layout that arranges the components
with the given axis.

Example of BoxLayout class with Y-AXIS:

Uday Singh(MCA), 09199511858 / 09835613557 Page 337


JAVA

1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class BoxLayoutExample1 extends Frame {
5. Button buttons[];
6.
7. public BoxLayoutExample1 () {
8. buttons = new Button [5];
9.
10. for (int i = 0;i<5;i++) {
11. buttons[i] = new Button ("Button " + (i + 1));
12. add (buttons[i]);
13. }
14.
15. setLayout (new BoxLayout (this, BoxLayout.Y_AXIS));
16. setSize(400,400);
17. setVisible(true);
18. }
19.
20. public static void main(String args[]){
21. BoxLayoutExample1 b=new BoxLayoutExample1();

Uday Singh(MCA), 09199511858 / 09835613557 Page 338


JAVA

22. }
23. }
download this example

Example of BoxLayout class with X-AXIS:

1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class BoxLayoutExample2 extends Frame {
5. Button buttons[];
6.
7. public BoxLayoutExample2() {
8. buttons = new Button [5];
9.
10. for (int i = 0;i<5;i++) {
11. buttons[i] = new Button ("Button " + (i + 1));
12. add (buttons[i]);
13. }
14.
15. setLayout (new BoxLayout(this, BoxLayout.X_AXIS));

Uday Singh(MCA), 09199511858 / 09835613557 Page 339


JAVA

16. setSize(400,400);
17. setVisible(true);
18. }
19.
20. public static void main(String args[]){
21. BoxLayoutExample2 b=new BoxLayoutExample2();
22. }
23. }

CardLayout class
The CardLayout class manages the components in such a manner that only one component is
visible at a time. It treats each component as a card that is why it is known as CardLayout.

Constructors of CardLayout class:


1. CardLayout(): creates a card layout with zero horizontal and vertical gap.
2. CardLayout(int hgap, int vgap): creates a card layout with the given horizontal and
vertical gap.

Commonly used methods of CardLayout class:


1. public void next(Container parent): is used to flip to the next card of the given
container.
2. public void previous(Container parent): is used to flip to the previous card of the
given container.
3. public void first(Container parent): is used to flip to the first card of the given
container.
4. public void last(Container parent): is used to flip to the last card of the given
container.
5. public void show(Container parent, String name): is used to flip to the specified
card with the given name.

Example of CardLayout class:

Uday Singh(MCA), 09199511858 / 09835613557 Page 340


JAVA

1. import java.awt.*;
2. import java.awt.event.*;
3.
4. import javax.swing.*;
5.
6. public class CardLayoutExample extends JFrame implements ActionListener{
7. CardLayout card;
8. JButton b1,b2,b3;
9. Container c;
10. CardLayoutExample(){
11.
12. c=getContentPane();
13. card=new CardLayout(40,30);
14. //create CardLayout object with 40 hor space and 30 ver space
15. c.setLayout(card);
16.
17. b1=new JButton("Apple");
18. b2=new JButton("Boy");
19. b3=new JButton("Cat");
20. b1.addActionListener(this);
21. b2.addActionListener(this);

Uday Singh(MCA), 09199511858 / 09835613557 Page 341


JAVA

22. b3.addActionListener(this);
23.
24. c.add("a",b1);c.add("b",b2);c.add("c",b3);
25.
26. }
27. public void actionPerformed(ActionEvent e) {
28. card.next(c);
29. }
30.
31. public static void main(String[] args) {
32. CardLayoutExample cl=new CardLayoutExample();
33. cl.setSize(400,400);
34. cl.setVisible(true);
35. cl.setDefaultCloseOperation(EXIT_ON_CLOSE);
36. }
37. }
Java Applet

Applet is a special type of program that is embedded in the webpage to generate the dynamic
content. It runs inside the browser and works at client side.

Advantage of Applet

There are many advantages of applet. They are as follows:

1. It works at client side so less response time.


2. Secured
3. It can be executed by browsers running under many plateforms, including Linux,
Windows, Mac Os etc.

Drawback of Applet
1. Plugin is required at client browser to execute applet.

Do You Know
1. Who is responsible to manage the life cycle of an applet ?
2. How to perform animation in applet ?
3. How to paint like paint brush in applet ?
4. How to display digital clock in applet ?
5. How to display analog clock in applet ?
6. How to communicate two applets ?

Uday Singh(MCA), 09199511858 / 09835613557 Page 342


JAVA

Hierarchy of Applet

As displayed in the above diagram, Applet class extends Panel. Panel class extends Container
which is the subclass of Component.

Lifecycle of Java Applet


1. Applet is initialized.
2. Applet is started.
3. Applet is painted.
4. Applet is stopped.
5. Applet is destroyed.

Lifecycle methods for Applet:

The java.applet.Applet class 4 life cycle methods and java.awt.Component class provides 1 life
cycle methods for an applet.

Uday Singh(MCA), 09199511858 / 09835613557 Page 343


JAVA

java.applet.Applet class

For creating any applet java.applet.Applet class must be inherited. It provides 4 life cycle
methods of applet.

1. public void init(): is used to initialized the Applet. It is invoked only once.
2. public void start(): is invoked after the init() method or browser is maximized. It is used
to start the Applet.
3. public void stop(): is used to stop the Applet. It is invoked when Applet is stop or
browser is minimized.
4. public void destroy(): is used to destroy the Applet. It is invoked only once.

java.awt.Component class

The Component class provides 1 life cycle method of applet.

1. public void paint(Graphics g): is used to paint the Applet. It provides Graphics class
object that can be used for drawing oval, rectangle, arc etc.

Who is responsible to manage the life cycle of an applet?

Java Plug-in software.

How to run an Applet?

There are two ways to run an applet

1. By html file.
2. By appletViewer tool (for testing purpose).

Simple example of Applet by html file:

To execute the applet by html file, create an applet and compile it. After that create an html file
and place the applet code in html file. Now click the html file.

1. //First.java
2. import java.applet.Applet;
3. import java.awt.Graphics;

Uday Singh(MCA), 09199511858 / 09835613557 Page 344


JAVA

4. public class First extends Applet{


5.
6. public void paint(Graphics g){
7. g.drawString("welcome",150,150);
8. }
9.
10. }

Note: class must be public because its object is created by Java Plugin software that resides
on the browser.

myapplet.html
1. <html>
2. <body>
3. <applet code="First.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>

Simple example of Applet by appletviewer tool:

To execute the applet by appletviewer tool, create an applet that contains applet tag in comment
and compile it. After that run it by: appletviewer First.java. Now Html file is not required but it
is for testing purpose only.

1. //First.java
2. import java.applet.Applet;
3. import java.awt.Graphics;
4. public class First extends Applet{
5.
6. public void paint(Graphics g){
7. g.drawString("welcome to applet",150,150);
8. }
9.
10. }
11. /*
12. <applet code="First.class" width="300" height="300">
13. </applet>
14. */

To execute the applet by appletviewer tool, write in command prompt:

c:\>javac First.java

Uday Singh(MCA), 09199511858 / 09835613557 Page 345


JAVA

c:\>appletviewer First.java
Displaying Graphics in Applet

java.awt.Graphics class provides many methods for graphics programming.

Commonly used methods of Graphics class:

1. public abstract void drawString(String str, int x, int y): is used to draw the specified
string.
2. public void drawRect(int x, int y, int width, int height): draws a rectangle with the
specified width and height.
3. public abstract void fillRect(int x, int y, int width, int height): is used to fill rectangle
with the default color and specified width and height.
4. public abstract void drawOval(int x, int y, int width, int height): is used to draw oval
with the specified width and height.
5. public abstract void fillOval(int x, int y, int width, int height): is used to fill oval with
the default color and specified width and height.
6. public abstract void drawLine(int x1, int y1, int x2, int y2): is used to draw line
between the points(x1, y1) and (x2, y2).
7. public abstract boolean drawImage(Image img, int x, int y, ImageObserver
observer): is used draw the specified image.
8. public abstract void drawArc(int x, int y, int width, int height, int startAngle, int
arcAngle): is used draw a circular or elliptical arc.
9. public abstract void fillArc(int x, int y, int width, int height, int startAngle, int
arcAngle): is used to fill a circular or elliptical arc.
10. public abstract void setColor(Color c): is used to set the graphics current color to the
specified color.
11. public abstract void setFont(Font font): is used to set the graphics current font to the
specified font.

Example of Graphics in applet:

1. import java.applet.Applet;
2. import java.awt.*;
3.
4. public class GraphicsDemo extends Applet{
5.
6. public void paint(Graphics g){
7. g.setColor(Color.red);
8. g.drawString("Welcome",50, 50);
9. g.drawLine(20,30,20,300);
10. g.drawRect(70,100,30,30);

Uday Singh(MCA), 09199511858 / 09835613557 Page 346


JAVA

11. g.fillRect(170,100,30,30);
12. g.drawOval(70,200,30,30);
13.
14. g.setColor(Color.pink);
15. g.fillOval(170,200,30,30);
16. g.drawArc(90,150,30,30,30,270);
17. g.fillArc(270,150,30,30,0,180);
18.
19. }
20. }

myapplet.html
1. <html>
2. <body>
3. <applet code="GraphicsDemo.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
Displaying Image in Applet

Applet is mostly used in games and animation. For this purpose image is required to be
displayed. The java.awt.Graphics class provide a method drawImage() to display the image.

Syntax of drawImage() method:

1. public abstract boolean drawImage(Image img, int x, int y, ImageObserver


observer): is used draw the specified image.

How to get the object of Image:

The java.applet.Applet class provides getImage() method that returns the object of Image.
Syntax:

1. public Image getImage(URL u, String image){}

Other required methods of Applet class to display image:

1. public URL getDocumentBase(): is used to return the URL of the document in which
applet is embedded.
2. public URL getCodeBase(): is used to return the base URL.

Uday Singh(MCA), 09199511858 / 09835613557 Page 347


JAVA

Example of displaying image in applet:

1. import java.awt.*;
2. import java.applet.*;
3.
4.
5. public class DisplayImage extends Applet {
6.
7. Image picture;
8.
9. public void init() {
10. picture = getImage(getDocumentBase(),"sonoo.jpg");
11. }
12.
13. public void paint(Graphics g) {
14. g.drawImage(picture, 30,30, this);
15. }
16.
17. }
In the above example, drawImage() method of Graphics class is used to display the image.
The 4th argument of drawImage() method of is ImageObserver object. The Component class
implements ImageObserver interface. So current class object would also be treated as
ImageObserver because Applet class indirectly extends the Component class.

myapplet.html
1. <html>
2. <body>
3. <applet code="DisplayImage.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
Animation in Applet
Applet is mostly used in games and animation. For this purpose image is required to be
moved.

Example of animation in applet:

1. import java.awt.*;
2. import java.applet.*;
3. public class AnimationExample extends Applet {

Uday Singh(MCA), 09199511858 / 09835613557 Page 348


JAVA

4.
5. Image picture;
6.
7. public void init() {
8. picture =getImage(getDocumentBase(),"bike_1.gif");
9. }
10.
11. public void paint(Graphics g) {
12. for(int i=0;i<500;i++){
13. g.drawImage(picture, i,30, this);
14.
15. try{Thread.sleep(100);}catch(Exception e){}
16. }
17. }
18. }
In the above example, drawImage() method of Graphics class is used to display the image.
The 4th argument of drawImage() method of is ImageObserver object. The Component class
implements ImageObserver interface. So current class object would also be treated as
ImageObserver because Applet class indirectly extends the Component class.

myapplet.html
1. <html>
2. <body>
3. <applet code="DisplayImage.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
EventHandling in Applet
As we perform event handling in AWT or Swing, we can perform it in applet also. Let's see
the simple example of event handling in applet that prints a message by click on the button.

Example of EventHandling in applet:

1. import java.applet.*;
2. import java.awt.*;
3. import java.awt.event.*;
4. public class EventApplet extends Applet implements ActionListener{
5. Button b;
6. TextField tf;
7.
8. public void init(){

Uday Singh(MCA), 09199511858 / 09835613557 Page 349


JAVA

9. tf=new TextField();
10. tf.setBounds(30,40,150,20);
11.
12. b=new Button("Click");
13. b.setBounds(80,150,60,50);
14.
15. add(b);add(tf);
16. b.addActionListener(this);
17.
18. setLayout(null);
19. }
20.
21. public void actionPerformed(ActionEvent e){
22. tf.setText("Welcome");
23. }
24. }
In the above example, we have created all the controls in init() method because it is invoked
only once.

myapplet.html
1. <html>
2. <body>
3. <applet code="EventApplet.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
JApplet class in Applet
As we prefer Swing to AWT. Now we can use JApplet that can have all the controls of
swing. The JApplet class extends the Applet class.

Example of EventHandling in JApplet:

1. import java.applet.*;
2. import javax.swing.*;
3. import java.awt.event.*;
4. public class EventJApplet extends JApplet implements ActionListener{
5. JButton b;
6. JTextField tf;
7. public void init(){
8.
9. tf=new JTextField();

Uday Singh(MCA), 09199511858 / 09835613557 Page 350


JAVA

10. tf.setBounds(30,40,150,20);
11.
12. b=new JButton("Click");
13. b.setBounds(80,150,70,40);
14.
15. add(b);add(tf);
16. b.addActionListener(this);
17.
18. setLayout(null);
19. }
20.
21. public void actionPerformed(ActionEvent e){
22. tf.setText("Welcome");
23. }
24. }
In the above example, we have created all the controls in init() method because it is invoked
only once.

myapplet.html
1. <html>
2. <body>
3. <applet code="EventJApplet.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
Painting in Applet
We can perform painting operation in applet by the mouseDragged() method of
MouseMotionListener.

Example of Painting in Applet:

1. import java.awt.*;
2. import java.awt.event.*;
3. import java.applet.*;
4. public class MouseDrag extends Applet implements MouseMotionListener{
5.
6. public void init(){
7. addMouseMotionListener(this);
8. setBackground(Color.red);
9. }
10.

Uday Singh(MCA), 09199511858 / 09835613557 Page 351


JAVA

11. public void mouseDragged(MouseEvent me){


12. Graphics g=getGraphics();
13. g.setColor(Color.white);
14. g.fillOval(me.getX(),me.getY(),5,5);
15. }
16. public void mouseMoved(MouseEvent me){}
17.
18. }
In the above example, getX() and getY() method of MouseEvent is used to get the current x-
axis and y-axis. The getGraphics() method of Component class returns the object of
Graphics.

myapplet.html
1. <html>
2. <body>
3. <applet code="MouseDrag.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
Digital clock in Applet

Digital clock can be created by using the Calendar and SimpleDateFormat class. Let's see the
simple example:

Example of Digital clock in Applet:

1. import java.applet.*;
2. import java.awt.*;
3. import java.util.*;
4. import java.text.*;
5.
6. public class DigitalClock extends Applet implements Runnable {
7.
8. Thread t = null;
9. int hours=0, minutes=0, seconds=0;
10. String timeString = "";
11.
12. public void init() {
13. setBackground( Color.green);
14. }
15.
16. public void start() {

Uday Singh(MCA), 09199511858 / 09835613557 Page 352


JAVA

17. t = new Thread( this );


18. t.start();
19. }
20.
21.
22. public void run() {
23. try {
24. while (true) {
25.
26. Calendar cal = Calendar.getInstance();
27. hours = cal.get( Calendar.HOUR_OF_DAY );
28. if ( hours > 12 ) hours -= 12;
29. minutes = cal.get( Calendar.MINUTE );
30. seconds = cal.get( Calendar.SECOND );
31.
32. SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");
33. Date date = cal.getTime();
34. timeString = formatter.format( date );
35.
36. repaint();
37. t.sleep( 1000 ); // interval given in milliseconds
38. }
39. }
40. catch (Exception e) { }
41. }
42.
43.
44. public void paint( Graphics g ) {
45. g.setColor( Color.blue );
46. g.drawString( timeString, 50, 50 );
47. }
48. }
In the above example, getX() and getY() method of MouseEvent is used to get the current x-
axis and y-axis. The getGraphics() method of Component class returns the object of
Graphics.

myapplet.html
1. <html>
2. <body>
3. <applet code="DigitalClock.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>
Analog clock in Applet

Uday Singh(MCA), 09199511858 / 09835613557 Page 353


JAVA

Analog clock can be created by using the Math class. Let's see the simple example:

Example of Analog clock in Applet:

1. import java.applet.*;
2. import java.awt.*;
3. import java.util.*;
4. import java.text.*;
5.
6. public class MyClock extends Applet implements Runnable {
7.
8. int width, height;
9. Thread t = null;
10. boolean threadSuspended;
11. int hours=0, minutes=0, seconds=0;
12. String timeString = "";
13.
14. public void init() {
15. width = getSize().width;
16. height = getSize().height;
17. setBackground( Color.black );
18. }
19.
20. public void start() {
21. if ( t == null ) {
22. t = new Thread( this );
23. t.setPriority( Thread.MIN_PRIORITY );
24. threadSuspended = false;
25. t.start();
26. }
27. else {
28. if ( threadSuspended ) {
29. threadSuspended = false;
30. synchronized( this ) {
31. notify();
32. }
33. }
34. }
35. }
36.
37. public void stop() {
38. threadSuspended = true;
39. }

Uday Singh(MCA), 09199511858 / 09835613557 Page 354


JAVA

40.
41. public void run() {
42. try {
43. while (true) {
44.
45. Calendar cal = Calendar.getInstance();
46. hours = cal.get( Calendar.HOUR_OF_DAY );
47. if ( hours > 12 ) hours -= 12;
48. minutes = cal.get( Calendar.MINUTE );
49. seconds = cal.get( Calendar.SECOND );
50.
51. SimpleDateFormat formatter
52. = new SimpleDateFormat( "hh:mm:ss", Locale.getDefault() );
53. Date date = cal.getTime();
54. timeString = formatter.format( date );
55.
56. // Now the thread checks to see if it should suspend itself
57. if ( threadSuspended ) {
58. synchronized( this ) {
59. while ( threadSuspended ) {
60. wait();
61. }
62. }
63. }
64. repaint();
65. t.sleep( 1000 ); // interval specified in milliseconds
66. }
67. }
68. catch (Exception e) { }
69. }
70.
71. void drawHand( double angle, int radius, Graphics g ) {
72. angle -= 0.5 * Math.PI;
73. int x = (int)( radius*Math.cos(angle) );
74. int y = (int)( radius*Math.sin(angle) );
75. g.drawLine( width/2, height/2, width/2 + x, height/2 + y );
76. }
77.
78. void drawWedge( double angle, int radius, Graphics g ) {
79. angle -= 0.5 * Math.PI;
80. int x = (int)( radius*Math.cos(angle) );
81. int y = (int)( radius*Math.sin(angle) );
82. angle += 2*Math.PI/3;
83. int x2 = (int)( 5*Math.cos(angle) );
84. int y2 = (int)( 5*Math.sin(angle) );
85. angle += 2*Math.PI/3;

Uday Singh(MCA), 09199511858 / 09835613557 Page 355


JAVA

86. int x3 = (int)( 5*Math.cos(angle) );


87. int y3 = (int)( 5*Math.sin(angle) );
88. g.drawLine( width/2+x2, height/2+y2, width/2 + x, height/2 + y );
89. g.drawLine( width/2+x3, height/2+y3, width/2 + x, height/2 + y );
90. g.drawLine( width/2+x2, height/2+y2, width/2 + x3, height/2 + y3 );
91. }
92.
93. public void paint( Graphics g ) {
94. g.setColor( Color.gray );
95. drawWedge( 2*Math.PI * hours / 12, width/5, g );
96. drawWedge( 2*Math.PI * minutes / 60, width/3, g );
97. drawHand( 2*Math.PI * seconds / 60, width/2, g );
98. g.setColor( Color.white );
99. g.drawString( timeString, 10, height-10 );
100. }
101. }

myapplet.html
1. <html>
2. <body>
3. <applet code="MyClock.class" width="300" height="300">
4. </applet>
5. </body>
6. </html>

Example of using parameter in Applet:

1. import java.applet.Applet;
2. import java.awt.Graphics;
3.
4. public class UseParam extends Applet{
5.
6. public void paint(Graphics g){
7. String str=getParameter("msg");
8. g.drawString(str,50, 50);
9. }
10.
11. }

myapplet.html
1. <html>
2. <body>
3. <applet code="UseParam.class" width="300" height="300">
4. <param name="msg" value="Welcome to applet">

Uday Singh(MCA), 09199511858 / 09835613557 Page 356


JAVA

5. </applet>
6. </body>
7. </html>
Applet Communication

java.applet.AppletContext class provides the facility of communication between applets. We


provide the name of applet through the HTML file. It provides getApplet() method that returns
the object of Applet. Syntax:

1. public Applet getApplet(String name){}

Example of Applet Communication

1. import java.applet.*;
2. import java.awt.*;
3. import java.awt.event.*;
4. public class ContextApplet extends Applet implements ActionListener{
5. Button b;
6.
7. public void init(){
8. b=new Button("Click");
9. b.setBounds(50,50,60,50);
10.
11. add(b);
12. b.addActionListener(this);
13. }
14.
15. public void actionPerformed(ActionEvent e){
16.
17. AppletContext ctx=getAppletContext();
18. Applet a=ctx.getApplet("app2");
19. a.setBackground(Color.yellow);
20. }
21. }

myapplet.html
1. <html>
2. <body>
3. <applet code="ContextApplet.class" width="150" height="150" name="app1">
4. </applet>
5.
6. <applet code="First.class" width="150" height="150" name="app2">
7. </applet>
8. </body>

Uday Singh(MCA), 09199511858 / 09835613557 Page 357


JAVA

9. </html>
Java Reflection API

Java Reflection is a process of examining or modifying the run time behavior of a class at run
time.

The java.lang.Class class provides many methods that can be used to get metadata, examine and
change the run time behavior of a class.

The java.lang and java.lang.reflect packages provide classes for java reflection.

Where it is used

The Reflection API is mainly used in:

1. IDE (Integrated Development Environment) e.g. Eclipse, MyEclipse, NetBeans etc.


2. Debugger
3. Test Tools etc.

Do You Know ?
1. How many ways we can get the instance of Class class ?
2. How to create the javap tool ?
3. How to create the appletviewer tool ?
4. How to access the private method from outside the class ?

java.lang.Class class

The java.lang.Class class performs mainly two tasks:

1. provides methods to get the metadata of a class at run time.


2. provides methods to examine and change the run time
behavior of a class.

Commonly used methods of Class class:


Method Description

1) public String getName() returns the class


name

Uday Singh(MCA), 09199511858 / 09835613557 Page 358


JAVA

2) public static Class forName(String className)throws loads the class and


ClassNotFoundException returns the
reference of Class
class.

3) public Object newInstance()throws creates new


InstantiationException,IllegalAccessException instance.

4) public boolean isInterface() checks if it is


interface.

5) public boolean isArray() checks if it is


array.

6) public boolean isPrimitive() checks if it is


primitive.

7) public Class getSuperclass() returns the


superclass class
reference.

8) public Field[] getDeclaredFields()throws returns the total


SecurityException number of fields
of this class.

9) public Method[] getDeclaredMethods()throws returns the total


SecurityException number of
methods of this
class.

10) public Constructor[] getDeclaredConstructors()throws returns the total


SecurityException number of
constructors of
this class.

11) public Method getDeclaredMethod(String name,Class[] returns the method


parameterTypes)throws class instance.
NoSuchMethodException,SecurityException

Uday Singh(MCA), 09199511858 / 09835613557 Page 359


JAVA

How to get the object of Class class?

There are 3 ways to get the instance of Class class. They are as follows:

1. forName() method of Class class


2. getClass() method of Object class
3. the .class syntax

1) forName() method of Class class


1. is used to load the class dynamically.
2. returns the instance of Class class.
3. It should be used if you know the fully qualified name of class.This cannot be used for
primitive types.

Let's see the simple example of forName() method.

1. class Simple{}
2.
3. class Test{
4. public static void main(String args[]){
5. Class c=Class.forName("Simple");
6. System.out.println(c.getName());
7. }
8. }
Output:Simple

2) getClass() method of Object class

It returns the instance of Class class. It should be used if you know the type. Moreover, it can be
used with primitives.

1. class Simple{}
2.
3. class Test{
4. void printName(Object obj){
5. Class c=obj.getClass();
6. System.out.println(c.getName());
7. }
8. public static void main(String args[]){
9. Simple s=new Simple();
10.
11. Test t=new Test();
12. t.printName(s);

Uday Singh(MCA), 09199511858 / 09835613557 Page 360


JAVA

13. }
14. }
15.
Output:Simple

3) The .class syntax

If a type is available but there is no instance then it is possible to obtain a Class by appending
".class" to the name of the type.It can be used for primitive data type also.

1. class Test{
2. public static void main(String args[]){
3. Class c = boolean.class;
4. System.out.println(c.getName());
5.
6. Class c2 = Test.class;
7. System.out.println(c2.getName());
8. }
9. }
Output:boolean
Test

Determining the class object

Following methods of Class class is used to determine the class object:

1) public boolean isInterface(): determines if the specified Class object represents an


interface type.

2) public boolean isArray(): determines if this Class object represents an array class.

3) public boolean isPrimitive(): determines if the specified Class object represents a


primitive type.

Let's see the simple example of reflection api to determine the object type.

1. class Simple{}
2. interface My{}
3.
4. class Test{
5. public static void main(String args[]){
6. try{

Uday Singh(MCA), 09199511858 / 09835613557 Page 361


JAVA

7. Class c=Class.forName("Simple");
8. System.out.println(c.isInterface());
9.
10. Class c2=Class.forName("My");
11. System.out.println(c2.isInterface());
12.
13. }catch(Exception e){System.out.println(e);}
14.
15. }
16. }

Java Date

The java.util, java.sql and java.text packages contains classes for representing date and time.
Following classes are important for dealing with date in java.

o java.util.Date class
o java.sql.Date class
o java.text.DateFormat class
o java.text.SimpleDateFormat class
o java.util.Calendar class
o java.util.GregorianCalendar class
o java.sql.Time class
o java.sql.Timestamp class
o java.util.TimeZone class

Get Current Date

There are 4 ways to print current date in java.

1st way:

4. java.util.Date date=new java.util.Date();


5. System.out.println(date);

Output:

Uday Singh(MCA), 09199511858 / 09835613557 Page 362


JAVA

Wed Mar 27 08:22:02 IST 2015

2nd way:

27. long millis=System.currentTimeMillis();


28. java.util.Date date=new java.util.Date(millis);
29. System.out.println(date);

Output:

Wed Mar 27 08:22:02 IST 2015

3rd way:

5. long millis=System.currentTimeMillis();
6. java.sql.Date date=new java.sql.Date(millis);
7. System.out.println(date);

Output:

2015-03-27

4th way:

2. Date date=java.util.Calendar.getInstance().getTime();
3. System.out.println(date);

Output:

Wed Mar 27 08:22:02 IST 2015


java.util.Date

The java.util.Date class represents date and time in java. It provides constructors and methods to
deal with date and time in java.

The java.util.Date class implements Serializable, Cloneable and Comparable<Date> interface. It


is inherited by java.sql.Date, java.sql.Time and java.sql.Timestamp interfaces.

After Calendar class, most of the constructors and methods of java.util.Date class has been
deprecated. Here, we are not giving list of any deprecated constructor and method.

java.util.Date Constructors

Uday Singh(MCA), 09199511858 / 09835613557 Page 363


JAVA

No. Constructor Description

1) Date() Creates a date object representing current date and


time.

2) Date(long Creates a date object for the given milliseconds since


milliseconds) January 1, 1970, 00:00:00 GMT.

java.util.Date Methods

No. Method Description

1) boolean after(Date date) tests if current date is after the given date.

2) boolean before(Date date) tests if current date is before the given


date.

3) Object clone() returns the clone object of current date.

4) int compareTo(Date date) compares current date with given date.

5) boolean equals(Date date) compares current date with given date for
equality.

6) static Date from(Instant returns an instance of Date object from


instant) Instant date.

7) long getTime() returns the time represented by this date


object.

8) int hashCode() returns the hash code value for this date
object.

9) void setTime(long time) changes the current date and time to given
time.

10) Instant toInstant() converts current date into Instant object.

Uday Singh(MCA), 09199511858 / 09835613557 Page 364


JAVA

11) String toString() converts this date into Instant object.

java.util.Date Example

Let's see the example to print date in java using java.util.Date class.

1st way:

24. java.util.Date date=new java.util.Date();


25. System.out.println(date);

Output:

Wed Mar 27 08:22:02 IST 2015

2nd way:

24. long millis=System.currentTimeMillis();


25. java.util.Date date=new java.util.Date(millis);
26. System.out.println(date);

Output:

Wed Mar 27 08:22:02 IST 2015


java.sql.Date

The java.sql.Date class represents only date in java. It inherits java.util.Date class.

The java.sql.Date instance is widely used in JDBC because it represents the date that can be
stored in database.

Some constructors and methods of java.sql.Date class has been deprecated. Here, we are not
giving list of any deprecated constructor and method.

java.sql.Date Constructor

No. Constructor Description

1) Date(long Creates a sql date object for the given milliseconds


milliseconds) since January 1, 1970, 00:00:00 GMT.

Uday Singh(MCA), 09199511858 / 09835613557 Page 365


JAVA

java.sql.Date Methods

No. Method Description

1) void setTime(long time) changes the current sql date to given


time.

2) Instant toInstant() converts current sql date into Instant


object.

3) LocalDate toLocalDate() converts current sql date into


LocalDate object.

4) String toString() converts this sql date object to a string.

5) static Date valueOf(LocalDate returns sql date object for the given
date) LocalDate.

6) static Date valueOf(String date) returns sql date object for the given
String.

java.sql.Date Example: get current date

Let's see the example to print date in java using java.sql.Date class.

3. public class SQLDateExample {


4. public static void main(String[] args) {
5. long millis=System.currentTimeMillis();
6. java.sql.Date date=new java.sql.Date(millis);
7. System.out.println(date);
8. }
9. }

Output:

2015-03-30

Java String to java.sql.Date Example

Let's see the example to convert string into java.sql.Date using valueOf() method.

6. import java.sql.Date;
Uday Singh(MCA), 09199511858 / 09835613557 Page 366
JAVA

7. public class StringToSQLDateExample {


8. public static void main(String[] args) {
9. String str="2015-03-31";
10. Date date=Date.valueOf(str);//converting string into sql date
11. System.out.println(date);
12. }
13. }

Output:

2015-03-31
java.util.Date

The java.util.Date class represents date and time in java. It provides constructors and methods to
deal with date and time in java.

The java.util.Date class implements Serializable, Cloneable and Comparable<Date> interface. It


is inherited by java.sql.Date, java.sql.Time and java.sql.Timestamp interfaces.

After Calendar class, most of the constructors and methods of java.util.Date class has been
deprecated. Here, we are not giving list of any deprecated constructor and method.

java.util.Date Constructors

No. Constructor Description

1) Date() Creates a date object representing current date and


time.

2) Date(long Creates a date object for the given milliseconds since


milliseconds) January 1, 1970, 00:00:00 GMT.

java.util.Date Methods

No. Method Description

1) boolean after(Date date) tests if current date is after the given date.

2) boolean before(Date date) tests if current date is before the given


date.

Uday Singh(MCA), 09199511858 / 09835613557 Page 367


JAVA

3) Object clone() returns the clone object of current date.

4) int compareTo(Date date) compares current date with given date.

5) boolean equals(Date date) compares current date with given date for
equality.

6) static Date from(Instant returns an instance of Date object from


instant) Instant date.

7) long getTime() returns the time represented by this date


object.

8) int hashCode() returns the hash code value for this date
object.

9) void setTime(long time) changes the current date and time to given
time.

10) Instant toInstant() converts current date into Instant object.

11) String toString() converts this date into Instant object.

java.util.Date Example

Let's see the example to print date in java using java.util.Date class.

1st way:

38. java.util.Date date=new java.util.Date();


39. System.out.println(date);

Output:

Wed Mar 27 08:22:02 IST 2015

2nd way:

4. long millis=System.currentTimeMillis();
5. java.util.Date date=new java.util.Date(millis);
6. System.out.println(date);

Uday Singh(MCA), 09199511858 / 09835613557 Page 368


JAVA

Output:

Wed Mar 27 08:22:02 IST 2015


Java SimpleDateFormat

The java.text.SimpleDateFormat class provides methods to format and parse date and time in
java. The SimpleDateFormat is a concrete class for formatting and parsing date which inherits
java.text.DateFormat class.

Notice that formatting means converting date to string and parsing means converting string to
date.

Java SimpleDateFormat Example: Date to String

Let's see the simple example to format date in java using java.text.SimpleDateFormat class.

2. import java.text.SimpleDateFormat;
3. import java.util.Date;
4. public class SimpleDateFormatExample {
5. public static void main(String[] args) {
6. Date date = new Date();
7. SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
8. String strDate= formatter.format(date);
9. System.out.println(strDate);
10. }
11. }
Test it Now

Output:

13/04/2015

Note: M (capital M) represents month and m (small m) represents minute in java.

Let's see the full example to format date and time in java using java.text.SimpleDateFormat
class.

7. import java.text.ParseException;
8. import java.text.SimpleDateFormat;
9. import java.util.Date;
10. import java.util.Locale;
11. public class SimpleDateFormatExample2 {
12. public static void main(String[] args) {
13. Date date = new Date();

Uday Singh(MCA), 09199511858 / 09835613557 Page 369


JAVA

14. SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");


15. String strDate = formatter.format(date);
16. System.out.println("Date Format with MM/dd/yyyy : "+strDate);
17.
18. formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
19. strDate = formatter.format(date);
20. System.out.println("Date Format with dd-M-yyyy hh:mm:ss : "+strDate);
21.
22. formatter = new SimpleDateFormat("dd MMMM yyyy");
23. strDate = formatter.format(date);
24. System.out.println("Date Format with dd MMMM yyyy : "+strDate);
25.
26. formatter = new SimpleDateFormat("dd MMMM yyyy zzzz");
27. strDate = formatter.format(date);
28. System.out.println("Date Format with dd MMMM yyyy zzzz : "+strDate);
29.
30. formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
31. strDate = formatter.format(date);
32. System.out.println("Date Format with E, dd MMM yyyy HH:mm:ss z : "+strDate);
33. }
34. }
Test it Now

Output:

Date Format with MM/dd/yyyy : 04/13/2015


Date Format with dd-M-yyyy hh:mm:ss : 13-4-2015 10:59:26
Date Format with dd MMMM yyyy : 13 April 2015
Date Format with dd MMMM yyyy zzzz : 13 April 2015 India Standard Time
Date Format with E, dd MMM yyyy HH:mm:ss z : Mon, 13 Apr 2015 22:59:26 IST

Java SimpleDateFormat Example: String to Date

Let's see the simple example to convert string into date using java.text.SimpleDateFormat
class.

6. import java.text.ParseException;
7. import java.text.SimpleDateFormat;
8. import java.util.Date;
9. public class SimpleDateFormatExample3 {
10. public static void main(String[] args) {
11. SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
12. try {
13. Date date = formatter.parse("31/03/2015");
14. System.out.println("Date is: "+date);

Uday Singh(MCA), 09199511858 / 09835613557 Page 370


JAVA

15. } catch (ParseException e) {e.printStackTrace();}


16. }
17. }
Test it Now

Output:

Date is: Tue Mar 31 00:00:00 IST 2015

Uday Singh(MCA), 09199511858 / 09835613557 Page 371

You might also like