Java Unit-1
Java Unit-1
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) Standalone Application
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 applicatios.
4) Mobile Application
An application that is created for mobile devices. Currently Android and Java ME are
used for creating mobile applications.
History of Java
Java history is interesting to know. 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.
At that time, it was a advanced concept for the green team. But, it was good for internet
programming. Later, Netscape Navigator incorporated Java technology.
James Gosling
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.
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).
11) In 1995, Time magazine called Java one of the Ten Best Products of 1995.
Features of Java
There is given many features of java. They are also called java buzzwords.
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
Java is simple in the sense that:
syntax is based on C++ (so easier for programmers to learn it after C++).
Object-oriented
Object-oriented means we organize our software as a combination of different types
of objects that incorporates both data and behaviour.
1. Object
2. Class
3. Inheritance
4. Polymorphism
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,Li
nux,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:
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
accesss 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 sucurity 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++)
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.
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 (i.e.JVM is plateform
dependent).
Loads code
Verifies code
Executes code
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).
Loads code
Verifies code
Executes code
Provides runtime environment
Memory area
Class file format
Register set
Garbage-collected heap
Fatal error reporting etc.
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.
7) Execution Engine:
It contains:
1) A virtual processor
Variable
Variable is name of reserved area allocated in memory.
int data=50;//Here data is variable
Types of Variable
There are three types of variables in java
local variable
instance variable
static variable
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.
class A
{
void method(){
int n=90;//local variable
}
}//end of class
byte 0 1 byte
short 0 2 byte
Int 0 4 byte
long 0L 8 byte
Unicode System
Unicode is a universal international standard character encoding that is capable of
representing most of the world's written languages.
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.
To solve these problems, a new language standard was developed i.e. Unicode
System.
In unicode, character holds 2 byte, so java also uses 2 byte for characters.
lowest value:\u0000
highest value:\uffff
Operators in java
Operator is a special 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.
Precedence of Operators
Operators Precedence
multiplicative * / %
additive + -
equality == !=
bitwise exclusive OR ^
bitwise inclusive OR |
logical OR ||
ternary ? :
Useful Programs:
There is given some useful programs such as factorial number, prime number,
fibonacci series etc.
It is better for the freshers to skip this topic and come to it after OOPs
concepts.
1) Program of factorial number.
class Operation{
}
}
3) Program of armstrong number.
class ArmStrong{
public static void main(String...args)
{
int n=153,c=0,a,d;
d=n;
while(n>0)
{
a=n%10;
n=n/10;
c=c+(a*a*a);
}
if(d==c)
System.out.println("armstrong number");
else
System.out.println("it is not an armstrong number");
}
}
System.out.println("a= "+a);
System.out.println("b= "+b);
}
}
return n*=fact(n-1);
}
int f=fact(5);
System.out.println(f);
}
}
Java OOPs Concepts
Object-Oriented Programming is a paradigm that provides many concepts, such
as inheritance, data binding, polymorphism, etc.
The popular object-oriented languages are Java, C#, PHP, Python, C++, etc.Sec
o Object
o Class
o Inheritance
o Polymorphism
o Abstraction
o Encapsulation
Object
Any entity that has state and behavior is known as an object. For example, a chair,
pen, table, keyboard, bike, etc. It can be physical or logical.
An Object can be defined as an instance of a class. An object contains an address and
takes up some space in memory. Objects can communicate without knowing the
details of each other's data or code. The only necessary thing is the type of message
accepted and the type of response returned by the objects.
Example: A dog is an object because it has states like color, name, breed, etc. as well
as behaviors like wagging the tail, barking, eating, etc.
Class
Collection of objects is called class. It is a logical entity.
A class can also be defined as a blueprint from which you can create an individual
object. Class doesn't consume any space.
Inheritance
When one object acquires all the properties and behaviors of a parent object, it is
known as inheritance. It provides code reusability. It is used to achieve runtime
polymorphism.
Polymorphism
Another example can be to speak something; for example, a cat speaks meow, 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.
Encapsulation
Binding (or wrapping) code and data together into a single unit are known as
encapsulation. For example, a 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.
Coupling
Coupling refers to the knowledge or information or dependency of another class. It
arises when classes are aware of each other. If a class has the details information of
another class, there is strong coupling. In Java, we use private, protected, and public
modifiers to display the visibility level of a class, method, and field. You can use
interfaces for the weaker coupling because there is no concrete implementation.
Cohesion
Cohesion refers to the level of a component which performs a single well-defined
task. A single well-defined task is done by a highly cohesive method. The weakly
cohesive method will split the task into separate parts. The java.io package is a highly
cohesive package because it has I/O related classes and interface. However, the
java.util package is a weakly cohesive package because it has unrelated classes and
interfaces.
Association
Association represents the relationship between the objects. Here, one object can be
associated with one object or many objects. There can be four types of association
between the objects:
o One to One
o One to Many
o Many to One, and
o Many to Many
Let's understand the relationship with real-time examples. For example, One country
can have one prime minister (one to one), and a prime minister can have many
ministers (one to many). Also, many MP's can have one prime minister (many to one),
and many ministers can have many departments (many to many).
Aggregation
Aggregation is a way to achieve Association. Aggregation represents the relationship
where one object contains other objects as a part of its state. It represents the weak
relationship between objects. It is also termed as a has-a relationship in Java. Like,
inheritance represents the is-a relationship. It is another way to reuse objects.
Composition
The composition is also a way to achieve Association. The composition represents
the relationship where one object contains other objects as a part of its state. There
is a strong relationship between the containing object and the dependent object. It is
the state where containing objects do not have an independent existence. If you
delete the parent object, all the child objects will be deleted automatically.
3) OOPs provides the 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.
By using standard Java naming conventions they make their code easier to read for
themselves and for other programmers. Readability of Java code is important because
it means less time is spent trying to figure out what the code does.
Name Convension
class name should begin with uppercase letter and be a noun e.g.String,System,Thread etc.
Interface should begin with uppercase letter and be an adjective (whereever possible). e.g.
name Runnable,ActionListener etc.
A runtime entity that has state and behaviour is known as an object. For example: chair,
table, pen etc. It can be tengible or intengible (physical or logical).
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 behaviour.
Class
A class is a group of objects that have common property. It is a template or blueprint
from which objects are created.
data member
method
constructor
block
class <class_name>{
data member;
method;
}
class Student{
int id;//data member (also instance variable)
String name;//data member(also instance variable)
}
}
Output:0 null
Instance variable
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, 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.
class Student{
int rollno;
String name;
s1.insertRecord(111,"Karan");
s2.insertRecord(222,"Aryan");
s1.displayInformation();
s2.displayInformation();
}
}
Output:111 Karan
222 Aryan
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.
class Rectangle{
int length;
int width;
void calculateArea(){System.out.println(length*width);}
r1.insert(11,5);
r2.insert(3,15);
r1.calculateArea();
r2.calculateArea();
}
}
Output:55
45
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{
class Rectangle{
int length;
int width;
void calculateArea(){System.out.println(length*width);}
r1.insert(11,5);
r2.insert(3,15);
r1.calculateArea();
r2.calculateArea();
}
}
Output:55
45
Method in Java
In general, a method is a way to perform some task. Similarly, the method in Java is
a collection of instructions that performs a specific task. It provides the reusability of
code. We can also easily modify code using methods. In this section, we will
learn what is a method in Java, types of methods, method declaration, and how
to call a method in Java.
Method Declaration
The method declaration provides information about method attributes, such as
visibility, return-type, name, and arguments. It has six components that are known
as method header, as we have shown in the following figure.Method
Signature: Every method has a method signature. It is a part of the method
declaration. It includes the method name and parameter list.
Access Specifier: Access specifier or modifier is the access type of the method. It
specifies the visibility of the method. Java provides four types of access specifier:
o Public: The method is accessible by all classes when we use public specifier in our
application.
o Private: When we use a private access specifier, the method is accessible only in the
classes in which it is defined.
o Protected: When we use protected access specifier, the method is accessible within
the same package or subclasses in a different package.
o Default: When we do not use any access specifier in the method declaration, Java
uses default access specifier by default. It is visible only from the same package only.
Return Type: Return type is a data type that the method returns. It may have a
primitive data type, object, collection, void, etc. If the method does not return
anything, we use void keyword.
Method Name: It is a unique name that is used to define the name of a method. It
must be corresponding to the functionality of the method. Suppose, if we are
creating a method for subtraction of two numbers, the method name must
be subtraction(). A method is invoked by its name.
Method Body: It is a part of the method declaration. It contains all the actions to be
performed. It is enclosed within the pair of curly braces.
Naming a Method
While defining a method, remember that the method name must be a verb and start
with a lowercase letter. If the method name has more than two words, the first name
must be a verb followed by adjective or noun. In the multi-word method name, the
first letter of each word must be in uppercase except the first word. For example:
It is also possible that a method has the same name as another method name in the
same class, it is known as method overloading.
Types of Method
There are two types of methods in Java:
o Predefined Method
o User-defined Method
Predefined Method
In Java, predefined methods are the method that is already defined in the Java class
libraries is known as predefined methods. It is also known as the standard library
method or built-in method. We can directly use these methods just by calling them
in the program at any point. Some pre-defined methods are length(), equals(),
compareTo(), sqrt(), etc. When we call any of the predefined methods in our
program, a series of codes related to the corresponding method runs in the
background that is already stored in the library.
Each and every predefined method is defined inside a class. Such as print() method
is defined in the java.io.PrintStream class. It prints the statement that we write
inside the method. For example, print("Java"), it prints Java on the console.
Demo.java
Output:
We can also see the method signature of any predefined method by using the
link https://docs.oracle.com/. When we go through the link and see the max()
method signature, we find the following:
In the above method signature, we see that the method signature has access
specifier public, non-access modifier static, return type int, method
name max(), parameter list (int a, int b). In the above example, instead of defining
the method, we have just invoked the method. This is the advantage of a predefined
method. It makes programming less complicated.
Similarly, we can also see the method signature of the print() method.
User-defined Method
The method written by the user or programmer is known as a user-defined method.
These methods are modified according to the requirement.
Let's create a user defined method that checks the number is even or odd. First, we
will define the method.
1. import java.util.Scanner;
2. public class EvenOdd
3. {
4. public static void main (String args[])
5. {
6. //creating Scanner class object
7. Scanner scan=new Scanner(System.in);
8. System.out.print("Enter the number: ");
9. //reading value from the user
10. int num=scan.nextInt();
11. //method calling
12. findEvenOdd(num);
13. }
Let's combine both snippets of codes in a single program and execute it.
EvenOdd.java
1. import java.util.Scanner;
2. public class EvenOdd
3. {
4. public static void main (String args[])
5. {
6. //creating Scanner class object
7. Scanner scan=new Scanner(System.in);
8. System.out.print("Enter the number: ");
9. //reading value from user
10. int num=scan.nextInt();
11. //method calling
12. findEvenOdd(num);
13. }
14. //user defined method
15. public static void findEvenOdd(int num)
16. {
17. //method body
18. if(num%2==0)
19. System.out.println(num+" is even");
20. else
21. System.out.println(num+" is odd");
22. }
23. }
Output 1:
Output 2:
Let's see another program that return a value to the calling method.
In the following program, we have defined a method named add() that sum up the
two numbers. It has two parameters n1 and n2 of integer type. The values of n1 and
n2 correspond to the value of a and b, respectively. Therefore, the method adds the
value of a and b and store it in the variable s and returns the sum.
Addition.java
Output:
The main advantage of a static method is that we can call it without creating an
object. It can access static data members and also change the value of it. It is used to
create an instance method. It is invoked by using the class name. The best example
of a static method is the main() method.
Display.java
Output:
Instance Method
The method of the class is known as an instance method. It is a non-static method
defined in the class. Before calling or invoking the instance method, it is necessary to
create an object of its class. Let's see an example of an instance method.
InstanceMethodExample.java
Output:
o Accessor Method
o Mutator Method
Accessor Method: The method(s) that reads the instance variable(s) is known as the
accessor method. We can easily identify it because the method is prefixed with the
word get. It is also known as getters. It returns the value of the private field. It is
used to get the value of the private field.
Example
Mutator Method: The method(s) read the instance variable(s) and also modify the
values. We can easily identify it because the method is prefixed with the word set. It
is also known as setters or modifiers. It does not return anything. It accepts a
parameter of the same data type that depends on the field. It is used to set the value
of the private field.
Example
Student.java
Abstract Method
The method that does not has method body is known as abstract method. In other
words, without an implementation is known as abstract method. It always declares in
the abstract class. It means the class itself must be abstract if it has abstract method.
To create an abstract method, we use the keyword abstract.
Syntax
Demo.java
Output:
Abstract method..
Constructor in Java
Constructor is a special type of method that is used to initialize the object.
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.
Types of constructors
<class_name>(){}
class Bike{
Bike(){System.out.println("Bike is created");}
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 Student{
int id;
String name;
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.
Parameterized constructor
A constructor that have parameters is known as parameterized constructor.
class Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
void display(){System.out.println(id+" "+name);}
Constructor Overloading
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.
class Student{
int id;
String name;
int age;
Student(int i,String n){
id = i;
name = n;
}
Student(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[]){
Student s1 = new Student(111,"Karan");
Student s2 = new Student(222,"Aryan",25);
s1.display();
s2.display();
}
}
Output:111 Karan 0
222 Aryan 25
Constructor Method
Constructor is used to initialize the state of an object. Method is used to expose behaviour o
an object.
Constructor must not have return type. Method must have return type.
The java compiler provides a default constructor if you Method is not provided by compiler in
don't have any constructor. any case.
Constructor name must be same as the class name. Method name may or may not be
same as class name.
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
constructor.
class Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
Student(Student s){
id = s.id;
name =s.name;
}
void display(){System.out.println(id+" "+name);}
class Student{
int id;
String name;
Student(int i,String n){
id = i;
name = n;
}
Student(){}
void display(){System.out.println(id+" "+name);}
Yes, like object creation, starting a thread, calling method etc. You can perform any
operation in the constructor as you perform in the method.
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?
In java, Methood Overloading is not possible by changing the return type of the
method.
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);}
}
}
Output:30
40
class Calculation{
void sum(int a,int b){System.out.println(a+b);}
void sum(double a,double b){System.out.println(a+b);}
}
}
Output:21.0
40
class Calculation{
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[]){
Calculation obj=new Calculation();
int result=obj.sum(20,20); //Compile Time Error
}
}
int result=obj.sum(20,20); //Here how can java determine which sum() method should
be called
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 Simple{
public static void main(int a){
System.out.println(a);
}
class Calculation{
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);}
}
}
Output:40
60
class Calculation{
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");}
class Calculation{
void sum(int a,long b){System.out.println("a method invoked");}
void sum(long a,int b){System.out.println("b method invoked");}
static keyword
The static keyword is used in java mainly for memory management. We may apply
static keyword with variables, methods, blocks and nested class. The static keyword
belongs to the class than instance of the class.
1) 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.
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.
class Student{
int rollno;
String name;
static String college ="ITS";
s1.display();
s2.display();
}
}
Output:111 Karan ITS
222 Aryan ITS
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);
}
}}
Output:1
1
1
class Counter{
static int count=0;//will get memory only once and retain its value
Counter(){
count++;
System.out.println(count);
}
}}
Output:1
2
3
2) static method
If you apply static keyword with any method, it is known as static method.
class Student{
int rollno;
String name;
static String college = "ITS";
s1.display();
s2.display();
s3.display();
}
}
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{
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
class A{
static{
System.out.println("static block is invoked");
System.exit(0);
}
}
Output:static block is invoked (if not JDK7)
this keyword
There can be a lot of usage of this keyword. In java, this is a reference variable that
refers to the current object.
Suggestion:If you are beginner to java, lookup only two usage of this keyword.
Let's understand the problem if we don't use this keyword by the example given
below:
class student{
int id;
String name;
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.
class Student{
int id;
String name;
class Student{
int id;
String name;
class Student{
int id;
String name;
Student (){System.out.println("default constructor is invoked");}
class Student{
int id;
String name;
String city;
class Student{
int id;
String name;
Student (){System.out.println("default constructor is invoked");}
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();
}
}
Output:method is invoked
class S{
void m(S obj){
System.out.println("method is invoked");
}
void p(){
m(this);
}
class B{
A obj;
B(A obj){
this.obj=obj;
}
void display(){
System.out.println(obj.data);//using data member of A class
}
}
class A{
int data=10;
A(){
B b=new B(this);
b.display();
}
public static void main(String args[]){
A a=new A();
}
}
Output:10
class A{
A getA(){
return this;
}
void msg(){System.out.println("Hello java");}
}
class Test{
public static void main(String args[]){
new A().getA().msg();
}
}
Output:Hello java
class A{
void m(){
System.out.println(this);//prints same reference ID
}
obj.m();
}
}
Output:A@13d9c02
A@13d9c02
Inheritance in Java
Inheritance is a mechanism in which one object acquires all the properties and behaviours of parent
object.Inheritance represents the IS-A relationship.
Why use Inheritance?
Syntax of Inheritance
The keyword extends 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 superclass. The new class is called a
subclass.
inheritance in java
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);
}
}
Output: Programmer salary is:40000.0
Bonus of programmer is:10000
Types of Inheritance
On the basis of class, there can be three types of inheritance: single, multilevel and
hierarchical.Multiple and Hybrid is supported through interface only. We will learn about interfaces
later.
When a class extends multiple classes i.e. known as multiple inheritance. For Example:
multiple inheritance in java
Ans.To reduce the complexity and simplify the language, multiple inheritance is not supported in
java. For example:
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
A
NAGGETA NAGGETA ネcト
A
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 this example, we have created the reference of Operation class in the Circle class.
class Operation{
int square(int n){
return n*n;
}
}
class Circle{
Operation op;//aggregation
double pi=3.14;
Address.java
Emp.java
void display(){
System.out.println(id+" "+name);
System.out.println(address.city+" "+address.state+" "+address.country);
}
e.display();
e2.display();
}
}
NAGGETA NAGGETA ネcト
A
NAGEETA NAGEETA 3鷁 皡! 磖繽
0OM H ! 瑷胈1Gzw€ kZ H ! ` ! 洙胈
In other words, If subclass provides the specific implementation of the method i.e.
already provided by its parent class, it is known as 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{
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{
void run(){System.out.println("Vehicle is running");}
}
class Bike extends Vehicle{
void run(){System.out.println("Bike is running safely");}
There are three basic differences between the method overloading and method
overriding. They are as follows:
Method Overriding
2) method overlaoding is performed Method overriding occurs in two classes that have IS-A
within a class. relationship.
super keyword
The super 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
implicitely i.e. referred by super reference variable.
class Vehicle{
int speed=50;
}
}
}
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.
class Vehicle{
int speed=50;
}
void display(){
System.out.println(super.speed);//will print speed of Vehicle now
}
public static void main(String args[]){
Bike b=new Bike();
b.display();
}
}
Output:50
class Vehicle{
Vehicle(){System.out.println("Vehicle is created");}
}
}
}
Output:Vehicle is created
Bike is created
class Vehicle{
Vehicle(){System.out.println("Vehicle is created");}
}
class Person{
void message(){System.out.println("welcome");}
}
void dislay(){
message();//will invoke current class message() method
super.message();//will invoke parent class message() method
}
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.
class Person{
void message(){System.out.println("welcome");}
}
void dislay(){
message();//will invoke parent class message() method
}
Output:welcome
NAGGETA NAGGETA ネcト
A
NAGGETA N A G G E T A
dŠ
The initialization of the instance variable can be directly but there can be performed
extra operations while initilizing 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:
class Bike{
int speed=100;
}
class Bike{
int speed;
Bike(){System.out.println("speed is "+speed);}
{speed=100;}
There are three places in java where you can perform operations:
1. method
2. constructor
3. block
class Bike{
int speed;
Bike(){System.out.println("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 costructor 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.
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.
class A{
A(){
System.out.println("parent class constructor invoked");
}
class B extends A{
B(){
super();
System.out.println("child class constructor invoked");
}
class A{
A(){
System.out.println("parent class constructor invoked");
}
class B extends A{
B(){
super();
B(int a){
super();
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) final variable
If you make any variable as final, you cannot change the value of final variable(It will be
constant).
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 Bike{
final int speedlimit=90;//final variable
void run(){
speedlimit=400;
}
2) 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");}
}
3) final class
If you make any class as final, you cannot extend it.
class Bike{
final void run(){System.out.println("running...");}
}
class Honda extends Bike{
class Bike{
final int speedlimit;//blank final variable
Bike(){
speedlimit=70;
System.out.println(speedlimit);
}
static{ data=50;}
class Bike{
int cube(final int n){
n=n+2;//can't be changed as n is final
n*n*n;
}
Abstraction
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.
Abstract class
abstract method
A method that is declared as abstract and does not have implementation is known as
abstract method.
In this example, Bike the abstract class that contains only one abstract method run. It
implementation is provided by the Honda 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.
class Test{
public static void main(String args[]){
Shape s=new Circle();
//In real scenario, Object is provided through factory method
s.draw();
}
}
Output:drawing circle
Note: An abstract class can have data member, abstract method, method body,
constructor and even main() method.
Rule: If there is any abstract method in a class, that class must be abstract.
class Bike{
abstract void run();
}
Output:compile time error
Rule: If you are extending any abstact class that have abstract method, you must
either provide the implementation of the method or make this class abstract.
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.
interface A{
void a();
void b();
void c();
void d();
}
class M extends B{
public void a(){System.out.println("I am a");}
public void b(){System.out.println("I am b");}
public void d(){System.out.println("I am d");}
}
class Test{
public static void main(String args[]){
A a=new M();
a.a();
a.b();
a.c();
a.d();
}}
Output:I am a
I am b
I am c
I am d
Interface
An interface is a blueprint of a class. It has static constants and abstract methods.
The interface is a mechanism to achieve fully abstraction in java. There can be only
abstract methods in the interface. It is used to achieve fully abstraction and multiple
inheritance in Java.
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.
interface printable{
void print();
}
interface Showable{
void show();
}
interface Printable{
void print();
}
interface Showable{
void print();
}
Note: A class implements interface but One interface extends another interface .
interface Printable{
void print();
}
Nested Interface
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:
interface printable{
void print();
interface MessagePrintable{
void msg();
}
}
gaurav singh
g a u r a v
s i n g h û• .( ï:Ú6S’
R7ú§û• {
Runtime Polymorphism
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.
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
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");}
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.
class Bike{
int speedlimit=90;
}
class Honda extends Bike{
int speedlimit=150;
class Animal{
void eat(){System.out.println("eating");}
}
a1.eat();
a2.eat();
a3.eat();
}
}
Output: eating
eating fruits
drinking Milk
Since, BabyDog is not overriding the eat() method, so eat() method of Dog class is
invoked.
Understanding Type
Let's understand the type of instance.
int data=30;
class Dog{
public static void main(String args[]){
Dog d1;//Here d1 is a type of Dog
}
}
class 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.
Dynamic binding
NAGGETA NAGGETA 澆D
Arial
NAGGETA NAGGETA ネcト
A
NAGGETA NAGGETA ネcト
A
NAGGETA NAGGETA 澆D
Arial
instanceof operator
The instanceof operator is used to test whether the object is an instance of the specified
type (class or subclass or interface).
The instanceof operator is also known as type comparison operator because it compares
the instance with type. It returns either true or false. If we apply the instanceof operator
with any variable that have null value, it returns false.
An object of subclass type is also a type of parent class. For example, if Dog extends
Animal then object of Dog can be reffered by either Dog or Animal class.
class Animal{}
class Dog{
public static void main(String args[]){
Dog d=null;
System.out.println(d instanceof Dog);//false
}
}
Output:false
class Animal { }
}
Output:ok downcasting performed
Downcasting without the use of instanceof operator
Downcasting can also be performed without the use of instanceof operator as
displayed in the following example:
class Animal { }
}
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:
interface Printable{}
class Call{
void invoke(Printable p){//upcasting
}
}//end of Call class
class Test{
public static void main(String args[]){
Printable p=new B();
Call c=new Call();
c.invoke(p);
}
}
Package
A package is a group of similar types of classes, interfaces and sub-packages.
Package 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 Package
Package is used to categorize the classes and interfaces so that they can be
easily maintained.
Package provides access protection.
Package removes naming collision.
//save as Simple.java
package mypack;
public class Simple{
public static void main(String args[]){
System.out.println("Welcome to package");
}
}
How to compile the Package (if not using IDE)
If you are not using any IDE, you need to follow the syntax given below:
For example
javac -d . Simple.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).
You need to use fully qualified name e.g. mypack.Simple etc to run the class.
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.
1. import package.*;
2. import package.classname;
3. fully qualified name.
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.
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
Output:Hello
Using packagename.classname
If you import package.classname then only declared class of this package will be
accessible.
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.A;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
Output:Hello
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.
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
class B{
public static void main(String args[]){
pack.A obj = new pack.A();//using fully qualified name
obj.msg();
}
}
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.
Subpackage
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.
Example of Subpackage
package com.javatpoint.core;
class Simple{
public static void main(String args[]){
System.out.println("Hello subpackage");
}
}
To Compile: javac -d . Simple.java
Output:Hello subpackage
//save as Simple.java
package mypack;
public class Simple{
public static void main(String args[]){
System.out.println("Welcome to package");
}
}
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.
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:
Output:Welcome to package
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.
class A{}
class B{}
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:
//save as A.java
package javatpoint;
public class A{}
//save as B.java
package javatpoint;
public class B{}
Access Modifiers
There are two types of modifiers in java: access modifier and non-access modifier.
The access modifiers specifies accessibility (scope) of a datamember, method,
constructor or class.
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
The private access modifier is accessible only within class.
class A{
private int data=40;
private void msg(){System.out.println("Hello java");}
}
class A{
private A(){}//private constructor
2) default
If you don't use any modifier, it is treated as default bydefault. The default modifier
is accessible only within package.
//save by A.java
package pack;
class A{
void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();//Compile Time Error
obj.msg();//Compile Time Error
}
}
In the above example, the scope of class A and its method msg() is default so it
cannot be accessed from outside the package.
3) protected
The protected access modifier is accessible within package .
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.
//save by A.java
package pack;
public class A{
protected void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.*;
class B extends A{
public static void main(String args[]){
B obj = new B();
obj.msg();
}
}
Output:Hello
4) public
The public access modifier is accessible everywhere. It has the widest scope
among all other modiers.
package pack;
public class A{
public void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.*;
class B{
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
Output:Hello
Access Modifier within class within package outside package by subclass only outside package
Private Y N N N
Default Y Y N N
Protected Y Y Y N
Public Y Y Y Y
If you are overriding any method, overriden method (i.e. declared in subclass)
must not be more restrictive.
class A{
protected void msg(){System.out.println("Hello java");}
}
NAGEETA N A G E E T A
3§c ÐT- ´rmd ì¨pdˆ[Wu`_ 0
è¨pd1Gdv€ _
NAGGETA NAGGETA ネcト
A
Encapsulation in Java
Encapsulation is a process of wrapping code and data together into a single unit e.g.
capsule i.e mixed of several medicines.
We can create a fully encapsulated class 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.
Advantage of Encapsulation
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.
//save as Student.java
package com.myjava;
public class student{
private string name;
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.
The clone() method is defined in the Object class. Syntax of the clone() method is as
follows:
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.
Student s2=(Student)s1.clone();
System.out.println(s1.rollno+" "+s1.name);
System.out.println(s2.rollno+" "+s2.name);
}
catch(CloneNotSupportedException c){}
}
}
Output:101 amit
101 amit
NAGGETA N A G G E T A
S t a r t i n g . . .
A
NAGGETA NAGGETA ネcト
A
Array in Java
Normally, array is a collection of similar type of elements that have contigious memory
location.
In 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 elements in an array.
Advantage of Array
Code Optimization: It makes the code optimized, we can retrive or sort the
data easily.
Random access: We can get any data located at any index position.
Disadvantage of 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.
Types of Array
class B{
public static void main(String args[]){
//printing array
for(int i=0;i<a.length;i++)//length is the property of array
System.out.println(a[i]);
}}
Output:10
20
70
40
50
We can declare, instantiate and initialize the java array together by:
class B{
public static void main(String args[]){
//printing array
for(int i=0;i<a.length;i++)//length is the property of array
System.out.println(a[i]);
}}
Output:33
3
4
5
Let's see the simple example to get minimum number of an array using method.
class B{
static void min(int arr[]){
int min=arr[0];
for(int i=1;i<arr.length;i++)
if(min>arr[i])
min=arr[i];
System.out.println(min);
}
int a[]={33,3,4,5};
min(a);//passing array in the method
}}
Output:3
Multidimensional array
In such case, data is stored in row and column based index (also known as matrix form).
Let's see the simple example to declare, instantiate, initialize and print the 2Dimensional
array.
class B{
public static void main(String args[]){
//printing 2D array
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}}
Output:1 2 3
2 4 5
4 4 5
class B{
public static void main(String args[]){
int arr[]={4,4,5};
Class c=arr.getClass();
String name=c.getName();
System.out.println(name);
}
}}
Output:[I
Copying an array
We can copy an array to another by the arraycopy method of System class.
class ArrayCopyDemo {
public static void main(String[] args) {
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
Addition 2 matrices
Let's see a simple example that adds two matrices.
class AE{
public static void main(String args[]){
//creating two matrices
int a[][]={{1,3,4},{3,4,5}};
int b[][]={{1,3,4},{3,4,5}};
}}
Output:2 6 8
6 8 10
String Handling
String Handling provides a lot of concepts that can be performed on a string such as
concatenating string, comparing string, substring etc.
We will discuss about immutable string later. Let's first understand what is string and
how we can create the string object.
String
Generally string is a sequence of characters. But in java, string is an object. String
class is used to create string object.
1. By string literal
2. By new keyword
1) String literal:
String literal is created by double quote.For Example:
String s="Hello";
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 returns. If the
string does not exist in the pool, a new String object instantiates, then is placed in
the pool.For example:
String s1="Welcome";
String s2="Welcome";//no new object will be created
In the above example only one object will be created.First time JVM will find no string
object with the name "Welcome" in string constant pool,so it will create a new
object.Second time it will find the string with the name "Welcome" in string constant
pool,so it will not create new object whether will return the reference to the same
instance.
Note: String objects are stored in a special memory area known as string
constant pool inside the Heap memory.
2) By new keyword:
String s1=new String("Welcome”);
Immutable String:
In java, strings are immutable (unmodifiable) objects.For example
class Simple{
public static void main(String args[]){
String s="Sachin";
s.concat(" Tendulkar");//concat() method appends the string at the end
System.out.println(s);//will print Sachin because strings are
immutable objects
}
}
Output:Sachin
As you can see in the above figure that two objects will be created but no reference
variable refers to "Sachin Tendulkar".But if we explicitely assign it to the reference
variable, it will refer to "Sachin Tendulkar" object.For example:
class Simple{
public static void main(String args[]){
String s="Sachin";
s=s.concat(" Tendulkar");
System.out.println(s);
}
}
Output:Sachin Tendulkar
1. By equals() method
2. By = = operator
3. By compareTo() method
1) By equals() method:
equals() method compares the original content of the string.It compares values of
string for equality.String class provides two methods:
class Simple{
public static void main(String args[]){
String s1="Sachin";
String s2="Sachin";
String s3=new String("Sachin");
String s4="Saurav";
System.out.println(s1.equals(s2));//
System.out.println(s1.equals(s3));//
System.out.println(s1.equals(s4));//
}
}
Output:true
true
false
//Example of equalsIgnoreCase(String) method
class Simple{
public static void main(String args[]){
String s1="Sachin";
String s2="SACHIN";
System.out.println(s1.equals(s2));//false
System.out.println(s1.equalsIgnoreCase(s3));//true
}
}
Output:false
true
2) By == operator:
The = = operator compares references not values.
//Example of == operator
class Simple{
public static void main(String args[]){
String s1="Sachin";
String s2="Sachin";
String s3=new String("Sachin");
Output:true
false
3) By compareTo() method:
compareTo() method compares values and returns an int which tells if the values
compare less than, equal, or greater than.
s1 == s2 :0
s1 > s2 :positive value
s1 < s2 :negative value
class Simple{
public static void main(String args[]){
String s1="Sachin";
String s2="Sachin";
String s3="Ratan";
System.out.println(s1.compareTo(s2));//0
System.out.println(s1.compareTo(s3));//1(because s1>s3)
System.out.println(s3.compareTo(s1));//-1(because s3 < s1 )
}
}
Output:0
1
-1
class Simple{
public static void main(String args[]){
Output:Sachin Tendulkar
class Simple{
public static void main(String args[]){
String s=50+30+"Sachin"+40+40;
System.out.println(s);//80Sachin4040
}
}
Output:80Sachin4040
Note:If either operand is a string, the resulting operation will be string concatenation.
If both operands are numbers, the operator will perform an addition.
2) By concat() method
concat() method concatenates the specified string to the end of current string.
class Simple{
public static void main(String args[]){
String s3=s1.concat(s2);
System.out.println(s3);//Sachin Tendulkar
}
}
Output:Sachin Tendulkar
Substring in Java
In case of substring startIndex starts from 0 and endIndex starts from 1 or startIndex is
inclusive and endIndex is exclusive.
You can get substring from the given String object by one of the two methods:
class Simple{
public static void main(String args[]){
Output:Tendulkar
Sachin
Method Description
1)public boolean equals(Object anObject) Compares this string to the specified object.
3)public String concat(String str) Concatenates the specified string to the end of this
string.
4)public int compareTo(String str) Compares two strings and returns int
7)public String substring(int beginIndex,int Returns a new string that is a substring of this
endIndex) string.
9)public String toLowerCase() Converts all of the characters in this String to lowe
case.
10)public String trim() Returns a copy of the string, with leading and
trailing whitespace omitted.
11)public boolean startsWith(String prefix) Tests if this string starts with the specified prefix.
12)public boolean endsWith(String suffix) Tests if this string ends with the specified suffix.
13)public char charAt(int index) Returns the char value at the specified index.
First seven methods have already been discussed.Now Let's take the example of other
methods:
class Simple{
public static void main(String args[]){
String s="Sachin";
System.out.println(s.toUpperCase());//SACHIN
System.out.println(s.toLowerCase());//sachin
System.out.println(s);//Sachin(no change in original)
}
}
Output:SACHIN
sachin
Sachin
trim() method
//Example of trim() method
class Simple{
public static void main(String args[]){
Output: Sachin
Sachin
class Simple{
public static void main(String args[]){
String s="Sachin";
System.out.println(s.startsWith("Sa"));//true
System.out.println(s.startsWith("n"));//true
}
}
Output:true
true
charAt() method
//Example of charAt() method
class Simple{
public static void main(String args[]){
String s="Sachin";
System.out.println(s.charAt(0));//S
System.out.println(s.charAt(3));//h
}
}
Output:S
h
length() method
//Example of length() method
class Simple{
public static void main(String args[]){
String s="Sachin";
System.out.println(s.length());//6
}
}
Output:6
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.
//Example of length() method
class Simple{
public static void main(String args[]){
Output:Sachin
StringBuffer class:
The StringBuffer class is used to created mutable (modifiable) string. The StringBuffer
class is same as String except it is mutable i.e. it can be changed.
class A{
public static void main(String args[]){
class A{
public static void main(String args[]){
System.out.println(sb);//prints HJavaello
}
}
class A{
public static void main(String args[]){
System.out.println(sb);//prints HJavalo
}
}
class A{
public static void main(String args[]){
System.out.println(sb);//prints Hlo
}
}
class A{
public static void main(String args[]){
System.out.println(sb);//prints olleH
}
}
class A{
public static void main(String args[])
{
sb.append("Hello");
System.out.println(sb.capacity());//now 16
class A{
public static void main(String args[]){
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.ensureCapacity(10);//now no change
System.out.println(sb.capacity());//now 34
sb.ensureCapacity(50);//now (34*2)+2
System.out.println(sb.capacity());//now 70
}
}
StringBuilder class:
The StringBuilder class is used to create mutable (modifiable) string. The
StringBuilder class is same as StringBuffer class except that it is non-synchronized. It
is available since JDK1.5.
Commonly used 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.
class A{
public static void main(String args[]){
class A{
public static void main(String args[]){
System.out.println(sb);//prints HJavaello
}
}
class A{
public static void main(String args[]){
System.out.println(sb);//prints HJavalo
}
}
Example of delete() method of StringBuilder class
The delete() method of StringBuilder class deletes the string from the specified
beginIndex to endIndex.
class A{
public static void main(String args[]){
System.out.println(sb);//prints Hlo
}
}
class A{
public static void main(String args[]){
System.out.println(sb);//prints olleH
}
}
class A{
public static void main(String args[]){
sb.append("Hello");
System.out.println(sb.capacity());//now 16
class A{
public static void main(String args[]){
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.ensureCapacity(10);//now no change
System.out.println(sb.capacity());//now 34
sb.ensureCapacity(50);//now (34*2)+2
System.out.println(sb.capacity());//now 70
}
}
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.
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.
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.
class Student{
int rollno;
String name;
String city;
class Student{
int rollno;
String name;
String city;
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.
Constructor Description
String nextToken() returns the next token from the StringTokenizer object.
String nextToken(String delim) returns the next token based on the delimeter.
Let's see the simple example of StringTokenizer class that tokenizes a string "my name
is khan" on the basis of whitespace.
import java.util.StringTokenizer;
public class Simple{
public static void main(String args[]){
StringTokenizer st = new StringTokenizer("my name is khan"," ");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
Output:my
name
is
khan