SCJP Ocjp PDF
SCJP Ocjp PDF
SCJP Ocjp PDF
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Language Fundamentals
Agenda :
1. Introduction
2. Identifiers
o Rules to define java identifiers:
3. Reserved words
o Reserved words for data types: (8)
o Reserved words for flow control:(11)
o Keywords for modifiers:(11)
o Keywords for exception handling:(6)
o Class related keywords:(6)
o Object related keywords:(4)
o Void return type keyword
o Unused keywords
o Reserved literals
o Enum
o Conclusions
4. Data types
o Integral data types
Byte
Short
Int
long
o Floating Point Data types
o boolean data type
o Char data type
o Java is pure object oriented programming or not ?
o Summary of java primitive data type
5. Literals
o Integral Literals
o Floating Point Literals
o Boolean literals
o Char literals
o String literals
o 1.7 Version enhansements with respect to Literals
Binary Literals
Usage of _ (underscore)symbol in numeric literals
6. Arrays
1. Introduction
2. Array declaration
Single dimensional array declaration
Two dimensional array declaration
Three dimensional array declaration
3. Array construction
Multi dimensional array creation
4. Array initialization
5. Array declaration, construction, initialization in a single line.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Identifier :
A name in java program is called identifier. It may be class name, method name,
variable name and label name.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Rule 7: All predefined java class names and interface names we use as identifiers.
Example 1:
class Test
{
public static void main(String[] args){
int String=10;
System.out.println(String);
}}
Output:
10
Example 2:
class Test
{
public static void main(String[] args){
int Runnable=10;
System.out.println(Runnable);
}}
Output:
10
Even though it is legal to use class names and interface names as identifiers but it is not
a good programming practice.
Reserved words:
In java some identifiers are reserved to associate some functionality or meaning such
type of reserved identifiers are called reserved words.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
If a method won't return anything compulsory that method should be declared with the
void return type in java but it is optional in C++.
1) void
Unused keywords:
goto: Create several problems in old languages and hence it is banned in java.
Const: Use final instead of this.
By mistake if we are using these keywords in our program we will get compile time
error.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Reserved literals:
1) true values for boolean data type.
2) false
3) null----------------- default value for object reference.
Enum:
Conclusions :
1. public(valid)
2. static(valid)
3. void(valid)
4. main(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
5. String(invalid)
6. args(invalid)
Data types:
Every variable has a type, every expression has a type and all types are strictly define
more over every assignment should be checked by the compiler by the type
compatibility hence java language is considered as strongly typed programming
language.
Java is not considered as pure object oriented programming language because several
oops features (like multiple inheritance, operator overloading) are not supported by
java moreover we are depending on primitive data types which are non objects.
Diagram:
Except Boolean and char all remaining data types are considered as signed data types
because we can represent both "+ve" and"-ve" numbers.
Byte:
Size: 1byte (8bits)
Maxvalue: +127
Minvalue:-128
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
The most significant bit acts as sign bit. "0" means "+ve" number and "1"
means "–ve" number.
"+ve" numbers will be represented directly in the memory whereas "–ve"
numbers will be represented in 2's complement form.
Example:
byte b=10;
byte b2=130;//C.E:possible loss of precision
found : int
required : byte
byte b=10.5;//C.E:possible loss of precision
byte b=true;//C.E:incompatible types
byte b="ashok";//C.E:incompatible types
found : java.lang.String
required : byte
byte data type is best suitable if we are handling data in terms of streams either from
the file or from the network.
Short:
Int:
Size: 4 bytes
Range:-2147483648 to 2147483647 (-231 to 231-1)
Example:
int i=130;
int i=10.5;//C.E:possible loss of precision
int i=true;//C.E:incompatible types
long:
Whenever int is not enough to hold big values then we should go for long data type.
Example:
To hold the no. Of characters present in a big file int may not enough hence the return
type of length() method is long.
long l=f.length();//f is a file
Size: 8 bytes
Range:-263 to 263-1
Note: All the above data types (byte, short, int and long) can be used to represent whole
numbers. If we want to represent real numbers then we should go for floating point
data types.
Float double
If we want to 5 to 6 decimal places of If we want to 14 to 15 decimal places of
accuracy then we should go for float. accuracy then we should go for double.
Size:4 bytes. Size:8 bytes.
Range:-3.4e38 to 3.4e38. -1.7e308 to1.7e308.
float follows single precision. double follows double precision.
Example 1:
boolean b=true;
boolean b=True;//C.E:cannot find symbol
boolean b="True";//C.E:incompatible types
boolean b=0;//C.E:incompatible types
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
In old languages like C & C++ are ASCII code based the no.Of ASCII code characters
are < 256 to represent these 256 characters 8 - bits enough hence char size in old
languages 1 byte.
In java we are allowed to use any worldwide alphabets character and java is Unicode
based and no.Of unicode characters are > 256 and <= 65536 to represent all these
characters one byte is not enough compulsory we should go for 2 bytes.
Size: 2 bytes
Range: 0 to 65535
Example:
char ch1=97;
char ch2=65536;//C.E:possible loss of precision
data Corresponding
Size Range Default value
type Wrapper class
byte 1 byte -27 to 2 7-1(-128 to 127) Byte 0
15 15
-2 to 2 -1 (-32768 to
short 2 bytes Short 0
32767)
-231 to 231-1 (-2147483648
int 4 bytes Integer 0
to 2147483647)
long 8 bytes -263 to 263-1 Long 0
float 4 bytes -3.4e38 to 3.4e38 Float 0.0
double 8 bytes -1.7e308 to 1.7e308 Double 0.0
Not Not applicable(but
boolean Boolean false
applicable allowed values true|false)
0(represents
char 2 bytes 0 to 65535 Character
blank space)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Literals:
Any constant value which can be assigned to the variable is called literal.
Example:
Integral Literals:
For the integral data types (byte, short, int and long) we can specify literal value in the
following ways.
2) Octal literals: Allowed digits are 0 to 7. Literal value should be prefixed with zero.
Example: int x=010;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
int x=10;
int y=010;
int z=0x10;
System.out.println(x+"----"+y+"----"+z); //10----8----16
By default every integral literal is int type but we can specify explicitly as long type by
suffixing with small "l" (or) capital "L".
Example:
int x=10;(valid)
long l=10L;(valid)
long l=10;(valid)
int x=10l;//C.E:possible loss of precision(invalid)
found : long
required : int
There is no direct way to specify byte and short literals explicitly. But whenever we are
assigning integral literal to the byte variables and its value within the range of byte
compiler automatically treats as byte literal. Similarly short literal also.
Example:
byte b=127;(valid)
byte b=130;//C.E:possible loss of precision(invalid)
short s=32767;(valid)
short s=32768;//C.E:possible loss of precision(invalid)
Floating point literal is by default double type but we can specify explicitly as float type
by suffixing with f or F.
Example:
float f=123.456;//C.E:possible loss of precision(invalid)
float f=123.456f;(valid)
double d=123.456;(valid)
We can specify explicitly floating point literal as double type by suffixing with d or D.
Example:
double d=123.456D;
We can specify floating point literal only in decimal form and we can't specify in octal
and hexadecimal forms.
Example:
double d=123.456;(valid)
double d=0123.456;(valid) //it is treated as decimal value but not octal
double d=0x123.456;//C.E:malformed floating point literal(invalid)
We can assign integral literal directly to the floating point data types and that integral
literal can be specified in decimal , octal and Hexa decimal form also.
Example:
double d=0xBeef;
System.out.println(d);//48879.0
But we can't assign floating point literal directly to the integral types.
Example:
int x=10.0;//C.E:possible loss of precision
We can specify floating point literal even in exponential form also(significant notation).
Example:
double d=10e2;//==>10*102(valid)
System.out.println(d);//1000.0
float f=10e2;//C.E:possible loss of precision(invalid)
float f=10e2F;(valid)
Boolean literals:
The only allowed values for the boolean type are true (or) false where case is important.
i.e., lower case
Example:
1. boolean b=true;(valid)
2. boolean b=0;//C.E:incompatible types(invalid)
3. boolean b=True;//C.E:cannot find symbol(invalid)
4. boolean b="true";//C.E:incompatible types(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Char literals:
Example:
1. char ch='a';(valid)
2. char ch=a;//C.E:cannot find symbol(invalid)
3. char ch="a";//C.E:incompatible types(invalid)
4. char ch='ab';//C.E:unclosed character literal(invalid)
2) We can specify a char literal as integral literal which represents Unicode of that
character.
We can specify that integral literal either in decimal or octal or hexadecimal form but
allowed values range is 0 to 65535.
Example:
Example:
1. char ch='\ubeef';
2. char ch1='\u0061';
System.out.println(ch1); //a
3. char ch2=\u0062; //C.E:cannot find symbol
4. char ch3='\iface'; //C.E:illegal escape character
5. Every escape character in java acts as a char literal.
Example:
1) char ch='\n'; //(valid)
2) char ch='\l'; //C.E:illegal escape character(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
String literals:
Example:
String s="Ashok"; (valid)
1. Binary Literals
2. Usage of '_' in Numeric Literals
Binary Literals :
For the integral data types untill 1.6v we can specified literal value in the following ways
1. Decimal
2. Octal
3. Hexa decimal
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
But from 1.7v onwards we can specified literal value in binary form also.
The allowed digits are 0 to 1.
Literal value should be prefixed with Ob or OB .
int x = 0b111;
System.out.println(x); // 7
We can use more than one underscore symbol also between the digits.
Ex : double d = 1_23_ _456.789;
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Arrays
1) Introduction
2) Array declaration
3) Array construction
4) Array initialization
5) Array declaration, construction, initialization in a single line.
6) length Vs length() method
7) Anonymous arrays
8) Array element assignments
9) Array variable assignments.
Introduction
The main advantage of arrays is we can represent multiple values with the same name
so that readability of the code will be improved.
Array declarations:
Example:
int[] a;//recommended to use because name is clearly separated from the
type
int []a;
int a[];
At the time of declaration we can't specify the size otherwise we will get compile time
error.
Example:
int[] a;//valid
int[5] a;//invalid
Example:
int[][] a;
int [][]a;
int a[][]; All are valid.(6 ways)
int[] []a;
int[] a[];
int []a[];
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
int[][][] a;
int [][][]a;
int a[][][];
int[] [][]a;
int[] a[][]; All are valid.(10 ways)
int[] []a[];
int[][] []a;
int[][] a[];
int []a[][];
int [][]a[];
Which of the following declarations are valid?
1) int[] a1,b1; //a-1,b-1 (valid)
2) int[] a2[],b2; //a-2,b-1 (valid)
3) int[] []a3,b3; //a-2,b-2 (valid)
4) int[] a,[]b; //C.E: expected (invalid)
Note :
If we want to specify the dimension before the variable that rule is applicable only for
the 1st variable.
Second variable onwards we can't apply in the same declaration.
Example:
Array construction:
Every array in java is an object hence we can create by using new operator.
Example:
int[] a=new int[3];
Diagram:
For every array type corresponding classes are available but these classes are part of
java language and not available to the programmer level.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Rule 1:
At the time of array creation compulsory we should specify the size otherwise we will
get compile time error.
Example:
int[] a=new int[3];
int[] a=new int[];//C.E:array dimension missing
Rule 2:
It is legal to have an array with size zero in java.
Example:
int[] a=new int[0];
System.out.println(a.length);//0
Rule 3:
If we are taking array size with -ve int value then we will get runtime exception saying
NegativeArraySizeException.
Example:
int[] a=new int[-3];//R.E:NegativeArraySizeException
Rule 4:
The allowed data types to specify array size are byte, short, char, int.
By mistake if we are using any other type we will get compile time error.
Example:
int[] a=new int['a'];//(valid)
byte b=10;
int[] a=new int[b];//(valid)
short s=20;
int[] a=new int[s];//(valid)
int[] a=new int[10l];//C.E:possible loss of precision//(invalid)
int[] a=new int[10.5];//C.E:possible loss of precision//(invalid)
Rule 5:
The maximum allowed array size in java is maximum value of int size [2147483647].
Example:
int[] a1=new int[2147483647];(valid)
int[] a2=new int[2147483648];
//C.E:integer number too large: 2147483648(invalid)
In the first case we may get RE : OutOfMemoryError.
In java multidimensional arrays are implemented as array of arrays approach but not
matrix form.
The main advantage of this approach is to improve memory utilization.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
21 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example 1:
int[][] a=new int[2][];
a[0]=new int[3];
a[1]=new int[2];
Diagram:
Example 2:
int[][][] a=new int[2][][];
a[0]=new int[3][];
a[0][0]=new int[1];
a[0][1]=new int[2];
a[0][2]=new int[3];
a[1]=new int[2][2];
Diagram:
Array Initialization:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Whenever we are creating an array every element is initialized with default value
automatically.
Example 1:
int[] a=new int[3];
System.out.println(a);//[I@3e25a5
System.out.println(a[0]);//0
Diagram:
Note: Whenever we are trying to print any object reference internally toString() method
will be executed which is implemented by default to return the following.
classname@hexadecimalstringrepresentationofhashcode.
Example 2:
System.out.println(a);//[[I@3e25a5
System.out.println(a[0]);//[I@19821f
System.out.println(a[0][0]);//0
Diagram:
Example 3:
int[][] a=new int[2][];
System.out.println(a);//[[I@3e25a5
System.out.println(a[0]);//null
System.out.println(a[0][0]);//R.E:NullPointerException
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
23 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Once we created an array all its elements by default initialized with default values.
If we are not satisfied with those default values then we can replays with our customized
values.
Example:
int[] a=new int[4];
a[0]=10;
a[1]=20;
a[2]=30;
a[3]=40;
a[4]=50;//R.E:ArrayIndexOutOfBoundsException: 4
a[-4]=60;//R.E:ArrayIndexOutOfBoundsException: -4
Diagram:
Note: if we are trying to access array element with out of range index we will get
Runtime Exception saying ArrayIndexOutOfBoundsException.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
24 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
char[] ch={'a','e','i','o','u'};(valid)
String[] s={"balayya","venki","nag","chiru"};(valid)
We can extend this short cut even for multi dimensional arrays also.
Example:
int[][] a={{10,20,30},{40,50}};
Diagram:
Example:
int[][][] a={{{10,20,30},{40,50}},{{60},{70,80},{90,100,110}}};
Diagram:
int[][][] a={{{10,20,30},{40,50}},{{60},{70,80},{90,100,110}}};
System.out.println(a[0][1][1]);//50(valid)
System.out.println(a[1][0][2]);//R.E:ArrayIndexOutOfBoundsException:
2(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
25 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
System.out.println(a[1][2][1]);//100(valid)
System.out.println(a[1][2][2]);//110(valid)
System.out.println(a[2][1][0]);//R.E:ArrayIndexOutOfBoundsException:
2(invalid)
System.out.println(a[1][1][1]);//80(valid)
Example:
length Vs length():
length:
Example:
int[] x=new int[3];
System.out.println(x.length());//C.E: cannot find symbol
System.out.println(x.length);//3
length() method:
Example:
String s="bhaskar";
System.out.println(s.length);//C.E:cannot find symbol
System.out.println(s.length());//7
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
26 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
In multidimensional arrays length variable represents only base size but not total size.
Example:
int[][] a=new int[6][3];
System.out.println(a.length);//6
System.out.println(a[0].length);//3
Diagram:
length variable applicable only for arrays where as length()method is applicable for
String objects.
There is no direct way to find total size of multi dimentional array but indirectly we can
find as follows
x[o].length +x[1].length + x[2].length + .......
Anonymous Arrays:
Sometimes we can create an array without name such type of nameless arrays
are called anonymous arrays.
The main objective of anonymous arrays is "just for instant use".
We can create anonymous array as follows.
new int[]{10,20,30,40};(valid)
new int[][]{{10,20},{30,40}};(valid)
At the time of anonymous array creation we can't specify the size otherwise we
will get compile time error.
Example:
new int[3]{10,20,30,40};//C.E:';' expected(invalid)
new int[]{10,20,30,40};(valid)
Based on our programming requirement we can give the name for anonymous array
then it is no longer anonymous.
Example:
int[] a=new int[]{10,20,30,40};(valid)
Example:
class Test
{
public static void main(String[] args)
{
System.out.println(sum(new int[]{10,20,30,40}));//100
}
public static int sum(int[] x)
{
int total=0;
for(int x1:x)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
27 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
total=total+x1;
}
return total;
}
}
In the above program just to call sum() , we required an array but after completing
sum() call we are not using that array any more, ananimous array is best suitable.
Case 1:
In the case of primitive array as array element any type is allowed which can be
promoted to declared type.
Example 1:
For the int type arrays the allowed array element types are byte, short, char, int.
int[] a=new int[10];
a[0]=97;//(valid)
a[1]='a';//(valid)
byte b=10;
a[2]=b;//(valid)
short s=20;
a[3]=s;//(valid)
a[4]=10l;//C.E:possible loss of precision
Example 2:
For float type arrays the allowed element types are byte, short, char, int, long, float.
Case 2:
In the case of Object type arrays as array elements we can provide either declared type
objects or its child class objects.
Example 1:
Object[] a=new Object[10];
a[0]=new Integer(10);//(valid)
a[1]=new Object();//(valid)
a[2]=new String("bhaskar");//(valid)
Example 2:
Number[] n=new Number[10];
n[0]=new Integer(10);//(valid)
n[1]=new Double(10.5);//(valid)
n[2]=new String("bhaskar");//C.E:incompatible types//(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
28 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Diagram:
Case 3:
In the case of interface type arrays as array elements we can provide its implemented
class objects.
Example:
Runnable[] r=new Runnable[10];
r[0]=new Thread();
r[1]=new String("bhaskar");//C.E: incompatible types
Case 1:
Example:
int[] a={10,20,30};
char[] ch={'a','b','c'};
int[] b=a;//(valid)
int[] c=ch;//C.E:incompatible types(invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
29 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Note: In the case of object type arrays child type array can be assign to parent type
array variable.
Example:
String[] s={"A","B"};
Object[] o=s;
Case 2:
Whenever we are assigning one array to another array internal elements won't be copy
just reference variables will be reassigned hence sizes are not important but types must
be matched.
Example:
int[] a={10,20,30,40,50,60,70};
int[] b={80,90};
a=b;//(valid)
b=a;//(valid)
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
30 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Case 3:
Whenever we are assigning one array to another array dimensions must be matched
that is in the place of one dimensional array we should provide the same type only
otherwise we will get compile time error.
Example:
int[][] a=new int[3][];
a[0]=new int[4][5];//C.E:incompatible types(invalid)
a[0]=10;//C.E:incompatible types(invalid)
a[0]=new int[4];//(valid)
Note: Whenever we are performing array assignments the types and dimensions must
be matched but sizes are not important.
Example 1:
int[][] a=new int[3][2];
a[0]=new int[3];
a[1]=new int[4];
a=new int[4][3];
Diagram:
Example 2:
class Test
{
public static void main(String[] args)
{
String[] argh={"A","B"};
args=argh;
System.out.println(args.length);//2
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
31 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
for(int i=0;i<=args.length;i++)
{
System.out.println(args[i]);
}
}
}
Output:
java Test x y
R.E: ArrayIndexOutOfBoundsException: 2
java Test x
R.E: ArrayIndexOutOfBoundsException: 2
java Test
R.E: ArrayIndexOutOfBoundsException: 2
Note: Replace with i<args.length
Example 3:
class Test
{
public static void main(String[] args)
{
String[] argh={"A","B"};
args=argh;
System.out.println(args.length);//2
for(int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
}
Output:
2
A
B
Example 4:
class Test
{
public static void main(String[] args)
{
String[] argh={"A","B"};
args=argh;
for(String s : args) {
System.out.println(s);
}
}
Output:
A
B
Types of Variables
Division 1 : Based on the type of value represented by a variable all variables are
divided into 2 types. They are:
1. Primitive variables
2. Reference variables
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
32 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Primitive variables:
Reference variables:
Diagram:
Division 2 : Based on the behaviour and position of declaration all variables are divided
into the following 3 types.
1. Instance variables
2. Static variables
3. Local variables
Instance variables:
If the value of a variable is varied from object to object such type of variables are
called instance variables.
For every object a separate copy of instance variables will be created.
Instance variables will be created at the time of object creation and destroyed at
the time of object destruction hence the scope of instance variables is exactly
same as scope of objects.
Instance variables will be stored on the heap as the part of object.
Instance variables should be declared with in the class directly but outside of any
method or block or constructor.
Instance variables can be accessed directly from Instance area. But cannot be
accessed directly from static area.
But by using object reference we can access instance variables from static area.
Example:
class Test
{
int i=10;
public static void main(String[] args)
{
//System.out.println(i);
//C.E:non-static variable i cannot be referenced from a static
context(invalid)
Test t=new Test();
System.out.println(t.i);//10(valid)
t.methodOne();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
33 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
}
public void methodOne()
{
System.out.println(i);//10(valid)
}
}
For the instance variables it is not required to perform initialization JVM will always
provide default values.
Example:
class Test
{
boolean b;
public static void main(String[] args)
{
Test t=new Test();
System.out.println(t.b);//false
}
}
Instance variables also known as object level variables or attributes.
Static variables:
If the value of a variable is not varied from object to object such type of variables
is not recommended to declare as instance variables. We have to declare such
type of variables at class level by using static modifier.
In the case of instance variables for every object a separate copy will be created
but in the case of static variables for entire class only one copy will be created
and shared by every object of that class.
Static variables will be crated at the time of class loading and destroyed at the
time of class unloading hence the scope of the static variable is exactly same as
the scope of the .class file.
Static variables will be stored in method area. Static variables should be declared
with in the class directly but outside of any method or block or constructor.
Static variables can be accessed from both instance and static areas directly.
We can access static variables either by class name or by object reference but
usage of class name is recommended.
But within the same class it is not required to use class name we can access
directly.
java TEST
1. Start JVM.
2. Create and start Main Thread by JVM.
3. Locate(find) Test.class by main Thread.
4. Load Test.class by main Thread. // static variable creation
5. Execution of main() method.
6. Unload Test.class // static variable destruction
7. Terminate main Thread.
8. Shutdown JVM.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
34 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
class Test
{
static int i=10;
public static void main(String[] args)
{
Test t=new Test();
System.out.println(t.i);//10
System.out.println(Test.i);//10
System.out.println(i);//10
}
}
For the static variables it is not required to perform initialization explicitly, JVM will
always provide default values.
Example:
class Test
{
static String s;
public static void main(String[] args)
{
System.out.println(s);//null
}
}
Example:
class Test
{
int x=10;
static int y=20;
public static void main(String[] args)
{
Test t1=new Test();
t1.x=888;
t1.y=999;
Test t2=new Test();
System.out.println(t2.x+"----"+t2.y);//10----999
}
}
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
35 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Local variables:
The local variables will be created as part of the block execution in which it is declared
and destroyed once that block execution completes. Hence the scope of the local
variables is exactly same as scope of the block in which we declared.
Example 1:
class Test
{
public static void main(String[] args)
{
int i=0;
for(int j=0;j<3;j++)
{
i=i+j;
}
}
}
Example 2:
class Test
{
public static void main(String[] args)
{
try
{
int i=Integer.parseInt("ten");
}
catch(NullPointerException e)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
36 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
}
}
}
Example:
Example:
class Test
{
public static void main(String[] args)
{
int x;
if(args.length>0)
{
x=10;
}
System.out.println(x);
//C.E:variable x might not have been initialized
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
37 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
class Test
{
public static void main(String[] args)
{
int x;
if(args.length>0)
{
x=10;
}
else
{
x=20;
}
System.out.println(x);
}
}
Output:
java Test x
10
java Test x y
10
java Test
20
Note: The only applicable modifier for local variables is final. If we are using any other
modifier we will get compile time error.
Example:
class Test
{
public static void main(String[] args)
{
Conclusions:
1. For the static and instance variables it is not required to perform initialization
explicitly JVM will provide default values. But for the local variables JVM won't
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
38 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Un Initialized arrays
Example:
class Test
{
int[] a;
public static void main(String[] args)
{
Test t1=new Test();
System.out.println(t1.a);//null
System.out.println(t1.a[0]);//R.E:NullPointerException
}
}
Instance level:
Example 1:
int[] a;
System.out.println(obj.a);//null
System.out.println(obj.a[0]);//R.E:NullPointerException
Example 2:
int[] a=new int[3];
System.out.println(obj.a);//[I@3e25a5
System.out.println(obj.a[0]);//0
Static level:
Example 1:
static int[] a;
System.out.println(a);//null
System.out.println(a[0]);//R.E:NullPointerException
Example 2:
static int[] a=new int[3];
System.out.println(a);//[I@3e25a5
System.out.println(a[0]);//0
Local level:
Example 1:
int[] a;
System.out.println(a); //C.E: variable a might not have been initialized
System.out.println(a[0]);
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
39 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Hence the following are the various possible combinations for variables
We can call or invoke this method by passing any no. Of int values including zero
number also.
Example:
class Test
{
public static void methodOne(int... x)
{
System.out.println("var-arg method");
}
public static void main(String[] args)
{
methodOne();
methodOne(10);
methodOne(10,20,30);
}
}
Output:
var-arg method
var-arg method
var-arg method
Internally var-arg parameter implemented by using single dimensional array hence
within the var-arg method we can differentiate arguments by using index.
Example:
class Test
{
public static void sum(int... x)
{
int total=0;
for(int i=0;i<x.length;i++)
{
total=total+x[i];
}
System.out.println("The sum :"+total);
}
public static void main(String[] args)
{
sum();
sum(10);
sum(10,20);
sum(10,20,30,40);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
41 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
}
}
Output:
The sum: 0
The sum: 10
The sum: 30
The sum: 100
Example:
class Test
{
public static void sum(int... x)
{
int total=0;
for(int x1 : x)
{
total=total+x1;
}
System.out.println("The sum :"+total);
}
public static void main(String[] args)
{
sum();
sum(10);
sum(10,20);
sum(10,20,30,40);
}
}
Output:
The sum: 0
The sum: 10
The sum: 30
The sum: 100
Case 1:
Which of the following var-arg method declarations are valid?
1. methodOne(int... x) (valid)
2. methodOne(int ...x) (valid)
3. methodOne(int...x) (valid)
4. methodOne(int x...) (invalid)
5. methodOne(int. ..x) (invalid)
6. methodOne(int .x..) (invalid)
Case 2:
We can mix var-arg parameter with general parameters also.
Example:
methodOne(int a,int... b) //valid
methodOne(String s,int... x) //valid
Case 3:
if we mix var-arg parameter with general parameter then var-arg parameter should be
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
42 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
methodOne(int a,int... b) //valid
methodOne(int... a,int b) //(invalid)
Case 4:
With in the var-arg method we can take only one var-arg parameter. i.e., if we are
trying to more than one var-arg parameter we will get CE.
Example:
methodOne(int... a,int... b) //(invalid)
Case 5:
class Test
{
public static void methodOne(int i)
{
System.out.println("general method");
}
public static void methodOne(int... i)
{
System.out.println("var-arg method");
}
public static void main(String[] args)
{
methodOne();//var-arg method
methodOne(10,20);//var-arg method
methodOne(10);//general method
}
}
In general var-arg method will get least priority that is if no other method matched then
only var-arg method will get the chance this is exactly same as default case inside a
switch.
Case 6:
For the var-arg methods we can provide the corresponding type array as argument.
Example:
class Test
{
{
System.out.println("var-arg method");
}
public static void main(String[] args)
{
methodOne(new int[]{10,20,30});//var-arg method
}
}
Case 7:
class Test
{
public void methodOne(int[] i){}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
43 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Case 1:
Wherever single dimensional array present we can replace with var-arg parameter.
Example:
class Test
{
public static void main(String... args)
{
System.out.println("var-arg main method");//var-arg main
method
}
}
Case 2:
Wherever var-arg parameter present we can't replace with single dimensional array.
Note :
1. methodOne(int... x)
we can call this method by passing a group of int values and x will become 1D
array. (i.e., int[] x)
2. methodOne(int[]... x)
we can call this method by passing a group of 1D int[] and x will become 2D
array. ( i.e., int[][] x)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
44 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
}
}
public static void main(String[] args)
{
int[] l={10,20,30};
int[] m={40,50};
methodOne(l,m);
}
}
Output:
10
40
Analysis:
Main Method
Example:
class Test
{}
Output:
javac Test.java
java Test R.E: NoSuchMethodError: main
At runtime JVM always searches for the main() method with the following prototype.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
45 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
If we are performing any changes to the above syntax then the code won't run and will
get Runtime exception saying NoSuchMethodError.
Even though above syntax is very strict but the following changes are acceptable to
main() method.
1. The order of modifiers is not important that is instead of public static we can
take static public.
2. We can declare string[] in any acceptable form
o String[] args
o String []args
o String args[]
3. Instead of args we can use any valid java identifier.
4. We can replace string[] with var-arg parameter.
Example: main(String... args)
5. main() method can be declared with the following modifiers.
final, synchronized, strictfp.
6. class Test {
7. static final syncronized strictfp public void main(String... ask){
8. System.out.println("valid main method");
9. }
10. }
11. output :
12. valid main method
Case 1 :
Overloading of the main() method is possible but JVM always calls string[] argument
main() method only.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
46 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
class Test
{
public static void main(String[] args)
{
System.out.println("String[] array main method"); //overloaded
methods
}
public static void main(int[] args)
{
System.out.println("int[] array main method");
}
}
Output:
String[] array main method
The other overloaded method we have to call explicitly then only it will be executed.
Case 2:
Inheritance concept is applicable for static methods including main() method
hence while executing child class if the child class doesn't contain main() method then
the parent class main() method will be executed.
Example 1:
class Parent
{
public static void main(String[] args)
{
System.out.println("parent main"); //Parent.java
}
}
class Child extends Parent
{}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
47 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Analysis:
Example 2:
class Parent
{
public static void main(String[] args)
{
System.out.println("parent main"); // Parent.java
}
}
class Child extends Parent
{
public static void main(String[] args)
{
System.out.println("Child main");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
48 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Analysis:
It seems to be overriding concept is applicable for static methods but it is not overriding
it is method hiding.
Case 1 :
Untill 1.6v if our class doesn't contain main() method then at runtime we will get
Runtime Exception saying NosuchMethodError:main
But from 1.7 version onwards instead of NoSuchMethodError we will get more
meaning full description
class Test {
}
1.6 version :
javac Test.java
java Test
RE: NoSuchMethodError:main
1.7 version :
javac Test.java
java Test
Error: main method not found in class Test, please define the main method
as
public static void main(String[] args)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
49 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Case 2 :
From 1.7 version onwards to start program execution compulsory main method should
be required, hence even though the class contains static block if main method not
available then won't be executed
class Test {
static {
System.out.println("static block");
}
}
1.6 version :
javac Test.java
java Test
output :
static block
RE: NoSuchMethodError:main
1.7 version :
javac Test.java
java Test
Error: main method not found in class Test, please define the main method
as
public static void main(String[] args)
Case 3 :
class Test {
static {
System.out.println("static block");
System.exit(0);
}
}
1.6 version :
javac Test.java
java Test
output :
static block
1.7 version :
javac Test.java
java Test
Error: main method not found in class Test, please define the main method
as
public static void main(String[] args)
Case 4 :
class Test {
static {
System.out.println("static block");
}
public static void main(String[] args) {
System.out.println("main method");
}
}
1.6 version :
javac Test.java
java Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
50 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
output :
static block
main method
1.7 version :
javac Test.java
java Test
output :
static block
main method
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
51 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
The arguments which are passing from command prompt are called command line
arguments.
The main objective of command line arguments are we can customize the behavior of
the main() method.
Example 1:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<=args.length;i++)
{
System.out.println(args[i]);
}
}
}
Output:
java Test x y z
ArrayIndexOutOfBoundsException: 3
Replace i<=args.length with i<args.length then it will run successfully.
Example 2 :
class Test
{
public static void main(String[] args)
{
String[] argh={"X","Y","Z"};
args=argh;
for(String s : args)
{
System.out.println(s);
}
}
}
Output:
java Test A B C
X
Y
Z
java Test A B
X
Y
Z
java Test
X
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
52 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Y
Z
Within the main() method command line arguments are available in the form of String
hence "+" operator acts as string concatenation but not arithmetic addition.
Example 3 :
class Test
{
public static void main(String[] args)
{
System.out.println(args[0]+args[1]);
}
}
Output:
E:\SCJP>javac Test.java
E:\SCJP>java Test 10 20
1020
Space is the separator between 2 command line arguments and if our command line
argument itself contains space then we should enclose with in double quotes.
Example 4 :
class Test
{
public static void main(String[] args)
{
System.out.println(args[0]);
}
}
Output:
E:\SCJP>javac Test.java
E:\SCJP>java Test "Sai Charan"
Sai Charan
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
53 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
54 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
1. Serializable
2. Runnable
3. Cloneable
Example:
Example:
length
name
salary nouns
age
mobileNumber
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
55 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Example:
MAX_VALUE
MIN_VALUE nouns
NORM_PRIORITY
A java bean is a simple java class with private properties and public getter and setter
methods.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
56 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
Note: For the boolean properties the getter method can be prefixed with either get or is.
But recommended to use is.
Example:
To register a listener:
To unregister a listener:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
57 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Language Fundamentals
1. Class level binary data includung static variables will be stored in method area.
2. Objects and corresponding instance variables will be stored in Heap area.
3. For every method the JVM will create a Runtime stack all method calls
performed by that Thread and corresponding local variables will be stored in
that stack.
Every entry in stack is called Stack Frame or Action Record.
4. The instruction which has to execute next will be stored in the corresponding PC
Registers.
5. Native method invocations will be stored in native method stacks.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
58 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
java.lang package
Agenda
1. Introduction
2. Java.lang.Object class
toString( ) method
hashCode() method
toString() method vs hashCode() method
equals() method
Simplified version of .equals() method
More simplified version of .equals() method
Relationship between .equals() method and ==(double equal operator)
Differences between == (double equal operator) and .equals() method?
Contract between .equals() method and hashCode() method
Clone () method
Shallow cloning
Deep Cloning
getClass() method
finalize( )
wait( ) , notify( ) , notifyAll( )
3. java.lang.String class
Importance of String constant pool (SCP)
Interning of String objects
String class constructors
Important methods of String class
Creation of our own immutable class
Final vs immutability
4. StringBuffer
Constructors
Important methods of StringBuffer
5. StringBuilder (1.5v)
StringBuffer Vs StringBuilder
String vs StringBuffer vs StringBuilder
Method chaining
6. Wrapper classes
Constructors
Wrapper class Constructor summery
7. Utility methods
valueOf() method
xxxValue() method
parseXxx() method
toString() method
8. Dancing between String, wrapper object and primitive
9. Partial Hierarchy of java.lang package
Void
10. Autoboxing and Autounboxing
Autoboxing
Autounboxing
Conclusions
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Introduction
The following are some of important classes present in java.lang package.
1. Object class
2. String class
3. StringBuffer class
4. StringBuilder class (1.5 v)
5. Wrapper Classes
6. Autoboxing and Autounboxing(1.5 v)
For writing any java program the most commonly required classes and
interfaces are encapsulated in the separate package which is nothing but
java.lang package.
It is not required to import java.lang package in our program because it is
available by default to every java program.
Java.lang.Object class:
1. For any java object whether it is predefine or customized the most commonly
required methods are encapsulated into a separate class which is nothing but
object class.
2. As object class acts as a root (or) parent (or) super for all java classes, by default
its methods are available to every java class.
3. Note : If our class doesn't extends any other class then it is the direct child class
of object
If our class extends any other class then it is the indirect child class of Object.
The following is the list of all methods present in java.lang Object class :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
toString( ) method :
1. We can use this method to get string representation of an object.
2. Whenever we are try to print any object reference internally toString() method
will be executed.
3. If our class doesn't contain toString() method then Object class toString()
method will be executed.
4. Example:
5. System.out.println(s1); => super(s1.toString());
6. Example 1:
7. class Student
8. {
9. String name;
10. int rollno;
11. Student(String name, int rollno)
12. {
13. this.name=name;
14. this.rollno=rollno;
15. }
16. public static void main(String args[]){
17. Student s1=new Student("saicharan",101);
18. Student s2=new Student("ashok",102);
19. System.out.println(s1);
20. System.out.println(s1.toString());
21. System.out.println(s2);
22. }
23. }
24. Output:
25. Student@3e25a5
26. Student@3e25a5
27. Student@19821f
28.
29. In the above program Object class toString() method got executed which is
implemented as follows.
30. public String toString() {
31. return getClass().getName() + "@" +
Integer.toHexString(hashCode());
32. }
33.
34. here getClass().getName() =>
classname@hexa_decimal_String_representation_of_hashCode
35. To provide our own String representation we have to override toString() method
in our class.
Ex : For example whenever we are try to print student reference to print his a
name and roll no we have to override toString() method as follows.
36. public String toString(){
37. return name+"........"+rollno;
38. }
39. In String class, StringBuffer, StringBuilder, wrapper classes and in all collection
classes toString() method is overridden for meaningful string representation.
Hence in our classes also highly recommended to override toString() method.
40.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
41. Example 2:
42.
43. class Test{
44. public String toString(){
45. return "Test";
46. }
47. public static void main(String[] args){
48. Integer i=new Integer(10);
49. String s=new String("ashok");
50. Test t=new Test();
51. System.out.println(i);
52. System.out.println(s);
53. System.out.println(t);
54. }
55. }
56. Output:
57. 10
58. ashok
59. Test
hashCode() method :
1. For every object jvm will generate a unique number which is nothing but
hashCode.
2. Jvm will using hashCode while saving objects into hashing related data
structures like HashSet, HashMap, and Hashtable etc.
3. If the objects are stored according to hashCode searching will become very
efficient (The most powerful search algorithm is hashing which will work based
on hashCode).
4. If we didn't override hashCode() method then Object class hashCode() method
will be executed which generates hashCode based on address of the object but it
doesn't mean hashCode represents address of the object.
5. Based on our programming requirement we can override hashCode() method to
generate our own hashcode.
6. Overriding hashCode() method is said to be proper if and only if for every object
we have to generate a unique number as hashcode for every object.
7. Example 3:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Note :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
2. We can use toString() method while printing object references and we can use
hashCode() method while saving objects into HashSet or Hashtable or HashMap.
equals() method:
1. We can use this method to check equivalence of two objects.
2. If our class doesn't contain .equals() method then object class .equals() method
will be executed which is always meant for reference comparison[address
comparison]. i.e., if two references pointing to the same object then only .equals(
) method returns true .
Example 5:
class Student
{
String name;
int rollno;
Student(String name,int rollno)
{
this.name=name;
this.rollno=rollno;
}
public static void main(String[] args){
Student s1=new Student("vijayabhaskar",101);
Student s2=new Student("bhaskar",102);
Student s3=new Student("vijayabhaskar",101);
Student s4=s1;
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s1.equals(s4));
}}
Output:
False
False
True
Diagram:
In the above program Object class .equals() method got executed which is always
meant for reference comparison that is if two references pointing to the same
object then only .equals(() method returns true.
In object class .equals() method is implemented as follows which is meant for
reference comparison.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
public boolean equals(Object obj) {
return (this == obj);
}
Based on our programming requirement we can override .equals() method for
content comparison purpose.
When ever we are overriding .equals() method we have to consider the following
things :
1. Meaning of content comparison i.e., whether we have to check the names
are equal (or) roll numbers (or) both are equal.
2. If we are passing different type of objects (heterogeneous object) our
.equals() method should return false but not ClassCastException i.e., we
have to handle ClassCastException to return false.
3. If we are passing null argument our .equals() method should return false
but not NullPointerException i.e., we have to handle
NullPointerException to return false.
4. The following is the proper way of overriding .equals() method for
content comparison in Student class.
5.
6. Example 6:
7. class Student
8. {
9. String name;
10. int rollno;
11. Student(String name,int rollno)
12. {
13. this.name=name;
14. this.rollno=rollno;
15. }
16. public boolean equals(Object obj)
17. {
18. try{
19. String name1=this.name;
20. int rollno1=this.rollno;
21. Student s2=(Student)obj;
22. String name2=s2.name;
23. int rollno2=s2.rollno;
24. if(name1.equals(name2) && rollno1==rollno2)
25. {
26. return true;
27. }
28. else return false;
29. }
30. catch(ClassCastException e)
31. {
32. return false;
33. }
34. catch(NullPointerException e)
35. {
36. return false;
37. }
38. }
39. public static void main(String[] args){
40. Student s1=new Student("vijayabhaskar",101);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
class Student {
String name;
int rollno;
Student(String name,int rollno) {
this.name=name;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
this.rollno=rollno;
}
public boolean equals(Object o) {
if(this==o)
return true;
if(o instanceof Student) {
Student s2=(Student)o;
if(name.equals(s2.name) && rollno==s2.rollno)
return true;
else
return false;
}
return false;
}
public static void main(String[] args){
Student s=new Student("vijayabhaskar",101);
Integer i=new Integer(10);
System.out.println(s.equals(i));
}
}
Output:
False
To make .equals() method more efficient we have to place the following code at the top
inside .equals() method.
if(this==o)
return true;
Diagram:
If 2 references pointing to the same object then .equals() method return true directly
without performing any content comparison this approach improves performance of the
system
StringBuffer s1 = new
String s1 = new String("ashok");
StringBuffer("ashok");
String s2 = new String("ashok");
StringBuffer s2 = new
System.out.println(s1==s2);
StringBuffer("ashok");
//false
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2) );
System.out.println(s1.equals(s2) );
//true
//false
In StringBuffer class .equals( ) is not
In String class .equals( ) is overridden for overriden for content comparision hence
content comparision hence if content is Object class .equals( ) will be executed which
same .equals( ) method returns true , is meant for reference comparision , hence if
even though ths objects are different. objects are different .equals( ) method
returns false , even though content is same.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Note : In String class , Wrapper classes and all collection classes .equals( ) method is
overriden for content comparision
1. If r1==r2 is true then r1.equals(r2) is always true i.e., if two objects are equal by
== operator then these objects are always equal by .equals( ) method also.
2. If r1==r2 is false then we can't conclude anything about r1.equals(r2) it may
return true (or) false.
3. If r1.equals(r2) is true then we can't conclude anything about r1==r2 it may
returns true (or) false.
4. If r1.equals(r2) is false then r1==r2 is always false.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
To maintain the above contract between .equals() and hashCode() methods whenever
we are overriding .equals() method compulsory we should override hashCode() method.
Violation leads to no compile time error and runtime error but it is not good
programming practice.
Example :
class Person {
String name;
int age;
Person(String name,int age) {
this.name=name;
this.age=age;
}
public boolean equals(Object o) {
if(this==o)
return true;
if(o instanceof Person) {
Person p2=(Person)o;
if(name.equals(p2.name) && age==p2.age)
return true;
else
return false;
}
return false;
}
public static void main(String[] args){
Person p1=new Person("vijayabhaskar",101);
Person p2=new Person("vijayabhaskar",101);
Integer i=new Integer(102);
System.out.println(p1.equals(p2));
System.out.println(p1.equals(i));
}
}
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
True
False
Which of the following is appropriate way of overriding hashCode() method?
Diagram:
Based on whatever the parameters we override ".equals() method" we should use same
parameters while overriding hashCode() method also.
Note: in all wrapper classes, in string class, in all collection classes .equals() method is
overridden for content comparison in our classes also it is highly recommended to
override .equals() method.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
34. }
35. public String toString() {
36. return i+"";
37. }
38. public static void main(String[] args) {
39. Test t1=new Test(10);
40. Test t2=t1;
41. System.out.println(t1.hashCode());//10
42. System.out.println(t2.hashCode());//10
43. System.out.println(t1==t2);//true
44.
45. }
46. }
47.
48. If == operator returns false then their hash codes(may be same (or) may be
different) must be different.(invalid)
49. Example:
50.
51. class Test {
52. int i;
53. Test(int i) {
54. this.i=i;
55. }
56. public int hashCode() {
57. return i;
58. }
59. public String toString() {
60. return i+"";
61. }
62. public static void main(String[] args) {
63. Test t1=new Test(10);
64. Test t2=new Test(10);
65. System.out.println(t1.hashCode());//10
66. System.out.println(t2.hashCode());//10
67. System.out.println(t1==t2);//false
68. }
69. }
70. If hashcodes of 2 objects are equal then these objects are always equal by ==
operator also.(invalid)
Clone () method:
1. The process of creating exactly duplicate object is called cloning.
2. The main objective of cloning is to maintain backup purposes.(i.e., if something
goes wrong we can recover the situation by using backup copy.)
3. We can perform cloning by using clone() method of Object class.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram:
Shallow cloning:
1. The process of creating bitwise copy of an object is called Shallow Cloning .
2. If the main object contain any primitive variables then exactly duplicate copies
will be created in cloned object.
3. If the main object contain any reference variable then the corresponding object
won't be created just reference variable will be created by pointing to old
contained object.
4. By using main object reference if we perform any change to the contained object
then those changes will be reflected automatically to the cloned object , by
default Object class clone( ) meant for Shallow Cloning
5. class Cat {
6. int j ;
7. Cat(int j) {
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
8. this.j=j ;
9. }
10. }
11.
12. class Dog implements Clonable {
13. Cat c ;
14. int i ;
15. Dog(Cat c , int i) {
16. this.c=c ;
17. this.i=i ;
18. }
19. public Object clone( ) throws CloneNotSupportedException {
20. return super.clone( );
21. }
22. }
23.
24. class ShallowClone {
25. public static void main(String[ ] ar) {
26. Cat c=new Cat(20) ;
27. Dog d1=new Dog(c , 10) ;
28. System.out.println(d1.i +......+d1.j); // 10......20
29.
30. Dog d2=(Dog)d1.clone( ) ;
31. d1.i=888 ;
32. d1.c.j=999 ;
33. System.out.println(d2.i +......+d2.j); // 10......999
34. }
35. }
36.
37. Shallow cloning is the best choice , if the Object contains only primitive values.
38. In Shallow cloning by using main object reference , if we perform any change to
the contained object then those changes will be reflected automatically in cloned
copy.
39. To overcome this problem we should go for Deep cloning.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example:
Diagram:
Deep Cloning :
1. The process of creating exactly independent duplicate object(including contained
objects also) is called deep cloning.
2. In Deep cloning , if main object contain any reference variable then the
corresponding Object copy will also be created in cloned object.
3. Object class clone( ) method meant for Shallow Cloning , if we want Deep
cloning then the programmer is responsible to implement by overriding clone( )
method.
4. class Cat {
5. int j ;
6. Cat(int j) {
7. this.j=j ;
8. }
9. }
10.
11. class Dog implements Clonable {
12. Cat c ;
13. int i ;
14. Dog(Cat c , int i) {
15. this.c=c ;
16. this.i=i ;
17. }
18. public Object clone( ) throws CloneNotSupportedException {
19. Cat c1=new Cat(c.j) ;
20. Dog d1=new Dog(c1 , i) ;
21. return d1 ;
22. }
23. }
24.
25. class DeepClone {
26. public static void main(String[ ] ar) {
27. Cat c=new Cat(20) ;
28. Dog d1=new Dog(c , 10) ;
29. System.out.println(d1.i +......+d1.c.j); // 10......20
30.
31. Dog d2=(Dog)d1.clone( ) ;
32. d1.i=888 ;
33. d1.c.j=999 ;
34. System.out.println(d2.i +......+d2.c.j); // 10......20
35. }
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
36. }
37.
38. In Deep cloning by using main Object reference if we perform any change to the
contained Object those changes won't be reflected to the cloned object.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
getClass() method :
This method returns runtime class definition of an object.
Example :
finalize( ) :
Just before destroying an object GC calls finalize( ) method to perform CleanUp
activities .
java.lang.String class :
Case 1:
StringBuffer sb=new
StringBuffer("bhaskar");
sb.append("software");
System.out.println(sb);
String s=new String("bhaskar");
//bhaskarsoftware
s.concat("software");
System.out.println(s);//bhaskar Once we created a StringBuffer
Once we create a String object we can't perform any object we can perform any
changes in the existing object. If we are try to changes in the existing object.
perform any changes with those changes a new This behavior is called mutability
object will be created. This behavior is called of the StringBuffer object.
immutability of the String object. Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Case 2 :
StringBuffer sb1=new
StringBuffer("ashok");
String s1=new String("ashok"); StringBuffer sb2=new
String s2=new String("ashok"); StringBuffer("ashok");
System.out.println(s1==s2);//false System.out.println(sb1==sb2);//false
System.out.println(s1.equals(s2));/ System.out.println(sb1.equals(sb2));//
/true false
In String class .equals() method is In StringBuffer class .equals() method is not
overridden for content comparison hence overridden for content comparison hence
if the content is same .equals() method Object class .equals() method got executed
returns true even though objects are which is always meant for reference
different. comparison. Hence if objects are different
.equals() method returns false even though
content is same.
Case 3 :
String s="bhaskar";
String s=new String("bhaskar");
In this case two objects will be created one is on the heap the In this case only one
object will be created
other one is SCP(String constant pool) and s is always pointing
to heap object. in SCP and s is always
referring that object.
Diagram:
Diagram :
Note :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
1. Object creation in SCP is always optional 1st JVM will check is any object
already created with required content or not. If it is already available then it will
reuse existing object instead of creating new object. If it is not already there then
only a new object will be created. Hence there is no chance of existing 2 objects
with same content on SCP that is duplicate objects are not allowed in SCP.
2. Garbage collector can't access SCP area hence even though object doesn't have
any reference still that object is not eligible for GC if it is present in SCP.
3. All SCP objects will be destroyed at the time of JVM shutdown automatically.
Example 1:
String s1=new String("bhaskar");
String s2=new String("bhaskar");
String s3="bhaskar";
String s4="bhaskar";
Note :
When ever we are using new operator compulsory a new object will be created on the
Heap . There may be a chance of existing two objects with same content on the heap but
there is no chance of existing two objects with same content on SCP . i.e., duplicate
objects possible in the heap but not in SCP .
Diagram :
Example 2:
String s=new String("bhaskar");
s.concat("software");
s=s.concat("solutions");
s="bhaskarsoft";
Diagram :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
21 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
For every String Constant one object will be created in SCP. Because of runtime
operation if an object is required to create compulsory that object should be placed on
the heap but not SCP.
Example 3:
String s1=new String("spring");
s1.concat("fall");
s1=s1+"winter";
String s2=s1.concat("summer");
System.out.println(s1);
System.out.println(s2);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram :
Example:
class StringDemo
{
public static void main(String[] args)
{
String s1=new String("you cannot change me!");
String s2=new String("you cannot change me!");
System.out.println(s1==s2);//false
String s3="you cannot change me!";
System.out.println(s1==s3);//false
String s4="you cannot change me!";
System.out.println(s3==s4);//true
String s5="you cannot "+"change me!";
System.out.println(s3==s5);//true
String s6="you cannot ";
String s7=s6+"change me!";
System.out.println(s3==s7);//false
final String s8="you cannot ";
String s9=s8+"change me!";
System.out.println(s3==s9);//true
System.out.println(s6==s8);//true
}
}
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
23 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
1. In our program if any String object is required to use repeatedly then it is not
recommended to create multiple object with same content it reduces
performance of the system and effects memory utilization.
2. We can create only one copy and we can reuse the same object for every
requirement. This approach improves performance and memory utilization we
can achieve this by using "scp".
3. In SCP several references pointing to same object the main disadvantage in this
approach is by using one reference if we are performing any change the
remaining references will be impacted. To overcome this problem sun people
implemented immutability concept for String objects.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
24 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
4. According to this once we creates a String object we can't perform any changes
in the existing object if we are trying to perform any changes with those changes
a new String object will be created hence immutability is the main disadvantage
of scp.
FAQS :
1. What is the main difference between String and StringBuilder?
2. What is the main difference between String and StringBuffer ?
3. Other than immutability and mutability is there any other difference between
String and StringBuffer ?
Instead of creating a separate object for every requirement we can create only
one object and we can reuse same object for every requirement. This approach
improves performance and memory utilization.
In SCP as several references pointing to the same object by using one reference if
we are performing any changes the remaining references will be inflected. To
prevent this compulsory String objects should be immutable. That is
immutability is the disadvantage of SCP.
9. Why SCP like concept available only for the String but not for the StringBuffer?
As String object is the most commonly used object sun people provided a
specially designed memory area like SCP to improve memory utilization and
performance.
But StringBuffer object is not commonly used object hence specially designed
memory area is not at all required.
10. Why String objects are immutable where as StringBuffer objects are mutable?
In the case of String as several references pointing to the same object, by using
one reference if we are allowed perform the change the remaining references will
be impacted. To prevent this once we created a String object we can't perform
any change in the existing object that is immutability is only due to SCP.
But in the case of StringBuffer for every requirement we are creating a separate
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
25 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
object will be created by using one reference if we are performing any change in
the object the remaining references won't be impacted hence immutability
concept is not require for the StringBuffer.
11. Similar to String objects any other objects are immutable in java?
Yes.
13. Explain the process of creating our own immutable class with an example?
14. What is the difference between final and immutability?
15. What is interning of String objects?
class StringDemo {
public static void main(String[] args) {
String s1=new String("bhaskar");
String s2=s1.intern();
System.out.println(s1==s2); //false
String s3="bhaskar";
System.out.println(s2==s3);//true
}
}
Diagram:
If the corresponding object is not there in SCP then intern() method itself will create
that object and returns it.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
26 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example 2:
class StringDemo {
public static void main(String[] args) {
String s1=new String("bhaskar");
String s2=s1.concat("software");
String s3=s2.intern();
String s4="bhaskarsoftware";
System.out.println(s3==s4);//true
}
}
Diagram 2:
To create an equivalent String object for the given String literal on the heap.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
27 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example:
class StringDemo {
public static void main(String[] args) {
char[] ch={'a','b','c'} ;
String s=new String(ch);
System.out.println(ch);//abc
}
}
Example:
class StringDemo {
public static void main(String[] args) {
byte[] b={100,101,102};
String s=new String(b);
System.out.println(s);//def
}
}
Important methods of String class:
1. public char charAt(int index);
Example:
class StringDemo {
public static void main(String[] args) {
String s="ashok";
System.out.println(s.charAt(3));//o
System.out.println(s.charAt(100));// RE :
StringIndexOutOfBoundsException
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
28 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
The overloaded "+" and "+=" operators also meant for concatenation purpose
only.
Example:
class StringDemo {
public static void main(String[] args) {
String s="java";
System.out.println(s.equals("JAVA"));//false
System.out.println(s.equalsIgnoreCase("JAVA"));//true
}
}
Example:
class StringDemo {
public static void main(String[] args) {
String s="ashoksoft";
System.out.println(s.substring(5));//soft
}
}
Example:
class StringDemo {
public static void main(String[] args) {
String s="ashoksoft";
System.out.println(s.substring(5));//soft
System.out.println(s.substring(3,7));//okso
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
29 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example:
class StringDemo {
public static void main(String[] args) {
String s="jobs4times";
System.out.println(s.length());//10
//System.out.println(s.length);//compile time error
}
}
/*
CE :
StringDemo.java:7: cannot find symbol
symbol : variable length
location: class java.lang.String
*/
Note: length is the variable applicable for arrays where as length() method is
applicable for String object.
Example:
class StringDemo {
public static void main(String[] args) {
String s="ababab";
System.out.println(s.replace('a','b'));//bbbbbb
}
}
Example:
class StringDemo {
public static void main(String[] args) {
String s="ASHOK";
System.out.println(s.toLowerCase());//ashok
}
}
Example :
class StringDemo {
public static void main(String[] args) {
String s="ashok";
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
30 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
System.out.println(s.toUpperCase());//ASHOK
}
}
We can use this method to remove blank spaces present at beginning and end of
the string but not blank spaces present at middle of the String.
Example:
class StringDemo {
public static void main(String[] args) {
String s=" sai charan ";
System.out.println(s.trim());//sai charan
}
}
Example:
class StringDemo {
public static void main(String[] args) {
String s="saicharan";
System.out.println(s.indexOf('c')); // 3
System.out.println(s.indexOf('z')); // -1
}
}
Example:
class StringDemo {
public static void main(String[] args) {
String s="arunkumar";
System.out.println(s.lastIndexOf('a'));//7
System.out.println(s.indexOf('z'));//-1
}
}
Note :
Because runtime operation if there is a change in content with those changes a new
object will be created only on the heap but not in SCP.
If there is no change in content no new object will be created the same object will be
reused.
This rule is same whether object present on the Heap or SCP
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
31 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example 1 :
class StringDemo {
public static void main(String[] args) {
String s1="bhaskar";
String s2=s1.toUpperCase();
String s3=s1.toLowerCase();
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true
}
}
Diagram :
Example 2:
class StringDemo {
public static void main(String[] args) {
String s1="bhaskar";
String s2=s1.toString();
System.out.println(s1==s2);//true
}
}
Diagram :
class StringDemo {
public static void main(String[] args) {
String s1=new String("ashok");
String s2=s1.toString();
String s3=s1.toUpperCase();
String s4=s1.toLowerCase();
String s5=s1.toUpperCase();
String s6=s3.toLowerCase();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
32 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
System.out.println(s1==s6); //false
System.out.println(s3==s5); //false
Immutable program :
Once we create a CreateImmutable object we can't perform any changes in the existing
object , if we are trying to perform any changes with those changes a new object will be
created.
If there is no chance in the content then existing object will be reused
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
33 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Final vs immutability :
1. final modifier applicable for variables where as immutability concept applicable
for objects
2. If reference variable declared as final then we can't perform reassignment for
the reference variable it doesn't mean we can't perform any change in that
object.
3. That is by declaring a reference variable as final we won't get any immutability
nature .
4. final and immutability both are different concepts .
Example:
class Test
{
public static void main(String[] args)
{
final StringBuffer sb=new StringBuffer("ashok");
sb.append("software");
System.out.println(sb);//ashoksoftware
sb=new StringBuffer("solutions");//C.E: cannot assign a
value to final variable sb
}
}
In the above example even though "sb" is final we can perform any type of change in
the corresponding object. That is through final keyword we are not getting any
immutability nature.
StringBuffer :
1. If the content will change frequently then never recommended to go for String
object because for every change a new object will be created internally.
2. To handle this type of requirement we should go for StringBuffer concept.
3. The main advantage of StringBuffer over String is, all required changes will be
performed in the existing object only instead of creating new object.(won't create
new object)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
34 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Constructors :
1. StringBuffer sb=new StringBuffer();
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
System.out.println(sb.capacity());//16
sb.append("abcdefghijklmnop");
System.out.println(sb.capacity());//16
sb.append("q");
System.out.println(sb.capacity());//34
}
}
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer(19);
System.out.println(sb.capacity());//19
}
}
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("ashok");
System.out.println(sb.capacity());//21
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
35 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("saiashokkumarreddy");
System.out.println(sb.length());//18
System.out.println(sb.capacity());//34
System.out.println(sb.charAt(14));//e
System.out.println(sb.charAt(30));//RE :
StringIndexOutofBoundsException
}
}
To replace the character locating at specified index with the provided character.
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("ashokkumar");
sb.setCharAt(8,'A');
System.out.println(sb);
}
}
5. public StringBuffer append(String s);
6. public StringBuffer append(int i);
7. public StringBuffer append(long l);
8. public StringBuffer append(boolean b); All these are overloaded
methods.
9. public StringBuffer append(double d);
10. public StringBuffer append(float f);
11. public StringBuffer append(int index, Object o);
12. Example:
13. class StringBufferDemo {
14. public static void main(String[] args) {
15. StringBuffer sb=new StringBuffer();
16. sb.append("PI value is :");
17. sb.append(3.14);
18. sb.append(" this is exactly ");
19. sb.append(true);
20. System.out.println(sb);//PI value is :3.14 this is exactly
true
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
36 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
21. }
22. }
23.
24. public StringBuffer insert(int index,String s);
25. public StringBuffer insert(int index,int i);
26. public StringBuffer insert(int index,long l);
27. public StringBuffer insert(int index,double d); All are
overloaded methods
28. public StringBuffer insert(int index,boolean b);
29. public StringBuffer insert(int index,float f);
30. public StringBuffer insert(int index, Object o);
31. To insert at the specified location.
32. Example :
33. class StringBufferDemo {
34. public static void main(String[] args) {
35. StringBuffer sb=new StringBuffer("abcdefgh");
36. sb.insert(2, "xyz");
37. sb.insert(11,"9");
38. System.out.println(sb);//abxyzcdefgh9
39. }
40. }
41. public StringBuffer delete(int begin,int end);
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("saicharankumar");
System.out.println(sb);//saicharankumar
sb.delete(6,13);
System.out.println(sb);//saichar
sb.deleteCharAt(5);
System.out.println(sb);//saichr
}
}
Example:
class StringBufferDemo {
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
37 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
To deallocate the extra allocated free memory such that capacity and size are
equal.
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer(1000);
System.out.println(sb.capacity());//1000
sb.append("ashok");
System.out.println(sb.capacity());//1000
sb.trimToSize();
System.out.println(sb.capacity());//5
}
}
Example:
class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
System.out.println(sb.capacity());//16
sb.ensureCapacity(1000);
System.out.println(sb.capacity());//1000
}
}
Note :
Every method present in StringBuffer is syncronized hence at a time only one thread is
allowed to operate on StringBuffer object , it increases waiting time of the threads and
creates performence problems , to overcome this problem we should go for
StringBuilder.
StringBuilder (1.5v)
1. Every method present in StringBuffer is declared as synchronized hence at a
time only one thread is allowed to operate on the StringBuffer object due to this,
waiting time of the threads will be increased and effects performance of the
system.
2. To overcome this problem sun people introduced StringBuilder concept in 1.5v.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
38 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
StringBuffer Vs StringBuilder
StringBuffer StringBuilder
Every method present in StringBuffer is No method present in StringBuilder is
synchronized. synchronized.
At a time only one thread is allow to
At a time Multiple Threads are allowed to
operate on the StringBuffer object
operate simultaneously on the StringBuilder
hence StringBuffer object is Thread
object hence StringBuilder is not Thread safe.
safe.
It increases waiting time of the Thread Threads are not required to wait and hence
and hence relatively performance is low. relatively performance is high.
Introduced in 1.0 version. Introduced in 1.5 versions.
Method chaining:
1. For most of the methods in String, StringBuffer and StringBuilder the return
type is same type only. Hence after applying method on the result we can call
another method which forms method chaining.
2. Example:
3. sb.m1().m2().m3()...............
4. In method chaining all methods will be evaluated from left to right.
5. Example:
6. class StringBufferDemo {
7. public static void main(String[] args) {
8. sb.append("ashok").insert(5,"arunkumar").delete(11,13)
9. .reverse().append("solutions").insert(18,"abcdf").reverse();
10. System.out.println(sb); // snofdcbaitulosashokarunkur
11. }
12. }
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
39 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Wrapper classes :
1. To wrap primitives into object form so that we can handle primitives also just
like objects.
2. To define several utility functions which are required for the primitives.
Constructors :
1. All most all wrapper classes define the following 2 constructors one can take
corresponding primitive as argument and the other can take String as argument.
2. Example:
3. 1) Integer i=new Integer(10);
4. 2) Integer i=new Integer("10");
5. If the String is not properly formatted i.e., if it is not representing number then
we will get runtime exception saying "NumberFormatException".
6. Example:
7. class WrapperClassDemo {
8. public static void main(String[] args)throws Exception {
9. Integer i=new Integer("ten");
10. System.out.println(i);//NumberFormatException
11. }
12. }
13. Float class defines 3 constructors with float, String and double arguments.
14. 1) Float f=new Float (10.5f);
15. 2) Float f=new Float ("10.5f");
16. 3) Float f=new Float(10.5);
17. 4) Float f=new Float ("10.5");
18. Character class defines only one constructor which can take char primitive as
argument there is no String argument constructor.
19. Character ch=new Character('a');//valid
20. Character ch=new Character("a");//invalid
21. Boolean class defines 2 constructors with boolean primitive and String
arguments.
If we want to pass boolean primitive the only allowed values are true, false where
case should be lower case.
22. Example:
23. Boolean b=new Boolean(true);
24. Boolean b=new Boolean(false);
25. //Boolean b1=new Boolean(True);//C.E
26. //Boolean b=new Boolean(False);//C.E
27. //Boolean b=new Boolean(TRUE);//C.E
28. If we are passing String argument then case is not important and content is not
important. If the content is case insensitive String of true then it is treated as true
in all other cases it is treated as false.
29. Example 1:
30. class WrapperClassDemo {
31. public static void main(String[] args)throws Exception {
32. Boolean b1=new Boolean("true");
33. Boolean b2=new Boolean("True");
34. Boolean b3=new Boolean("false");
35. Boolean b4=new Boolean("False");
36. Boolean b5=new Boolean("ashok");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
40 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Character
Note :
1) In all wrapper classes toString() method is overridden to return its content.
2) In all wrapper classes .equals() method is overridden for content compression.
Example :
Integer i1 = new Integer(10) ;
Integer i2 = new Integer(10);
System.out.println(i1); //10
System.out.println(i1.equals(i2)); //true
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
41 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Utility methods :
1. valueOf() method.
2. XXXValue() method.
3. parseXxx() method.
4. toString() method.
valueOf() method :
We can use valueOf() method to create wrapper object for the given primitive or String
this method is alternative to constructor.
Form 1:
Every wrapper class except Character class contains a static valueOf() method to create
wrapper object for the given String.
Form 2:
Every integral type wrapper class (Byte, Short, Integer, and Long) contains the
following valueOf() method to convert specified radix string to wrapper object.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
42 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example:
class WrapperClassDemo {
public static void main(String[] args) {
Integer i=Integer.valueOf("100",2);
System.out.println(i);//4
}
}
Analysis:
Form 3 :
Every wrapper class including Character class defines valueOf() method to convert
primitive to wrapper object.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
43 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram:
xxxValue() method :
We can use xxxValue() methods to convert wrapper object to primitive.
Every number type wrapper class (Byte, Short, Integer, Long, Float, Double) contains
the following 6 xxxValue() methods to convert wrapper object to primitives.
charValue() method:
Character class contains charValue() method to convert Character object to char
primitive.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
44 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
booleanValue() method:
Boolean class contains booleanValue() method to convert Boolean object to boolean
primitive.
Diagram :
parseXxx() method :
We can use this method to convert String to corresponding primitive.
Form1 :
Every wrapper class except Character class contains a static parseXxx() method to
convert String to corresponding primitive.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
45 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Form 2:
integral type wrapper classes(Byte, Short, Integer, Long) contains the following
parseXxx() method to convert specified radix String form to corresponding primitive.
Diagram :
toString() method :
We can use toString() method to convert wrapper object (or) primitive to String.
Form 1 :
1. Every wrapper class (including Character class) contains the above toString()
method to convert wrapper object to String.
2. It is the overriding version of Object class toString() method.
3. Whenever we are trying to print wrapper object reference internally this
toString() method only executed.
Example:
class WrapperClassDemo {
public static void main(String[] args) {
Integer i=Integer.valueOf("10");
System.out.println(i);//10
System.out.println(i.toString());//10
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
46 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Form 2:
Every wrapper class contains a static toString() method to convert primitive to String.
Form 3:
Integer and Long classes contains the following static toString() method to convert the
primitive to specified radix String form.
Form 4:
Example:
class WrapperClassDemo {
public static void main(String[] args) {
String s1=Integer.toBinaryString(7);
String s2=Integer.toOctalString(10);
String s3=Integer.toHexString(20);
String s4=Integer.toHexString(10);
System.out.println(s1);//111
System.out.println(s2);//12
System.out.println(s3);//14
System.out.println(s4);//a
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
47 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
48 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
1. String, StringBuffer, StringBuilder and all wrapper classes are final classes.
2. The wrapper classes which are not child class of Number are Boolean and
Character.
3. The wrapper classes which are not direct class of Object are Byte, Short, Integer,
Long, Float, Double.
4. Sometimes we can consider Void is also as wrapper class.
5. In addition to String objects , all wrapper class objects also immutable in java.
Void :
1. Sometimes Void class is also considered as wrapper class.
2. Void is class representation of void java keyword.
3. Void class is the direct child class of Object and it doesn't contains any method
and it contains only one static variable Void.TYPE
4. we can use Void class in reflections
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
49 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example 1 :
Program 1 :
Program 2:
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Boolean b=new Boolean(true);
if(b) {
System.out.println("hello");
}
}
}
Output:
hello
Example 2:
Program 1:
Program 2:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
ArrayList l=new ArrayList();
Integer i=new Integer(10);
l.add(i);
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
50 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
But from 1.5 version onwards we can provide primitive value in the place of wrapper
and wrapper object in the place of primitive all required conversions will be performed
automatically by compiler. These automatic conversions are called Autoboxing and
Autounboxing.
Autoboxing :
Automatic conversion of primitive to wrapper object by compiler is called Autoboxing.
Example :
Integer i=10;
[compiler converts "int" to "Integer" automatically by Autoboxing]
Integer i=Integer.valueOf(10);
That is internally Autoboxing concept is implemented by using valueOf() method.
Autounboxing :
automatic conversion of wrapper object to primitive by compiler is called
Autounboxing.
Example:
Integer I=new Integer(10);
Int i=I;
[ compiler converts "Integer" to "int" automatically by Autounboxing ]
Int i=I.intValue();
That is Autounboxing concept is internally implemented by using xxxValue() method.
Diagram :
Example :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
51 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Note:
From 1.5 version onwards we can use primitives and wrapper objects interchangly the
required conversions will be performed automatically by compiler.
Example 1:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
static Integer I=0;
public static void main(String[] args) {
int i=I;
System.out.println(i);//0
}
}
Example 2 :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
52 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example 3:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=10;
Integer y=x;
++x;
System.out.println(x);//11
System.out.println(y);//10
System.out.println(x==y);//false
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
53 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram :
Note :
All wrapper objects are immutable that is once we created a wrapper object we can't
perform any changes in the existing object.
If we are trying to perform any changes with those changes a new object will be created.
Study M aterial
E xamples
Roll
Demons tratio n
I nterfa ce
Proper
M aterial
Example 1:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=new Integer(10);
Integer y=new Integer(10);
System.out.println(x==y);//false
}
}
Diagram :
Example 2 :
import java.util.*;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
54 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=new Integer(10);
Integer y=10;
System.out.println(x==y);//false
}
}
Diagram:
Example 3:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=new Integer(10);
Integer y=x;
System.out.println(x==y);//true
}
}
Diagram :
Example 4 :
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=10;
Integer y=10;
System.out.println(x==y);//true
}
}
Diagram:
Example 5 :
import java.util.*;
class AutoBoxingAndUnboxingDemo {
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
55 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Example 6 :
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void main(String[] args) {
Integer x=1000;
Integer y=1000;
System.out.println(x==y);//false
}
}
Diagram :
Diagram :
Conclusions :
1. To implement the Autoboxing concept in every wrapper class a buffer of objects
will be created at the time of class loading.
2. By Autoboxing if an object is required to create 1st JVM will check whether that
object is available in the buffer or not.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
56 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
3. If it is available then JVM will reuse that buffered object instead of creating new
object.
4. If the object is not available in the buffer then only a new object will be created.
This approach improves performance and memory utilization.
Byte Always
Short -128 To 127
Integer -128 To 127
Long -128 To 127
Character 0 To 127
Boolean Always
Examples :
Examples :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
57 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Note:
Widening:
Converting a lower data type into a higher data type is called widening.
Example:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void methodOne(long l) {
System.out.println("widening");
}
public static void methodOne(Integer i) {
System.out.println("autoboxing");
}
public static void main(String[] args) {
int x=10;
methodOne(x);
}
}
Output:
Widening
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
58 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
}
Output:
Widening
In general var-arg method will get least priority i.e., if no other method matched
then only var-arg method will get chance. It is exactly same as "default" case
inside a switch.
Note : While resolving overloaded methods compiler will always gives the
presidence in the following order :
1. Widening
2. Autoboxing
3. Var-arg method.
Case 4:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void methodOne(Long l) {
System.out.println("Long");
}
public static void main(String[] args) {
int x=10;
methodOne(x);
}
}
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
59 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram:
imp :
Widening followed by Autoboxing is not allowed in java but Autoboxing
followed by widening is allowed.
Case 5:
import java.util.*;
class AutoBoxingAndUnboxingDemo {
public static void methodOne(Object o) {
System.out.println("Object");
}
public static void main(String[] args) {
int x=10;
methodOne(x);
}
}
Output:
Object
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
60 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir java.lang.package
Diagram :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
61 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
File IO
Agenda:
1. File
2. FileWriter
3. FileReader
4. BufferedWriter
5. BufferedReader
6. PrintWriter
File:
File f=new File("abc.txt");
This line 1st checks whether abc.txt file is already available (or) not if it is already
available then "f" simply refers that file.
If it is not already available then it won't create any physical file just creates a java File
object represents name of the file.
Example:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
File f=new File("cricket.txt");
System.out.println(f.exists());//false
f.createNewFile();
System.out.println(f.exists());//true
}
}
output :
1st run :
false
true
2nd run :
true
true
A java File object can represent a directory also.
Example:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Note: in UNIX everything is a file, java "file IO" is based on UNIX operating system
hence in java also we can represent both files and directories by File object only.
Requirement: Write code to create a file named with demo.txt in current working
directory.
Program:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
File f=new File("demo.txt");
f.createNewFile();
}
}
Requirement: Write code to create a directory named with SaiCharan123 in current
working directory and create a file named with abc.txt in that directory.
Program:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{
File f1=new File("SaiCharan123");
f1.mkdir();
File f2=new File("SaiCharan123","abc.txt");
f2.createNewFile();
}
}
Requirement: Write code to create a file named with demo.txt present in c:\saicharan
folder.
Program:
import java.io.*;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
class FileDemo
{
public static void main(String[] args)throws IOException
{
File f=new File("c:\\saiCharan","demo.txt");
f.createNewFile();
}
}
1. boolean exists();
Returns true if the physical file or directory available.
2. boolean createNewFile();
This method 1st checks whether the physical file is already available or not if it is
already available then this method simply returns false without creating any
physical file.
If this file is not already available then it will create a new file and returns true
3. boolean mkdir();
This method 1st checks whether the directory is already available or not if it is
already available then this method simply returns false without creating any
directory.
If this directory is not already available then it will create a new directory and
returns true
4. boolean isFile();
Returns true if the File object represents a physical file.
5. boolean isDirectory();
Returns true if the File object represents a directory.
6. String[] list();
It returns the names of all files and subdirectories present in the specified
directory.
7. long length();
Returns the no of characters present in the file.
8. boolean delete();
To delete a file or directory.
Requirement: Write a program to display the names of all files and directories present
in c:\\charan_classes.
Program:
import java.io.*;
class FileDemo
{
public static void main(String[] args)throws IOException
{ int count=0;
File f=new File("c:\\charan_classes");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
String[] s=f.list();
for(String s1=s) {
count++;
System.out.println(s1);
}
System.out.println("total number : "+count);
}
}
}
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
FileWriter:
Constructors:
Instead of overriding if we want append operation then we should go for the following 2
constructors.
If the specified physical file is not already available then these constructors will create
that file.
Methods:
1. write(int ch);
To write a single character to the file.
2. write(char[] ch);
To write an array of characters to the file.
3. write(String s);
To write a String to the file.
4. flush();
To give the guarantee the total data include last character also written to the file.
5. close();
To close the stream.
Example:
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args)throws IOException
{
FileWriter fw=new FileWriter("cricket.txt",true);
fw.write(99);//adding a single character
fw.write("haran\nsoftware solutions");
fw.write("\n");
char[] ch={'a','b','c'};
fw.write(ch);
fw.write("\n");
fw.flush();
fw.close();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
}
}
Output:
charan
software solutions
abc
Note :
The main problem with FileWriter is we have to insert line separator manually ,
which is difficult to the programmer. ('\n')
And even line separator varing from system to system.
FileReader:
By using FileReader object we can read character data from the file.
Constructors:
Methods:
1. int read();
It attempts to read next character from the file and return its Unicode value. If
the next character is not available then we will get -1.
2. int i=fr.read();
3. System.out.println((char)i);
As this method returns unicode value , while printing we have to perform type
casting.
7. void close();
Approach 1:
import java.io.*;
class FileReaderDemo
{
public static void main(String[] args)throws IOException
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
FileReader fr=new FileReader("cricket.txt");
int i=fr.read(); //more amount of data
while(i!=-1)
{
System.out.print((char)i);
i=fr.read();
}
}
}
Output:
Charan
Software solutions
ABC
Approach 2:
import java.io.*;
class FileReaderDemo
{
public static void main(String[] args)throws IOException
{
File f=new File("cricket.txt");
FileReader fr=new FileReader(f);
char[] ch=new char[(int)f.length()]; //small
amount of data
fr.read(ch);
for(char ch1:ch)
{
System.out.print(ch1);
}
}
}
Output:
XYZ
Software solutions.
Usage of FileWriter and FileReader is not recommended because :
BufferedWriter:
By using BufferedWriter object we can write character data to the file.
Constructors:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Note: BufferedWriter never communicates directly with the file it should communicates
via some writer object.
Methods:
1. write(int ch);
2. write(char[] ch);
3. write(String s);
4. flush();
5. close();
6. newline();
Inserting a new line character to the file.
Ans : 4
Example:
import java.io.*;
class BufferedWriterDemo
{
public static void main(String[] args)throws IOException
{
FileWriter fw=new FileWriter("cricket.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write(100);
bw.newLine();
char[] ch={'a','b','c','d'};
bw.write(ch);
bw.newLine();
bw.write("SaiCharan");
bw.newLine();
bw.write("software solutions");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
bw.flush();
bw.close();
}
}
Output:
d
abcd
SaiCharan
software solutions
Note : When ever we are closing BufferedWriter automatically underlying writer will be
closed and we are not close explicitly.
BufferedReader:
This is the most enhanced(better) Reader to read character data from the file.
Constructors:
Note: BufferedReader can not communicate directly with the File it should
communicate via some Reader object.
The main advantage of BufferedReader over FileReader is we can read data line by line
instead of character by character.
Methods:
1. int read();
2. int read(char[] ch);
3. String readLine();
It attempts to read next line and return it , from the File. if the next line is not
available then this method returns null.
4. void close();
Example:
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("cricket.txt");
BufferedReader br=new BufferedReader(fr);
String line=br.readLine();
while(line!=null)
{
System.out.println(line);
line=br.readLine();
}
br.close();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
}
}
Note:
PrintWriter:
This is the most enhanced Writer to write text data to the file.
By using FileWriter and BufferedWriter we can write only character data to the
File but by using PrintWriter we can write any type of data to the File.
Constructors:
PrintWriter can communicate either directly to the File or via some Writer object also.
Methods:
1. write(int ch);
2. write (char[] ch);
3. write(String s);
4. flush();
5. close();
6. print(char ch);
7. print (int i);
8. print (double d);
9. print (boolean b);
10. print (String s);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Example:
import java.io.*;
class PrintWriterDemo {
public static void main(String[] args)throws IOException
{
FileWriter fw=new FileWriter("cricket.txt");
PrintWriter out=new PrintWriter(fw);
out.write(100);
out.println(100);
out.println(true);
out.println('c');
out.println("SaiCharan");
out.flush();
out.close();
}
}
Output:
d100
true
c
SaiCharan
What is the difference between write(100) and print(100)?
In the case of write(100) the corresponding character "d" will be added to the File but
in the case of print(100) "100" value will be added directly to the File.
Note 1:
1. The most enhanced Reader to read character data from the File is
BufferedReader.
2. The most enhanced Writer to write character data to the File is PrintWriter.
Note 2:
1. In general we can use Readers and Writers to handle character data. Where as
we can use InputStreams and OutputStreams to handle binary data(like images,
audio files, video files etc).
2. We can use OutputStream to write binary data to the File and we can use
InputStream to read binary data from the File.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Requirement:
Diagram:
Program:
import java.io.*;
class FileWriterDemo1
{
public static void main(String[] args)throws IOException {
PrintWriter pw=new PrintWriter("file3.txt");
BufferedReader br=new BufferedReader(new
FileReader("file1.txt"));
String line=br.readLine();
while(line!=null)
{
pw.println(line);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
line=br.readLine();
}
br=new BufferedReader(new FileReader("file2.txt"));
//reuse
line=br.readLine();
while(line!=null)
{
pw.println(line);
line=br.readLine();
}
pw.flush();
br.close();
pw.close();
}
}
Requirement: Write a program to perform file merge operation where merging should
be performed line by line alternatively.
Diagram:
Program:
import java.io.*;
class FileWriterDemo1 {
public static void main(String[] args)throws IOException {
PrintWriter pw=new PrintWriter("file3.txt");
BufferedReader br1=new BufferedReader(new
FileReader("file1.txt"));
BufferedReader br2=new BufferedReader(new
FileReader("file2.txt"));
String line1=br1.readLine();
String line2=br2.readLine();
while(line1!=null||line2!=null)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
if(line1!=null)
{
pw.println(line1);
line1=br1.readLine();
}
if(line2!=null)
{
pw.println(line2);
line2=br2.readLine();
}
}
pw.flush();
br1.close();
br2.close();
pw.close();
}
}
Requirement: Write a program to merge data from all files present in a folder into a
new file
Program:
import java.io.*;
class TotalFileMerge {
public static void main(String[] args)throws IOException {
PrintWriter pw=new PrintWriter("output.txt");
File f=new File("E:\\xyz");
String[] s=f.list();
for(String s1=s) {
BufferedReader br1=new BufferedReader(new File(f,s1));
String line=br.readLine();
while(line!=null)
{
pw.println(line);
line=br.readLine();
}
}
pw.flush();
}
}
Requirement: Write a program to delete duplicate numbers from the file.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Program:
import java.io.*;
class FileWriterDemo1
{
public static void main(String[] args)throws IOException
{
BufferedReader br1=new BufferedReader(new
FileReader("input.txt"));
PrintWriter out=new PrintWriter("output.txt");
String target=br1.readLine();
while(target!=null)
{
boolean available=false;
BufferedReader br2=new BufferedReader(new
FileReader("output.txt"));
String line=br2.readLine();
while(line!=null)
{
if(target.equals(line))
{
available=true;
break;
}
line=br2.readLine();
}
if(available==false)
{
out.println(target);
out.flush();
}
target=br1.readLine();
}
}
}
Requirement: write a program to perform file extraction operation.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Program:
import java.io.*;
class FileWriterDemo1
{
public static void main(String[] args)throws IOException
{
BufferedReader br1=new BufferedReader(new
FileReader("input.txt"));
PrintWriter pw=new PrintWriter("output.txt");
String line=br1.readLine();
while(line!=null)
{
boolean available=false;
BufferedReader br2=new BufferedReader(new
FileReader("delete.txt"));
String target=br2.readLine();
while(target!=null)
{
if(line.equals(target))
{
available=true;
break;
}
target=br2.readLine();
}
if(available==false)
{
pw.println(line);
}
line=br1.readLine();
}
pw.flush();
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Serialization
Agenda :
1. Serialization
2. Deserialization
3. transient keyword
4. static Vs transient
5. transient Vs final
6. Object graph in serialization.
7. customized serialization.
8. Serialization with respect inheritance.
9. Externalization
10. Difference between Serialization & Externalization
11. SerialVersionUID
Serialization: (1.1 v)
1. The process of saving (or) writing state of an object to a file is called serialization
2. but strictly speaking it is the process of converting an object from java supported
form to either network supported form (or) file supported form.
3. By using FileOutputStream and ObjectOutputStream classes we can achieve
serialization process.
4. Ex: big ballon
Diagram:
De-Serialization:
1. The process of reading state of an object from a file is called DeSerialization
2. but strictly speaking it is the process of converting an object from file supported
form (or) network supported form to java supported form.
3. By using FileInputStream and ObjectInputStream classes we can achieve
DeSerialization.
Diagram:
Example 1:
import java.io.*;
class Dog implements Serializable
{
int i=10;
int j=20;
}
class SerializableDemo
{
public static void main(String args[])throws Exception{
Dog d1=new Dog();
System.out.println("Serialization started");
FileOutputStream fos=new FileOutputStream("abc.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(d1);
System.out.println("Serialization ended");
System.out.println("Deserialization started");
FileInputStream fis=new FileInputStream("abc.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Dog d2=(Dog)ois.readObject();
System.out.println("Deserialization ended");
System.out.println(d2.i+"................"+d2.j);
}
}
Output:
Serialization started
Serialization ended
Deserialization started
Deserialization ended
10................20
Diagram:
Note:
Example2:
import java.io.*;
class Dog implements Serializable
{
int i=10;
int j=20;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Transient keyword:
1. transient is the modifier applicable only for variables.
2. While performing serialization if we don't want to save the value of a particular
variable to meet security constant such type of variable , then we should declare
that variable with "transient" keyword.
3. At the time of serialization JVM ignores the original value of transient variable
and save default value to the file .
4. That is transient means "not to serialize".
Static Vs Transient :
1. static variable is not part of object state hence they won't participate in
serialization because of this declaring a static variable as transient there is no
use.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Transient Vs Final:
1. final variables will be participated into serialization directly by their values.
Hence declaring a final variable as transient there is no use.
//the compiler assign the value to final variable
Example 3:
import java.io.*;
class Dog implements Serializable
{
static transient int i=10;
final transient int j=20;
}
class SerializableDemo
{
public static void main(String args[])throws Exception{
Dog d1=new Dog();
FileOutputStream fos=new FileOutputStream("abc.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(d1);
FileInputStream fis=new FileInputStream("abc.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Dog d2=(Dog)ois.readObject();
System.out.println(d2.i+"................"+d2.j);
}
}
Output:
10................20
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Table:
declaration output
int i=10;
10................20
int j=20;
transient int i=10;
0................20
int j=20;
transient int i=10;
0................20
transient static int j=20;
transient final int i=10;
10................0
transient int j=20;
transient final int i=10;
10................20
transient static int j=20;
We can serialize any no of objects to the file but in which order we serialized in the
same order only we have to deserialize.
Example :
Example :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Example 4:
import java.io.*;
class Dog implements Serializable
{
Cat c=new Cat();
}
class Cat implements Serializable
{
Rat r=new Rat();
}
class Rat implements Serializable
{
int j=20;
}
class SerializableDemo
{
public static void main(String args[])throws Exception{
Dog d1=new Dog();
FileOutputStream fos=new FileOutputStream("abc.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(d1);
FileInputStream fis=new FileInputStream("abc.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Dog d2=(Dog)ois.readObject();
System.out.println(d2.c.r.j);
}
}
Output:
20
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Diagram:
In the above example whenever we are serializing Dog object automatically Cat
and Rat objects will be serialized because these are part of object graph of Dog
object.
Among Dog, Cat, Rat if at least one object is not serializable then we will get
runtime exception saying "NotSerializableException".
Customized serialization:
During default Serialization there may be a chance of lose of information due to
transient keyword.(Ex : mango ,money , box)
Example 5:
import java.io.*;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Output:
Bhaskar.........kajal
Bhaskar.........null
Diagram:
In the above example before serialization Account object can provide proper
username and password. But after Deserialization Account object can provide
only username bur not password. This is due to declaring password as transient.
Hence doing default serialization there may be a chance of loss of information
due to transient keyword.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Example 6:
Demo program for customized serialization to recover loss of information which is
happen due to transient keyword.
import java.io.*;
class Account implements Serializable
{
String userName="Bhaskar";
transient String pwd="kajal";
private void writeObject(ObjectOutputStream os)throws Exception
{
os.defaultWriteObject();
String epwd="123"+pwd;
os.writeObject(epwd);
}
private void readObject(ObjectInputStream is)throws Exception{
is.defaultReadObject();
String epwd=(String)is.readObject();
pwd=epwd.substring(3);
}
}
class CustomizedSerializeDemo
{
public static void main(String[] args)throws Exception{
Account a1=new Account();
System.out.println(a1.userName+"........."+a1.pwd);
FileOutputStream fos=new FileOutputStream("abc.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(a1);
FileInputStream fis=new FileInputStream("abc.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Account a2=(Account)ois.readObject();
System.out.println(a2.userName+"........."+a2.pwd);
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Output:
Bhaskar.........kajal
Bhaskar.........kajal
Diagram:
At the time of Account object serialization JVM will check is there any writeObject()
method in Account class or not. If it is not available then JVM is responsible to perform
serialization(default serialization). If Account class contains writeObject() method then
JVM feels very happy and executes that Account class writeObject() method. The same
rule is applicable for readObject() method also.
If parent class implements Serializable then automatically every child class by default
implements Serializable. That is Serializable nature is inheriting from parent to child.
Hence even though child class doesn't implements Serializable , we can serialize child
class object if parent class implements serializable interface.
Example 7:
import java.io.*;
class Animal implements Serializable
{
int i=10;
}
class Dog extends Animal
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
{
int j=20;
}
class SerializableWRTInheritance
{
public static void main(String[] args)throws Exception{
Dog d1=new Dog();
System.out.println(d1.i+"........"+d1.j);
FileOutputStream fos=new FileOutputStream("abc.ser");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(d1);
FileInputStream fis=new FileInputStream("abc.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Dog d2=(Dog)ois.readObject();
System.out.println(d2.i+"........"+d2.j);
}
}
Output:
10........20
10........20
Even though Dog class does not implements Serializable interface explicitly but we can
Serialize Dog object because its parent class animal already implements Serializable
interface.
Case 2:
1. Even though parent class does not implements Serializable we can serialize child
object if child class implements Serializable interface.
2. At the time of serialization JVM ignores the values of instance variables which
are coming from non Serializable parent then instead of original value JVM
saves default values for those variables to the file.
3. At the time of Deserialization JVM checks whether any parent class is non
Serializable or not. If any parent class is non Serializable JVM creates a separate
object for every non Serializable parent and shares its instance variables to the
current object.
4. To create an object for non-serializable parent JVM always calls no arg
constructor(default constructor) of that non Serializable parent hence every non
Serializable parent should compulsory contain no arg constructor otherwise we
will get runtime exception "InvalidClassException" .
5. If non-serializable parent is abstract class then just instance control flow will be
performed and share it's instance variable to the current object.
Example 8:
import java.io.*;
class Animal
{
int i=10;
Animal(){
System.out.println("Animal constructor called");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Externalization : ( 1.1 v )
1. In default serialization every thing takes care by JVM and programmer doesn't
have any control.
2. In serialization total object will be saved always and it is not possible to save part
of the object , which creates performence problems at certain point.
3. To overcome these problems we should go for externalization where every thing
takes care by programmer and JVM doesn't have any control.
4. The main advantage of externalization over serialization is we can save either
total object or part of the object based on our requirement.
5. To provide Externalizable ability for any object compulsory the corresponding
class should implements externalizable interface.
6. Externalizable interface is child interface of serializable interface.
This method will be executed automaticcay at the time of Serialization with in this
method , we have to write code to save required variables to the file .
This method will be executed automatically at the time of deserialization with in this
method , we have to write code to save read required variable from file and assign to the
current object
At the time of deserialization Jvm will create a seperate new object by executing public
no-arg constructor on that object JVM will call readExternal() method.
Example :
import java.io.*;
public ExternalDemo() {
System.out.println("public no-arg constructor");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
}
public ExternalDemo(String s , int i, int j) {
this.s=s ;
this.i=i ;
this.j=j ;
}
output :
public no-arg constructor
ashok -------- 10 ------ 0
Diagram :
1. If the class implements Externalizable interface then only part of the object will
be saved in the case output is
2. public no-arg constructor
3. ashok ---- 10 ----- 0
4. If the class implements Serializable interface then the output is ashok --- 10 --- 20
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
serialVersionUID :
To perform Serialization & Deserialization internally JVM will use a unique identifier ,
which is nothing but serialVersionUID .
1. After Serializing object if we change the .class file then we can't perform
deserialization because of mismatch in serialVersionUID of local class and
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Serialization
Example :
In the above program after serialization even though if we perform any change to
Dog.class file , we can deserialize object.
We if configure our own serialVersionUID both sender and receiver not required to
maintain the same JVM versions.
Note : some IDE's generate explicit serialVersionUID.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Regular Expression
Agenda
1. Introduction.
2. The main important application areas of Regular Expression
3. Pattern class
4. Matcher class
5. Important methods of Matcher class
6. Character classes
7. Predefined character classes
8. Quantifiers
9. Pattern class split() method
10. String class split() method
11. StringTokenizer
12. Requirements:
o Write a regular expression to represent all valid identifiers in java language
o Write a regular expression to represent all mobile numbers
o Write a regular expression to represent all Mail Ids
o Write a program to extract all valid mobile numbers from a file
o Write a program to extract all Mail IDS from the File
o Write a program to display all .txt file names present in specific(E:\scjp)
folder
Introduction
A Regular Expression is a expression which represents a group of Strings according to a
particular pattern.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Example:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
int count=0;
Pattern p=Pattern.compile("ab");
Matcher m=p.matcher("abbbabbaba");
while(m.find())
{
count++;
System.out.println(m.start()+"------"+m.end()+"--
----"+m.group());
}
System.out.println("The no of occurences
:"+count);
}
}
Output:
0------2------ab
4------6------ab
7------9------ab
The no of occurrences: 3
Pattern class:
A Pattern object represents "compiled version of Regular Expression".
We can create a Pattern object by using compile() method of Pattern class.
Matcher:
A Matcher object can be used to match character sequences against a Regular
Expression.
We can create a Matcher object by using matcher() method of Pattern class.
1. boolean find();
It attempts to find next match and returns true if it is available otherwise returns
false.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
2. int start();
Returns the start index of the match.
3. int end();
Returns the offset(equalize) after the last character matched.(or)
Returns the "end+1" index of the matched.
4. String group();
Returns the matched Pattern.
Note: Pattern and Matcher classes are available in java.util.regex package, and
introduced in 1.4 version
Character classes:
1. [abc]-------------------Either 'a' or 'b' or 'c'
2. [^abc] -----------------Except 'a' and 'b' and 'c'
3. [a-z] --------------------Any lower case alphabet symbol
4. [A-Z] --------------------Any upper case alphabet symbol
5. [a-zA-Z] ----------------Any alphabet symbol
6. [0-9] --------------------Any digit from 0 to 9
7. [a-zA-Z0-9] ------------Any alphanumeric character
8. [^a-zA-Z0-9] ------------Any special character
Example:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("x");
Matcher m=p.matcher("a1b7@z#");
while(m.find())
{
System.out.println(m.start()+"-------
"+m.group());
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Output:
\s---------------------space character
\d---------------------Any digit from o to 9[o-9]
\w---------------------Any word character[a-zA-Z0-9]
. ---------------------Any character including special characters.
Example:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("x");
Matcher m=p.matcher("a1b7 @z#");
while(m.find())
{
System.out.println(m.start()+"-------
"+m.group());
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Output:
Quantifiers:
Quantifiers can be used to specify no of characters to match.
a-----------------------Exactly one 'a'
a+----------------------At least one 'a'
a*----------------------Any no of a's including zero number
a? ----------------------At most one 'a'
Example:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("x");
Matcher m=p.matcher("abaabaaab");
while(m.find())
{
System.out.println(m.start()+"-------
"+m.group());
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Output:
Example 1:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("\\s");
String[] s=p.split("ashok software solutions");
for(String s1:s)
{
System.out.println(s1);//ashok
//software
//solutions
}
}
}
Example 2:
import java.util.regex.*;
class RegularExpressionDemo
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Example:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
String s="www.saijobs.com";
String[] s1=s.split("\\.");
for(String s2:s1)
{
System.out.println(s2);//www
//saijobs
//com
}
}
}
Note : String class split() method can take regular expression as argument where as
pattern class split() method can take target string as the argument.
StringTokenizer:
Example 1:
import java.util.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
StringTokenizer st=new StringTokenizer("sai
software solutions");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
while(st.hasMoreTokens())
{
System.out.println(st.nextToken());//sai
//software
//solutions
}
}
}
The default regular expression for the StringTokenizer is space.
Example 2:
import java.util.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
StringTokenizer st=new
StringTokenizer("1,99,988",",");
while(st.hasMoreTokens())
{
System.out.println(st.nextToken());//1
//99
//988
}
}
}
Requirement:
1. a to z, A to Z, 0 to 9, -,#
2. The 1st character should be alphabet symbol only.
3. The length of the identifier should be at least 2.
Program:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("[a-zA-Z][a-zA-Z0-9-
#]+"); (or)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Pattern p=Pattern.compile("[a-zA-Z][a-zA-Z0-9-
#][a-zA-Z0-9-#]*");
Matcher m=p.matcher(args[0]);
if(m.find()&&m.group().equals(args[0]))
{
System.out.println("valid identifier");
}
else
{
System.out.println("invalid identifier");
}
}
}
Output:
E:\scjp>javac RegularExpressionDemo.java
E:\scjp>java RegularExpressionDemo ashok
Valid identifier
Requirement:
Write a regular expression to represent all mobile numbers.
Program:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("
[7-9][0-9][0-9][0-9][0-9][0-
9][0-9][0-9][0-9][0-9]");
//Pattern p=Pattern.compile("[7-9][0-9]{9}");
Matcher m=p.matcher(args[0]);
if(m.find()&&m.group().equals(args[0]))
{
System.out.println("valid number");
}
else
{
System.out.println("invalid number");
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
Analysis:
10 digits mobile:
[7-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] (or)
[7-9][0-9]{9}
Output:
E:\scjp>javac RegularExpressionDemo.java
E:\scjp>java RegularExpressionDemo 9989123456
Valid number
Output:
E:\scjp>javac RegularExpressionDemo.java
E:\scjp>javac RegularExpressionDemo.java
E:\scjp>java RegularExpressionDemo 9989123456
Valid number
E:\scjp>java RegularExpressionDemo 09989123456
Valid number
E:\scjp>java RegularExpressionDemo 919989123456
Valid number
E:\scjp>java RegularExpressionDemo 69989123456
Invalid number
Requirement:
Write a regular expression to represent all Mail Ids.
Program:
import java.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
[a-zA-Z][a-zA-Z0-9-.]*@[a-zA-Z0-
+ + +
9] ([.][a-zA-Z] ) ");
Matcher m=p.matcher(args[0]);
if(m.find()&&m.group().equals(args[0]))
{
System.out.println("valid mail id");
}
else
{
System.out.println("invalid mail id");
}
}
}
Output:
E:\scjp>javac RegularExpressionDemo.java
E:\scjp>java RegularExpressionDemo sunmicrosystem@gmail.com
Valid mail id
E:\scjp>java RegularExpressionDemo 999sunmicrosystem@gmail.com
Invalid mail id
E:\scjp>java RegularExpressionDemo 999sunmicrosystem@gmail.co9
Invalid mail id
Requirement:
Write a program to extract all valid mobile numbers from a file.
Diagram:
Program:
import java.util.regex.*;
import java.io.*;
class RegularExpressionDemo
{
public static void main(String[] args)throws IOException
{
PrintWriter out=new PrintWriter("output.txt");
BufferedReader br=new BufferedReader(new
FileReader("input.txt"));
Pattern p=Pattern.compile("(0|91)?[7-9][0-
9]{9}");
String line=br.readLine();
while(line!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
out.println(m.group());
}
line=br.readLine();
}
out.flush();
}
}
Requirement:
Write a program to extract all Mail IDS from the File.
Note: In the above program replace mobile number regular expression with MAIL ID
regular expression.
Requirement:
Write a program to display all .txt file names present in E:\scjp folder.
Program:
import java.util.regex.*;
import java.io.*;
class RegularExpressionDemo
{
public static void main(String[] args)throws IOException
{
int count=0;
Pattern p=Pattern.compile("[a-zA-Z0-9-
$.]+[.]txt");
File f=new File("E:\\scjp");
String[] s=f.list();
for(String s1:s)
{
Matcher m=p.matcher(s1);
if(m.find()&&m.group().equals(s1))
{
count++;
System.out.println(s1);
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Regular Expression
System.out.println(count);
}
}
Output:
input.txt
output.txt
outut.txt
3
[k-z][0369][a-zA-Z0-9#$]*
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Collections
Agenda
1. Introduction
2. Limitations of Object[] array
3. Differences between Arrays and Collections ?
4. 9(Nine) key interfaces of collection framework
i. Collection
ii. List
iii. Set
iv. SortedSet
v. NavigableSet
vi. Queue
vii. Map
viii. SortedMap
ix. NavigableMap
5. What is the difference between Collection and Collections ?
6. In collection framework the following are legacy characters
7. Collection interface
8. List interface
9. ArrayList
o Differences between ArrayList and Vector ?
o Getting synchronized version of ArrayList object
LinkedList
Vector
Stack
The 3 cursors of java
0. Enumeration
1. Iterator
2. ListIterator
o Compression of Enumeration , Iterator and ListIterator ?
Set interface
HashSet
LinkedHashSet
Diff b/w HashSet & LinkedHashSet
SortedSet
TreeSet
o Null acceptance
Comparable interface
compareTo() method analysis
Comparator interface
Compression of Comparable and Comparator ?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Introduction:
1. Arrays are fixed in size that is once we created an array there is no chance of
increasing (or) decreasing the size based on our requirement hence to use arrays
concept compulsory we should know the size in advance which may not possible
always.
2. Arrays can hold only homogeneous data elements.
Example:
Student[] s=new Student[10000];
s[0]=new Student();//valid
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Arrays Collections
2) Memory point of view arrays are not 2) Memory point of view collections are highly
recommended to use. recommended to use.
3) Performance point of view arrays are 3) Performance point of view collections are not
recommended to use. recommended to use.
4) Arrays can hold only homogeneous 4) Collections can hold both homogeneous and
data type elements. heterogeneous elements.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
6) Arrays can hold both primitives and 6) Collections can hold only objects but not
object types. primitives.
Collection:
If we want to represent a group of objects as single entity then we should go for
collections.
Collection framework:
It defines several classes and interfaces to represent a group of objects as a single entity.
Java C++
Collection Containers
1. Collection
2. List
3. Set
4. SortedSet
5. NavigableSet
6. Queue
7. Map
8. SortedMap
9. NavigableMap
Collection:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
List:
Diagram:
Vector and Stack classes are re-engineered in 1.2 versions to implement List interface.
Set:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
SortedSet:
NavigableSet:
Queue:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Note: All the above interfaces (Collection, List, Set, SortedSet, NavigableSet, and
Queue) meant for representing a group of individual objects.
If we want to represent a group of objects as key-value pairs then we should go for Map.
Map:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
SortedMap:
NavigableMap:
1) It is the child interface of SortedMap and defines several methods for navigation
purposes.
Collection--------------------interface
Collections------------------class
1. Enumeration(I)
2. Dictionary(AC)
3. Vector(C)
4. Stack(C)
5. Hashtable(C)
6. Properties(C)
Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Collection interface:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
ArrayList:
Constructors:
Creates an empty ArrayList object with default initial capacity "10" if ArrayList
reaches its max capacity then a new ArrayList object will be created with
Creates an equivalent ArrayList object for the given Collection that is this constructor
meant for inter conversation between collection objects. That is to dance between
collection objects.
import java.util.*;
class ArrayListDemo
{
public static void main(String[] args)
{
ArrayList a=new ArrayList();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
a.add("A");
a.add(10);
a.add("A");
a.add(null);
System.out.println(a);//[A, 10, A, null]
a.remove(2);
System.out.println(a);//[A, 10, null]
a.add(2,"m");
a.add("n");
System.out.println(a);//[A, 10, m, null, n]
}
}
Usually we can use collection to hold and transfer objects from one tier to another
tier. To provide support for this requirement every Collection class already
implements Serializable and Cloneable interfaces.
ArrayList and Vector classes implements RandomAccess interface so that any
random element we can access with the same speed. Hence ArrayList is the best
choice of "retrival operation".
RandomAccess interface present in util package and doesn't contain any methods.
It is a marker interface.
Example :
ArrayList a1=new ArrayList();
LinkedList a2=new LinkedList();
2) At a time multiple Threads are allow to 2) At a time only one Thread is allow to
operate on ArrayList object and hence operate on Vector object and hence Vector
ArrayList object is not Thread safe. object is Thread safe.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Example:
Similarly we can get synchronized version of Set and Map objects by using the
following methods.
1) public static Set synchronizedSet(Set s);
2) public static Map synchronizedMap(Map m);
ArrayList is the best choice if our frequent operation is retrieval.
ArrayList is the worst choice if our frequent operation is insertion (or) deletion in
the middle because it requires several internal shift operations.
Diagram:
LinkedList:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
Constructors:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Example:
import java.util.*;
class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList l=new LinkedList();
l.add("ashok");
l.add(30);
l.add(null);
l.add("ashok");
System.out.println(l);//[ashok, 30, null, ashok]
l.set(0,"software");
System.out.println(l);//[software, 30, null,
ashok]
l.set(0,"venky");
System.out.println(l);//[venky, 30, null, ashok]
l.removeLast();
System.out.println(l);//[venky, 30, null]
l.addFirst("vvv");
System.out.println(l);//[vvv, venky, 30, null]
}
}
Vector:
Every method present in Vector is synchronized and hence Vector is Thread safe.
To add objects:
1. add(Object o);-----Collection
2. add(int index,Object o);-----List
3. addElement(Object o);-----Vector
To remove elements:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
1. remove(Object o);--------Collection
2. remove(int index);--------------List
3. removeElement(Object o);----Vector
4. removeElementAt(int index);-----Vector
5. removeAllElements();-----Vector
6. clear();-------Collection
To get objects:
Other methods:
Constructors:
Example:
import java.util.*;
class VectorDemo
{
public static void main(String[] args)
{
Vector v=new Vector();
System.out.println(v.capacity());//10
for(int i=1;i<=10;i++)
{
v.addElement(i);
}
System.out.println(v.capacity());//10
v.addElement("A");
System.out.println(v.capacity());//20
System.out.println(v);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
A]
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
Stack:
Constructor:
Methods:
Example:
import java.util.*;
class StackDemo
{
public static void main(String[] args)
{
Stack s=new Stack();
s.push("A");
s.push("B");
s.push("C");
System.out.println(s);//[A, B, C]
System.out.println(s.pop());//C
System.out.println(s);//[A, B]
System.out.println(s.peek());//B
System.out.println(s.search("A"));//2
System.out.println(s.search("Z"));//-1
System.out.println(s.empty());//false
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
If we want to get objects one by one from the collection then we should go for cursor.
There are 3 types of cursors available in java. They are:
1. Enumeration
2. Iterator
3. ListIterator
Enumeration:
1. We can use Enumeration to get objects one by one from the legacy collection
objects.
2. We can create Enumeration object by using elements() method.
public Enumeration elements();
Enumeration e=v.elements();
using Vector Object
Example:
import java.util.*;
class EnumerationDemo
{
public static void main(String[] args)
{
Vector v=new Vector();
for(int i=0;i<=10;i++)
{
v.addElement(i);
}
System.out.println(v);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
Enumeration e=v.elements();
while(e.hasMoreElements())
{
Integer i=(Integer)e.nextElement();
if(i%2==0)
System.out.println(i);//0 2 4 6 8 10
}
System.out.print(v);//[0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10]
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Limitations of Enumeration:
1. We can apply Enumeration concept only for legacy classes and it is not a universal
cursor.
2. By using Enumeration we can get only read access and we can't perform remove
operations.
3. To overcome these limitations sun people introduced Iterator concept
in 1.2v.
Iterator:
1. We can use Iterator to get objects one by one from any collection object.
2. We can apply Iterator concept for any collection object and it is a universal cursor.
3. While iterating the objects by Iterator we can perform both read and remove
operations.
Example:
import java.util.*;
class IteratorDemo
{
public static void main(String[] args)
{
ArrayList a=new ArrayList();
for(int i=0;i<=10;i++)
{
a.add(i);
}
System.out.println(a);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
Iterator itr=a.iterator();
while(itr.hasNext())
{
Integer i=(Integer)itr.next();
if(i%2==0)
System.out.println(i);//0, 2, 4, 6,
8, 10
else
itr.remove();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
System.out.println(a);//[0, 2, 4, 6, 8, 10]
}
}
Limitations of Iterator:
1. Both enumeration and Iterator are single direction cursors only. That is we can
always move only forward direction and we can't move to the backward direction.
2. While iterating by Iterator we can perform only read and remove operations and
we can't perform replacement and addition of new objects.
3. To overcome these limitations sun people introduced listIterator concept.
ListIterator:
Example:
import java.util.*;
class ListIteratorDemo
{
public static void main(String[] args)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
if(s.equals("chiru"))
{
itr.set("chran");
}
Output:
[balakrishna, venki, chiru, nag]
[balakrishna, venki, chran, nag]
Case 2:
if(s.equals("nag"))
{
itr.add("chitu");
}
Output:
[balakrishna, venki, chiru, nag]
[balakrishna, venki, chiru, nag, chitu]
The most powerful cursor is listIterator but its limitation is it is applicable only for "List
objects".
1) Is it legacy ? Yes no no
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
21 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
hasNext()
hasMoreElement()
6) Methods next() 9 methods.
nextElement()
remove()
Set interface:
Diagram:
Set interface does not contain any new method we have to use only Collection interface
methods.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
HashSet:
Constructors:
Note : After filling how much ratio new HashSet object will be created , The ratio is called
"FillRatio" or "LoadFactor".
Example:
import java.util.*;
class HashSetDemo
{
public static void main(String[] args)
{
HashSet h=new HashSet();
h.add("B");
h.add("C");
h.add("D");
h.add("Z");
h.add(null);
h.add(10);
System.out.println(h.add("Z"));//false
System.out.println(h);//[null, D, B, C, 10, Z]
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
23 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
LinkedHashSet:
HashSet LinkedHashSet
In the above program if we are replacing HashSet with LinkedHashSet the output is [B, C,
D, Z, null, 10].That is insertion order is preserved.
Example:
import java.util.*;
class LinkedHashSetDemo
{
public static void main(String[] args)
{
LinkedHashSet h=new LinkedHashSet();
h.add("B");
h.add("C");
h.add("D");
h.add("Z");
h.add(null);
h.add(10);
System.out.println(h.add("Z"));//false
System.out.println(h);//[B, C, D, Z, null, 10]
}
}
SortedSet:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
24 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
1. Object first();
2. Object last();
3. SortedSet headSet(Object obj);
Returns the SortedSet whose elements are <obj.
4. SortedSet tailSet(Object obj);
It returns the SortedSet whose elements are >=obj.
5. SortedSet subset(Object o1,Object o2);
Returns the SortedSet whose elements are >=o1 but <o2.
6. Comparator comparator();
o Returns the Comparator object that describes underlying sorting technique.
o If we are following default natural sorting order then this method returns
null.
Diagram:
TreeSet:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
25 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Constructors:
Example 1:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet();
t.add("A");
t.add("a");
t.add("B");
t.add("Z");
t.add("L");
//t.add(new Integer(10));//ClassCastException
//t.add(null);//NullPointerException
System.out.println(t);//[A, B, L, Z, a]
}
}
Null acceptance:
For the empty TreeSet as the 1st element "null" insertion is possible but after
inserting that null if we are trying to insert any other we will get
NullPointerException.
For the non empty TreeSet if we are trying to insert null then we will get
NullPointerException.
Example 2:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet();
t.add(new StringBuffer("A"));
t.add(new StringBuffer("Z"));
t.add(new StringBuffer("L"));
t.add(new StringBuffer("B"));
System.out.println(t);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
26 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
}
Output:
Runtime Exception.
Note :
Comparable interface:
Comparable interface present in java.lang package and contains only one method
compareTo() method.
public int compareTo(Object obj);
Example:
obj1.compareTo(obj2);
Diagram:
Example 3:
class Test
{
public static void main(String[] args)
{
System.out.println("A".compareTo("Z"));//-25
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
27 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
System.out.println("Z".compareTo("K"));//15
System.out.println("A".compareTo("A"));//0
//System.out.println("A".compareTo(new
Integer(10)));
//Test.java:8: compareTo(java.lang.String)
in java.lang.String cannot
be applied to (java.lang.Integer)
//System.out.println("A".compareTo(null));//NullPointerE
xception
}
}
If we are depending on default natural sorting order then internally JVM will use
compareTo() method to arrange objects in sorting order.
Example 4:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet t=new TreeSet();
t.add(10);
t.add(0);
t.add(15);
t.add(10);
System.out.println(t);//[0, 10, 15]
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
28 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
If we are not satisfying with default natural sorting order (or) if default natural
sorting order is not available then we can define our own customized sorting by
Comparator object.
Comparable meant for default natural sorting order.
Comparator meant for customized sorting order.
Comparator interface:
Comparator interface present in java.util package this interface defines the following 2
methods.
Requirement: Write a program to insert integer objects into the TreeSet where the
sorting order is descending order.
Program:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new MyComparator()); //---
->(1)
t.add(10);
t.add(0);
t.add(15);
t.add(5);
t.add(20);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
29 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
At line "1" if we are not passing Comparator object then JVM will always calls
compareTo() method which is meant for default natural sorting order(ascending
order)hence in this case the output is [0, 5, 10, 15, 20].
At line "1" if we are passing Comparator object then JVM calls compare() method
of MyComparator class which is meant for customized sorting order(descending
order) hence in this case the output is [20, 15, 10, 5, 0].
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
30 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Program:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new MyComparator());
t.add("Roja");
t.add("ShobaRani");
t.add("RajaKumari");
t.add("GangaBhavani");
t.add("Ramulamma");
System.out.println(t);//[ShobaRani, Roja,
Ramulamma, RajaKumari, GangaBhavani]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=(String)obj2;
//return s2.compareTo(s1);
return -s1.compareTo(s2);
}
}
Requirement: Write a program to insert StringBuffer objects into the TreeSet where the
sorting order is alphabetical order.
Program:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new MyComparator());
t.add(new StringBuffer("A"));
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
31 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
t.add(new StringBuffer("Z"));
t.add(new StringBuffer("K"));
t.add(new StringBuffer("L"));
System.out.println(t);// [A, K, L, Z]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
return s1.compareTo(s2);
}
}
Note: Whenever we are defining our own customized sorting by Comparator then the
objects need not be Comparable.
Example: StringBuffer
Requirement: Write a program to insert String and StringBuffer objects into the TreeSet
where the sorting order is increasing length order. If 2 objects having the same length
then consider they alphabetical order.
Program:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new MyComparator());
t.add("A");
t.add(new StringBuffer("ABC"));
t.add(new StringBuffer("AA"));
t.add("xx");
t.add("ABCD");
t.add("A");
System.out.println(t);//[A, AA, xx, ABC, ABCD]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
int l1=s1.length();
int l2=s2.length();
if(l1 < l2)
return -1;
else if(l1 > l2)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
32 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
return 1;
else
return s1.compareTo(s2);
}
}
Note: If we are depending on default natural sorting order then the objects should be
"homogeneous and comparable" otherwise we will get ClassCastException. If we are
defining our own sorting by Comparator then objects "need not be homogeneous and
comparable".
Comparable vs Comparator:
Example:
import java.util.*;
class Employee implements Comparable
{
String name;
int eid;
Employee(String name,int eid)
{
this.name=name;
this.eid=eid;
}
public String toString()
{
return name+"----"+eid;
}
public int compareTo(Object o)
{
int eid1=this.eid;
int eid2=((Employee)o).eid;
if(eid1 < eid2)
{
return -1;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
33 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
else if(eid1 > eid2)
{
return 1;
}
else return 0;
}
}
class CompComp
{
public static void main(String[] args)
{
Employee e1=new Employee("nag",100);
Employee e2=new Employee("balaiah",200);
Employee e3=new Employee("chiru",50);
Employee e4=new Employee("venki",150);
Employee e5=new Employee("nag",100);
TreeSet t1=new TreeSet();
t1.add(e1);
t1.add(e2);
t1.add(e3);
t1.add(e4);
t1.add(e5);
System.out.println(t1);//[chiru----50, nag----
100, venki----150, balaiah----200]
TreeSet t2=new TreeSet(new MyComparator());
t2.add(e1);
t2.add(e2);
t2.add(e3);
t2.add(e4);
t2.add(e5);
System.out.println(t2);//[balaiah----200, chiru--
--50, nag----100, venki----150]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
Employee e1=(Employee)obj1;
Employee e2=(Employee)obj2;
String s1=e1.name;
String s2=e2.name;
return s1.compareTo(s2);
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
34 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Comparable Comparator
3) Contains 2 methods.
3) Contains only one method.
Compare() method.
compareTo() method.
Equals() method.
4) String class and all wrapper Classes 4) The only implemented classes of Comparator are
implements Comparable interface. Collator and RuleBasedCollator. (used in GUI)
Not
2) Insertion order. Preserved. Not preserved (by default).
preserved.
3) Duplicate Not
Not allowed. Not allowed.
objects. allowed.
Not
4) Sorting order. Not applicable. Applicable.
applicable.
5) Heterogeneous
Allowed. Allowed. Not allowed.
objects.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
35 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Map:
Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
36 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Map interface is not child interface of Collection and hence we can't apply
Collection interface methods here.
Map interface defines the following specific methods.
Entry interface:
Each key-value pair is called one entry. Hence Map is considered as a group of entry
Objects, without existing Map object there is no chance of existing entry object hence
interface entry is define inside Map interface(inner interface).
Example:
interface Map
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
37 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
{
.................;
.................;
.................;
interface Entry
{
Object getKey();
Object getValue(); on Entry we can
apply these 3 methods.
Object setValue(Object new);
}
}
HashMap:
HashMap Hashtable
4) Null is allowed for both key and 4) Null is not allowed for both key and value
value. otherwise we will get NullPointerException.
By default HashMap object is not synchronized. But we can get synchronized version by
using the following method of Collections class.
public static Map synchronizedMap(Map m1)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
38 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Constructors:
Example:
import java.util.*;
class HashMapDemo
{
public static void main(String[] args)
{
HashMap m=new HashMap();
m.put("chiranjeevi",700);
m.put("balaiah",800);
m.put("venkatesh",200);
m.put("nagarjuna",500);
System.out.println(m);//{nagarjuna=500,venkatesh=200,bal
aiah=800,chiranjeevi=700}
System.out.println(m.put("chiranjeevi",100));//700
Set s=m.keySet();
System.out.println(s);//[nagarjuna,venkatesh,balaiah,chi
ranjeevi]
Collection c=m.values();
System.out.println(c);//[500, 200, 800, 100]
Set s1=m.entrySet();
System.out.println(s1);//[nagarjuna=500,venkatesh=200,ba
laiah=800,chiranjeevi=100]
Iterator itr=s1.iterator();
while(itr.hasNext())
{
Map.Entry m1=(Map.Entry)itr.next();
System.out.println(m1.getKey()+"......"+m1.getValue());
//nagarjuna......500
//venkatesh......200 //
//balaiah......800
//chiranjeevi......100
if(m1.getKey().equals("nagarjuna"))
{
m1.setValue(1000);
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
39 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
System.out.println(m);
//{nagarjuna=1000,venkatesh=200,balaiah=800,chiranjeevi=100}
}
}
LinkedHashMap:
HashMap LinkedHashMap
Note: in the above program if we are replacing HashMap with LinkedHashMap then the
output is {chiranjeevi=100, balaiah......800, venkatesh......200, nagarjuna......1000} that is
insertion order is preserved.
Note: in general we can use LinkedHashSet and LinkedHashMap for implementing cache
applications.
IdentityHashMap:
Example:
import java.util.*;
class HashMapDemo
{
public static void main(String[] args)
{
HashMap m=new HashMap();
Integer i1=new Integer(10);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
40 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
In the above program i1 and i2 are duplicate keys because i1.equals(i2) returns
true.
In the above program if we replace HashMap with IdentityHashMap then i1 and i2
are not duplicate keys because i1==i2 is false hence in this case the output is
{10=pavan, 10=kalyan}.
System.out.println(m.get(10));//null
10==i1------false
10==i2------false
WeakHashMap:
It is exactly same as HashMap except the following differences:
In the case of normal HashMap, an object is not eligible for GC even though it
doesn't have any references if it is associated with HashMap. That is HashMap
dominates garbage collector.
But in the case of WeakHashMap if an object does not have any references then
it's always eligible for GC even though it is associated with WeakHashMap that is
garbage collector dominates WeakHashMap.
Example:
import java.util.*;
class WeakHashMapDemo
{
public static void main(String[] args)throws Exception
{
WeakHashMap m=new WeakHashMap();
Temp t=new Temp();
m.put(t,"ashok");
System.out.println(m);//{Temp=ashok}
t=null;
System.gc();
Thread.sleep(5000);
System.out.println(m);//{}
}
}
class Temp
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
41 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
In the above program if we replace WeakHashMap with normal HashMap then object
won't be destroyed by the garbage collector in this the output is
{Temp=ashok}
{Temp=ashok}
SortedMap:
TreeMap:
Constructors:
Example 1:
import java.util.*;
class TreeMapDemo
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
43 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
import java.util.*;
class TreeMapDemo
{
public static void main(String[] args)
{
TreeMap t=new TreeMap(new MyComparator());
t.put("XXX",10);
t.put("AAA",20);
t.put("ZZZ",30);
t.put("LLL",40);
System.out.println(t);//{ZZZ=30, XXX=10, LLL=40,
AAA=20}
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
Hashtable:
Constructors:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
44 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Example:
import java.util.*;
class HashtableDemo
{
public static void main(String[] args)
{
Hashtable h=new Hashtable();
h.put(new Temp(5),"A");
h.put(new Temp(2),"B");
h.put(new Temp(6),"C");
h.put(new Temp(15),"D");
h.put(new Temp(23),"E");
h.put(new Temp(16),"F");
System.out.println(h);//{6=C, 16=F, 5=A, 15=D,
2=B, 23=E}
}
}
class Temp
{
int i;
Temp(int i)
{
this.i=i;
}
public int hashCode()
{
return i;
}
public String toString()
{
return i+"";
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
45 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
46 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
47 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
Properties:
Constructor:
Methods:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
49 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
Example:
import java.util.*;
import java.io.*;
class PropertiesDemo
{
public static void main(String[] args)throws Exception
{
Properties p=new Properties();
FileInputStream fis=new
FileInputStream("abc.properties");
p.load(fis);
System.out.println(p);//{user=scott,
password=tiger, venki=8888}
String s=p.getProperty("venki");
System.out.println(s);//8888
p.setProperty("nag","9999999");
Enumeration e=p.propertyNames();
while(e.hasMoreElements())
{
String s1=(String)e.nextElement();
System.out.println(s1);//nag
//user
//password
//venki
}
FileOutputStream fos=new
FileOutputStream("abc.properties");
p.store(fos,"updated by ashok for scjp demo
class");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
50 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
}
}
Property file:
Example:
import java.util.*;
import java.io.*;
class PropertiesDemo
{
public static void main(String[] args)throws Exception
{
Properties p=new Properties();
FileInputStream fis=new
FileInputStream("db.properties");
p.load(fis);
String url=p.getProperty("url");
String user=p.getProperty("user");
String pwd=p.getProperty("pwd");
Connection con=DriverManager.getConnection(url,
user, pwd);
-------------------------------------------------
--------
-------------------------------------------------
-------
FileOutputStream fos=new
FileOutputStream("db.properties");
p.store(fos,"updated by ashok for scjp demo
class");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
51 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
1.5 enhancements
Queue interface
Diagram:
Assume we have to send sms for one lakh mobile numbers , before sending messages we
have to store all mobile numbers into Queue so that for the first inserted number first
message will be triggered(FIFO).
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
52 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
4. Object peek();
To return head element of the Queue without removal, if Queue is empty this
method returns null.
5. Object element();
It returns head element of the Queue and if Queue is empty then it will raise
Runtime Exception saying NoSuchElementException.
PriorityQueue:
Constructors:
Example 1:
import java.util.*;
class PriorityQueueDemo
{
public static void main(String[] args)
{
PriorityQueue q=new PriorityQueue();
//System.out.println(q.peek());//null
//System.out.println(q.element());//NoSuchElementExcepti
on
for(int i=0;i<=10;i++)
{
q.offer(i);
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
53 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
System.out.println(q);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
System.out.println(q.poll());//0
System.out.println(q);//[1, 3, 2, 7, 4, 5, 6, 10,
8, 9]
}
}
Note: Some platforms may not provide proper supports for PriorityQueue [windowsXP].
Example 2:
import java.util.*;
class PriorityQueueDemo
{
public static void main(String[] args)
{
PriorityQueue q=new PriorityQueue(15,new
MyComparator());
q.offer("A");
q.offer("Z");
q.offer("L");
q.offer("B");
System.out.println(q);//[Z, B, L, A]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=(String)obj1;
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
1.6v Enhancements :
NavigableSet:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
54 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
1. ceiling(e);
It returns the lowest element which is >=e.
2. higher(e);
It returns the lowest element which is >e.
3. floor(e);
It returns highest element which is <=e.
4. lower(e);
It returns height element which is <e.
5. pollFirst ();
Remove and return 1st element.
6. pollLast ();
Remove and return last element.
7. descendingSet ();
Returns SortedSet in reverse order.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
55 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Diagram:
Example:
import java.util.*;
class NavigableSetDemo
{
public static void main(String[] args)
{
TreeSet<Integer> t=new TreeSet<Integer>();
t.add(1000);
t.add(2000);
t.add(3000);
t.add(4000);
t.add(5000);
System.out.println(t);//[1000, 2000, 3000, 4000,
5000]
System.out.println(t.ceiling(2000));//2000
System.out.println(t.higher(2000));//3000
System.out.println(t.floor(3000));//3000
System.out.println(t.lower(3000));//2000
System.out.println(t.pollFirst());//1000
System.out.println(t.pollLast());//5000
System.out.println(t.descendingSet());//[4000,
3000, 2000]
System.out.println(t);//[2000, 3000, 4000]
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
56 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
NavigableMap:
It is the child interface of SortedMap and it defines several methods for navigation
purpose.
Diagram:
1. ceilingKey(e);
2. higherKey(e);
3. floorKey(e);
4. lowerKey(e);
5. pollFirstEntry();
6. pollLastEntry();
7. descendingMap();
Example:
import java.util.*;
class NavigableMapDemo
{
public static void main(String[] args)
{
TreeMap<String,String> t=new
TreeMap<String,String>();
t.put("b","banana");
t.put("c","cat");
t.put("a","apple");
t.put("d","dog");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
57 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
t.put("g","gun");
System.out.println(t);//{a=apple, b=banana,
c=cat, d=dog, g=gun}
System.out.println(t.ceilingKey("c"));//c
System.out.println(t.higherKey("e"));//g
System.out.println(t.floorKey("e"));//d
System.out.println(t.lowerKey("e"));//d
System.out.println(t.pollFirstEntry());//a=apple
System.out.println(t.pollLastEntry());//g=gun
System.out.println(t.descendingMap());//{d=dog,
c=cat, b=banana}
System.out.println(t);//{b=banana, c=cat, d=dog}
}
}
Diagram:
Collections class:
Collections class defines several utility methods for collection objects.
Collections class defines the following methods to perform sorting the elements of a List.
To sort the elements of List according to default natural sorting order in this case
the elements should be homogeneous and comparable otherwise we will get
ClassCastException.
The List should not contain null otherwise we will get NullPointerException.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
58 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
import java.util.*;
class CollectionsDemo
{
public static void main(String[] args)
{
ArrayList l=new ArrayList();
l.add("Z");
l.add("A");
l.add("K");
l.add("L");
l.add(new Integer(10));
//l.add(null);//NullPointerException
System.out.println("Before sorting :"+l);//[Z, A,
K, L, 10]
Collections.sort(l,new MyComparator());
System.out.println("After sorting :"+l);//[Z, L,
K, A, 10]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=(String)obj1;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
59 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
Collections class defines the following methods to search the elements of a List.
public static int binarySearch(List l,Object obj);
If the List is sorted according to default natural sorting order then we have to use
this method.
If the List is sorted according to Comparator then we have to use this method.
System.out.println(Collections.binarySearch(l,"Z"));//3
System.out.println(Collections.binarySearch(l,"J"));//-2
}
}
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
60 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Program 2:
import java.util.*;
class CollectionsSearchDemo
{
public static void main(String[] args)
{
ArrayList l=new ArrayList();
l.add(15);
l.add(0);
l.add(20);
l.add(10);
l.add(5);
System.out.println(l);//[15, 0, 20, 10, 5]
Collections.sort(l,new MyComparator());
System.out.println(l);//[20, 15, 10, 5, 0]
System.out.println(Collections.binarySearch(l,10,new
MyComparator()));//2
System.out.println(Collections.binarySearch(l,13,new
MyComparator()));//-3
System.out.println(Collections.binarySearch(l,17));//-6
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
Integer i1=(Integer)obj1;
Integer i2=(Integer)obj2;
return i2.compareTo(i1);
}
}
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
61 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
Conclusions:
Note:
For the list of n elements with respect to binary Search() method.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
62 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
public static void sort(primitive[] p);//any primitive data type we can give
To sort the elements of primitive array according to default natural sorting order.
public static void sort(object[] o);
To sort the elements of object[] array according to default natural sorting order.
In this case objects should be homogeneous and Comparable.
public static void sort(object[] o,Comparator c);
To sort the elements of object[] array according to customized sorting order.
Note: We can sort object[] array either by default natural sorting order (or) customized
sorting order but we can sort primitive arrays only by default natural sorting order.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
63 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
{
int[] a={10,5,20,11,6};
System.out.println("primitive array before
sorting");
for(int a1:a)
{
System.out.println(a1);
}
Arrays.sort(a);
System.out.println("primitive array after
sorting");
for(int a1: a)
{
System.out.println(a1);
}
String[] s={"A","Z","B"};
System.out.println("Object array before
sorting");
for(String s1: s)
{
System.out.println(s1);
}
Arrays.sort(s);
System.out.println("Object array after sorting");
for(String s1:s)
{
System.out.println(s1);
}
Arrays.sort(s,new MyComparator());
System.out.println("Object array after sorting by
Comparator:");
for(String s1: s)
{
System.out.println(s1);
}
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
All rules of Arrays class binarySearch() method are exactly same as Collections class
binarySearch() method.
System.out.println(Arrays.binarySearch(s,"Z"));//2
System.out.println(Arrays.binarySearch(s,"S"));//-3
Arrays.sort(s,new MyComparator());
System.out.println(Arrays.binarySearch(s,"Z",new
MyComparator()));//0
System.out.println(Arrays.binarySearch(s,"S",new
MyComparator()));//-2
System.out.println(Arrays.binarySearch(s,"N"));//-
4(unpredictable result)
}
}
Converting array to List:
Strictly speaking we are not creating an independent List object just we are
viewing array in List form.
By using List reference if we are performing any change automatically these
changes will be reflected to array reference similarly by using array reference if we
are performing any change automatically these changes will be reflected to the List
reference.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
65 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Collections
By using List reference if we are trying to perform any operation which varies the
size then we will get runtime exception saying UnsupportedOperationException.
By using List reference if we are trying to insert heterogeneous objects we will get
runtime exception saying ArrayStoreException.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
66 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
GENERICS
Agenda:
1. Introduction
2. Type-Safety
3. Type-Casting
4. Generic Classes
5. Bounded Types
6. Generic methods and wild card character(?)
7. Communication with non generic code
8. Conclusions
Introduction:
Case 1: Type-Safety
Arrays are always type safe that is we can give the guarantee for the
type of elements present inside array.
For example if our programming requirement is to hold String type of
objects it is recommended to use String array. In the case of string
array we can add only string type of objects by mistake if we are trying
to add any other type we will get compile time error.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
That is we can always provide guarantee for the type of elements present inside
array and hence arrays are safe to use with respect to type that is arrays are type
safe.
But collections are not type safe that is we can't provide any guarantee for the
type of elements present inside collection.
For example if our programming requirement is to hold only string type of objects
it is never recommended to go for ArrayList.
By mistake if we are trying to add any other type we won't get any compile time
error but the program may fail at runtime.
Example:
Hence we can't provide guarantee for the type of elements present inside
collections that is collections are not safe to use with respect to type.
Case 2: Type-Casting
In the case of array at the time of retrieval it is not required to perform any
type casting.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example:
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example:
For this ArrayList we can add only string type of objects by mistake if we are trying
to add any other type we will get compile time error that is through generics we
are getting type safety.
At the time of retrieval it is not required to perform any type casting we can assign
elements directly to string type variables.
Example:
Conclusion1:
Polymorphism concept is applicable only for the base type but not for parameter
type[usage of parent reference to hold child object is called polymorphism].
Example:
Concluson2:
Collections concept applicable only for objects , Hence for the parameter
type we can use any class or interface name but not primitive
value(type).Otherwise we will get compile time error.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Generic classes:
Example:
class ArrayList
{
add(Object o);
Object get(int index);
}
add() method can take object as the argument and hence we can add any type of
object to the ArrayList. Due to this we are not getting type safety.
The return type of get() method is object hence at the time of retrieval compulsory
we should perform type casting.
Example:
Example:
ArrayList<String> l=new ArrayList<String>();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example:
class ArrayList<String>
{
add(String s);
String get(int index);
}
add() method can take only string type as argument hence we can add only
string type of objects to the List.
By mistake if we are trying to add any other type we will get compile time
error.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example:
Based on our requirement we can create our own generic classes also.
Example:
class Account<T>
{}
Account<Gold> g1=new Account<Gold>();
Account<Silver> g2=new Account<Silver>();
Example:
class Gen<T>
{
T obj;
Gen(T obj)
{
this.obj=obj;
}
public void show()
{
System.out.println("The type of object is
:"+obj.getClass().getName());
}
public T getObject()
{
return obj;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
class GenericsDemo
{
public static void main(String[] args)
{
Gen<Integer> g1=new Gen<Integer>(10);
g1.show();
System.out.println(g1.getObject());
Output:
The type of object is: java.lang.Integer
10
Bounded types:
We can bound the type parameter for a particular range by using extends
keyword such types are called bounded types.
Example 1:
class Test<T>
{}
Test <Integer> t1=new Test < Integer>();
Test <String> t2=new Test < String>();
Here as the type parameter we can pass any type and there are no restrictions
hence it is unbounded type.
Example 2:
class Test<T extends X>
{}
If x is a class then as the type parameter we can pass either x or its child classes.
If x is an interface then as the type parameter we can pass either x or its
implementation classes.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example 1:
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example:
Example:
Example:
Example 1:
class Test <T extends Number&Runnable> {}(valid)
As the type parameter we can pass any type which extends Number class
and implements Runnable interface.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example 2:
class Test<T extends Number&Runnable&Comparable> {}(valid)
Example 3:
class Test<T extends Number&String> {}(invalid)
We can't extend more than one class at a time.
Example 4:
class Test<T extends Runnable&Comparable> {}(valid)
Example 5:
class Test<T extends Runnable&Number> {}(invalid)
We have to take 1st class followed by interface.
methodOne(ArrayList<String> l):
l.add("A");
l.add(null);
l.add(10);//(invalid)
Within the method we can add only String type of objects and null to the List.
methodOne(ArrayList<?> l):
We can use this method for ArrayList of any type but within the method we can't add
anything to the List except null.
Example:
l.add(null);//(valid)
l.add("A");//(invalid)
l.add(10);//(invalid)
If x is a class then this method is applicable for ArrayList of either x type or its child
classes.
If x is an interface then this method is applicable for ArrayList of either x type or its
implementation classes.
In this case also within the method we can't add anything to the List except null.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
If x is a class then this method is applicable for ArrayList of either x type or its super
classes.
If x is an interface then this method is applicable for ArrayList of either x type or
super classes of implementation class of x.
But within the method we can add x type objects and null to the List.
We can declare the type parameter either at class level or method level.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList<String> l=new ArrayList<String>();
l.add("A");
//l.add(10);//C.E:cannot find symbol,method add(int)
methodOne(l);
l.add(10.5);//C.E:cannot find symbol,method
add(double)
System.out.println(l);//[A, 10, 10.5, true]
}
public static void methodOne(ArrayList l)
{
l.add(10);
l.add(10.5);
l.add(true);
}
}
Conclusions :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Generics
Example 1:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList l=new ArrayList<String>();
l.add(10);
l.add(10.5);
l.add(true);
System.out.println(l);// [10, 10.5, true]
}
}
Example 2:
import java.util.*;
class Test
{
public void methodOne(ArrayList<String> l){}
public void methodOne(ArrayList<Integer> l){}
}
Output:
Compile time error.
Test.java:4: name clash:
methodOne(java.util.ArrayList<java.lang.String>) and me
thodOne(java.util.ArrayList<java.lang.Integer>) have the same
erasure
public void methodOne(ArrayList<String> l){}
For these ArrayList objects we can add only String type of objects.
Example:
l1.add("A");//valid
l1.add(10); //invalid
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Garbage Collection
1. Introduction:
2. The way to make an object eligible for GC
i. Nullifying the reference variable
ii. Reassign the reference variable
iii. Objects created inside a method
iv. Island of Isolation
3. The methods for requesting JVM to run GC
i. By System class
ii. By Runtime class
4. Finalization
o Case 1 : Just before destroying any object GC calls finalize() method on
the object
o Case 2 : We can call finalize() method explicitly
o Case 3 : finalize() method can be call either by the programmer or by the
GC
o Case 4 : On any object GC calls finalize() method only once
Memory leaks
Introduction:
In old languages like C++ programmer is responsible for both creation and
destruction of objects. Usually programmer is taking very much care while
creating object and neglect destruction of useless objects .Due to his negligence at
certain point of time for creation of new object sufficient memory may not be
available and entire application may be crashed due to memory problems.
But in java programmer is responsible only for creation of new object and his
not responsible for destruction of objects.
Sun people provided one assistant which is always running in the background for
destruction at useless objects. Due to this assistant the chance of failing java
program is very rare because of memory problems.
This assistant is nothing but garbage collector. Hence the main objective of GC is
to destroy useless objects.
The following are various possible ways to make an object eligible for GC:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
If an object is no longer required then we can make eligible for GC by assigning "null"
to all its reference variables.
Example:
If an object is no longer required then reassign all its reference variables to some other
objects then old object is by default eligible for GC.
Example:
Objects created inside a method are by default eligible for GC once method completes.
Example 1:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Example 2:
Example 3:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Example 4:
4.Island of Isolation:
Note: if an object doesn't have any reference then it always eligible for GC.
Note: Even though object having reference still it is eligible for GC some times.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
The following are various ways for requesting jvm to run GC:
By System class:
By Runtime class:
Example:
Runtime r=Runtime.getRuntime();
Once we got Runtime object we can call the following methods on that object.
Example:
import java.util.Date;
class RuntimeDemo
{
public static void main(String args[]){
Runtime r=Runtime.getRuntime();
System.out.println("total memory of the heap :"+r.totalMemory());
System.out.println("free memory of the heap :"+r.freeMemory());
for(int i=0;i<10000;i++)
{
Date d=new Date();
d=null;
}
System.out.println("free memory of the heap :"+r.freeMemory());
r.gc();
System.out.println("free memory of the heap :"+r.freeMemory());
}
}
Output:
Total memory of the heap: 5177344
Free memory of the heap: 4994920
Free memory of the heap: 4743408
Free memory of the heap: 5049776
Note : Runtime class is a singleton class so not create the object to use constructor.
Which of the following are valid ways for requesting jvm to run GC ?
System.gc(); (valid)
Runtime.gc(); (invalid)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Note: gc() method present in System class is static, where as it is instance method in
Runtime class.
Note: Over Runtime class gc() method , System class gc() method is recommended to
use.
Note: in java it is not possible to find size of an object and address of an object.
Finalization:
Just before destroying any object gc always calls finalize() method to perform
cleanup activities.
If the corresponding class contains finalize() method then it will be executed
otherwise Object class finalize() method will be executed.
Case 1:
Just before destroying any object GC calls finalize() method on the object which is
eligible for GC then the corresponding class finalize() method will be executed.
For Example if String object is eligible for GC then String class finalize()method is
executed but not Test class finalize()method.
Example:
class Test
{
public static void main(String args[]){
String s=new String("bhaskar");
Test t=new Test();
s=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method is executed");
}
}
Output:
End of main.
In the above program String class finalize()method got executed. Which has empty
implementation.
If we replace String object with Test object then Test class finalize() method will be
executed .
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Example:
class Test
{
public static void main(String args[]){
String s=new String("bhaskar");
Test t=new Test();
t=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method is executed");
}
}
Output:
finalize() method is executed
End of main
Case 2:
We can call finalize() method explicitly then it will be executed just like a normal
method call and object won't be destroyed. But before destroying any object GC always
calls finalize() method.
Example:
class Test
{
public static void main(String args[]){
Test t=new Test();
t.finalize();
t.finalize();
t=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method called");
}
}
Output:
finalize() method called.
finalize() method called.
finalize() method called.
End of main.
In the above program finalize() method got executed 3 times in that 2 times explicitly by
the programmer and one time by the gc.
Note: In Servlets we can call destroy() method explicitly from init() and service()
methods. Then it will be executed just like a normal method call and Servlet object
won't be destroyed.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
Diagram:
Case 3:
If the programmer calls explicitly finalize() method and while executing the finalize()
method if an exception raised and uncaught then the program will be terminated
abnormally.
If GC calls finalize() method and while executing the finalize()method if an exception
raised and uncaught then JVM simply ignores that exception and the program will be
terminated normally.
Example:
class Test
{
public static void main(String args[]){
Test t=new Test();
//t.finalize();-------line(1)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
t=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method called");
System.out.println(10/0);
}
If we are not comment line1 then programmer calling finalize() method explicitly and
while executing the finalize()method ArithmeticException raised which is uncaught
hence the program terminated abnormally.
If we are comment line1 then GC calls finalize() method and JVM ignores
ArithmeticException and program will be terminated normally.
Case 4:
Example:
class FinalizeDemo
{
static FinalizeDemo s;
public static void main(String args[])throws Exception{
FinalizeDemo f=new FinalizeDemo();
System.out.println(f.hashCode());
f=null;
System.gc();
Thread.sleep(5000);
System.out.println(s.hashCode());
s=null;
System.gc();
Thread.sleep(5000);
System.out.println("end of main method");
}
public void finalize()
{
System.out.println("finalize method called");
s=this;
}
}
Output:
D:\Enum>java FinalizeDemo
4072869
finalize method called
4072869
End of main method
Note:
The behavior of the GC is vendor dependent and varied from JVM to JVM hence we
can't expert exact answer for the following.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Garbage Collection
When ever the program runs with low memory then the JVM runs GC, but we can't
except exactly at what time.
Most of the GC's followed mark & sweap algorithm , but it doesn't mean every GC
follows the same algorithm.
Memory leaks:
An object which is not using in our application and it is not eligible for GC such
type of objects are called "memory leaks".
In the case of memory leaks GC also can't do anything the application will be
crashed due to memory problems.
In our program if memory leaks present then certain point we will get
OutOfMemoryException. Hence if an object is no longer required then it's
highly recommended to make that object eligible for GC.
By using monitoring tools we can identify memory leaks.
Example:
HPJ meter
HP ovo
IBM Tivoli These are monitoring tools.
J Probe (or memory management tools)
Patrol and etc
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
ENUM
Agenda
1. Introduction
2. Internal implementation of enum
3. Declaration and usage of enum
4. Enum vs switch statement
5. enum outside the class allowed modifiers
6. enum inside a class allowed modifiers
7. Enum vs inheritance
8. Java.lang.Enum class
o values() method
o ordinal() method
9. Speciality of java enum
10. Enum vs constructor
11. enum Vs Enum Vs Enumeration
Introduction :
Example 1:
enum Month
{
JAN,FEB,MAR, ... DEC; //; -->optional
}
Example 2:
enum Beer
{
KF,KO,RC,FO;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
Example 3:
Diagram:
Example 4:
enum Beer
{
KF,KO,RC,FO;//here semicolon is optional.
}
class Test
{
public static void main(String args[]){
Beer b1=Beer.KF;
System.out.println(b1);
}
}
Output:
D:\Enum>java Test
KF
Note:
Every enum constant internally static hence we can access by using "enum name".
Internally inside every enum toString() method is implemented to return name of
the constant.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
Until 1.4 versions the allowed argument types for the switch statement are byte, short,
char int.
But from 1.5 version onwards in addition to this the corresponding wrapper classes and
enum type also allowed.
That is from 1.5 version onwards we can use enum type as argument to switch
statement.
Diagram:
Example:
enum Beer
{
KF,KO,RC,FO;
}
class Test{
public static void main(String args[]){
Beer b1=Beer.RC;
switch(b1){
case KF:
System.out.println("it is childrens brand");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
break;
case KO:
System.out.println("it is too lite");
break;
case RC:
System.out.println("it is too hot");
break;
case FO:
System.out.println("buy one get one");
break;
default:
System.out.println("other brands are not good");
}
}}
Output:
D:\Enum>java Test
It is too hot
If we are passing enum type as argument to switch statement then every case label
should be a valid enum constant otherwise we will get compile time error.
Example:
enum Beer
{
KF,KO,RC,FO;
}
class Test{
public static void main(String args[]){
Beer b1=Beer.RC;
switch(b1){
case KF:
case RC:
case KALYANI:
}}}
Output:
Compile time error.
D:\Enum>javac Test.java
Test.java:11: unqualified enumeration constant name required
case KALYANI:
We can declare enum either outside the class or within the class but not inside a method.
public
default
strictfp.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
public private
default + protected
strictfp static
Example:
Enum vs inheritance:
Every enum in java is the direct child class of java.lang.Enum class hence it is not
possible to extends any other enum.
Every enum is implicitly final hence we can't create child enum.
Because of above reasons we can conclude inheritance concept is not applicable
for enum's explicitly. Hence we can't apply extends keyword for enum's .
But enum can implement any no. Of interfaces simultaneously.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
Example:
Example:
Java.lang.Enum class:
Every enum in java is the direct child class of java.lang.Enum class. Hence this class
acts as base class for all java enums.
It is abstract class and it is direct child class of "Object class"
It implements Serializable and Comparable.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
values() method:
Every enum implicitly contains a static values() method to list all constants of enum.
Example: Beer[] b=Beer.values();
ordinal() method:
Within enum the order of constants is important we can specify by its ordinal value. We
can find ordinal value(index value) of enum constant by using ordinal() method.
Example: public final int ordinal();
Example:
enum Beer
{
KF,KO,RC,FO;
}
class Test{
public static void main(String args[]){
Beer[] b=Beer.values();
for(Beer b1:b)//this is forEach loop.
{
System.out.println(b1+"......."+b1.ordinal());
}}}
Output:
D:\Enum>java Test
KF.......0
KO.......1
RC.......2
FO.......3
When compared with old languages enum, java's enum is more powerful because in
addition to constants we can take normal variables, constructors, methods etc which
may not possible in old languages.
Inside enum we can declare main method and even we can invoke enum directly from
the command prompt.
Example:
enum Fish{
GOLD,APOLO,STAR;
public static void main(String args[]){
System.out.println("enum main() method called");
}}
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
D:\Enum>java Fish
enum main() method called
In addition to constants if we are taking any extra members like methods then the list of
constants should be in the 1st line and should ends with semicolon.
If we are taking any extra member then enum should contain at least one constant. Any
way an empty enum is always valid.
Example:
Enum vs constructor:
Enum can contain constructor. Every enum constant represents an object of that enum
class which is static hence all enum constants will be created at the time of class loading
automatically and hence constructor will be executed at the time of enum class loading
for every enum constants.
Example:
enum Beer{
KF,KO,RC,FO;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
Beer(){
System.out.println("Constructor called.");
}
}
class Test{
public static void main(String args[]){
Beer b=Beer.KF; // --->1
System.out.println("hello.");
}}
Output:
D:\Enum>java Test
Constructor called.
Constructor called.
Constructor called.
Constructor called.
Hello.
If we comment line 1 then the output is Hello.
We can't create enum object explicitly and hence we can't invoke constructor directly.
Example:
enum Beer{
KF,KO,RC,FO;
Beer(){
System.out.println("constructor called");
}
}
class Test{
public static void main(String args[]){
Beer b=new Beer();
System.out.println(b);
}}
Output:
Compile time error.
D:\Enum>javac Test.java
Test.java:9: enum types may not be instantiated
Beer b=new Beer();
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
enum Beer
{
KF(100),KO(70),RC(65),Fo(90),KALYANI;
int price;
Beer(int price){
this.price=price;
}
Beer()
{
this.price=125;
}
public int getPrice()
{
return price;
}
}
class Test{
public static void main(String args[]){
Beer[] b=Beer.values();
for(Beer b1:b)
{
System.out.println(b1+"......."+b1.getPrice());
}}}
output :
KF.......100
KO.......70
RC.......65
FO .......90
KALYANI.......125
Inside enum we can take both instance and static methods but it is not possible to take
abstract methods.
Case 1:
Every enum constant represents an object hence whatever the methods we can apply on
the normal objects we can apply the same methods on enum constants also.
Beer.KF==Beer.RC----------------------------> false
Beer.KF.equals(Beer.RC) -------------------> false
Beer.KF < Beer.RC------------------------------> invalid
Beer.KF.ordinal() < Beer.RC.ordinal()------> valid
Case 2:
Example 1:
package pack1;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
package pack2;
//import static pack1.Fish.*;
import static pack1.Fish.STAR;
class A
{
public static void main(String args[]){
System.out.println(STAR);
}
}
Import pack1.*; ---------------------------->invalid
Import pack1.Fish; ------------------------->invalid
import static pack1.Fish.*; --------------->valid
import static pack1.Fish.STAR; ---------->valid
Example 3:
package pack3;
//import pack1.Fish;
import pack1.*;
//import static pack1.Fish.GUPPY;
import static pack1.Fish.*;
class B
{
public static void main(String args[]){
Fish f=Fish.STAR;
System.out.println(GUPPY);
}
}
Note :
If we want to use classname directly from outside package we should write normal import
, If we want to access static method or static variable without classname directly then
static import is required.
Case 3:
Example 1:
enum Color
{
BLUE,RED,GREEN;
public void info()
{
System.out.println("Universal color");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
class Test
{
public static void main(String args[]){
Color[] c=Color.values();
for(Color c1:c)
{
c1.info();
}}}
Output:
Universal color
Universal color
Universal color
Example 2:
enum Color
{
BLUE,RED
{
public void info(){
System.out.println("Dangerous color");
}
},GREEN;
public void info()
{
System.out.println("Universal color");
}
}
class Test
{
public static void main(String args[]){
Color[] c=Color.values();
for(Color c1:c)
{
c1.info();
}}}
Output:
Universal color
Dangerous color
Universal color
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir ENUM
enum : enum is a keyword which can be used to define a group of named constants.
Enum :
It is a class present in java.lang package .
Every enum in java is the direct child class of this class. Hence this Enum class acts as
base class for all java enum's .
Enumeration :
It is a interface present in java.util package .
We can use Enumeration to get the objects one by one from the Collections.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
Internationalization (I18N)
Agenda
1. Introduction
2. Locale
o How to create a Locale object
o Important methods of Locale class
3. NumberFormat
o Getting NumberFormat object for the default Locale
o Getting NumberFormat object for the specific Locale
o Requirements
Write a program to display java number form into Italy specific form
Write a program to print a java number in INDIA, UK, US and ITALY
currency formats
o Setting Maximum, Minimum, Fraction and Integer digits
4. DateFormat
o Getting DateFormat object for default Locale
o Getting DateFormat object for specific Locale
o Requirements
Write a program to represent current system date in all possible
styles of us format
Write a program to represent current system date in UK, US and
ITALY styles
o Getting DateFormat object to get both date and time
Introduction
The process of designing a web application such that it supports various countries,
various languages without performing any changes in the application is called
Internationalization.
If the request is coming from India then the response should be in India specific form ,
and if the request is from US then the response should be in US specific form.
1. Locale
2. NumberFormat
3. DateFormat
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
1. Locale:
Example:
Locale. UK
Locale. US
Locale. ITALY
Locale. CHINA
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
{
//System.out.print("ISO language is :");
//System.out.println(s4);
}
String[] s4=Locale.getISOCountries();
for(String s5:s4)
{
System.out.print("ISO Country is:");
System.out.println(s5);
}
Locale[] s=Locale.getAvailableLocales();
for(Locale s1:s)
{
//System.out.print("Available locales is:");
//System.out.println(s1.getDisplayCountry()+"......"+s1.getDis
playLanguage());
}}}
2. NumberFormat:
Various countries follow various styles to represent number.
Example:
double d=123456.789;
1,23,456.789------------INDIA
123,456.789-------------US
123.456,789-------------ITALY
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
The methods are exactly same but we have to pass the corresponding Locale object
as argument.
Example: public static NumberFormat getNumberInstance(Locale l);
Once we got NumberFormat object we can call the following methods to format
and parse numbers.
public String format(long l);
public String format(double d);
To convert a number from java form to Locale specific form.
public Number parse(String source)throws ParseException
To convert from Locale specific String form to java specific form.
Requirement: Write a program to display java number form into Italy specific form.
Example:
import java.util.*;
import java.text.*;
class NumberFormatDemo
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
Program:
import java.util.*;
import java.text.*;
class NumberFormatDemo
{
public static void main(String args[]){
double d=123456.789;
Locale INDIA=new Locale("pa","IN");
NumberFormat nf=NumberFormat.getCurrencyInstance(INDIA);
System.out.println("INDIA notation is :"+nf.format(d));
NumberFormat nf1=NumberFormat.getCurrencyInstance(Locale.UK);
System.out.println("UK notation is :"+nf1.format(d));
NumberFormat nf2=NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("US notation is :"+nf2.format(d));
NumberFormat
nf3=NumberFormat.getCurrencyInstance(Locale.ITALY);
System.out.println("ITALY notation is :"+nf3.format(d));
}}
Output:
INDIA notation is: INR 123,456.79
UK notation is: ú123,456.79
US notation is: $123,456.79
ITALY notation is: Ç 123.456,79
Example:
import java.text.*;
public class NumberFormatExample
{
public static void main(String[] args){
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
NumberFormat nf=NumberFormat.getInstance();
nf.setMaximumFractionDigits(3);
System.out.println(nf.format(123.4));
System.out.println(nf.format(123.4567));
nf.setMinimumFractionDigits(3);
System.out.println(nf.format(123.4));
System.out.println(nf.format(123.4567));
nf.setMaximumIntegerDigits(3);
System.out.println(nf.format(1.234));
System.out.println(nf.format(123456.789));
nf.setMinimumIntegerDigits(3);
System.out.println(nf.format(1.234));
System.out.println(nf.format(123456.789));
}}
Output:
123.4
123.457
123.400
123.457
1.234
456.789
001.234
456.789
3. DateFormat:
Various countries follow various styles to represent Date. We can format the date
according to a particular locale by using DateFormat class.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
Once we got DateFormat object we can format and parse Date by using the following
methods.
Requirement: Write a program to represent current system date in all possible styles of
us format.
Requirement: Write a program to represent current system date in UK, US and ITALY
styles.
Program:
import java.text.*;
import java.util.*;
public class DateFormatDemo
{
public static void main(String args[]){
DateFormat UK=DateFormat.getDateInstance(0,Locale.UK);
DateFormat US=DateFormat.getDateInstance(0,Locale.US);
DateFormat ITALY=DateFormat.getDateInstance(0,Locale.ITALY);
System.out.println("UK style is :"+UK.format(new Date()));
System.out.println("US style is :"+US.format(new Date()));
System.out.println("ITALY style is :"+ITALY.format(new
Date()));
}
}
Output:
UK style is: Wednesday, 20 July 2011
US style is: Wednesday, July 20, 2011
ITALY style is: mercoled 20 luglio 2011
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Internationalization(I18N)
Example:
import java.text.*;
import java.util.*;
public class DateFormatDemo
{
public static void main(String args[]){
DateFormat
ITALY=DateFormat.getDateTimeInstance(0,0,Locale.ITALY);
System.out.println("ITALY style is:"+ITALY.format(new
Date()));
}
}
Output:
ITALY style is: mercoled 20 luglio 2011 23.21.30 IST
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Development
Agenda
1. Introduction
2. Javac
3. Java
4. Classpath
5. Jar file
6. What is the difference between Jar, War and Ear ?
7. Various Commands
o To create a jar file
o To extract a jar file
8. System properties
9. How to set system property from the command prompt
10. What is the difference between path and classpath ?
11. What is the difference between JDK, JRE and JVM ?
12. Shortcut way to place a jar files
13. Web Applications Vs Enterprise Applications
14. Web Server Vs Application Server
15. Creation of executable jar file
16. In how many ways we can run a java program
Introduction
Javac:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Syntax:
Java:
Syntax:
Note :
We can compile any number of source files at a time but we can run only one .class file.
Classpath:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Class path describes the location where the required ".class files" are available.
Java compiler & JVM will use classpath to locate required class files.
Once if you close the command prompt automatically this class path will be lost.
3. We can set the class path for a particular command level by using "–cp" (or) "–class
path". This class path is applicable only for that command execution. After
executing the command this classpath will be lost.
Among the 3 ways of setting the class path the most common way is setting class
path at command level by using "–cp".
Note :
Bydefault java compiler & JVM will search in current working directory for the
required .class files
If we set the classpath explicitly then JVM will search only in our specified location
for .class file and it won't the search in current working directory.
Once we set the classpath we can run our program from any location.
Example 1:
class Rain
{
public static void main(String args[]){
System.out.println("Raining of jobs these days");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Analysis:
Example 2:
Analysis:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Example 3:
Analysis:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Example 4:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Analysis:
Jar file:
If several dependent classes present then it is never recommended to set the classpath
individual for every component. We have to group all these ".class files" into a single zip
file and we have to make that zip file available to the classpath.This zip file is nothing but
jar file.
Example 1 : To develop a Servlet class all dependent classes are available into a single jar
file (Servlet-api.jar) hence we have to place this jar file available in the classpath to
compile and run Servlet program.
Example 2 : To use Log4J in our application all dependent classes are available in log4j.jar
hence to use Log4J in our application. We have to use this jar file in the classpath.
War (web archive): Represents a web application which may contains Servlets, JSP, HTML
pages, JavaScript files etc.
If we maintain web application in the form of war file, the project delevering ,
transportation and deployment will become easy.
In generally an ear file consists of a group of war files and jar files.
Ear=war+ jar
Various Commands:
C:\>javac BhaskarColorFulCalc.java
C:\>jar -cvf bhaskar.jar BhaskarColorFulCalc.class
Example 6:
class Client{
public static void main(String args[]){
System.out.println(BhaskarColorFulCalc.add(10,20));
System.out.println(BhaskarColorFulCalc.multiply(10,20));
}}
Analysis:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
Note: Whenever we are placing jar file in the classpath compulsory we have to specify
the name of the jar file also and just location is not enough.
System properties:
For every system some persistence information is available in the form of system
properties. These may include name of the os, java version, vendor of jvm ,
userCountry etc.
We can get system properties by using getProperties() method of system class.
Example 7:
import java.util.*;
class Test{
public static void main(String args[]){
//Properties is a class in util package.
//here getPropertes() method returns the Properties object.
Properties p=System.getProperties();
p.list(System.out);
}
}
Command:
The main advantage of setting System Properties is we can customize the behaviour of
java program.
class Test {
public static void main(String args[]) {
String course=System.getProperty("course");
if(course.equals("scjp")) {
System.out.println("SCJP Information");
}
else
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
output:
c:> java -Dcourse=scjp Test
SCJP Information
c:> java -Dcourse=scwcd Test
other course information
Path: We can use "path variable" to specify the location where required binary
executables are available.
If we are not setting path then "java" and "Javac" commands won't work.
Classpath: We can use "classpath variable" to describe location where required class
files are available.
If we are not setting classpath then our program won't compile and run.
JDK (java development kit): To develop and run java applications the required
environment is JDK.
JRE (java runtime environment): To run java application the required environment is JRE.
JVM (java virtual machine): To execute java application the required virtual machine is
JVM.
JVM is an interpreter which is responsible to run our program line by line.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
JDK=JRE+Development Tools.
JRE=JVM+Libraries.
JRE is the part of JDK.
Jvm is the part of JRE.
Note: At client side JRE is required and at developers side JDK is required.
On the developers machine we have to install JDK , where as on the client machine we
have to install JRE.
Shortcut way to place a jar files available in the classpath:
If we are placing jar file in the following location then it is not required to set classpath
explicitly.
Bydefault it's available for Java compiler and JVM.
Diagram:
Web Server provides environment to run web applications, webserver provides support
only for web related technologies like Servlets, jsp.
Ex: Tomcat server
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Devlopment
javac JarDemo.java
1. java JarDemo
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
59 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
pre-increment ex : y=++x ;
Increment Operator
post-increment ex: y=x++;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
60 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
pre-decrement ex : y=--x ;
Decrement Operator
post-decrement ex : y=x-- ;
The following table will demonstrate the use of increment and decrement operators.
Expression initial value of x value of y final value of x
y=++x 10 11 11
y=x++ 10 10 11
y=--x 10 9 9
y=x-- 10 10 9
Ex :
1. Increment & decrement operators we can apply only for variables but not for
constant values.other wise we will get compile time error .
Ex :
int x = 4;
int y = ++x;
System.out.pritnln(y); //output : 5
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
61 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Ex 2 :
int x = 4;
int y = ++4;
System.out.pritnln(y);
int x= 4;
int y = ++(++x);
System.out.println(y);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
62 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
3. For the final variables we can't apply increment or decrement operators ,other
wise we will get compile time error
Ex:
final int x = 4;
x++; // x = x + 1
System.out.println(x);
4. We can apply increment or decrement operators even for primitive data types
except boolean .
Ex:
int x=10;
x++;
System.out.println(x); //output :11
char ch='a';
ch++;
System.out.println(ch); //b
double d=10.5;
d++;
System.out.println(d); //11.5
boolean b=true;
b++;
System.out.println(b);
CE : operator ++ can't be applied to boolean
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
63 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
If we are applying any arithmetic operators b/w 2 operands 'a' & 'b' the result type is
max(int , type of a , type of b)
Ex 1:
byte a=10;
byte b=20;
byte c=a+b; //byte c=byte(a+b); valid
System.out.println(c);
Ex:
byte b=10;
b++;
System.out.println(b); //output : 11
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
64 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Arithmetic Operator :
1. If we apply any Arithmetic operation b/w 2 variables a & b ,
the result type is always max(int , type of a , type of b)
2. Example :
3.
4. byte + byte=int
5. byte+short=int
6. short+short=int
7. short+long=long
8. double+float=double
9. int+double=double
10. char+char=int
11. char+int=int
12. char+double=double
13.
14. System.out.println('a' + 'b'); // output : 195
15. System.out.println('a' + 1); // output : 98
16. System.out.println('a' + 1.2); // output : 98.2
17. In integral arithmetic (byte , int , short , long) there is no way to represents
infinity , if infinity is the result we will get the ArithmeticException / by zero
System.out.println(10/0); // output RE : ArithmeticException / by zero
But in floating point arithmetic(float , double) there is a way represents infinity.
System.out.println(10/0.0); // output : infinity
For the Float & Double classes contains the following constants :
1. POSITIVE_INFINITY
2. NEGATIVE_INFINITY
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
65 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
18. NaN(Not a Number) in integral arithmetic (byte , short , int , long) there is no
way to represent undefine the results. Hence the result is undefined we will get
ArithmericException in integral arithmetic
System.out.println(0/0); // output RE : ArithmeticException / by zero
But floating point arithmetic (float , double) there is a way to represents
undefined the results .
For the Float , Double classes contains a constant NaN , Hence the result is
undefined we won't get ArithmeticException in floating point arithmetics .
System.out.println(0.0/0.0); // output : NaN
System.out.println(-0.0/0.0); // output : NaN
19. For any 'x' value including NaN , the following expressions returns false
20. // Ex : x=10;
21. System.out.println(10 < Float.NaN ); // false
22. System.out.println(10 <= Float.NaN ); // false
23. System.out.println(10 > Float.NaN ); // false
24. System.out.println(10 >= Float.NaN ); // false
25. System.out.println(10 == Float.NaN ); // false
26. System.out.println(Float.NaN == Float.NaN ); // false
27.
28. System.out.println(10 != Float.NaN ); //true
29. System.out.println(Float.NaN != Float.NaN ); //true
30. ArithmeticException :
1. It is a RuntimeException but not compile time error
2. It occurs only in integral arithmetic but not in floating point arithmetic.
3. The only operations which cause ArithmeticException are : ' / ' and ' % '
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
66 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Example :
Example :
6. Example :
a=b+c+d ;
CE : incompatible type
found : int
required : java.lang.String
7. Example :
8.
a=a+b+c ; // valid
9. Example :
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
67 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
10.
b=a+c+d ;
11.
12.
CE : incompatible type
13.
found : java.lang.String
14.
required : int
15. Example :
16.
b=b+c+d ; // valid
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
68 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
12. To use the equality operators between object type compulsory these should be
some relation between argument types(child to parent , parent to child) ,
Otherwise we will get Compiletime error incompatible types
13. Thread t=new Thread( ) ;
14. Object o=new Object( );
15. String s=new String("durga");
16. System.out.println(t ==o); //false
17. System.out.println(o==s); //false
18. System.out.println(s==t);
19. CE : incompatible types : java.lang.String and java.lang.Thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
69 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
20. For any object reference of on r==null is always false , but null==null is always
true .
21. String s= new String("ashok");
22. System.out.println(s==null); //output : false
23. String s=null ;
24. System.out.println(r==null); //true
25. System.out.println(null==null); //true
26. What is the difference between == operator and .equals( ) method ?
In general we can use .equals( ) for content comparision where as == operator
for reference comparision
27.
28. String s1=new String("ashok");
29. String s2=new String("ashok");
30. System.out.println(s1==s2); //false
31. System.out.println(s1.equals(s2)); //true
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
70 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
instanceof operator :
1. We can use the instanceof operator to check whether the given an object is
perticular type or not
Ex :
public class Thread extends Object implements Runnable {
}
16. To use instance of operator compulsory there should be some relation between
argument types (either child to parent Or parent to child Or same type)
Otherwise we will get compile time error saying inconvertible types
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
71 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
17.
18. Thread t=new Thread( );
19. System.out.println(t instanceof String);
20. CE : inconvertable errors
21. found : java.lang.Thread
22. required : java.lang.String
23. Whenever we are checking the parent object is child type or not by using
instanceof operator that we get false.
24. Object o=new Object( );
25. System.out.println(o instanceof String );
//false
26.
27. Object o=new String("ashok");
28. System.out.println(o instanceof String); //true
29. For any class or interface X null instanceof X is always returns false
30. System.out.println(null instanceof X); //false
Example:
System.out.println(true&false);//false
System.out.println(true|false);//true
System.out.println(true^false);//true
We can apply bitwise operators even for integral types also.
Example:
System.out.println(4&5);//4 using binary digits
System.out.println(4|5);//5 4-->100
System.out.println(4^5);//1 5-->101
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
72 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Example :
2. Example :
3. System.out.println(~true); // CE :opetator ~ can not be applied to
boolean
4. System.out.println(~4); //-5
5.
6. description about above program :
7. 4--> 0 000.......0100 0-----+ve
8. ~4--> 1 111.......1011 1--- -ve
9.
10. 2's compliment of ~4 --> 000....0100 add 1
11. result is : 000...0101 =5
12. Note : The most significant bit access as sign bit 0 means +ve number , 1 means -
ve number.
+ve number will be represented directly in memory where as -ve number will be
represented in 2's comlement form.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
73 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Example :
Example:
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println(!4);//CE : operator ! can not be applied to int
Summary:
&
| Applicable for both boolean and integral types.
^
~ --------Applicable for integral types only but not for boolean types.
! --------Applicable for boolean types only but not for integral types.
x&&y : y will be evaluated if and only if x is true.(If x is false then y won't be evaluated
i.e., If x is ture then only y will be evaluated)
x||y : y will be evaluated if and only if x is false.(If x is true then y won't be evaluated i.e.,
If x is false then only y will be evaluated)
Example :
int x=10 , y=15 ;
if(++x < 10 || ++y > 15) { //instead of || using &,&&, |
operators
x++;
}
else {
y++;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
74 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
System.out.println(x+"----"+y);
Output:
operator x y
& 11 17
| 12 16
&& 11 16
|| 12 16
Example :
int x=10 ;
if(++x < 10 && ((x/0)>10) ) {
System.out.println("Hello");
}
else {
System.out.println("Hi");
}
output : Hi
1. implicit
2. explicit
6.
7. Example 1:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
75 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
8. int x='a';
9. System.out.println(x);//97
10. Note: Compiler converts char to int type automatically by implicit type casting.
11. Example 2:
12. double d=10;
13. System.out.println(d);//10.0
6.
7. Example :
8.
9. int x=130;
10. byte b=(byte)x;
11. System.out.println(b); //-126
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
76 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
12.
13. Example 2 :
14.
15. int x=130;
16. byte b=x;
17. System.out.println(b); //CE : possible loss of precision
18. When ever we are assigning higher datatype value to lower datatype value
variable by explicit type-casting ,the most significant bits will be lost i.e., we have
considered least significant bits.
19. Example 3 :
20.
21. int x=150;
22. short s=(short)x;
23. byte b=(byte)x;
24. System.out.println(s); //150
25. System.out.println(b); //-106
26. When ever we are assigning floating point value to the integral types by explicit
type casting , the digits of after decimal point will be lost .
27. Example 4:
28.
29. double d=130.456 ;
30.
31. int x=(int)d ;
32. System.out.println(x); //130
33.
34. byte b=(byte)d ;
35. System.out.println(b); //-206
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
77 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Assignment Operator :
There are 3 types of assignment operators
1. Simple assignment:
Example: int x=10;
2. Chained assignment:
3. Example:
4. int a,b,c,d;
5. a=b=c=d=20;
6. System.out.println(a+"---"+b+"---"+c+"---"+d);//20---20---20---20
7. int b , c , d ;
8. int a=b=c=d=20 ; //valid
Example 2:
int a=b=c=d=30;
CE : can not find symbol
symbol : variable b
location : class Test
9. Compound assignment:
1. Sometimes we can mixed assignment operator with some other operator
to form compound assignment operator.
2. Ex:
3. int a=10 ;
4. a +=20 ;
5. System.out.println(a); //30
6. The following is the list of all possible compound assignment operators in
java.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
78 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
byte b=10;
b=b+1;
System.out.println(b);
byte b=10;
b++;
CE :
System.out.println(b); //11
possible loss of precission
found : int
required : byte
byte b=127;
byte b=10;
b+=3;
b+=1;
System.out.println(b);
System.out.println(b); //11
//-126
Ex :
int a , b , c , d ;
a=b=c=d=20 ;
a += b-= c *= d /= 2 ;
System.out.println(a+"---"+b+"---"+c+"---"+d);// -160...-180---200---10
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
79 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Conditional Operator (? :)
The only possible ternary operator in java is conditional operator
Ex 1 :
int x=(10>20)?30:40;
System.out.println(x); //40
Ex 2 :
int x=(10>20)?30:((40>50)?60:70);
System.out.println(x); //70
new operator :
1. We can use "new" operator to create an object.
2. There is no "delete" operator in java because destruction of useless objects is the
responsibility of garbage collector.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
80 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
[ ] operator:
We can use this operator to declare under construct/create arrays.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
81 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
Ex 2:
int i=1;
i+=++i + i++ + ++i + i++;
System.out.println(i); //13
description :
i=i + ++i + i++ + ++i + i++ ;
i=1+2+2+4+4;
i=13;
new Vs newInstance( ) :
1. new is an operator to create an objects , if we know class name at the beginning
then we can create an object by using new operator .
2. newInstance( ) is a method presenting class " Class " , which can be used to
create object.
3. If we don't know the class name at the beginning and its available dynamically
Runtime then we should go for newInstance() method
4. public class Test {
5. public static void main(String[] args) Throws Exception {
6. Object o=Class.forName(arg[0]).newInstance( ) ;
7. System.out.println(o.getClass().getName( ) );
8. }
9. }
10. If dynamically provide class name is not available then we will get the
RuntimeException saying ClassNotFoundException
11. To use newInstance( ) method compulsory corresponding class should contains
no argument constructor , otherwise we will get the RuntimeException saying
InstantiationException.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
82 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
83 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Operators & Assignments
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
84 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Assertions
Agenda
1. Introduction
2. Assert as keyword and identifier
3. Types of assert statements
i. Simple version
ii. Argumented version
4. Various runtime flags
5. Appropriate and Inappropriate use of assertions
6. AssertionError
Introduction:
1. The most common way of debugging is uses of sops. But the main disadvantage
of sops is after fixing the bug compulsory we should delete extra added sops
otherwise these sops also will be executed at runtime which impacts performance
of the system and disturbs logging mechanism.
2. To overcome these problems sun people introduced assertions concept in 1.4
versions.
3. The main advantage of assertions over sops is based on our requirement we can
enable or disable assertions and by default assertions are disable hence after
fixing the bug it is not required to delete assert statements explicitly.
4. Hence the main objective of assertions is to perform debugging.
5. Usually we can perform debugging either in development environment or Test
environment but not in production environment hence assertions concept is
applicable for the development and test environments but not for the production.
assert keyword is introduced in 1.4 version hence from 1.4 version onwards we can't use
assert as identifier but until 1.3 we can use assert as an identifier.
Example:
class Test
{
public static void main(String[] args)
{
int assert=10;
System.out.println(assert);
}
}
Output:
javac Test.java(invalid)
As of release 1.4, 'assert' is a keyword, and may not be used as an identifier. (Use
-source 1.3 or lower to use 'assert' as an identifier)
javac -source 1.3 Test.java(valid)
The code compiles fine but warnings will be generated.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
java Test
10
1. Simple version
2. Argumented version
Simple version:
If 'b' is true then our assumption is correct and continue rest of the program
normally.
If 'b' is false our assumption is fails and hence stop the program execution by
raising assertion error.
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10);
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test(invalid)
R.E: AssertionError
Note: By default assertions are disable and hence they won't be executed by default we
have to enable assertions explicitly by using -ea option.
Argumented version:
By using argumented version we can argument some extra information with the
assertion error.
Syntax: assert(b):e;
'b' should be boolean type.
'e' can be any type.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10):"here x value should be >10 but it
is not";
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test(invalid)
R.E: AssertionError: here x value should be >10 but it is not
Conclusion 1:
assert(b):e;
'e' will be evaluated if and only if 'b' is false that is if 'b' is true then 'e' won't be
evaluated.
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x==10):++x;
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test
10
Conclusion 2:
assert(b):e;
For the 2nd argument we can take method call also but void type method call not
allowed.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10):methodOne();
;;;;;;;;;
System.out.println(x);
}
public static int methodOne()
{
return 999;
}
}
Output:
javac Test.java
java Test
10
java -ea Test
R.E: AssertionError: 999
If methodOne() method return type is void then we will get compile time error saying
void type not allowed here.
Example: We can use these flags in combination also but all these flags will be executed
from left to right.
Example:
java -ea -esa -dsa -ea -dsa -esa Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
At the end in both system and non system class assertions are enabled.
Example:
It is possible to enable (or) disable assertions either class wise (or) package wise also.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Example:
Example:
switch(x)
{
case 1:
System.out.println("Jan");
break;
case 2:
System.out.println("Feb");
break;
case 3:
System.out.println("Mar");
break;
case 12:
System.out.println("Dec");
break;
default:assert(false);
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
AssertionError:
Example:
class Test {
public static void main(String[] args){
int x=10;
try {
assert(x>10);
}
catch (AssertionError e) {
System.out.println("not a good programming practice to
catch AssertionError");
}
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
Not a good programming practice to catch AssertionError
10
Example 1:
class One
{
public static void main(String[] args)
{
int assert=0;
}
}
class Two
{
public static void main(String[] args)
{
assert(false);
}
}
Output:
Javac -source 1.3 one.java//compiles with warnings.
Javac -source 1.4 one.java//compile time error.
Javac -source 1.3 Two.java//compile time error.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Example 4:
Example 5:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Assertions
Example 6:
Note: Because assert statement changes the value of Z. By using assert statement we can
not changes the value that is why it is inappropriate.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
152 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
JVM Architecture
1) Virtual Machine
2) Types of Virtual Machines
3) Basic JVM Architecture
5) Types of ClassLoaders
Boot Strap ClassLoader
Extension ClassLoader
Application ClassLoader
7) Customized ClassLoader
Need of Customized ClassLoader
Pseudo Code to Define Customized
ClassLoader
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
153 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Virtual Machine:
It Provides Several Logical Systems on the Same Computer with Strong Isolation from Each
Other.
Examples:
1) KVM (Kernel Based Virtual Machine) for Linux Systems
2) VMware (Virtual Machine ware)
3) Xen
4) Cloud Computing
The main advantage of Hard-ware based Virtual Machines is for effective utilization of hard-
ware resources.
These Virtual Machines Acts as Runtime Engines to Run a Particular Programming Language
Application.
Examples:
1) JVM Acts as Runtime Engine to Run Java Applications
2) PVM (Parrot VM) Acts as Runtime Engine to Run Scripting Languages Like PERL.
3) CLR (Common Language Runtime) Acts as Runtime Engine to Run .Net Based
Applications.
JVM
JVM is the Part of JRE.
JVM is Responsible to Load and Run Java Applications.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
154 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
ClassLoader
Class Files
Sub System
Various Memory
Areads of JVMe Data
Native
Native Native
Execution
Method Method
Engine
Interface Libraries
Libraries
OS
1) Loading:
Loading Means Reading Class Files and Store Corresponding Binary Data in Method Area.
For Each Class File JVM will Store the following Information in Method Area.
1) Fully Qualified Name of the Loaded Class OR Interface ORenum.
2) Fully Qualified Name of its Immediate Parent Class.
3) Whether .class File is related to Class OR Interface OR enum.
4) The Modifiers Information
5) Variables OR Fields Information
6) Methods Information
7) Constant Pool Information and so on.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
155 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
After loading .class File Immediately JVM will Creates an Object of the Type class Class to
Represent Class Level Binary Information on the Heap Memory.
Student.class Student.class
Information classClass Object for
Student.class
Used
By
Programmer
The Class Object can be used by Programmer to get Class Level Information Like Fully
Qualified Name of the Class, Parent Name, Methods and Variables Information Etc.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
156 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
In the Above Example by using Student class Class Object we can get its Methods and Variable
Information.
Note: For Every loaded .class file Only One Class Object will be Created, even though we are
using Class Multiple Times in Our Application.
class Test2 {
public static void main(String args[]) {
Student s1 = new Student();
Student s2 = new Student();
Class c1 = s1.getClass();
Class c2 = s2.getClass();
2) Linking:
Linking Consists of 3 Activities
1) Verification
2) Preparation
3) Resolution
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
157 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Verification:
It is the Process of ensuring that Binary Representation of a Class is Structurally Correct
OR Not.
That is JVM will Check whether .class File generated by Valid Compiler OR Not.i.ewhether
.class File is Properly Formatted OR Not.
Internally Byte Code Verifier which is Part of ClassLoader Sub System is Responsible for
this Activity.
If Verification Fails then we will get Runtime Exception Saying java.lang.VerifyError.
Preparation:
In this Phase JVM will Allocate Memory for the Class Level Static Variables and
Assign DefaultValues (But Not Original Values).
Resolution:
It is the Process of Replaced Symbolic References used by the Loaded Type with Original
References.
Symbolic References are Resolved into Direct References by searching through Method
Area to Locate the Referenced Entity.
class Test {
public static void main(String[] args) { Test.class
String s = new String("Durga"); String.class
Student s1 = new Student(); Student.class
} Object.class
}
3) Initialization:
In this Phase All Static Variables will be assigned with Original Values and Static Blocks will
be executed from fromtop to bottom and from Parent to Child.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
158 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Linking
Verification
Resolution
Note: While Loading, Linking and Initialization if any Error Occurs then we will get
Runtime Exception Saying java.lang.LinkageError. Of course VerifyError is child class of
LinkageError only.
Types of ClassLoaders:
1) BootstrapClassLoader OR PrimordialClassLoader
2) ExtensionClassLoader
3) ApplicationClassLoader OR SystemClassLoader
BootstrapClassLoader
Location:
JDK
JRE
Lib
*.jar
(rt.jar)
This Location is Called BootstrapClassPath.
That is BootstrapClassLoader is Responsible to Load Classes fromBootstrapClassPath.
BootstrapClassLoader is by Default Available with the JVM.
It is implemented in Native Languages Like C and C++.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
159 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Extension ClassLoader:
This ClassLoader is implemented in Java and the corresponding .class File Name is
sun.misc.Launcher$ExtClassLoader.class
Bootstrap ClassLoader
Extension ClassLoader
Application ClassLoader
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
160 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Bootstrap ClassLoader
ExtensionClassLoader
class Test {
public static void main(String[] args) {
System.out.println(String.class.getClassLoader());
System.out.println(Student.class.getClassLoader());
System.out.println(Test.class.getClassLoader());
}
}
For String Class: From Bootstrap Class Path by Bootstrap ClassLoader Output is null
For Student Class: From Extension Class Path by Extension ClassLoader Output is
sun.misc.Launcher$extClassLoader@1234
Note: Assume that Student.class Present in Both Extension Class Path and Application Class
Path and Test.class Present in Only in Application Class Path.
Note:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
161 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Bootstrap ClassLoader is Not Java Object. Hence we are getting null in the 1st Case but
Extension ClassLoader and Application ClassLoader are Java Objects and Hence we get
Proper Output in remaining 2 Cases.
ClassName@HexaDecimal.String_of_Hashcode
ClassLoader Subsystem will give Highest Priority for Bootstrap Class Path and then
Extension Class followed by Application Class Path.
Default ClassLoader will load .class Files Only Once Eventhough we are using
Multiple Times that Class in Our Program.
After loading .class File if it is modified Outside, then Default ClassLoaderwon't Load
Updated Version of Class File on Fly (Dynamically). Because .class File already there in
Method Area.
We can Resolve this Problem by defining Our Own Customized ClassLoader.
The Main Advantage of Customized ClassLoader is we can Control Class loading
Mechanism Based on Our Requirement.
For Example we can Load Class File Separately Every Time. So that Updated Version
Available to Our Program.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
162 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
This Class Act as Base Class for designing Our Own Customized ClassLoaders.
Hence Every Customized ClassLoader Class should extendsjava.lang.ClassLoader either
Directly OR Indirectly.
Whole Loading and Running a Java Program JVM required Memory to Store Several
Things Like Byte Code, Objects, Variables, Etc.
Total JVM Memory organized in the following 5 Categories:
1) Method Area
2) Heap Area OR Heap Memory
3) Java Stacks Area
4) PC Registers Area
5) Native Method Stacks Area
1) Method Area:
Total Class Level Binary Information including Static Variables Stored in Method
Area.
5) Class Data
Method Area
2) Heap Area :
Object Data
Heap Area
A Java Application can Communicate with the JVM by using Runtime Object.
Runtime Class Present in java.lang Package and it is a Singleton Class.
We can Create Runtime Object by using
Runtime r = Runtime.getRuntime();
Once we got Runtime Object we can Call the following Methods on that Object.
2) totalMemory(): Returns Number of Bytes of Total (Initial) Memory allocated to the Heap.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
164 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Heap Memory Size is Finite, Based on Our Requirement we can IncreaseORDecrease Heap
Size.
The Default Heap Size is 64.
We can Use the following Flags with Java Command.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
165 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
3) Stack Memory:
t1 t2 tn
--------------------
-
Stack Frame
Runtime Runtime Runtime
Stack Stack Stack
Stack Memory
Stack Frame
Local Variable Array
Operand Stack
Frame Data
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
166 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
long double
int Object float
0 1 2 3 4 5 6
Local Variable Array
Operand Stack:
Program Before Storing After i-load 0 After i-load 1 After i-add After i-store
i – load 0 0 100 0 100 0 100 0 100 0 100
i – load 1 Local Variable
1 80 1 80 1 80 1 80 1 80
i – add Array
i - store 2 2 2 2 2 180
Frame Data:
Frame Data contains All Symbolic References (Constant Pool) related to that
Method.
It also contains a Reference to Exception Table which Provides corresponding catch
Block Information in the Case of Exceptions.
For Every Thread a Separate PC Register will be Created at the Time of Thread
Creation.
PC Registers contains Address of Current executing Instruction.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
167 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
For Every Thread JVM will Create a Separate Native Method Stack.
All Native Method Calls invoked by the Thread will be stored in the corresponding
Native Method Stack.
Note:
Method Area, Heap Area and Stack Area are considered as Major Memory Areas with
Respect to Programmers Point of View.
Method Area and Heap Area are for JVM. Whereas Stack Area, PC Registers Area and
Native Method Stack Area are for Thread. That is
One Separate Heap for Every JVM
One Separate Method Area for Every JVM
One Separate Stack for Every Thread
One Separate PC Register for Every Thread
One Separate Native Method Stack for Every Thread
Static Variables will be stored in Method Area whereas Instance Variables will be stored in
Heap Area and Local Variables will be stored in Stack Area.
Execution Engine:
This is the Central Component of JVM.
Execution Engine is Responsible to Execute Java Class Files.
Execution Engine contains 2 Components for executing Java Classes.
Interpreter
JIT Compiler
Interpreter:
It is Responsible to Read Byte Code and Interpret (Convert) into Machine Code (Native
Code) and Execute that Machine Code Line by Line.
The Problem with Interpreter is it Interpreters Every Time Even the Same Method
Multiple Times. Which Reduces Performance of the System.
To Overcome this Problem SUN People Introduced JIT Compilers in 1.1 Version.
JIT Compiler:
and Executes it Instead of interpreting Once Again. So that Performance of the System will
be Improved.
The Threshold Count Value varied from JVM to JVM.
Some Advanced JIT Compilers will Re-compile generated Native Code if Count Reaches
Threshold Value Second Time, So that More optimized Machine Code will be
generated.
Profiler which is the Part of JIT Compiler is Responsible to IdentifY HOT SPOTS.
Note:
Execution Engine
JIT Compiler
Intermediate Code
Generator
Profiler
Code Optimizer
Garbage
Interpreter Collector
Target Code
Generator
Target Machine
Code
JNI Acts as Bridge (Mediator) between Java Method Calls and corresponding Native
Libraries.
Eg:hashCode()
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
169 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Note: Whenever we are executing a Java Class if JVM Unable to Find Valid Magic Number
then we get RuntimeException Saying ClassFormatError: incompatible magic value.
Note:
Higher Version JVM can Always Run Lower Version Class Files But Lower Version JVM
can’t Run Class Files generated by Higher Version Compiler.
Whenever we are trying to Execute Higher Version Compiler generated Class File with
Lower Version JVM we will get RuntimeException Saying
java.lang.UnsupportedClassVersionError: Employee (Unsupported major.minor version
51.0)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
170 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
5) Access_Flash:It Shows the Modifiers which are declared for the Current Class OR
Interface.
6) this_class:It Represents the Name of the Class OR Interface defined by Class File.
7) super_class:It Represents the Name of the Super Class Represented by Class File.
this_class: Test
super_class: java.lang.Object
Test.class
9) interface[]:It Represents the Names of Interfaces which are implemented by Current Class
File.
11 )fields[]:It Provides Names of All Fields Present in the Current Class File.
13 )methods[]:It Returns the Name of the Method Present in the Current Class File.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
171 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir JVM Architecture
Execution Engine
I JIT Compiler
N
Intermediate Code
T Generator Java Native
E Profiler Native Method
R Interface Libraries
Code Optimizer
P Garbage
Collector
R Target Code
E Generator
T
E Target Machine
R Code
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
172 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
85 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Flow Control
Agenda :
1. Introduction
2. Selection statements
i. if-else
ii. Switch
Case Summary
fall-through inside a switch
default case
3. Iterative Statements
i. While loop
Unreachable statement in while
ii. Do-while
Unreachable statement in do while
iii. For Loop
Initilizationsection
Conditional check
Increment and decrement section
Unreachable statement in for loop
iv. For each
Iterator Vs Iterable(1.5v)
Difference between Iterable and Iterator
4. Transfer statements
o Break statement
o Continue statement
o Labeled break and continue statements
o Do-while vs continue (The most dangerous combination)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
86 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Introduction :
Flow control describes the order in which all the statements will be executed at run
time.
Diagram:
Selection statements:
if-else:
syntax:
The argument to the if statement should be Boolean by mistake if we are providing any
other type we will get "compile time error".
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
87 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 1:
public class ExampleIf{
public static void main(String args[]){
int x=0;
if(x)
{
System.out.println("hello");
}else{
System.out.println("hi");
}}}
OUTPUT:
Compile time error:
D:\Java>javac ExampleIf.java
ExampleIf.java:4: incompatible types
found : int
required: boolean
if(x)
Example 2:
public class ExampleIf{
public static void main(String args[]){
int x=10;
if(x=20)
{
System.out.println("hello");
}
else{
System.out.println("hi");
}}}
OUTPUT:
Compile time error
D:\Java>javac ExampleIf.java
ExampleIf.java:4: incompatible types
found : int
required: boolean
if(x=20)
Example 3:
public class ExampleIf{
public static void main(String args[]){
int x=10;
if(x==20)
{
System.out.println("hello");
}else{
System.out.println("hi");
}}}
OUTPUT:
Hi
Example 4:
public class ExampleIf{
public static void main(String args[]){
boolean b=false;
if(b=true)
{
System.out.println("hello");
}else{
System.out.println("hi");
}}}
OUTPUT:
Hello
Example 5:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
88 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 6:
public class ExampleIf{
public static void main(String args[]){
if(true)
System.out.println("hello");
}}
OUTPUT:
Hello
Example 7:
public class ExampleIf{
public static void main(String args[]){
if(true);
}}
OUTPUT:
No output
Example 8:
public class ExampleIf{
public static void main(String args[]){
if(true)
int x=10;
}}
OUTPUT:
Compile time error
D:\Java>javac ExampleIf.java
ExampleIf.java:4: '.class' expected
int x=10;
ExampleIf.java:4: not a statement
int x=10;
Example 9:
public class ExampleIf{
public static void main(String args[]){
if(true){
int x=10;
}}}
OUTPUT:
D:\Java>javac ExampleIf.java
D:\Java>java ExampleIf
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
89 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 10:
OUTPUT:
Hello
Hi
Semicolon(;) is a valid java statement which is call empty statement and it won't
produce any output.
Switch:
If several options are available then it is not recommended to use if-else we should go
for switch statement.Because it improves readability of the code.
Syntax:
switch(x)
{
case 1:
action1
case 2:
action2
.
.
.
default:
default action
}
Until 1.4 version the allow types for the switch argument are byte, short, char, int but
from 1.5 version on wards the corresponding wrapper classes (Byte, Short, Character,
Integer) and "enum" types also allowed.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
90 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Diagram:
Curly braces are mandatory.(except switch case in all remaining cases curly
braces are optional )
Both case and default are optional.
Every statement inside switch must be under some case (or) default. Independent
statements are not allowed.
Example 1:
public class ExampleSwitch{
public static void main(String args[]){
int x=10;
switch(x)
{
System.out.println("hello");
}}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleSwitch.java
ExampleSwitch.java:5: case, default, or '}' expected
System.out.println("hello");
Every case label should be "compile time constant" otherwise we will get compile time
error.
Example 2:
public class ExampleSwitch{
public static void main(String args[]){
int x=10;
int y=20;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
91 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
switch(x)
{
case 10:
System.out.println("10");
case y:
System.out.println("20");
}}}
OUTPUT:
Compile time error
D:\Java>javac ExampleSwitch.java
ExampleSwitch.java:9: constant expression required
case y:
If we declare y as final we won't get any compile time error.
Example 3:
public class ExampleSwitch{
public static void main(String args[]){
int x=10;
final int y=20;
switch(x)
{
case 10:
System.out.println("10");
case y:
System.out.println("20");
}}}
OUTPUT:
10
20
But switch argument and case label can be expressions , but case label should be
constant expression.
Example 4:
public class ExampleSwitch{
public static void main(String args[]){
int x=10;
switch(x+1)
{
case 10:
case 10+20:
case 10+20+30:
}}}
OUTPUT:
No output.
Every case label should be within the range of switch argument type.
Example 5:
public class ExampleSwitch{
public static void main(String args[]){
byte b=10;
switch(b)
{
case 10:
System.out.println("10");
case 100:
System.out.println("100");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
92 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
case 1000:
System.out.println("1000");
}}}
OUTPUT:
Compile time error
D:\Java>javac ExampleSwitch.java
ExampleSwitch.java:10: possible loss of precision
found : int
required: byte
case 1000:
Example :
public class ExampleSwitch{
public static void main(String args[]){
byte b=10;
switch(b+1)
{
case 10:
System.out.println("10");
case 100:
System.out.println("100");
case 1000:
System.out.println("1000");
}}}
OUTPUT:
Example 6:
public class ExampleSwitch{
public static void main(String args[]){
int x=10;
switch(x)
{
case 97:
System.out.println("97");
case 99:
System.out.println("99");
case 'a':
System.out.println("100");
}}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleSwitch.java
ExampleSwitch.java:10: duplicate case label
case 'a':
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
93 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
CASE SUMMARY:
Diagram:
With in the switch statement if any case is matched from that case onwards all
statements will be executed until end of the switch (or) break. This is call "fall-through"
inside the switch .
The main advantage of fall-through inside a switch is we can define common action for
multiple cases
Example 7:
public class ExampleSwitch{
public static void main(String args[]){
int x=0;
switch(x)
{
case 0:
System.out.println("0");
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
default:
System.out.println("default");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
94 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
}}}
OUTPUT:
x=0 x=1 x=2 x=3
0 1 2 default
1 default
DEFAULT CASE:
Example 8:
public class ExampleSwitch{
public static void main(String args[]){
int x=0;
switch(x)
{
default:
System.out.println("default");
case 0:
System.out.println("0");
break;
case 1:
System.out.println("1");
case 2:
System.out.println("2");
}}}
OUTPUT:
X=0 x=1 x=2 x=3
0 1 2 default
2 0
ITERATIVE STATEMENTS:
While loop:
if we don't know the no of iterations in advance then best loop is while loop:
Example 1:
while(rs.next())
{
}
Example 2:
while(e.hasMoreElements())
{
----------
----------
----------
}
Example 3:
while(itr.hasNext())
{
----------
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
95 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
----------
----------
}
The argument to the while statement should be Boolean type. If we are using any other
type we will get compile time error.
Example 1:
public class ExampleWhile{
public static void main(String args[]){
while(1)
{
System.out.println("hello");
}}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleWhile.java
ExampleWhile.java:3: incompatible types
found : int
required: boolean
while(1)
Curly braces are optional and without curly braces we can take only one statement
which should not be declarative statement.
Example 2:
public class ExampleWhile{
public static void main(String args[]){
while(true)
System.out.println("hello");
}}
OUTPUT:
Hello (infinite times).
Example 3:
public class ExampleWhile{
public static void main(String args[]){
while(true);
}}
OUTPUT:
No output.
Example 4:
public class ExampleWhile{
public static void main(String args[]){
while(true)
int x=10;
}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleWhile.java
ExampleWhile.java:4: '.class' expected
int x=10;
ExampleWhile.java:4: not a statement
int x=10;
Example 5:
public class ExampleWhile{
public static void main(String args[]){
while(true)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
96 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
int x=10;
}}}
OUTPUT:
No output.
Example 6:
public class ExampleWhile{
public static void main(String args[]){
while(true)
{
System.out.println("hello");
}
System.out.println("hi");
}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleWhile.java
ExampleWhile.java:7: unreachable statement
System.out.println("hi");
Example 7:
public class ExampleWhile{
public static void main(String args[]){
while(false)
{
System.out.println("hello");
}
System.out.println("hi");
}}
OUTPUT:
D:\Java>javac ExampleWhile.java
ExampleWhile.java:4: unreachable statement
{
Example 8:
public class ExampleWhile{
public static void main(String args[]){
int a=10,b=20;
while(a<b)
{
System.out.println("hello");
}
System.out.println("hi");
}}
OUTPUT:
Hello (infinite times).
Example 9:
public class ExampleWhile{
public static void main(String args[]){
final int a=10,b=20;
while(a<b)
{
System.out.println("hello");
}
System.out.println("hi");
}}
OUTPUT:
Compile time error.
D:\Java>javac ExampleWhile.java
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
97 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Note:
Every final variable will be replaced with the corresponding value by compiler.
If any operation involves only constants then compiler is responsible to perform
that operation.
If any operation involves at least one variable compiler won't perform that
operation. At runtime jvm is responsible to perform that operation.
Example 11:
public class ExampleWhile{
public static void main(String args[]){
int a=10;
while(a<20)
{
System.out.println("hello");
}
System.out.println("hi");
}}
OUTPUT:
Hello (infinite times).
Do-while:
If we want to execute loop body at least once then we should go for do-while.
Syntax:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
98 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 1:
public class ExampleDoWhile{
public static void main(String args[]){
do
System.out.println("hello");
while(true);
}}
Output:
Hello (infinite times).
Example 2:
public class ExampleDoWhile{
public static void main(String args[]){
do;
while(true);
}}
Output:
Compile successful.
Example 3:
public class ExampleDoWhile{
public static void main(String args[]){
do
int x=10;
while(true);
}}
Output:
D:\Java>javac ExampleDoWhile.java
ExampleDoWhile.java:4: '.class' expected
int x=10;
ExampleDoWhile.java:4: not a statement
int x=10;
ExampleDoWhile.java:4: ')' expected
int x=10;
Example 4:
public class ExampleDoWhile{
public static void main(String args[]){
do
{
int x=10;
}while(true);
}}
Output:
Compile successful.
Example 5:
public class ExampleDoWhile{
public static void main(String args[]){
do while(true)
System.out.println("hello");
while(true);
}}
Output:
Hello (infinite times).
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
99 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 7:
public class ExampleDoWhile{
public static void main(String args[]){
do
{
System.out.println("hello");
}
while(true);
System.out.println("hi");
}}
Output:
Compile time error.
D:\Java>javac ExampleDoWhile.java
ExampleDoWhile.java:8: unreachable statement
System.out.println("hi");
Example 8:
public class ExampleDoWhile{
public static void main(String args[]){
do
{
System.out.println("hello");
}
while(false);
System.out.println("hi");
}}
Output:
Hello
Hi
Example 9:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
100 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
101 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
For Loop:
This is the most commonly used loop and best suitable if we know the no of iterations in
advance.
Syntax:
Curly braces are optional and without curly braces we can take only one statement
which should not be declarative statement.
Initilizationsection:
This section will be executed only once.
Here usually we can declare loop variables and we will perform initialization.
We can declare multiple variables but should be of the same type and we can't declare
different type of variables.
Example:
Int i=0,j=0; valid
Int i=0,Boolean b=true; invalid
Int i=0,int j=0; invalid
In initialization section we can take any valid java statement including "s.o.p" also.
Example 1:
public class ExampleFor{
public static void main(String args[]){
int i=0;
for(System.out.println("hello u r sleeping");i<3;i++){
System.out.println("no boss, u only sleeping");
}}}
Output:
D:\Java>javac ExampleFor.java
D:\Java>java ExampleFor
Hello u r sleeping
No boss, u only sleeping
No boss, u only sleeping
No boss, u only sleeping
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
102 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Conditional check:
We can take any java expression but should be of the type Boolean.
Conditional expression is optional and if we are not taking any expression compiler will
place true.
Example:
public class ExampleFor{
public static void main(String args[]){
int i=0;
for(System.out.println("hello");i<3;System.out.println("hi")){
i++;
}}}
Output:
D:\Java>javac ExampleFor.java
D:\Java>java ExampleFor
Hello
Hi
Hi
Hi
All 3 parts of for loop are independent of each other and all optional.
Example:
public class ExampleFor{
public static void main(String args[]){
for(;;){
System.out.println("hello");
}}}
Output:
Hello (infinite times).
Curly braces are optional and without curly braces we can take exactly one statement
and it should not be declarative statement.
Example 1:
public class ExampleFor{
public static void main(String args[]){
for(int i=0;true;i++){
System.out.println("hello");
}
System.out.println("hi");
}}
Output:
Compile time error.
D:\Java>javac ExampleFor.java
ExampleFor.java:6: unreachable statement
System.out.println("hi");
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
103 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
104 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 1:
Write code to print the elements of single dimensional array by normal for loop and
enhanced for loop.
Example:
Output:
D:\Java>javac ExampleFor.java
D:\Java>java ExampleFor
10
20
30
40
50
Example 2:
Write code to print the elements of 2 dimensional arrays by using normal for loop and
enhanced for loop.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
105 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example 3:
Write equivalent code by For Each loop for the following for loop.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
106 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Iterator Vs Iterable(1.5v)
Every array class and Collection interface already implements Iterable interface.
Iterable Iterator
It is related to forEach loop It is related to Collection
The target element in forEach loop should We can use Iterator to get objects one by
be Iterable one from the collection
Iterator present in java.lang package Iterator present in java.util package
contains 3 methods hasNext(), next(),
contains only one method iterator()
remove()
Introduced in 1.5 version Introduced in 1.2 version
Transfer statements:
Break statement:
Inside switch :
Output:
D:\Java>javac Test.java
D:\Java>java Test
Hello
Inside loops :
We can use break statement inside loops to break the loop based on some condition.
Example 2:
class Test{
public static void main(String args[]){
for(int i=0; i<10; i++) {
if(i==5)
break;
System.out.println(i);
}
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
0
1
2
3
4
We can use break statement inside label blocks to break block execution based on some
condition.
Example:
class Test{
public static void main(String args[]){
int x=10;
l1 : {
System.out.println("begin");
if(x==10)
break l1;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
108 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
System.out.println("end");
}
System.out.println("hello");
}
}
Output:
D:\Java>javac Test.java
D:\Java>java Test
begin
hello
These are the only places where we can use break statement. If we are using anywhere
else we will get compile time error.
Example:
class Test{
public static void main(String args[]){
int x=10;
if(x==10)
break;
System.out.println("hello");
}
}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:5: break outside switch or loop
break;
Continue statement:
We can use continue statement to skip current iteration and continue for the next
iteration.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
109 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Output:
D:\Java>javac Test.java
D:\Java>java Test
1
3
5
7
9
We can use continue only inside loops if we are using anywhere else we will get compile
time error saying "continue outside of loop".
Example:
class Test
{
public static void main(String args[]){
int x=10;
if(x==10);
continue;
System.out.println("hello");
}
}
Output:
Compile time error.
D:\Enum>javac Test.java
Test.java:6: continue outside of loop
continue;
In the nested loops to break (or) continue a particular loop we should go for labeled
break and continue statements.
Syntax:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
110 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Example:
class Test
{
public static void main(String args[]){
l1:
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(i==j)
break;
System.out.println(i+"........."+j);
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
111 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
}
}
}
Break:
1.........0
2.........0
2.........1
Break l1:
No output.
Continue:
0.........1
0.........2
1.........0
1.........2
2.........0
2.........1
Continue l1:
1.........0
2.........0
2.........1
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
112 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Flow Control
Output:
1
4
6
8
10
Compiler won't check unreachability in the case of if-else it will check only in loops.
Example 1:
class Test
{
public static void main(String args[]){
while(true)
{
System.out.println("hello");
}
System.out.println("hi");
}
}
Output:
Compile time error.
D:\Enum>javac Test.java
Test.java:8: unreachable statement
System.out.println("hi");
Example 2:
class Test
{
public static void main(String args[]){
if(true)
{
System.out.println("hello");
}
else
{
System.out.println("hi");
}}}
Output:
Hello
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
113 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
114 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
115 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
116 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Case 1:
If there is no public class then we can use any name for java source file there are no
restrictions.
Example:
A.java
B.java
C.java
Ashok.java
case 2:
If class B declared as public then the name of the Program should be B.java otherwise
we will get compile time error saying "class B is public, should be declared in a file
named B.java".
Case 3:
If both B and C classes are declared as public and name of the file is B.java then
we will get compile time error saying "class C is public, should be declared in a
file named C.java".
It is highly recommended to take only one class for source file and name of the
Program (file) must be same as class name. This approach improves readability
and understandability of the code.
Example:
class A
{
public static void main(String args[]){
System.out.println("A class main method is executed");
}
}
class B
{
public static void main(String args[]){
System.out.println("B class main method is executed");
}
}
class C
{
public static void main(String args[]){
System.out.println("C class main method is executed");
}
}
class D
{
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
117 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Output:
D:\Java>java A
A class main method is executed
D:\Java>java B
B class main method is executed
D:\Java>java C
C class main method is executed
D:\Java>java D
Exception in thread "main" java.lang.NoSuchMethodError: main
D:\Java>java Ashok
Exception in thread "main" java.lang.NoClassDefFoundError: Ashok
We can compile a java Program but not java class in that Program for every
class one dot class file will be created.
We can run a java class but not java source file whenever we are trying to run a
class the corresponding class main method will be executed.
If the class won't contain main method then we will get runtime exception saying
"NoSuchMethodError: main".
If we are trying to execute a java class and if the corresponding .class file is not
available then we will get runtime execution saying "NoClassDefFoundError:
Ashok".
Import statement:
class Test{
public static void main(String args[]){
ArrayList l=new ArrayList();
}
}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:3: cannot find symbol
symbol : class ArrayList
location: class Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
118 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
import java.util.ArrayList;
class Test{
public static void main(String args[]){
ArrayList l=new ArrayList();
}
}
Output:
D:\Java>javac Test.java
Hence whenever we are using import statement it is not require to use fully qualified
names we can use short names directly. This approach decreases length of the code and
improves readability.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
119 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Case 2:
Which of the following import statements are meaningful ?
Case 3:
The code compiles fine even though we are not using import statements because
we used fully qualified name.
Whenever we are using fully qualified name it is not required to use import
statement. Similarly whenever we are using import statements it is not require to
use fully qualified name.
Case 4:
Example:
import java.util.*;
import java.sql.*;
class Test
{
public static void main(String args[])
{
Date d=new Date();
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:7: reference to Date is ambiguous,
both class java.sql.Date in java.sql and class java.util.Date in java.util
match
Note: Even in the List case also we may get the same ambiguity problem because it is
available in both util and awt packages.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
120 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Case 5:
While resolving class names compiler will always gives the importance in the following
order.
Example:
import java.util.Date;
import java.sql.*;
class Test
{
public static void main(String args[]){
Date d=new Date();
}}
The code compiles fine and in this case util package Date will be considered.
Case 6:
Whenever we are importing a package all classes and interfaces present in that package
are by default available but not sub package classes.
Example:
To use pattern class in our Program directly which import statement is required ?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
121 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Case7:
In any java Program the following 2 packages are not require to import because these
are available by default to every java Program.
1. java.lang package
2. default package(current working directory)
Case 8:
"Import statement is totally compile time concept" if more no of imports are there then
more will be the compile time but there is "no change in execution time".
#include import
It can be used in C & C++ It can be used in Java
At compile time only compiler copy the At runtime JVM will execute the
code from standard library and placed corresponding standard library and use it's
in current program. result in current program.
It is static inclusion It is dynamic inclusion
wastage of memory No wastage of memory
Ex : <jsp:@ file=""> Ex : <jsp:include >
In the case of C language #include all the header files will be loaded at the time
of include statement hence it follows static loading.
But in java import statement no ".class" will be loaded at the time of import
statements in the next lines of the code whenever we are using a particular class
then only corresponding ".class" file will be loaded. Hence it follows "dynamic
loading" or "load-on -demand" or "load-on-fly".
1. For-Each
2. Var-arg
3. Queue
4. Generics
5. Auto boxing and Auto unboxing
6. Co-varient return types
7. Annotations
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
122 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
8. Enum
9. Static import
10. String builder
Static import:
This concept introduced in 1.5 versions. According to sun static import improves
readability of the code but according to worldwide Programming exports (like us) static
imports creates confusion and reduces readability of the code. Hence if there is no
specific requirement never recommended to use a static import.
Usually we can access static members by using class name but whenever we are using
static import it is not require to use class name we can access directly.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
123 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example 3:
import static java.lang.System.out;
class Test
{
public static void main(String args[]){
out.println("hello");
out.println("hi");
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
hello
hi
Example 4:
import static java.lang.Integer.*;
import static java.lang.Byte.*;
class Test
{
public static void main(String args[]){
System.out.println(MAX_VALUE);
}}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
124 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:6: reference to MAX_VALUE is ambiguous,
both variable MAX_VALUE in java.lang.Integer and variable MAX_VALUE in
java.lang.Byte match
System.out.println(MAX_VALUE);
Note: Two packages contain a class or interface with the same is very rare hence
ambiguity problem is very rare in normal import.
But 2 classes or interfaces can contain a method or variable with the same name is very
common hence ambiguity problem is also very common in static import.
While resolving static members compiler will give the precedence in the following order.
Example:
If we comet line one then we will get Integer class MAX_VALUE 2147483647.
If we comet lines one and two then Byte class MAX_VALUE will be considered
127.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
125 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Diagram:
Usage of static import reduces readability and creates confusion hence if there is no
specific requirement never recommended to use static import.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
126 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Package statement:
Example:
Example:
package com.durgajobs.itjobs;
class HydJobs
{
public static void main(String args[]){
System.out.println("package demo");
}
}
Javac HydJobs.java generated class file will be placed in current working directory.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
127 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Javac -d . HydJobs.java
-d means destination to place generated class files "." means current working
directory.
Generated class file will be placed into corresponding package structure.
Diagram:
If the specified package structure is not already available then this command
itself will create the required package structure.
As the destination we can use any valid directory.
If the specified destination is not available then we will get compile time error.
Example:
D:\Java>javac -d c: HydJobs.java
Diagram:
If the specified destination is not available then we will get compile time error.
Example:
D:\Java>javac -d z: HydJobs.java
If Z: is not available then we will get compile time error.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
128 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
D:\Java>java com.durgajobs.itjobs.HydJobs
Conclusion 1:
In any java Program there should be at most one package statement that is if we are
taking more than one package statement we will get compile time error.
Example:
package pack1;
package pack2;
class A
{
}
Output:
Compile time error.
D:\Java>javac A.java
A.java:2: class, interface, or enum expected
package pack2;
Conclusion 2:
In any java Program the 1st non comment statement should be package statement [if it
is available] otherwise we will get compile time error.
Example:
import java.util.*;
package pack1;
class A
{
}
Output:
Compile time error.
D:\Java>javac A.java
A.java:2: class, interface, or enum expected
package pack1;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
129 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Class Modifiers
Whenever we are writing our own classes compulsory we have to provide some
information about our class to the jvm.
Like
1. Public
2. Default
3. Final
4. Abstract
5. Strictfp
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
130 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
If we are using any other modifier we will get compile time error.
Example:
private class Test
{
public static void main(String args[]){
int i=0;
for(int j=0;j<3;j++)
{
i=i+j;
}
System.out.println(i);
}}
OUTPUT:
Compile time error.
D:\Java>javac Test.java
Test.java:1: modifier private not allowed here
private class Test
But For the inner classes the following modifiers are allowed.
Diagram:
In old languages 'C' (or) 'C++' public, private, protected, default are considered
as access specifiers and all the remaining are considered as access modifiers.
But in java there is no such type of division all are considered as access
modifiers.
Public Classes:
If a class declared as public then we can access that class from anywhere. With in the
package or outside the package.
Example:
Program1:
package pack1;
public class Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
131 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
{
public void methodOne(){
System.out.println("test class methodone is executed");
}}
Compile the above Program:
D:\Java>javac -d . Test.java
Program2:
package pack2;
import pack1.Test;
class Test1
{
public static void main(String args[]){
Test t=new Test();
t.methodOne();
}}
OUTPUT:
D:\Java>javac -d . Test1.java
D:\Java>java pack2.Test1
Test class methodone is executed.
If class Test is not public then while compiling Test1 class we will get compile time error
saying pack1.Test is not public in pack1; cannot be accessed from outside package.
Default Classes:
If a class declared as the default then we can access that class only within the current
package hence default access is also known as "package level access".
Example:
Program 1:
package pack1;
class Test
{
public void methodOne(){
System.out.println("test class methodone is executed");
}}
Program 2:
package pack1;
import pack1.Test;
class Test1
{
public static void main(String args[]){
Test t=new Test();
t.methodOne();
}}
OUTPUT:
D:\Java>javac -d . Test.java
D:\Java>javac -d . Test1.java
D:\Java>java pack1.Test1
Test class methodone is executed
Final Modifier:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
132 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Final Methods:
Example:
Program 1:
class Parent
{
public void property(){
System.out.println("cash+gold+land");
}
public final void marriage(){
System.out.println("subbalakshmi");
}}
Program 2:
class child extends Parent
{
public void marriage(){
System.out.println("Thamanna");
}}
OUTPUT:
Compile time error.
D:\Java>javac Parent.java
D:\Java>javac child.java
child.java:3: marriage() in child cannot override marriage() in Parent;
overridden method is final
public void marriage(){
Final Class:
If a class declared as the final then we cann't creates the child class that is inheritance
concept is not applicable for final classes.
Example:
Program 1:
final class Parent
{
}
Program 2:
class child extends Parent
{
}
OUTPUT:
Compile time error.
D:\Java>javac Parent.java
D:\Java>javac child.java
child.java:1: cannot inherit from final Parent
class child extends Parent
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
133 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Note: Every method present inside a final class is always final by default whether we are
declaring or not. But every variable present inside a final class need not be final.
Example:
final class parent
{
static int x=10;
static
{
x=999;
}}
Abstract Modifier:
Abstract is the modifier applicable only for methods and classes but not for variables.
Abstract Methods:
Even though we don't have implementation still we can declare a method with abstract
modifier.
That is abstract methods have only declaration but not implementation.
Hence abstract method declaration should compulsory ends with semicolon.
Example:
Child classes are responsible to provide implementation for parent class abstract
methods.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
134 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
Program:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
135 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Diagram:
Abstract class:
For any java class if we are not allow to create an object such type of class we have to
declare with abstract modifier that is for abstract class instantiation is not possible.
Example:
abstract class Test
{
public static void main(String args[]){
Test t=new Test();
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:4: Test is abstract; cannot be instantiated
Test t=new Test();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
136 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example1: HttpServlet class is abstract but it doesn't contain any abstract method.
Example2: Every adapter class is abstract but it doesn't contain any abstract method.
Example1:
class Parent
{
public void methodOne();
}
Output:
Compile time error.
D:\Java>javac Parent.java
Parent.java:3: missing method body, or declare abstract
public void methodOne();
Example2:
class Parent
{
public abstract void methodOne(){}
}
Output:
Compile time error.
Parent.java:3: abstract methods cannot have a body
public abstract void methodOne(){}
Example3:
class Parent
{
public abstract void methodOne();
}
Output:
Compile time error.
D:\Java>javac Parent.java
Parent.java:1: Parent is not abstract and does not
override abstract method methodOne() in Parent
class Parent
If a class extends any abstract class then compulsory we should provide implementation
for every abstract method of the parent class otherwise we have to declare child class as
abstract.
Example:
abstract class Parent
{
public abstract void methodOne();
public abstract void methodTwo();
}
class child extends Parent
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
137 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
{
public void methodOne(){}
}
Output:
Compile time error.
D:\Java>javac Parent.java
Parent.java:6: child is not abstract and does not
override abstract method methodTwo() in Parent
class child extends Parent
If we declare class child as abstract then the code compiles fine but child of child is
responsible to provide implementation for methodTwo().
Example:
Note:
Usage of abstract methods, abstract classes and interfaces is always good Programming
practice.
Strictfp:
strictfp is the modifier applicable for methods and classes but not for variables.
Strictfp modifier introduced in 1.2 versions.
Usually the result of floating point of arithmetic is varing from platform to
platform , to overcome this problem we should use strictfp modifier.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
138 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
If a method declare as the Strictfp then all the floating point calculations in that
method has to follow IEEE754 standard, So that we will get platform
independent results.
Example:
If a class declares as the Strictfp then every concrete method(which has body) of that
class has to follow IEEE754 standard for floating point arithmetic, so we will get
platform independent results.
Example:
Member modifiers:
Public members:
If a member declared as the public then we can access that member from anywhere
"but the corresponding class must be visible" hence before checking member visibility
we have to check class visibility.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
139 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
Program 1:
package pack1;
class A
{
public void methodOne(){
System.out.println("a class method");
}}
D:\Java>javac -d . A.java
Program 2:
package pack2;
import pack1.A;
class B
{
public static void main(String args[]){
A a=new A();
a.methodOne();
}}
Output:
Compile time error.
D:\Java>javac -d . B.java
B.java:2: pack1.A is not public in pack1;
cannot be accessed from outside package
import pack1.A;
In the above Program even though methodOne() method is public we can't access from
class B because the corresponding class A is not public that is both classes and methods
are public then only we can access.
Default member:
If a member declared as the default then we can access that member only within the
current package hence default member is also known as package level access.
Example 1:
Program 1:
package pack1;
class A
{
void methodOne(){
System.out.println("methodOne is executed");
}}
Program 2:
package pack1;
import pack1.A;
class B
{
public static void main(String args[]){
A a=new A();
a.methodOne();
}}
Output:
D:\Java>javac -d . A.java
D:\Java>javac -d . B.java
D:\Java>java pack1.B
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
140 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
methodOne is executed
Example 2:
Program 1:
package pack1;
class A
{
void methodOne(){
System.out.println("methodOne is executed");
}}
Program 2:
package pack2;
import pack1.A;
class B
{
public static void main(String args[]){
A a=new A();
a.methodOne();
}}
Output:
Compile time error.
D:\Java>javac -d . A.java
D:\Java>javac -d . B.java
B.java:2: pack1.A is not public in pack1; cannot be accessed from outside
package
import pack1.A;
Private members:
If a member declared as the private then we can access that member only with in
the current class.
Private methods are not visible in child classes where as abstract methods should
be visible in child classes to provide implementation hence private, abstract
combination is illegal for methods.
Protected members:
If a member declared as the protected then we can access that member within
the current package anywhere but outside package only in child classes.
Protected=default+kids.
We can access protected members within the current package anywhere either
by child reference or by parent reference
But from outside package we can access protected members only in child classes
and should be by child reference only that is we can't use parent reference to call
protected members from outside package.
Example:
Program 1:
package pack1;
public class A
{
protected void methodOne(){
System.out.println("methodOne is executed");
}}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
141 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Program 2:
package pack1;
class B extends A
{
public static void main(String args[]){
A a=new A();
a.methodOne();
B b=new B();
b.methodOne();
A a1=new B();
a1.methodOne();
}}
Output:
D:\Java>javac -d . A.java
D:\Java>javac -d . B.java
D:\Java>java pack1.B
methodOne is executed
methodOne is executed
methodOne is executed
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
142 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Private<default<protected<public
Final variables:
If the value of a variable is varied from object to object such type of variables are
called instance variables.
For every object a separate copy of instance variables will be created.
DIAGRAM:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
143 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
For the instance variables it is not required to perform initialization explicitly jvm will
always provide default values.
Example:
class Test
{
int i;
public static void main(String args[]){
Test t=new Test();
System.out.println(t.i);
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
0
Example:
Program 1:
class Test
{
int i;
}
Output:
D:\Java>javac Test.java
D:\Java>
Program 2:
class Test
{
final int i;
}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:1: variable i might not have been initialized
class Test
Rule:
For the final instance variables we should perform initialization before constructor
completion. That is the following are various possible places for this.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
144 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
class Test
{
final int i=10;
}
Output:
D:\Java>javac Test.java
D:\Java>
Example:
class Test
{
final int i;
{
i=10;
}}
Output:
D:\Java>javac Test.java
D:\Java>
3) Inside constructor:
Example:
class Test
{
final int i;
Test()
{
i=10;
}}
Output:
D:\Java>javac Test.java
D:\Java>
If we are performing initialization anywhere else we will get compile time error.
Example:
class Test
{
final int i;
public void methodOne(){
i=10;
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:5: cannot assign a value to final variable i
i=10;
If the value of a variable is not varied from object to object such type of variables
is not recommended to declare as the instance variables. We have to declare
those variables at class level by using static modifier.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
145 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
In the case of instance variables for every object a seperate copy will be created
but in the case of static variables a single copy will be created at class level and
shared by every object of that class.
For the static variables it is not required to perform initialization explicitly jvm
will always provide default values.
Example:
class Test
{
static int i;
public static void main(String args[]){
System.out.println("value of i is :"+i);
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
Value of i is: 0
If the static variable declare as final then compulsory we should perform initialization
explicitly whether we are using or not otherwise we will get compile time error.(The
JVM won't provide any default values)
Example:
Rule:
For the final static variables we should perform initialization before class loading
completion otherwise we will get compile time error. That is the following are possible
places.
Example:
class Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
146 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
{
final static int i=10;
}
Output:
D:\Java>javac Test.java
D:\Java>
Example:
class Test
{
final static int i;
static
{
i=10;
}}
Output:
Compile successfully.
If we are performing initialization anywhere else we will get compile time error.
Example:
class Test
{
final static int i;
public static void main(String args[]){
i=10;
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:5: cannot assign a value to final variable i
i=10;
Example:
class Test
{
public static void main(String args[]){
int i;
System.out.println("hello");
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
Hello
Example:
class Test
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
147 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Even though local variable declared as the final before using only we should perform
initialization.
Example:
class Test
{
public static void main(String args[]){
final int i;
System.out.println("hello");
}}
Output:
D:\Java>javac Test.java
D:\Java>java Test
hello
Note: The only applicable modifier for local variables is final if we are using any other
modifier we will get compile time error.
Example:
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
148 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Formal parameters:
The formal parameters of a method are simply acts as local variables of that
method hence it is possible to declare formal parameters as final.
If we declare formal parameters as final then we can't change its value within the
method.
Example:
For instance and static variables JVM will provide default values but if instance
and static declared as final JVM won't provide default value compulsory we
should perform initialization whether we are using or not .
For the local variables JVM won't provide any default values we have to
perform explicitly before using that variables , this rule is same whether local
variable final or not.
Static modifier:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
149 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
In the case of instance variables for every object a separate copy will be created
but in the case of static variables a single copy will be created at class level and
shared by all objects of that class.
Example:
Output:
D:\Java>javac Test.java
D:\Java>java Test
888.....20
Instance variables can be accessed only from instance area directly and we can't
access from static area directly.
But static variables can be accessed from both instance and static areas directly.
1) Int x=10;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
150 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Which are the following declarations are allow within the same class simultaneously ?
a) 1 and 3
Example:
class Test
{
int x=10;
public void methodOne(){
System.out.println(x);
}}
Output:
Compile successfully.
b) 1 and 4
Example:
class Test
{
int x=10;
public static void methodOne(){
System.out.println(x);
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:5: non-static variable x cannot be referenced from a static
context
System.out.println(x);
c) 2 and 3
Example:
class Test
{
static int x=10;
public void methodOne(){
System.out.println(x);
}}
Output:
Compile successfully.
d) 2 and 4
Example:
class Test
{
static int x=10;
public static void methodOne(){
System.out.println(x);
}}
Output:
Compile successfully.
e) 1 and 2
Example:
class Test
{
int x=10;
static int x=10;
}
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
151 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
f) 3 and 4
Example:
class Test{
public void methodOne(){
System.out.println(x);
}
public static void methodOne(){
System.out.println(x);
}}
Output:
Compile time error.
D:\Java>javac Test.java
Test.java:5: methodOne() is already defined in Test
public static void methodOne(){
For static methods implementation should be available but for abstract methods
implementation is not available hence static abstract combination is illegal for methods.
case 1:
Overloading concept is applicable for static method including main method also.But
JVM will always call String[] args main method .
The other overloaded method we have to call explicitly then it will be executed just like
a normal method call .
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
152 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Output :
String() method is called
case 2:
Inheritance concept is applicable for static methods including main() method hence
while executing child class, if the child doesn't contain main() method then the parent
class main method will be executed.
Example:
class Parent{
public static void main(String args[]){
System.out.println("parent main() method called");
}
}
class child extends Parent{
}
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
153 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
Output:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
154 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Native modifier:
Native is a modifier applicable only for methods but not for variables and
classes.
The methods which are implemented in non java are called native methods or
foreign methods.
Pseudo code:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
155 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Synchronized:
1. Synchronized is the modifier applicable for methods and blocks but not for
variables and classes.
2. If a method or block declared with synchronized keyword then at a time only one
thread is allow to execute that method or block on the given object.
3. The main advantage of synchronized keyword is we can resolve data
inconsistency problems.
4. But the main disadvantage is it increases waiting time of the threads and effects
performance of the system. Hence if there is no specific requirement never
recommended to use synchronized keyword.
Transient modifier:
1. Transient is the modifier applicable only for variables but not for methods and
classes.
2. At the time of serialization if we don't want to serialize the value of a particular
variable to meet the security constraints then we should declare that variable
with transient modifier.
3. At the time of serialization jvm ignores the original value of the transient
variable and save default value that is transient means "not to serialize".
4. Static variables are not part of object state hence serialization concept is not
applicable for static variables duo to this declaring a static variable as transient
there is no use.
5. Final variables will be participated into serialization directly by their values due
to this declaring a final variable as transient there is no impact.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
156 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Volatile modifier:
1. Volatile is the modifier applicable only for variables but not for classes and
methods.
2. If the value of variable keeps on changing such type of variables we have to
declare with volatile modifier.
3. If a variable declared as volatile then for every thread a separate local copy will
be created by the jvm, all intermediate modifications performed by the thread
will takes place in the local copy instead of master copy.
4. Once the value got finalized before terminating the thread that final value will be
updated in master copy.
5. The main advantage of volatile modifier is we can resolve data inconsistency
problems, but creating and maintaining a separate copy for every thread
increases complexity of the Programming and effects performance of the system.
Hence if there is no specific requirement never recommended to use volatile
modifier and it's almost outdated.
6. Volatile means the value keep on changing where as final means the value never
changes hence final volatile combination is illegal for variables.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
157 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Summary of modifier:
Constructors
Variables
Methods
Blocks
Outer
Outer
Outer
inner
Inner
Inner
public √ √ √ √ √ √ √ √ √
private √ √ √ √ √ √
protected √ √ √ √ √ √
<default> √ √ √ √ √ √ √ √ √
final √ √ √ √
static √ √ √ √ √ √
synchronized √ √
abstract √ √ √ √ √
native √
strictfp √ √ √ √ √ √ √
transient √
volatile √
Conclusions:
The Only Applicable Modifiers for Constructors are public, private, protected, and
<default>.
The Only Applicable Modifiers for Local Variable is final.
The Only Modifier which is applicable for Classes but Not for Interfaces is final.
The Modifiers which are Applicable for Classes but Not for enum are final and
abstract.
The Modifiers which are Applicable for Inner Classes but Not for Outer Classes are
public, protected, and static.
The Only Modifier which is Applicable for Methods is native.
The Modifiers which are Applicable for Variables are transient and volatile.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
158 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
3) What are Extra Modifiers Applicable for Inner Classes when compared with Outer
Classes?
10) If a Class contain at least One abstract Method is it required to declared that Class
Compulsory abstract?
11) If a Class doesn’t contain any abstract Methods is it Possible to Declare that Class as
abstract?
15) Can You give Example for abstract Class which doesn’t contain any abstract
Method?
16) Which of the following Modifiers Combinations are Legal for Methods?
public – static
static – abstract
abstract - final
final - synchronized
synchronized - native
native – abstract
17) Which of the following Modifiers Combinations are Legal for Classes?
public - final
final - abstract
abstract - strictfp
strictfp – public
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
159 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
24) What is the Difference between General Static Variable and final Static Variable?
27) What are Various Memory Locations of Instance Variables, Local Variables and
Static Variables?
32) If we are using native Modifier how we can Maintain Platform Independent Nature?
43) Without having any Method in Serializable Interface, how we can get Serializable
Ability for Our Object?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
160 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
44) What is the Purpose of transient Key Word and Explain its Advantages?
Note :
1. The modifiers which are applicable for inner classes but not for outer classes are
private, protected, static.
2. The modifiers which are applicable only for methods native.
3. The modifiers which are applicable only for variables transient and volatile.
4. The modifiers which are applicable for constructor public, private, protected,
default.
5. The only applicable modifier for local variables is final.
6. The modifiers which are applicable for classes but not for enums are final ,
abstract.
7. The modifiers which are applicable for classes but not for interface are final.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
161 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Interfaces:
Def1: Any service requirement specification (srs) is called an interface.
Example1: Sun people responsible to define JDBC API and database vendor will
provide implementation for that.
Diagram:
Example2: Sun people define Servlet API to develop web applications web server
vendor is responsible to provide implementation.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
162 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Def2: From the client point of view an interface define the set of services what is
expecting. From the service provider point of view an interface defines the set of
services what is offering. Hence an interface is considered as a contract between client
and service provider.
Example: ATM GUI screen describes the set of services what bank people offering, at
the same time the same GUI screen the set of services what customer is expecting hence
this GUI screen acts as a contract between bank and customer.
Def3: Inside interface every method is always abstract whether we are declaring or not
hence interface is considered as 100% pure abstract class.
Summery def: Any service requirement specification (SRS) or any contract between
client and service provider or 100% pure abstract classes is considered as an interface.
Note1:
Note2:
Example:
interface Interf
{
void methodOne();
void methodTwo();
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
163 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Extends vs implements:
Example:
class One{
public void methodOne(){
}
}
class Two extends One{
}
Example:
interface One{
public void methodOne();
}
interface Two{
public void methodTwo();
}
class Three implements One,Two{
public void methodOne(){
}
public void methodTwo(){
}
}
A class can extend a class and can implement any no. Of interfaces simultaneously.
interface One{
void methodOne();
}
class Two
{
public void methodTwo(){
}
}
class Three extends Two implements One{
public void methodOne(){
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
164 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example:
interface One{
void methodOne();
}
interface Two{
void methodTwo();
}
interface Three extends One,Two
{
}
Which of the following is true?
Ans: 6
Consider the expression X extends Y for which of the possibility of X and Y this
expression is true?
Ans: 3
X extends Y, Z ?
X, Y, Z should be interfaces.
X extends Y implements Z ?
X, Y should be classes.
Z should be interface.
X implements Y, Z ?
X should be class.
Y, Z should be interfaces.
X implements Y extend Z ?
Example:
interface One{
}
class Two {
}
class Three implements One extends Two{
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
165 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Output:
Compile time error.
D:\Java>javac Three.java
Three.java:5: '{' expected
class Three implements One extends Two{
Interface methods:
Every method present inside interface is always public and abstract whether we are
declaring or not. Hence inside interface the following method declarations are equal.
void methodOne();
public Void methodOne();
abstract Void methodOne(); Equal
public abstract Void methodOne();
As every interface method is always public and abstract we can't use the following
modifiers for interface methods.
Private, protected, final, static, synchronized, native, strictfp.
Ans: 5
Interface variables:
Example:
interface interf
{
int x=10;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
166 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
int x=10;
public int x=10;
static int x=10;
final int x=10; Equal
public static int x=10;
public final int x=10;
static final int x=10;
public static final int x=10;
As every interface variable by default public static final we can't declare with the
following modifiers.
o Private
o Protected
o Transient
o Volatile
For the interface variables compulsory we should perform initialization at the
time of declaration only otherwise we will get compile time error.
Example:
interface Interf
{
int x;
}
Output:
Compile time error.
D:\Java>javac Interf.java
Interf.java:3: = expected
int x;
Which of the following declarations are valid inside interface ?
1. int x;
2. private int x=10;
3. public volatile int x=10;
4. public transient int x=10;
5. public static final int x=10;
Ans: 5
Interface variables can be access from implementation class but cannot be modified.
Example:
interface Interf
{
int x=10;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
167 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example 1:
Example 2:
class Test implements Interf
{
public static void main(String args[]){
int x=20;
//here we declaring the variable x.
System.out.println(x);
}
}
Output:
D:\Java>javac Test.java
D:\Java>java Test
20\
Case 1:
If two interfaces contain a method with same signature and same return type in the
implementation class only one method implementation is enough.
Example 1:
interface Left
{
public void methodOne();
}
Example 2:
interface Right
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
168 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
if two interfaces contain a method with same name but different arguments in the
implementation class we have to provide implementation for both methods and these
methods acts as a overloaded methods
Example 1:
interface Left
{
public void methodOne();
}
Example 2:
interface Right
{
public void methodOne(int i);
}
Example 3:
class Test implements Left,Right
{
public void methodOne()
{
}
public void methodOne(int i)
{
}}
Output:
D:\Java>javac Left.java
D:\Java>javac Right.java
D:\Java>javac Test.java
Case 3:
If two interfaces contain a method with same signature but different return types then it
is not possible to implement both interfaces simultaneously.
Example 1:
interface Left
{
public void methodOne();
}
Example 2:
interface Right
{
public int methodOne(int i);
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
169 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
We can't write any java class that implements both interfaces simultaneously.
Two interfaces can contain a variable with the same name and there may be a chance
variable naming conflicts but we can resolve variable naming conflicts by using
interface names.
Example 1:
interface Left
{
int x=888;
}
Example 2:
interface Right
{
int x=999;
}
Example 3:
class Test implements Left,Right
{
public static void main(String args[]){
//System.out.println(x);
System.out.println(Left.x);
System.out.println(Right.x);
}
}
Output:
D:\Java>javac Left.java
D:\Java>javac Right.java
D:\Java>javac Test.java
D:\Java>java Test
888
999
Marker interface:
If an interface doesn't contain any methods and by implementing that interface if our
objects will get some ability such type of interfaces are called Marker interface (or) Tag
interface (or) Ability interface.
Example:
Serializable
Cloneable
RandomAccess These are marked for some ability
SingleThreadModel
.
.
.
.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
170 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Example 1:
By implementing Serilaizable interface we can send that object across the network and
we can save state of an object into a file.
Example 2:
Example 3:
Without having any methods in marker interface how objects will get ability ?
Internally JVM is responsible to provide required ability.
Adapter class:
Adapter class is a simple java class that implements an interface only with empty
implementation for every method.
If we implement an interface directly for each and every method compulsory we
should provide implementation whether it is required or not. This approach
increases length of the code and reduces readability.
Example 1:
interface X{
void m1();
void m2();
void m3();
void m4();
//.
//.
//.
//.
void m5();
}
Example 2:
class Test implements X{
public void m3(){
System.out.println("m3() method is called");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
171 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
}
public void m1(){}
public void m2(){}
public void m4(){}
public void m5(){}
}
Example 1:
abstract class AdapterX implements X{
public void m1(){}
public void m2(){}
public void m3(){}
public void m4(){}
//.
//.
//.
public void m1000(){}
}
Example 2:
public class Test extend AdapterX{{
public void m3(){
}}
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
172 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
What is the difference between interface, abstract class and concrete class?
When we should go for interface, abstract class and concrete class?
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
173 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
We can't create object for abstract class but abstract class can contain
constructor what is the need ?
abstract class constructor will be executed when ever we are creating child class object
to perform initialization of child object.
Example:
class Parent{
Parent()
{
System.out.println(this.hashCode());
}
}
class child extends Parent{
child(){
System.out.println(this.hashCode());
}
}
class Test{
public static void main(String args[]){
child c=new child();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
174 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
System.out.println(c.hashCode());
}
}
Note : We can't create object for abstract class either directly or indirectly.
Every method present inside interface is abstract but in abstract class also we
can take only abstract methods then what is the need of interface concept ?
We can replace interface concept with abstract class. But it is not a good programming
practice. We are misusing the roll of abstract class. It may create performence problems
also.
(this is just like recruiting IAS officer for sweeping purpose)
Why abstract class can contain constructor where as interface doesn't contain
constructor ?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
175 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
1) What is Interface?
3) When we should Go for Interface and Abstract Class and Concrete Class?
5) Explain about Interface Variables and what Modifiers are Applicable for them?
6) Explain about Interface Methods and what Modifiers are Applicable for them?
8) If 2 Interfaces contains a Method with Same Signature but different Return Types,
then how we can implement Both Interfaces Simultaneously?
10) We cannot Create an Object of Abstract Class then what is Necessity of having
Constructor Inside Abstract Class?
13) An Interface contains only Abstract Methods and an Abstract Class also can contain
only Abstract Methods then what is the Necessity of Interface?
14) In Your Previous Project where You used the following Marker Interface, Abstract
Class, Interface and Adapter Class?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
176 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Initialize an Object
Object Creation
Before Constructor Only Object is Ready and Hence within the Constructor we can
Access Object Properties Like Hash Code.
class Test {
Test() {
System.out.println(this); // Test@6e3d60
System.out.println(this.hashCode()); //7224672
}
public static void main(String[] args) {
Test t = new Test();
}
}
Whenever we are creating Child Class Object automatically Parent Constructor will
be executed but Parent Object won’t be created.
The Purpose of Parent Constructor Execution is to Initialize Child Object Only. Of
Course for the Instance Variables which are inheriting from parent Class.
In the Above Example whenever we are creating Child Object Both Parent and
Child Constructors will be executed for Child Object Purpose Only.
In the Above Example we are Just creating Student Object but Both Person and
Student Constructor to Initialize Student Object Only.
Teacher(String name, int age, int height, int weight, String subject, double salary) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
this.rollno = rollno;
this.marks = marks;
this.subject = subject;
this.salary = salary;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
179 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Any Way we can’t Create Object for Abstract Class and Interface. But Abstract
Class can contain Constructor but Interface doesn’t Why?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
180 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
Inside Interface we can take Only Abstract Methods. But in Abstract Class Also
we can take Only Abstract Methods Based on Our Requirement. Then what is
the Need of Interface? i.e. Is it Possible to Replace Interface Concept with
Abstract Class?
We can Replace Interface with Abstract Class but it is Not Good Programming Practice
(This is Like requesting IAS Officer for sweeping Activity)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
181 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Declaration & Access Modifiers
5) The Purpose of new Key Word is to Create Object and the Purpose of
Constructor is to Initialize that Object. √
6) We can’t Create Object for Abstract Class Directly but Indirectly we can Create.
√
7) Whenever we are creating Child Class Object Automatically Parent Class Object
will be created Internally.
9) Whenever we are creating Child Class Object Automatically Parent Object will
be Created.
10) Whenever we are creating Child Class Object Automatically Parent Constructor
will be executed but Parent Object won’t be Created. √
11) Either Directly OR Indirectly we can’t Create Object for Abstract Class and
Hence Constructor Concept is Not Applicable for Abstract Class.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
182 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
173 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
174 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Singleton classes
Factory method
Data Hiding :
Our internal data should not go out directly that is outside person can't access
our internal data directly.
By using private modifier we can implement data hiding.
Example:
class Account {
private double balance;
......................;
......................;
}
After providing proper username and password only , we can access our Account
information.
Abstraction :
Hide internal implementation and just highlight the set of services, is called
abstraction.
By using abstract classes and interfaces we can implement abstraction.
Example :
By using ATM GUI screen bank people are highlighting the set of services what they
are offering without highlighting internal implementation.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
175 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Encapsulation :
Binding of data and corresponding methods into a single unit is called
Encapsulation .
If any java class follows data hiding and abstraction such type of class is said to
be encapsulated class.
Encapsulation=Datahiding+Abstraction
Example:
Every data member should be declared as private and for every member we have to
maintain getter & Setter methods.
The main disadvantage of encapsulation is it increases length of the code and slows
down execution.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
176 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
class Account {
private double balance;
public double getBalance() {
return balance;
}
}
Which of the following classes are tightly encapsulated?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
177 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
IS-A Relationship(inheritance) :
1. Also known as inheritance.
2. By using "extends" keywords we can implement IS-A relationship.
3. The main advantage of IS-A relationship is reusability.
Example:
class Parent {
public void methodOne(){ }
}
class Child extends Parent {
public void methodTwo() { }
}
Conclusion :
1. Whatever the parent has by default available to the child but whatever the child
has by default not available to the parent. Hence on the child reference we can
call both parent and child class methods. But on the parent reference we can call
only methods available in the parent class and we can't call child specific
methods.
2. Parent class reference can be used to hold child class object but by using that
reference we can call only methods available in parent class and child specific
methods we can't call.
3. Child class reference cannot be used to hold parent class object.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
178 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
The common methods which are required for housing loan, vehicle loan, personal loan
and education loan we can define into a separate class in parent class loan. So that
automatically these methods are available to every child loan class.
Example:
class Loan {
//common methods which are required for any type of loan.
}
class HousingLoan extends Loan {
//Housing loan specific methods.
}
class EducationLoan extends Loan {
//Education Loan specific methods.
}
For all java classes the most commonly required functionality is define inside
object class hence object class acts as a root for all java classes.
For all java exceptions and errors the most common required functionality
defines inside Throwable class hence Throwable class acts as a root for exception
hierarchy.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
179 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Multiple inheritance :
Having more than one Parent class at the same level is called multiple inheritance.
Example:
Any class can extends only one class at a time and can't extends more than one class
simultaneously hence java won't provide support for multiple inheritance.
Example:
But an interface can extends any no. Of interfaces at a time hence java provides support
for multiple inheritance through interfaces.
Example:
If our class doesn't extends any other class then only our class is the direct child class of
object.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
180 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
If our class extends any other class then our class is not direct child class of object, It is
indirect child class of object , which forms multilevel inheritance.
Example 1:
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
181 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
Interfaces having dummy declarations and they won't have implementations hence no
ambiguity problem.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
182 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Cyclic inheritance :
Cyclic inheritance is not allowed in java.
Example 1:
Example 2:
HAS-A relationship:
1. HAS-A relationship is also known as composition (or) aggregation.
2. There is no specific keyword to implement HAS-A relationship but mostly we
can use new operator.
3. The main advantage of HAS-A relationship is reusability.
Example:
class Engine
{
//engine specific functionality
}
class Car
{
Engine e=new Engine();
//........................;
//........................;
//........................;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
183 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Composition vs Aggregation:
Composition:
Without existing container object if there is no chance of existing contained objects then
the relationship between container object and contained object is called composition
which is a strong association.
Example:
Example:
Aggregation :
Without existing container object if there is a chance of existing contained objects such
type of relationship is called aggregation. In aggregation objects have weak association.
Example:
Within a department there may be a chance of several professors will work whenever
we are closing department still there may be a chance of existing professor object
without existing department object the relationship between department and professor
is called aggregation where the objects having weak association.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
184 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
Note :
In composition container , contained objects are strongly associated, and but container
object holds contained objects directly
But in Aggregation container and contained objects are weakly associated and
container object just now holds the reference of contained objects.
Method signature:
In java, method signature consists of name of the method followed by argument types.
Example:
class Test {
public void m1(double d) { }
public void m2(int i) { }
public static void main(String ar[]) {
Test t=new Test();
t.m1(10.5);
t.m2(10);
t.m3(10.5); //CE
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
185 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
}
}
CE : cannot find symbol
symbol : method m3(double)
location : class Test
Within the same class we can't take 2 methods with the same signature otherwise we
will get compile time error.
Example:
public void methodOne() { }
public int methodOne() {
return 10;
}
Output:
Compile time error
methodOne() is already defined in Test
Polymorphism:
Same name with different forms is the concept of polymorphism.
Example 1: We can use same abs() method for int type, long type, float type etc.
Example:
1. abs(int)
2. abs(long)
3. abs(float)
Example 2:
We can use the parent reference to hold any child objects.
We can use the same List reference to hold ArrayList object, LinkedList object, Vector
object, or Stack object.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
186 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
A boy starts love with the word friendship, but girl ends love with the same word
friendship, word is the same but with different attitudes. This concept is nothing but
polymorphism.
Overloading :
1. Two methods are said to be overload if and only if both having the same name
but different argument types.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
187 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
2. In 'C' language we can't take 2 methods with the same name and different types.
If there is a change in argument type compulsory we should go for new method
name.
Example :
5. Having the same name and different argument types is called method
overloading.
6. All these methods are considered as overloaded methods.
7. Having overloading concept in java reduces complexity of the programming.
8. Example:
9. class Test {
10. public void methodOne() {
11. System.out.println("no-arg method");
12. }
13. public void methodOne(int i) {
14. System.out.println("int-arg method"); //overloaded methods
15. }
16. public void methodOne(double d) {
17. System.out.println("double-arg method");
18. }
19. public static void main(String[] args) {
20. Test t=new Test();
21. t.methodOne();//no-arg method
22. t.methodOne(10);//int-arg method
23. t.methodOne(10.5);//double-arg method
24. }
25. }
26. Conclusion : In overloading compiler is responsible to perform method
resolution(decision) based on the reference type(but not based on run time
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
188 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram :
Example:
class Test
{
public void methodOne(int i)
{
System.out.println("int-arg method");
}
public void methodOne(float f) //overloaded methods
{
System.out.println("float-arg method");
}
public static void main(String[] args)
{
Test t=new Test();
//t.methodOne('a');//int-arg method
//t.methodOne(10l);//float-arg method
t.methodOne(10.5);//C.E:cannot find symbol
}
}
Case 2:
class Test
{
public void methodOne(String s)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
189 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
System.out.println("String version");
}
public void methodOne(Object o) //Both methods are said to
//be
overloaded methods.
{
System.out.println("Object version");
}
public static void main(String[] args)
{
Test t=new Test();
t.methodOne("arun");//String version
t.methodOne(new Object());//Object version
t.methodOne(null);//String version
}
}
Note :
While resolving overloaded methods exact match will always get high priority,
While resolving overloaded methods child class will get the more priority than parent
class
Case 3:
class Test{
public void methodOne(String s) {
System.out.println("String version");
}
public void methodOne(StringBuffer s) {
System.out.println("StringBuffer version");
}
public static void main(String[] args) {
Test t=new Test();
t.methodOne("arun");//String version
t.methodOne(new StringBuffer("sai"));//StringBuffer version
t.methodOne(null);//CE : reference to m1() is ambiquous
}
}
Output:
Case 4:
class Test {
public void methodOne(int i,float f) {
System.out.println("int-float method");
}
public void methodOne(float f,int i) {
System.out.println("float-int method");
}
public static void main(String[] args) {
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
190 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
}
}
Case 5 :
class Test{
public void methodOne(int i) {
System.out.println("general method");
}
public void methodOne(int...i) {
System.out.println("var-arg method");
}
public static void main(String[] args) {
Test t=new Test();
t.methodOne();//var-arg method
t.methodOne(10,20);//var-arg method
t.methodOne(10);//general method
}
}
In general var-arg method will get less priority that is if no other method matched then
only var-arg method will get chance for execution it is almost same as default case inside
switch.
Case 6:
class Animal{ }
class Monkey extends Animal{}
class Test{
public void methodOne(Animal a) {
System.out.println("Animal version");
}
public void methodOne(Monkey m) {
System.out.println("Monkey version");
}
public static void main(String[] args) {
Test t=new Test();
Animal a=new Animal();
t.methodOne(a);//Animal version
Monkey m=new Monkey();
t.methodOne(m);//Monkey version
Animal a1=new Monkey();
t.methodOne(a1);//Animal version
}
}
In overloading method resolution is always based on reference type and runtime object
won't play any role in overloading.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
191 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Overriding :
1. Whatever the Parent has by default available to the Child through inheritance, if
the Child is not satisfied with Parent class method implementation then Child is
allow to redefine that Parent class method in Child class in its own way this
process is called overriding.
2. The Parent class method which is overridden is called overridden method.
3. The Child class method which is overriding is called overriding method.
4. Example 1:
5.
6. class Parent {
7. public void property(){
8. System.out.println("cash+land+gold");
9. }
10. public void marry() {
11. System.out.println("subbalakshmi"); //overridden
method
12. }
13. }
14. class Child extends Parent{ //overriding
15. public void marry() {
16. System.out.println("3sha/4me/9tara/anushka");
//overriding method
17. }
18. }
19. class Test {
20. public static void main(String[] args) {
21. Parent p=new Parent();
22. p.marry();//subbalakshmi(parent method)
23. Child c=new Child();
24. c.marry();//Trisha/nayanatara/anushka(child method)
25. Parent p1=new Child();
26. p1.marry();//Trisha/nayanatara/anushka(child method)
27. }
28. }
29. In overriding method resolution is always takes care by JVM based on runtime
object hence overriding is also considered as runtime polymorphism or dynamic
polymorphism or late binding.
30. The process of overriding method resolution is also known as dynamic method
dispatch.
Note: In overriding runtime object will play the role and reference type is dummy.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
192 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
Co-variant return type concept is applicable only for object types but not for
primitives.
17. Private methods are not visible in the Child classes hence overriding concept is
not applicable for private methods. Based on own requirement we can declare
the same Parent class private method in child class also. It is valid but not
overriding.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
193 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Parent class non final methods we can override as final in child class. We can
override native methods in the child classes.
29. We should override Parent class abstract methods in Child classes to provide
implementation.
30. Example:
31. abstract class Parent {
32. public abstract void methodOne();
33. }
34. class Child extends Parent {
35. public void methodOne() { }
36. }
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
194 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
38. Example:
39. class Parent {
40. public void methodOne() { }
41. }
42. abstract class Child extends Parent {
43. public abstract void methodOne();
44. }
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
195 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
53. Output:
54. Compile time error :
55. methodOne() in Child cannot override methodOne() in Parent;
56. attempting to assign weaker access privileges; was public
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
196 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
Rule: While overriding if the child class method throws any checked exception
compulsory the parent class method should throw the same checked exception or its
parent otherwise we will get compile time error.
Example:
class Parent {
public void methodOne() {}
}
class Child extends Parent{
public void methodOne()throws Exception {}
}
Output:
Compile time error :
methodOne() in Child cannot override methodOne() in Parent;
overridden method does not throw java.lang.Exception
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
197 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Examples :
Example:
class Parent
{
public static void methodOne(){}
//here static methodOne() method is a class level
}
class Child extends Parent
{
public void methodOne(){}
//here methodOne() method is a object level hence
// we can't override methodOne() method
}
output :
CE: methodOne in Child can't override methodOne() in Parent ;
overriden method is static
Case 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
198 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Case 3:
class Parent
{
public static void methodOne() {}
}
class Child extends Parent {
public static void methodOne() {}
}
It is valid. It seems to be overriding concept is applicable for static methods but it is not
overriding it is method hiding.
METHOD HIDING :
All rules of method hiding are exactly same as overriding except the following
differences.
Note: If both Parent and Child class methods are non static then it will become
overriding and method resolution is based on runtime object. In this case the output is
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
199 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Parent class
Child class
Child class
Example:
class Parent {
public void methodOne(int... i){
System.out.println("parent class");
}
}
class Child extends Parent { //overloading but not overriding.
public void methodOne(int i) {
System.out.println("child class");
}
}
class Test {
public static void main(String[] args) {
Parent p=new Parent();
p.methodOne(10);//parent class
Child c=new Child();
c.methodOne(10);//child class
Parent p1=new Child();
p1.methodOne(10);//parent class
}
}
In the above program if we replace child class method with var arg then it will become
overriding. In this case the output is
Parent class
Child class
Child class
Example:
class Parent
{
int x=888;
}
class Child extends Parent
{
int x=999;
}
class Test
{
public static void main(String[] args)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
200 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
{
Parent p=new Parent();
System.out.println(p.x);//888
Child c=new Child();
System.out.println(c.x);//999
Parent p1=new Child();
System.out.println(p1.x);//888
}
}
Note: In the above program Parent and Child class variables, whether both are static or
non static whether one is static and the other one is non static there is no change in the
answer.
Note:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
201 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
What is the difference between ArrayList l=new ArrayList() & List l=new ArrayList() ?
We can use ArrayList reference to hold ArrayList object where as we can use
List reference to hold any list implemented class object (ArrayList, LinkedList,
Vector, Stack)
By using ArrayList reference we can call both List and ArrayList methods but
by using List reference we can call only List interface specific methods and we
can't call ArrayList specific methods.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
202 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Constructors :
1. Object creation is not enough compulsory we should perform initialization then
only the object is in a position to provide the response properly.
2. Whenever we are creating an object some piece of the code will be executed
automatically to perform initialization of an object this piece of the code is
nothing but constructor.
3. Hence the main objective of constructor is to perform initialization of an object.
Example:
class Student
{
String name;
int rollno;
Student(String name,int rollno) //Constructor
{
this.name=name;
this.rollno=rollno;
}
public static void main(String[] args)
{
Student s1=new Student("vijayabhaskar",101);
Student s2=new Student("bhaskar",102);
}
}
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
203 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
1. Both instance block and constructor will be executed automatically for every
object creation but instance block 1st followed by constructor.
2. The main objective of constructor is to perform initialization of an object.
3. Other than initialization if we want to perform any activity for every object
creation we have to define that activity inside instance block.
4. Both concepts having different purposes hence replacing one concept with
another concept is not possible.
5. Constructor can take arguments but instance block can't take any arguments
hence we can't replace constructor concept with instance block.
6. Similarly we can't replace instance block purpose with constructor.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
204 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
class Test
{
static Test()
{}
}
Output:
Modifier static not allowed here
Default constructor:
1. For every class in java including abstract classes also constructor concept is
applicable.
2. If we are not writing at least one constructor then compiler will generate default
constructor.
3. If we are writing at least one constructor then compiler won't generate any
default constructor. Hence every class contains either compiler generated
constructor (or) programmer written constructor but not both simultaneously.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
205 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
}
void Test()
{}
}
class Test
class Test {
{ Test(int i)
Test(int i) {
{} super();
} }
}
class Test class Test
{ {
Test() Test()
{ {
super(); super();
} }
} }
class Test
class Test {
{ Test(int i)
Test(int i) {
{ this();
this(); }
} Test()
Test() {
{} super();
} }
}
super() vs this():
The 1st line inside every constructor should be either super() or this() if we are not
writing anything compiler will always generate super().
Case 1: We have to take super() (or) this() only in the 1st line of constructor. If we are
taking anywhere else we will get compile time error.
Example:
class Test
{
Test()
{
System.out.println("constructor");
super();
}
}
Output:
Compile time error.
Call to super must be first statement in constructor
Case 2: We can use either super() (or) this() but not both simultaneously.
Example:
class Test
{
Test()
{
super();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
206 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
this();
}
}
Output:
Compile time error.
Call to this must be first statement in constructor
Case 3: We can use super() (or) this() only inside constructor. If we are using anywhere
else we will get compile time error.
Example:
class Test
{
public void methodOne()
{
super();
}
}
Output:
Compile time error.
Call to super must be first statement in constructor
Diagram:
Example:
super(), this() super, this
These are constructors calls. These are keywords
We can use these to invoke super class & We can use refers parent class and current
current constructors directly class instance members.
We should use only inside constructors as We can use anywhere (i.e., instance area)
first line, if we are using outside of except static area , other wise we will get
constructor we will get compile time error. compile time error .
Example:
class Test
{
public static void main(String[] args)
{
System.out.println(super.hashCode());
}
}
Output:
Compile time error.
Non-static variable super cannot be referenced from a static context.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
207 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Overloaded constructors :
A class can contain more than one constructor and all these constructors having the
same name but different arguments and hence these constructors are considered as
overloaded constructors.
Example:
class Test {
Test(double d){
System.out.println("double-argument constructor");
}
Test(int i) {
this(10.5);
System.out.println("int-argument constructor");
}
Test() {
this(10);
System.out.println("no-argument constructor");
}
public static void main(String[] args) {
Test t1=new Test(); //no-argument constructor/int-argument
//constructor/double-argument constructor
Test t2=new Test(10);
//int-argument constructor/double-argument constructor
Test t3=new Test(10.5);//double-argument constructor
}
}
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
208 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
We can't create object for abstract class but abstract class can contain constructor what
is the need ?
Abstract class constructor will be executed for every child class object creation to
perform initialization of child class object only.
1. Whenever we are creating child class object then automatically parent class
object will be created.(false)
2. Whenever we are creating child class object then parent class constructor will be
executed.(true)
Example:
abstract class Parent
{
Parent()
{
System.out.println(this.hashCode());
//11394033//here this means child class object
}
}
class Child extends Parent
{
Child()
{
System.out.println(this.hashCode());//11394033
}
}
class Test
{
public static void main(String[] args)
{
Child c=new Child();
System.out.println(c.hashCode());//11394033
}
}
Note:
Recursive functions:
1. Nested call
2. Recursive call
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
209 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Nested call:
Example:
public static void methodOne()
{
methodTwo();
}
public static void methodTwo()
{
methodOne();
}
Recursive call:
Example:
public void methodOne()
{
methodOne();
}
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
210 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
1. Compiler will check whether the programmer wrote any constructor or not. If
he didn't write at least one constructor then compiler will generate default
constructor.
2. If the programmer wrote any constructor then compiler will check whether he
wrote super() or this() in the 1st line or not. If his not writing any of these
compiler will always write (generate) super().
3. Compiler will check is there any chance of recursive constructor invocation. If
there is a possibility then compiler will raise compile time error.
Case 2:
If the Parent class contains any argument constructors while writing Child
classes we should takes special care with respect to constructors.
Whenever we are writing any argument constructor it is highly recommended to
write no argument constructor also.
Case 3:
class Parent
{
Parent()throws java.io.IOException
{}
}
class Child extends Parent
{}
Output:
Compile time error
Unreported exception java.io.IOException in default constructor.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
211 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
class Parent
{
Parent()throws java.io.IOException
{}
}
class Child extends Parent
{
Child()throws Exception
{
super();
}
}
If Parent class constructor throws some checked exception compulsory Child class
constructor should throw the same checked exception (or) its Parent.
Singleton classes :
For any java class if we are allow to create only one object such type of class is said to be
singleton class.
Example:
1) Runtime class
2) ActionServlet
3) ServiceLocator
4) BusinessDelegate
Runtime r1=Runtime.getRuntime();
//getRuntime() method is a factory method
Runtime r2=Runtime.getRuntime();
Runtime r3=Runtime.getRuntime();
.................................................
.................................................
System.out.println(r1==r2);//true
System.out.println(r1==r3);//true
Diagram:
We can create our own singleton classes for this we have to use private constructor,
static variable and factory method.
Example:
class Test
{
private static Test t=null;
private Test()
{}
public static Test getTest()
//getTest() method is a factory method
{
if(t==null)
{
t=new Test();
}
return t;
}
}
class Client
{
public static void main(String[] args)
{
System.out.println(Test.getTest().hashCode());//1671711
System.out.println(Test.getTest().hashCode());//1671711
System.out.println(Test.getTest().hashCode());//1671711
System.out.println(Test.getTest().hashCode());//1671711
}
}
Diagram:
Note:
Example:
class Test
{
private static Test t1=null;
private static Test t2=null;
private Test()
{}
public static Test getTest()
//getTest() method is a factory method
{
if(t1==null)
{
t1=new Test();
return t1;
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
213 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
else if(t2==null)
{
t2=new Test();
return t2;
}
else
{
if(Math.random()<0.5) //Math.random() limit : 0<=x<1
return t1;
else
return t2;
}
}
}
class Client
{
public static void main(String[] args)
{
System.out.println(Test.getTest().hashCode());//1671711
System.out.println(Test.getTest().hashCode());//11394033
System.out.println(Test.getTest().hashCode());//11394033
System.out.println(Test.getTest().hashCode());//1671711
}
}
IIQ : We are not allowed to create child class but class is not final , How it is Possible ?
Note : When ever we are creating child class object automatically parent class
constructor will be executed but parent object won't be created.
class Parent {
Parent() {
System.out.println(this.hashCode()); //123
}
}
class Child extends Parent {
Child() {
System.out.println(this.hashCode());//123
}
}
class Test {
public static void main(String ar[]) {
Child c=new Child();
System.out.println(c.hashCode());//123
Which of the following is true ?
1. The name of the constructor and name of the class need not be same.(false)
2. We can declare return type for the constructor but it should be void. (false)
3. We can use any modifier for the constructor. (false)
4. Compiler will always generate default constructor. (false)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
214 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Factory method:
By using class name if we are calling a method and that method returns the same class
object such type of method is called factory method.
Example:
Runtime r=Runtime.getRuntime();//getRuntime is a factory method.
DateFormat df=DateFormat.getInstance();
If object creation required under some constraints then we can implement by using
factory method.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
215 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
Analysis:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
216 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Output:
E:\scjp>javac Base.java
E:\scjp>java Base
0
First static block
Second static block
20
Main method
With in the static block if we are trying to read any variable then that read is
considered as "direct read"
If we are calling a method , and with in the method if we are trying to read a method ,
that read is called Indirect read
If a variable is in RIWO state then we can't perform read operation directly otherwise
we will get compile time error saying " illegal forward reference ".
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
217 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
218 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Analysis:
Output:
E:\scjp>java Derived
0
Base static block
0
Derived first static block
Derived second static block
200
Derived main
Output:
E:\scjp>java Base
0
Base static block
20
Basic main
Whenever we are executing Child class the following sequence of events will be
performed automatically.
Note : When ever we are loading child class autimatically the parent class will be loaded
but when ever we are loading parent class the child class don't be loaded automatically.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
219 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Static block:
Static blocks will be executed at the time of class loading hence if we want to
perform any activity at the time of class loading we have to define that activity
inside static block.
With in a class we can take any no. Of static blocks and all these static blocks will
be executed from top to bottom.
Example:
The native libraries should be loaded at the time of class loading hence we have to
define that activity inside static block.
Example:
class Test
{
static
{
System.loadLibrary("native library path");
}
}
Ex 2 : Every JDBC driver class internally contains a static block to register the driver
with DriverManager hence programmer is not responsible to define this explicitly.
Example:
class Driver
{
static
{
//Register this driver with DriverManager
}
}
IIQ : Without using main() method is it possible to print some statements to the
console?
Ans : Yes, by using static block.
Example:
class Google
{
static
{
System.out.println("hello i can print");
System.exit(0);
}
}
Output:
Hello i can print
IIQ : Without using main() method and static block is it possible to print some
statements to the console ?
Example 1:
class Test
{
static int i=methodOne();
public static int methodOne()
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
220 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Note : Without using main() method we can able to print some statement to the sonsole ,
but this rule is applicable untill 1.6 version from 1.7 version onwards to run java
program main() method is mandatory.
class Test {
static {
System.out.println("ststic block");
System.exit(0);
}
}
It is valid in 1.6 version but invalid or won't run in 1.7 version
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
221 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Analysis:
i=0[RIWO]
j=0[RIWO]
i=10[R&W]
j=20[R&W]
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
222 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Output:
Whenever we are executing a java class static control flow will be executed. In the Static
control flow Whenever we are creating an object the following sequence of events will
be performed automatically.
Note: static control flow is one time activity and it will be executed at the time of class
loading.
But instance control flow is not one time activity for every object creation it will be
executed.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
223 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
}
class Child extends Parent
{
int i=100;
{
methodTwo();
System.out.println("Child first instance block");
}
Child()
{
System.out.println("Child class constructor");
}
public static void main(String[] args)
{
Child c=new Child();
System.out.println("Child class main method");
}
public void methodTwo()
{
System.out.println(j);
}
{
System.out.println("Child second instance block");
}
int j=200;
}
Output:
E:\scjp>javac Child.java
E:\scjp>java Child
0
Parent first instance block
Parent class constructor
0
Child first instance block
Child second instance block
Child class constructor
Child class main method
Whenever we are creating child class object the following sequence of events will be
executed automatically.
Note: Object creation is the most costly operation in java and hence if there is no
specific requirement never recommended to crate objects.
Example 1:
public class Initilization
{
private static String methodOne(String msg) //-->1
{
System.out.println(msg);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
224 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
return msg;
}
public Initilization() //-->4
{
m=methodOne("1"); //-->9
}
{ //-->5
m=methodOne("2"); //-->7
}
String m=methodOne("3"); //-->6 , //-->8
public static void main(String[] args) //-->2
{
Object obj=new Initilization(); //-->3
}
}
Analysis:
Output:
2
3
1
Example 2:
public class Initilization
{
private static String methodOne(String msg) //-->1
{
System.out.println(msg);
return msg;
}
static String m=methodOne("1"); //-->2, //-->5
{
m=methodOne("2");
}
static //-->3
{
m=methodOne("3"); //-->6
}
public static void main(String[] args) //-->4
{
Object obj=new Initilization();
}
}
Output:
1
3
2
We can't access instance variables directly from static area because at the time of
execution of static area JVM may not identify those members.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
225 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example:
But from the instance area we can access instance members directly.
Static members we can access from anywhere directly because these are
identified already at the time of class loading only.
Type casting:
Parent class reference can be used to hold Child class object but by using that reference
we can't call Child specific methods.
Example:
Object o=new String("ashok");//valid
System.out.println(o.hashCode());//valid
System.out.println(o.length());//
C.E:cannot find symbol,
symbol : method length(),
location: class java.lang.Object
Example:
Runnable r=new Thread();
Type casting syntax:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
226 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example 1:
Example 2:
Rule 2: "C" must be either same (or) derived type of "A" otherwise we will get compile
time error saying incompatible types.
Found: C
Required: A
Example 1:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
227 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example 2:
Runtime checking :
The underlying object type of "d" must be either same (or) derived type of "C"
otherwise we will get runtime exception saying ClassCastException.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
228 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
Through Type Casting just we are converting the type of object but not object itself that
is we are performing type casting but not object casting.
Through Type Casting we are not create any new objects for the existing objects we are
providing another type of reference variable(mostly Parent type).
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
229 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example 1:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
230 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
231 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Example 3:
Example 4:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
232 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
C c=new C();
System.out.println(c.x);//999
System.out.println(((B)c).x);//888
System.out.println(((A)((B)c)).x);//777
Coupling :
The degree of dependency between the components is called coupling.
Example:
class A
{
static int i=B.j;
}
class B extends A
{
static int j=C.methodOne();
}
class C extends B
{
public static int methodOne()
{
return D.k;
}
}
class D extends C
{
static int k=10;
public static void main(String[] args)
{
D d=new D();
}
}
The above components are said to be tightly coupled to each other because the
dependency between the components is more.
Tightly coupling is not a good programming practice because it has several serious
disadvantages.
Cohesion:
For every component we have to maintain a clear well defined functionality such type of
component is said to be follow high cohesion.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
233 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Object Oriented Programming(OOPS)
Diagram:
High cohesion is always good programming practice because it has several advantages.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
234 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
1. Introduction
2. Runtime stack mechanism
3. Default exception handling in java
4. Exception hierarchy
5. Customized exception handling by try catch
6. Control flow in try catch
7. Methods to print exception information
8. Try with multiple catch blocks
9. Finally
10.Difference between final, finally, finalize
11.Control flow in try catch finally
12.Control flow in nested try catch finally
13.Various possible combinations of try catch finally
14.throw keyword
15.throws keyword
16.Exception handling keywords summary
17.Various possible compile time errors in exception handling
18.Customized exceptions
19.Top-10 exceptions
20.1.7 Version Enhancements
1. try with resources
2. multi catch block
21.Exception Propagation
22.Rethrowing an Exception
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Introduction
Exception: An unwanted unexpected event that disturbs normal flow of the program is
called exception.
Example:
SleepingException
TyrePunchuredException
FileNotFoundException ...etc
Example: Suppose our programming requirement is to read data from remote file
locating at London. At runtime if London file is not available then our program should
not be terminated abnormally.
We have to provide a local file to continue rest of the program normally. This way of
defining alternative is nothing but exception handling.
Example:
try
{
read data from London file
}
catch(FileNotFoundException e)
{
use local file and continue rest of the program normally
}
After completing every method call JVM removes the corresponding entry from the
stack.
After completing all method calls JVM destroys the empty stack and terminates the
program normally.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Example:
class Test
{
public static void main(String[] args){
doStuff();
}
public static void doStuff(){
doMoreStuff();
}
public static void doMoreStuff(){
System.out.println("Hello");
}}
Output:
Hello
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
7. Default exception handler just print exception information to the console in the
following format and terminates the program abnormally.
Example:
class Test
{
public static void main(String[] args){
doStuff();
}
public static void doStuff(){
doMoreStuff();
}
public static void doMoreStuff(){
System.out.println(10/0);
}}
Output:
Exception in thread "main" java.lang.ArithmeticException: / by zero
atTest.doMoreStuff(Test.java:10)
atTest.doStuff(Test.java:7)
atTest.main(Test.java:4)
Diagram:
Exception Hierarchy:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Exception:
Most of the cases exceptions are caused by our program and these are recoverable.
Ex : If FileNotFoundException occurs then we can use local file and we can continue
rest of the program execution normally.
Error:
Most of the cases errors are not caused by our program these are due to lack of system
resources and these are non-recoverable.
Note:RuntimeException and its child classes, Error and its child classes are unchecked
and all the remaining are considered as checked exceptions.
Note: Whether exception is checked or unchecked compulsory it should occurs at
runtime only and there is no chance of occurring any exception at compile time.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
A checked exception is said to be fully checked if and only if all its child classes are also
checked.
Example:
1) IOException
2) InterruptedException
A checked exception is said to be partially checked if and only if some of its child classes
are unchecked.
Example:
Exception
1. Throwable.
2. Exception.
1. RuntimeException-----unchecked
2. Error-----unchecked
3. IOException-----fully checked
4. Exception-----partially checked
5. InterruptedException-----fully checked
6. Throwable------partially checked
7. ArithmeticException ----- unchecked
8. NullPointerException ------ unchecked
9. FileNotFoundException ----- fully checked
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Diagram:
Example:
try
{
Risky code
}
catch(Exception e)
{
Handling code
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
try{
statement1;
statement2;
statement3;
}
catch(X e) {
statement4;
}
statement5;
1, 4, 5 normal termination.
Note:
1. Within the try block if anywhere an exception raised then rest of the try block
won't be executed even though we handled that exception. Hence we have to
place/take only risk code inside try block and length of the try block should be as
less as possible.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
2. If any statement which raises an exception and it is not part of any try block then
it is always abnormal termination of the program.
3. There may be a chance of raising an exception inside catch and finally blocks
also in addition to try block.
Throwable class defines the following methods to print exception information to the
console.
This method prints exception information in the following format.
printStackTrace(): Name of the exception: description of exception
Stack trace
This method prints exception information in the following format.
toString():
Name of the exception: description of exception
This method returns only description of the exception.
getMessage():
Description.
Example:
The way of handling an exception is varied from exception to exception. Hence for every
exception type it is recommended to take a separate catch block. That is try with
multiple catch blocks is possible and recommended to use.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Example:
try
{
.
.
.
.
try catch(FileNotFoundException e)
{ {
. use local file
. }
. catch(ArithmeticException e)
. {
} perform these Arithmetic operations
catch(Exception e) }
{ catch(SQLException e)
default handler {
} don't use oracle db, use mysqldb
}
catch(Exception e)
{
default handler
}
This approach is not recommended This approach is highly recommended
because for any type of Exception because for any exception raise
we are using the same catch block. we are defining a separate catch block.
If try with multiple catch blocks present then order of catch blocks is very
important. It should be from child to parent by mistake if we are taking from
parent to child then we will get Compile time error saying
Example:
class Test
class Test
{
{
public static void
public static void main(String[] args)
main(String[] args)
{
{
try
try
{
{
System.out.println(10/0);
System.out.println(10/0);
}
}
catch(Exception e)
catch(ArithmeticException e)
{
{
e.printStackTrace();
e.printStackTrace();
}
}
catch(ArithmeticException e)
catch(Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
}}}
}}}
CE:exception
Output:
java.lang.ArithmeticException has
Compile successfully.
already been caught
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Finally block:
It is not recommended to take clean up code inside try block because there is no
guarantee for the execution of every statement inside a try.
It is not recommended to place clean up code inside catch block because if there
is no exception then catch block won't be executed.
We require some place to maintain clean up code which should be executed
always irrespective of whether exception raised or not raised and whether
handled or not handled. Such type of best place is nothing but finally block.
Hence the main objective of finally block is to maintain cleanup code.
Example:
try
{
risky code
}
catch(x e)
{
handling code
}
finally
{
cleanup code
}
The speciality of finally block is it will be executed always irrespective of whether the
exception raised or not raised and whether handled or not handled.
Case-1: If there is no Exception:
class Test
{
public static void main(String[] args)
{
try
{
System.out.println("try block executed");
}
catch(ArithmeticException e)
{
System.out.println("catch block executed");
}
finally
{
System.out.println("finally block executed");
}
}
}
Output:
try block executed
Finally block executed
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
}
catch(ArithmeticException e)
{
System.out.println("catch block executed");
}
finally
{
System.out.println("finally block executed");
}
}
}
Output:
Try block executed
Catch block executed
Finally block executed
}
catch(NullPointerException e)
{
System.out.println("catch block executed");
}
finally
{
System.out.println("finally block executed");
}
}
}
Output:
Try block executed
Finally block executed
Exception in thread "main" java.lang.ArithmeticException: / by zero
atTest.main(Test.java:8)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
return Vs finally:
Even though return statement present in try or catch blocks first finally will be executed
and after that only return statement will be considered. i.efinally block dominates
return statement.
Example:
class Test
{
public static void main(String[] args)
{
try
{
System.out.println("try block executed");
return;
}
catch(ArithmeticException e)
{
System.out.println("catch block executed");
}
finally
{
System.out.println("finally block executed");
}
}}
Output:
try block executed
Finally block executed
If return statement present try, catch and finally blocks then finally block return
statement will be considered.
Example:
class Test
{
public static void main(String[] args)
{
System.out.println(m1());
}
public static intm1(){
try
{
System.out.println(10/0);
return 777;
}
catch(ArithmeticException e)
{
return 888;
}
finally{
return 999;
}
}}
Output:
999
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
finally vs System.exit(0):
==========================
There is only one situation where the finally block won't be executed is whenever we are
using System.exit(0) method.
When ever we are using System.exit(0) then JVM itself will be shutdown , in this case
finally block won't be executed.
Example:
class Test
{
public static void main(String[] args)
{
try
{
System.out.println("try");
System.exit(0);
}
catch(ArithmeticException e)
{
System.out.println("catch block executed");
}
finally
{
System.out.println("finally block executed");
}
}}
Output:
try
Note : System.exit(0);
1. This argument acts as status code. Insteadof zero, we can take any integer value
2. zero means normal termination , non-zero means abnormal termination
3. This status code internally used by JVM, whether it is zero or non-zero there is no
change in the result and effect is same wrt program.
final:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
finally:
finally is the block always associated with try-catch to maintain clean up code
which should be executed always irrespective of whether exception raised or not
raised and whether handled or not handled.
finalize:
Note:
1. finally block meant for cleanup activities related to try block where as finalize()
method meant for cleanup activities related to object.
Example:
try
{
Stmt 1;
Stmt-2;
Stmt-3;
}
catch(Exception e)
{
Stmt-4;
}
finally
{
stmt-5;
}
Stmt-6;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
try
{
stmt-1;
stmt-2;
stmt-3;
try
{
stmt-4;
stmt-5;
stmt-6;
}
catch (X e)
{
stmt-7;
}
finally
{
stmt-8;
}
stmt-9;
}
catch (Y e)
{
stmt-10;
}
finally
{
stmt-11;
}
stmt-12;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Case 9:if an exception raised at statement 8 and the corresponding catch block has
matched 1, 2, 3, 4, 5, 6, 7, 10, 11,12 normal termination.
Case 10: if an exception raised at statement 8 and the corresponding catch block not
matched 1, 2, 3, 4, 5, 6, 7, 11 abnormal terminations.
Case 11: if an exception raised at statement 9 and corresponding catch block
matched 1, 2, 3, 4, 5, 6, 7, 8,10,11,12 normal termination.
Case 12: if an exception raised at statement 9 and corresponding catch block not
matched 1, 2, 3, 4, 5, 6, 7, 8, 11 abnormal termination.
Case 13: if an exception raised at statement 10 is always abnormal termination but
before that finally block 11 will be executed.
Case 14: if an exception raised at statement 11 or 12 is always abnormal
termination.
Note:
1.if we are not entering into the try block then the finally block won't be executed. Once
we entered into the try block without executing finally block we can't come out.
Example:
class Test
{
public static void main(String[] args){
try{
System.out.println(10/0);
}
catch(ArithmeticException e)
{
System.out.println(10/0);
}
finally{
String s=null;
System.out.println(s.length());
}
}}
output :
RE:NullPointerException
Note: Default exception handler can handle only one exception at a time and that is the
most recently raised exception.
1. Whenever we are writing try block compulsory we should write either catch or
finally. i.e., try without catch or finally is invalid.
2. Whenever we are writing catch block compulsory we should write try.
i.e., catch without try is invalid.
3. Whenever we are writing finally block compulsory we should write try.
i.e., finally without try is invalid.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
try {}
catch (X e) {} ✘
catch (X e) {} //CE:exception ArithmeticException has already been caught
try {}
catch (X e) {} ✔
finally {}
try {}
finally {} ✔
try {}
catch (X e) {}
System.out.println("Hello"); ✘
catch (Y e) {} //CE: 'catch' without 'try'
try {}
catch (X e) {}
System.out.println("Hello"); ✘
finally {} //CE: 'finally' without 'try'
try {}
finally {} ✘
catch (X e) {} //CE: 'catch' without 'try'
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
try {}
catch (X e) {} ✔
try {}
finally {}
try {}
catch (X e) {} ✘
finally {}
finally {} //CE: 'finally' without 'try'
try {}
catch (X e) {
try {} ✔
catch (Y e1) {}
}
try {}
catch (X e) {}
finally {
try {} ✔
catch (Y e1) {}
finally {}
}
try {
try {} //CE: 'try' without 'catch', 'finally' or resource declarations ✘
}
catch (X e) {}
try {}
catch (X e) //CE:'{' expected ✘
System.out.println("Hello");
try {}
catch (NullPointerException e1) {}
finally //CE: '{' expected ✘
System.out.println("Hello");
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
throw statement:
Sometimes we can create Exception object explicitly and we can hand over to the JVM
manually by using throw keyword.
Example:
Note: In general we can use throw keyword for customized exceptions but not for
predefined exceptions.
Case 1:
throw e;
Example:
class Test3
{
class Test3
static ArithmeticException e=new
{
static ArithmeticException e;
ArithmeticException();
public static void main(String[]
public static void main(String[]
args){
args){
throw e;
throw e;
}
}
}
}
Output:
Output:
Exception in thread "main"
Runtime exception: Exception in thread
java.lang.NullPointerException
"main"
at Test3.main(Test3.java:5)
java.lang.ArithmeticException
Case 2:
After throw statement we can't take any statement directly otherwise we will get
compile time error saying unreachable statement.
Example:
class Test3
class Test3
{
{
public static void main(String[]
public static void main(String[]
args){
args){
System.out.println(10/0);
throw new ArithmeticException("/ by
System.out.println("hello");
zero");
}
System.out.println("hello");
}
}
Output:
}
Runtime error: Exception in thread
Output:
"main"
Compile time error.
java.lang.ArithmeticException: / by
Test3.java:5: unreachable statement
zero
System.out.println("hello");
at Test3.main(Test3.java:4)
Case 3:
We can use throw keyword only for Throwable types otherwise we will get compile time
error saying incomputable types.
Example:
class Test3
{ class Test3 extends RuntimeException
public static void main(String[] {
args){ public static void main(String[] args){
throw new Test3(); throw new Test3();
} }
}Output: }
Compile time error. Output:
Test3.java:4: incompatible types Runtime error: Exception in thread
found : Test3 "main" Test3
required: java.lang.Throwable at Test3.main(Test3.java:4)
throw new Test3();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Throws statement:
In our program if there is any chance of raising checked exception then compulsory we
should handle either by try catch or by throws keyword otherwise the code won't
compile.
Example:
import java.io.*;
class Test3
{
public static void main(String[] args){
PrinterWriter out=new PrintWriter("abc.txt");
out.println("hello");
}
}
CE :
Unreported exception java.io.FileNotFoundException; must be caught or
declared to be thrown.
Example:
class Test3
{
public static void main(String[] args){
Thread.sleep(5000);
}
}
Example:
By using try catch By using throws keyword
class Test3 We can use throws keyword to delegate the
{ responsibility of exception handling to the caller
public static void method. Then caller method is responsible to handle
main(String[] args){
try{
that exception.
class Test3
Thread.sleep(5000);
{
} public static void main(String[] args)throws
catch(InterruptedException
e){} InterruptedException{
}
Thread.sleep(5000);
}
}
Output: }
Compile and running Output:
successfully Compile and running successfully
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
23 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Note :
Example:
class Test
{
public static void main(String[] args)throws InterruptedException{
doStuff();
}
public static void doStuff()throws InterruptedException{
doMoreStuff();
}
public static void doMoreStuff()throws InterruptedException{
Thread.sleep(5000);
}
}
Output:
Compile and running successfully.
In the above program if we are removing at least one throws keyword then the program
won't compile.
Case 1:
we can use throws keyword only for Throwable types otherwise we will get compile time
error saying incompatible types.
Example:
class Test3{
public static void main(String[]
args)
throws Test3 class Test3 extends RuntimeException{
{} public static void main(String[]
} args)
Output: throws
Compile time error Test3
Test3.java:2: incompatible types {}
found : Test3 }
required: java.lang.Throwable Output:
public static void main(String[] Compile and running successfully.
args)
throws
Test3
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
24 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Case 2:Example:
class Test3{
class Test3{
public static void main(String[]
public static void main(String[]
args){
args){
throw new Exception();
throw new Error();
}
}
}
}
Output:
Output:
Compile time error.
Runtime error
Test3.java:3: unreported exception
Exception in thread "main"
java.lang.Exception;
java.lang.Error
must be caught or declared to be
at Test3.main(Test3.java:3)
thrown
Case 3:
In our program with in the try block, if there is no chance of rising an exception then we
can't right catch block for that exception otherwise we will get compile time error
sayingexception XXX is never thrown in body of corresponding try statement. But this
rule is applicable only for fully checked exception.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
25 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Case 4:
We can use throws keyword only for constructors and methods but not for classes.
Example:
Sometimes we can create our own exception to meet our programming requirements.
Such type of exceptions are called customized exceptions (user defined exceptions).
Example:
1. InSufficientFundsException
2. TooYoungException
3. TooOldException
Program:
class TooYoungException extends RuntimeException
{
TooYoungException(String s)
{
super(s);
}
}
class TooOldException extends RuntimeException
{
TooOldException(String s)
{
super(s);
}
}
class CustomizedExceptionDemo
{
public static void main(String[] args){
int age=Integer.parseInt(args[0]);
if(age>60)
{
throw new TooYoungException("please wait some more time.... u will get best
match");
}
else if(age<18)
{
throw new TooOldException("u r age already crossed....no chance of getting
married");
}
else
{
System.out.println("you will get match details soon by e-mail");
}}}
Output:
1)E:\scjp>java CustomizedExceptionDemo 61
Exception in thread "main" TooYoungException:
please wait some more time.... u will get best match
at CustomizedExceptionDemo.main(CustomizedExceptionDemo.java:21)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
27 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
2)E:\scjp>java CustomizedExceptionDemo 27
You will get match details soon by e-mail
3)E:\scjp>java CustomizedExceptionDemo 9
Exception in thread "main" TooOldException:
u r age already crossed....no chance of getting married
at CustomizedExceptionDemo.main(CustomizedExceptionDemo.java:25)
Example:
Top-10 Exceptions:
Based on the person who is raising exception, all exceptions are divided into two types.
They are:
1) JVM Exceptions:
2) Programmatic exceptions:
JVM Exceptions:
The exceptions which are raised automatically by the jvm whenever a particular event
occurs, are called JVM Exceptions.
Example:
1) ArrayIndexOutOfBoundsException(AIOOBE)
2) NullPointerException (NPE).
Programmatic Exceptions:
The exceptions which are raised explicitly by the programmer (or) by the API developer
are called programmatic exceptions.
Example: 1) IllegalArgumentException(IAE).
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
28 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Top 10 Exceptions :
1. ArrayIndexOutOfBoundsException:
It is the child class of RuntimeException and hence it is unchecked. Raised
automatically by the JVM whenever we are trying to access array element with
out of range index. Example:
class Test{
public static void main(String[] args){
int[] x=new int[10];
System.out.println(x[0]);//valid
System.out.println(x[100]);//AIOOBE
System.out.println(x[-100]);//AIOOBE
}
}
2. NullPointerException:
Example:
class Test{
public static void main(String[] args){
String s=null;
System.out.println(s.length()); //R.E: NullPointerException
}
}
3. StackOverFlowError:
It is the child class of Error and hence it is unchecked. Whenever we are trying
to invoke recursive method call JVM will raise StackOverFloeError
automatically.
Example:
class Test
{
public static void methodOne()
{
methodTwo();
}
public static void methodTwo()
{
methodOne();
}
public static void main(String[] args)
{
methodOne();
}
}
Output:
Run time error: StackOverFloeError
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
29 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
4. NoClassDefFoundError:
It is the child class of Error and hence it is unchecked. JVM will raise this error
automatically whenever it is unable to find required .class file. Example: java
Test If Test.class is not available. Then we will get NoClassDefFound error.
5. ClassCastException:
It is the child class of RuntimeException and hence it is unchecked. Raised
automatically by the JVM whenever we are trying to type cast parent object to
child type.
Example:
6. ExceptionInInitializerError:
It is the child class of Error and it is unchecked. Raised automatically by the
JVM, if any exception occurs while performing static variable initialization and
static block execution.
Example 1:
class Test{
static int i=10/0;
}
Output:
Runtime exception:
Exception in thread "main" java.lang.ExceptionInInitializerError
Example 2:
class Test{
static {
String s=null;
System.out.println(s.length());
}}
Output:
Runtime exception:
Exception in thread "main" java.lang.ExceptionInInitializerError
7. IllegalArgumentException:
Example:
class Test{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
30 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
8. NumberFormatException:
Example:
class Test{
public static void main(String[] args){
int i=Integer.parseInt("10");
int j=Integer.parseInt("ten");
}}
Output:
Runtime Exception
Exception in thread "main" java.lang.NumberFormatException: For input
string: "ten"
9. IllegalStateException:
Example:
Once session expires we can't call any method on the session object otherwise we
will get IllegalStateException
HttpSession session=req.getSession();
System.out.println(session.getId());
session.invalidate();
System.out.println(session.getId()); // illgalstateException
10. AssertionError:
It is the child class of Error and hence it is unchecked. Raised explicitly by the
programmer or by API developer to indicate that Assert statement fails.
Example:
assert(false);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
31 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Exception/Error Raised by
1. AIOOBE
2. NPE(NullPointerException)
3. StackOverFlowError
Raised automatically by JVM(JVM
4. NoClassDefFoundError
Exceptions)
5. CCE(ClassCastException)
6. ExceptionInInitializerError
1. IAE(IllegalArgumentException)
2. NFE(NumberFormatException)
Raised explicitly either by programmer or
3. ISE(IllegalStateException)
by API developer (Programatic Exceptions).
4. AE(AssertionError)
Untill 1.6 version it is highly recommended to write finally block to close all resources
which are open as part of try block.
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader("abc.txt"));
//use br based on our requirements
}
catch(IOException e) {
// handling code
}
finally {
if(br != null)
br.close();
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
32 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
To overcome these problems Sun People introduced "try with resources" in 1.7
version.
the resources which are opened as part of try block will be closed automatically
Once the control reaches end of the try block either normally or abnormally and hence
we are not required to close explicitly so that the complexity of programming will be
reduced.It is not required to write finally block explicitly and hence length of the code
will be reduced and readability will be improved.
Conclusions:
1. We can declare any no of resources but all these resources should be seperated with
;(semicolon)
try(R1 ; R2 ; R3)
{
-------------
-------------
}
3. All resource reference variables are implicitly final and hence we can't perform
reassignment with in the try block.
output :
CE : Can't reassign a value to final variable br
4.Untill 1.6 version try should be followed by either catch or finally but 1.7 version we
can take only try with resource without catch or finally
try(R)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
33 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
{ //valid
}
5.The main advantage of "try with resources" is finally block will become dummy
because we are not required to close resources of explicitly.
Until 1.6 version ,Eventhough Multiple Exceptions having same handling code we have
to write a separate catch block for every exceptions, it increases length of the code and
reviews readability
try{
-----------------
-----------------
}
catch(ArithmeticException e) {
e.printStackTrace();
}
catch(NullPointerException e) {
e.printStackTrace();
}
catch(ClassCastException e) {
System.out.println(e.getMessage());
}
catch(IOException e) {
System.out.println(e.getMessage());
}
To overcome this problem Sun People introduced "Multi catch block" concept in 1.7
version.
The main advantage of multi catch block is we can write a single catch block , which can
handle multiple different exceptions
try{
-----------------
-----------------
}
catch(ArithmeticException | NullPointerException e) {
e.printStackTrace();
}
catch(ClassCastException | IOException e) {
System.out.println(e.getMessage());
}
In multi catch block, there should not be any relation between Exception types(either
child to parent Or parent to child Or same type , otherwise we will get Compile time
error )
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
34 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Exception Handling
Example:
Exception Propagation :
With in a method if an exception raised and if that method doesn't handle that
exception, then Exception object will be propagated to the caller then caller method is
responsible to handle that exceptions. This process is called Exception Propagation.
Rethrowing an Exception :
To convert the one exception type to another exception type , we can use rethrowing
exception concept.
class Test
{
public static void main(String[] args){
try {
System.out.println(10/0);
}
catch(ArithmeticException e) {
throw new NullPointerException();
}
}
}
output:
RE:NPE
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
35 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Multi Threading
Agenda
1. Introduction.
2. The ways to define, instantiate and start a new Thread.
1. By extending Thread class
2. By implementing Runnable interface
3. Thread class constructors
4. Thread priority
5. Getting and setting name of a Thread.
6. The methods to prevent(stop) Thread execution.
1. yield()
2. join()
3. sleep()
7. Synchronization.
8. Inter Thread communication.
9. Deadlock
10. Daemon Threads.
11. Various Conclusion
1. To stop a Thread
2. Suspend & resume of a thread
3. Thread group
4. Green Thread
5. Thread Local
12. Life cycle of a Thread
Introduction
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
While typing a java program in the editor we can able to listen mp3 audio songs
at the same time we can download a file from the net all these tasks are
independent of each other and executing simultaneously and hence it is Process
based multitasking.
This type of multitasking is best suitable at "os level".
Executing several tasks simultaneously where each task is a separate independent part
of the same program, is called Thread based multitasking.
And each independent part is called a "Thread".
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
class ThreadDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();//Instantiation of a Thread
t.start();//starting of a Thread
for(int i=0;i<5;i++)
{
System.out.println("main thread");
}
}
}
If multiple Threads are waiting to execute then which Thread will execute 1st is
decided by "Thread Scheduler" which is part of JVM.
Which algorithm or behavior followed by Thread Scheduler we can't expect
exactly it is the JVM vendor dependent hence in multithreading examples we
can't expect exact execution order and exact output.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
The following are various possible outputs for the above program.
In the case of t.start() a new Thread will be created which is responsible for the
execution of run() method.
But in the case of t.run() no new Thread will be created and run() method will be
executed just like a normal method by the main Thread.
In the above program if we are replacing t.start() with t.run() the following is the
output.
Output:
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
main thread
main thread
main thread
main thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
main thread
Entire output produced by only main Thread.
For every Thread the required mandatory activities like registering the Thread with
Thread Scheduler will takes care by Thread class start() method and programmer is
responsible just to define the job of the Thread inside run() method.
That is start() method acts as best assistant to the programmer.
Example:
start()
{
1. Register Thread with Thread Scheduler
2. All other mandatory low level activities.
3. Invoke or calling run() method.
}
We can conclude that without executing Thread class start() method there is no chance
of starting a new Thread in java. Due to this start() is considered as heart of
multithreading.
If we are not overriding run() method then Thread class run() method will be executed
which has empty implementation and hence we won't get any output.
Example:
class MyThread extends Thread
{}
class ThreadDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.start();
}
}
It is highly recommended to override run() method. Otherwise don't go for
multithreading concept.
We can overload run() method but Thread class start() method always invokes no
argument run() method the other overload run() methods we have to call explicitly then
only it will be executed just like normal method.
Example:
class MyThread extends Thread
{
public void run()
{
System.out.println("no arg method");
}
public void run(int i)
{
System.out.println("int arg method");
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
class ThreadDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.start();
}
}
Output:
No arg method
If we override start() method then our start() method will be executed just like a normal
method call and no new Thread will be started.
Example:
class MyThread extends Thread
{
public void start()
{
System.out.println("start method");
}
public void run()
{
System.out.println("run method");
}
}
class ThreadDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.start();
System.out.println("main method");
}
}
Output:
start method
main method
Entire output produced by only main Thread.
Note : It is never recommended to override start() method.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Case 7:
Example 1:
Example 2:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Output:
Diagram:
Once we created a Thread object then the Thread is said to be in new state or
born state.
Once we call start() method then the Thread will be entered into Ready or
Runnable state.
If Thread Scheduler allocates CPU then the Thread will be entered into running
state.
Once run() method completes then the Thread will entered into dead state.
Case 9:
After starting a Thread we are not allowed to restart the same Thread once again
otherwise we will get runtime exception saying "IllegalThreadStateException".
Example:
MyThread t=new MyThread();
t.start();//valid
;;;;;;;;
t.start();//we will get R.E saying: IllegalThreadStateException
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Example:
class ThreadDemo
{
public static void main(String[] args)
{
MyRunnable r=new MyRunnable();
Thread t=new Thread(r);//here r is a Target Runnable
t.start();
for(int i=0;i<10;i++)
{
System.out.println("main thread");
}
}
}
Output:
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
child Thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
child Thread
child Thread
child Thread
child Thread
child Thread
child Thread
child Thread
child Thread
child Thread
We can't expect exact output but there are several possible outputs.
Case study:
MyRunnable r=new MyRunnable();
Thread t1=new Thread();
Thread t2=new Thread(r);
Case 1: t1.start():
A new Thread will be created which is responsible for the execution of Thread class
run()method.
Output:
main thread
main thread
main thread
main thread
main thread
Case 2: t1.run():
No new Thread will be created but Thread class run() method will be executed just like
a normal method call.
Output:
main thread
main thread
main thread
main thread
main thread
Case 3: t2.start():
New Thread will be created which is responsible for the execution of MyRunnable run()
method.
Output:
main thread
main thread
main thread
main thread
main thread
child Thread
child Thread
child Thread
child Thread
child Thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Case 4: t2.run():
No new Thread will be created and MyRunnable run() method will be executed just like
a normal method call.
Output:
child Thread
child Thread
child Thread
child Thread
child Thread
main thread
main thread
main thread
main thread
main thread
Case 5: r.start():
We will get compile time error saying start()method is not available in MyRunnable
class.
Output:
Compile time error
E:\SCJP>javac ThreadDemo.java
ThreadDemo.java:18: cannot find symbol
Symbol: method start()
Location: class MyRunnable
Case 6: r.run():
No new Thread will be created and MyRunnable class run() method will be executed
just like a normal method call.
Output:
child Thread
child Thread
child Thread
child Thread
child Thread
main thread
main thread
main thread
main thread
main thread
In which of the above cases a new Thread will be created which is responsible for the
execution of MyRunnable run() method ?
t2.start();
t2.run();
r.run();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Diagram:
Output:
main method
run method
Methods:
Example:
class MyThread extends Thread
{}
class ThreadDemo
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getName());//main
MyThread t=new MyThread();
System.out.println(t.getName());//Thread-0
Thread.currentThread().setName("Bhaskar Thread");
System.out.println(Thread.currentThread().getName());//Bhaskar
Thread
}
}
Note: We can get current executing Thread object reference by using
Thread.currentThread() method.
Thread Priorities
Every Thread in java has some priority it may be default priority generated by
JVM (or) explicitly provided by the programmer.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
The valid range of Thread priorities is 1 to 10[but not 0 to 10] where 1 is the least
priority and 10 is highest priority.
Thread class defines the following constants to represent some standard
priorities.
1. Thread. MIN_PRIORITY----------1
2. Thread. MAX_PRIORITY----------10
3. Thread. NORM_PRIORITY--------5
There are no constants like Thread.LOW_PRIORITY,
Thread.HIGH_PRIORITY
Thread scheduler uses these priorities while allocating CPU.
The Thread which is having highest priority will get chance for 1st execution.
If 2 Threads having the same priority then we can't expect exact execution order
it depends on Thread scheduler whose behavior is vendor dependent.
We can get and set the priority of a Thread by using the following methods.
1. public final int getPriority()
2. public final void setPriority(int newPriority);//the allowed values are 1 to
10
The allowed values are 1 to 10 otherwise we will get runtime exception saying
"IllegalArgumentException".
Default priority:
The default priority only for the main Thread is 5. But for all the remaining Threads
the default priority will be inheriting from parent to child. That is whatever the priority
parent has by default the same priority will be for the child also.
Example 1:
class MyThread extends Thread
{}
class ThreadPriorityDemo
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().getPriority());//5
Thread.currentThread().setPriority(9);
MyThread t=new MyThread();
System.out.println(t.getPriority());//9
}
}
Example 2:
class MyThread extends Thread
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("child thread");
}
}
}
class ThreadPriorityDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
//t.setPriority(10); //----> 1
t.start();
for(int i=0;i<10;i++)
{
System.out.println("main thread");
}
}
}
If we are commenting line 1 then both main and child Threads will have the
same priority and hence we can't expect exact execution order.
If we are not commenting line 1 then child Thread has the priority 10 and main
Thread has the priority 5 hence child Thread will get chance for execution and
after completing child Thread main Thread will get the chance in this the output
is:
Output:
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
Some operating systems(like windowsXP) may not provide proper support for Thread
priorities. We have to install separate bats provided by vendor to provide support for
priorities.
1. yield();
2. join();
3. sleep();
yield():
1. yield() method causes "to pause current executing Thread for giving the chance
of remaining waiting Threads of same priority".
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
2. If all waiting Threads have the low priority or if there is no waiting Threads then
the same Thread will be continued its execution.
3. If several waiting Threads with same priority available then we can't expect
exact which Thread will get chance for execution.
4. The Thread which is yielded when it get chance once again for execution is
depends on mercy of the Thread scheduler.
5. public static native void yield();
Diagram:
Example:
class MyThread extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
Thread.yield();
System.out.println("child thread");
}
}
}
class ThreadYieldDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.start();
for(int i=0;i<5;i++)
{
System.out.println("main thread");
}
}
}
Output:
main thread
main thread
main thread
main thread
main thread
child thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
child thread
child thread
child thread
child thread
In the above program child Thread always calling yield() method and hence main
Thread will get the chance more number of times for execution.
Hence the chance of completing the main Thread first is high.
Note : Some operating systems may not provide proper support for yield() method.
Join():
If a Thread wants to wait until completing some other Thread then we should go for
join() method.
Example: If a Thread t1 executes t2.join() then t1 should go for waiting state until
completing t2.
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
for(int i=0;i<5;i++)
{
System.out.println("Child Thread");
}
}
}
class ThreadJoinDemo
{
public static void main(String[] args)throws InterruptedException
{
MyThread mt=Thread.currentThread();
MyThread t=new MyThread();
t.start();
for(int i=0;i<5;i++)
{
Thread.sleep(2000);
System.out.println("Main Thread");
}
}
}
Output :
Main Thread
Main Thread
Main Thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
21 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Main Thread
Main Thread
Child Thread
Child Thread
Child Thread
Child Thread
Child Thread
Note :
If main thread calls join() on child thread object and child thread called join() on main
thread object then both threads will wait for each other forever and the program will be
hanged(like deadlock if a Thread class join() method on the same thread itself then the
program will be hanged ).
Example :
class ThreadDemo {
public static void main() throws InterruptedException {
Thread.currentThread().join();
--------------- --------
main main
}
Sleep() method:
If a Thread don't want to perform any operation for a particular amount of time then
we should go for sleep() method.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Diagram:
Example:
class ThreadJoinDemo
{
public static void main(String[] args)throws InterruptedException
{
System.out.println("M");
Thread.sleep(3000);
System.out.println("E");
Thread.sleep(3000);
System.out.println("G");
Thread.sleep(3000);
System.out.println("A");
}
}
Output:
M
E
G
A
Interrupting a Thread:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
23 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
{
public void run()
{
try
{
for(int i=0;i<5;i++)
{
System.out.println("i am lazy Thread :"+i);
Thread.sleep(2000);
}
}
catch (InterruptedException e)
{
System.out.println("i got interrupted");
}
}
}
class ThreadInterruptDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.start();
//t.interrupt(); //--->1
System.out.println("end of main thread");
}
}
If we are commenting line 1 then main Thread won't interrupt child Thread and
hence child Thread will be continued until its completion.
If we are not commenting line 1 then main Thread interrupts child Thread and
hence child Thread won't continued until its completion in this case the output
is:
Whenever we are calling interrupt() method we may not see the effect
immediately, if the target Thread is in sleeping or waiting state it will be
interrupted immediately.
If the target Thread is not in sleeping or waiting state then interrupt call will
wait until target Thread will enter into sleeping or waiting state. Once target
Thread entered into sleeping or waiting state it will effect immediately.
In its lifetime if the target Thread never entered into sleeping or waiting state
then there is no impact of interrupt call simply interrupt call will be wasted.
Example:
class MyThread extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println("iam lazy thread");
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
24 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
In the above program interrupt() method call invoked by main Thread will wait
until child Thread entered into sleeping state.
Once child Thread entered into sleeping state then it will be interrupted
immediately.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
25 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Synchronization
1. Synchronized is the keyword applicable for methods and blocks but not for
classes and variables.
2. If a method or block declared as the synchronized then at a time only one
Thread is allow to execute that method or block on the given object.
3. The main advantage of synchronized keyword is we can resolve date
inconsistency problems.
4. But the main disadvantage of synchronized keyword is it increases waiting time
of the Thread and effects performance of the system.
5. Hence if there is no specific requirement then never recommended to use
synchronized keyword.
6. Internally synchronization concept is implemented by using lock concept.
7. Every object in java has a unique lock. Whenever we are using synchronized
keyword then only lock concept will come into the picture.
8. If a Thread wants to execute any synchronized method on the given object 1st it
has to get the lock of that object. Once a Thread got the lock of that object then
it's allow to execute any synchronized method on that object. If the synchronized
method execution completes then automatically Thread releases lock.
9. While a Thread executing any synchronized method the remaining Threads are
not allowed execute any synchronized method on that object simultaneously. But
remaining Threads are allowed to execute any non-synchronized method
simultaneously. [lock concept is implemented based on object but not based on
method].
Example:
class Display
{
public synchronized void wish(String name)
{
for(int i=0;i<5;i++)
{
System.out.print("good morning:");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{}
System.out.println(name);
}
}
}
class MyThread extends Thread
{
Display d;
String name;
MyThread(Display d,String name)
{
this.d=d;
this.name=name;
}
public void run()
{
d.wish(name);
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
26 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
}
}
class SynchronizedDemo
{
public static void main(String[] args)
{
Display d1=new Display();
MyThread t1=new MyThread(d1,"dhoni");
MyThread t2=new MyThread(d1,"yuvaraj");
t1.start();
t2.start();
}
}
If we are not declaring wish() method as synchronized then both Threads will be
executed simultaneously and we will get irregular output.
Output:
good morning:good morning:yuvaraj
good morning:dhoni
good morning:yuvaraj
good morning:dhoni
good morning:yuvaraj
good morning:dhoni
good morning:yuvaraj
good morning:dhoni
good morning:yuvaraj
dhoni
If we declare wish()method as synchronized then the Threads will be executed one by
one that is until completing the 1st Thread the 2nd Thread will wait in this case we will
get regular output which is nothing but
Output:
good morning:dhoni
good morning:dhoni
good morning:dhoni
good morning:dhoni
good morning:dhoni
good morning:yuvaraj
good morning:yuvaraj
good morning:yuvaraj
good morning:yuvaraj
good morning:yuvaraj
Case study:
Case 1:
Display d1=new Display();
Display d2=new Display();
MyThread t1=new MyThread(d1,"dhoni");
MyThread t2=new MyThread(d2,"yuvaraj");
t1.start();
t2.start();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
27 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Diagram:
Even though we declared wish() method as synchronized but we will get irregular
output in this case, because both Threads are operating on different objects.
1. Every class in java has a unique lock. If a Thread wants to execute a static
synchronized method then it required class level lock.
2. Once a Thread got class level lock then it is allow to execute any static
synchronized method of that class.
3. While a Thread executing any static synchronized method the remaining
Threads are not allow to execute any static synchronized method of that class
simultaneously.
4. But remaining Threads are allowed to execute normal synchronized methods,
normal static methods, and normal instance methods simultaneously.
5. Class level lock and object lock both are different and there is no relationship
between these two.
Synchronized block:
1. If very few lines of the code required synchronization then it's never
recommended to declare entire method as synchronized we have to enclose those
few lines of the code with in synchronized block.
2. The main advantage of synchronized block over synchronized method is it
reduces waiting time of Thread and improves performance of the system.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
28 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Example 1: To get lock of current object we can declare synchronized block as follows.
If Thread got lock of current object then only it is allowed to execute this block.
Synchronized(this){}
Example 2: To get the lock of a particular object 'b' we have to declare a synchronized
block as follows.
If thread got lock of 'b' object then only it is allowed to execute this block.
Synchronized(b){}
Example 3: To get class level lock we have to declare synchronized block as follows.
Synchronized(Display.class){}
If thread got class level lock of Display then only it allowed to execute this block.
Note:As the argument to the synchronized block we can pass either object reference or
".class file" and we can't pass primitive values as argument [because lock concept is
dependent only for objects and classes but not for primitives].
Example:
Int x=b;
Synchronized(x){}
Output:
Compile time error.
Unexpected type.
Found: int
Required: reference
Questions:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
29 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Diagram:
Diagram:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
30 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
wait(), notify() and notifyAll() methods are available in Object class but not in
Thread class because Thread can call these methods on any common object.
To call wait(), notify() and notifyAll() methods compulsory the current Thread
should be owner of that object
i.e., current Thread should has lock of that object
i.e., current Thread should be in synchronized area. Hence we can call wait(),
notify() and notifyAll() methods only from synchronized area otherwise we will
get runtime exception saying IllegalMonitorStateException.
Once a Thread calls wait() method on the given object 1st it releases the lock of
that object immediately and entered into waiting state.
Once a Thread calls notify() (or) notifyAll() methods it releases the lock of that
object but may not immediately.
Except these (wait(),notify(),notifyAll()) methods there is no other place(method)
where the lock release will be happen.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
31 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
notify() Yes
notifyAll() Yes
Once a Thread calls wait(), notify(), notifyAll() methods on any object then it
releases the lock of that particular object but not all locks it has.
1. public final void wait()throws InterruptedException
2. public final native void wait(long ms)throws InterruptedException
3. public final void wait(long ms,int ns)throws InterruptedException
4. public final native void notify()
5. public final void notifyAll()
Diagram:
Example 1:
class ThreadA
{
public static void main(String[] args)throws InterruptedException
{
ThreadB b=new ThreadB();
b.start();
synchronized(b)
{
System.out.println("main Thread calling wait() method");//step-1
b.wait();
System.out.println("main Thread got notification call");//step-4
System.out.println(b.total);
}
}
}
class ThreadB extends Thread
{
int total=0;
public void run()
{
synchronized(this)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
32 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
{
System.out.println("child thread starts calcuation");//step-2
for(int i=0;i<=100;i++)
{
total=total+i;
}
System.out.println("child thread giving notification call");//step-
3
this.notify();
}
}
}
Output:
main Thread calling wait() method
child thread starts calculation
child thread giving notification call
main Thread got notification call
5050
Example 2:
Diagram:
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
33 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Notify vs notifyAll():
We can use notify() method to give notification for only one Thread. If multiple
Threads are waiting then only one Thread will get the chance and remaining
Threads has to wait for further notification. But which Thread will be
notify(inform) we can't expect exactly it depends on JVM.
We can use notifyAll() method to give the notification for all waiting Threads. All
waiting Threads will be notified and will be executed one by one, because they
are required lock
Note: On which object we are calling wait(), notify() and notifyAll() methods that
corresponding object lock we have to get but not other object locks.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
34 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Example:
1. Once a Thread calls wait() on any Object immediately it will entered into waiting
state without releasing the lock ?
NO
2. Once a Thread calls wait() on any Object it reduces the lock of that Object but
may not immediately ?
NO
3. Once a Thread calls wait() on any Object it immediately releases all locks
whatever it has and entered into waiting state ?
NO
4. Once a Thread calls wait() on any Object it immediately releases the lock of that
perticular Object and entered into waiting state ?
YES
5. Once a Thread calls notify() on any Object it immediately releases the lock of
that Object ?
NO
6. Once a Thread calls notify() on any Object it releases the lock of that Object but
may not immediately ?
YES
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
35 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Dead lock:
If 2 Threads are waiting for each other forever(without end) such type of
situation(infinite waiting) is called dead lock.
There are no resolution techniques for dead lock but several
prevention(avoidance) techniques are possible.
Synchronized keyword is the cause for deadlock hence whenever we are using
synchronized keyword we have to take special care.
Example:
class A
{
public synchronized void foo(B b)
{
System.out.println("Thread1 starts execution of foo()
method");
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{}
System.out.println("Thread1 trying to call b.last()");
b.last();
}
public synchronized void last()
{
System.out.println("inside A, this is last()method");
}
}
class B
{
public synchronized void bar(A a)
{
System.out.println("Thread2 starts execution of bar() method");
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{}
System.out.println("Thread2 trying to call a.last()");
a.last();
}
public synchronized void last()
{
System.out.println("inside B, this is last() method");
}
}
class DeadLock implements Runnable
{
A a=new A();
B b=new B();
DeadLock()
{
Thread t=new Thread(this);
t.start();
a.foo(b);//main thread
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
36 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
}
public void run()
{
b.bar(a);//child thread
}
public static void main(String[] args)
{
new DeadLock();//main thread
}
}
Output:
Thread1 starts execution of foo() method
Thread2 starts execution of bar() method
Thread2 trying to call a.last()
Thread1 trying to call b.last()
//here cursor always waiting.
Daemon Threads:
The Threads which are executing in the background are called daemon Threads.
The main objective of daemon Threads is to provide support for non-daemon Threads
like main Thread.
Example:
Garbage collector
When ever the program runs with low memory the JVM will execute Garbage Collector
to provide free memory. So that the main Thread can continue it's execution.
We can check whether the Thread is daemon or not by using isDaemon() method
of Thread class.
public final boolean isDaemon();
We can change daemon nature of a Thread by using setDaemon () method.
public final void setDaemon(boolean b);
But we can change daemon nature before starting Thread only. That is after
starting the Thread if we are trying to change the daemon nature we will get R.E
saying IllegalThreadStateException.
Default Nature : Main Thread is always non daemon and we can't change its
daemon nature because it's already started at the beginning only.
Main Thread is always non daemon and for the remaining Threads daemon
nature will be inheriting from parent to child that is if the parent is daemon child
is also daemon and if the parent is non daemon then child is also non daemon.
Whenever the last non daemon Thread terminates automatically all daemon
Threads will be terminated.
Example:
class MyThread extends Thread
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
37 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
class DaemonThreadDemo
{
public static void main(String[] args)
{
System.out.println(Thread.currentThread().isDaemon());
MyThread t=new MyThread();
System.out.println(t.isDaemon()); 1
t.start();
t.setDaemon(true);
System.out.println(t.isDaemon());
}
}
Output:
false
false
RE:IllegalThreadStateException
Example:
class MyThread extends Thread
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("lazy thread");
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{}
}
}
}
class DaemonThreadDemo
{
public static void main(String[] args)
{
MyThread t=new MyThread();
t.setDaemon(true); //-->1
t.start();
System.out.println("end of main Thread");
}
}
Output:
End of main Thread
If we comment line 1 then both main & child Threads are non-Daemon , and
hence both threads will be executed untill there completion.
If we are not comment line 1 then main thread is non-Daemon and child thread
is Daemon. Hence when ever main Thread terminates automatically child thread
will be terminated.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
38 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Lazy thread
If we are commenting line 1 then both main and child Threads are non daemon
and hence both will be executed until they completion.
If we are not commenting line 1 then main Thread is non daemon and child
Thread is daemon and hence whenever main Thread terminates automatically
child Thread will be terminated.
Deadlock vs Starvation:
A long waiting of a Thread which never ends is called deadlock.
A long waiting of a Thread which ends at certain point is called starvation.
A low priority Thread has to wait until completing all high priority Threads.
This long waiting of Thread which ends at certain point is called starvation.
We can call stop() method to stop a Thread in the middle then it will be entered
into dead state immediately.
public final void stop();
stop() method has been deprecated and hence not recommended to use.
A Thread can suspend another Thread by using suspend() method then that
Thread will be paused temporarily.
A Thread can resume a suspended Thread by using resume() method then
suspended Thread will continue its execution.
1. public final void suspend();
2. public final void resume();
Both methods are deprecated and not recommended to use.
RACE condition:
ThreadGroup:
Based on functionality we can group threads as a single unit which is nothing but
ThreadGroup.
ThreadGroup provides a convenient way to perform common operations for all threads
belongs to a perticular group.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
39 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
ThreadLocal(1.2 v):
We can use ThreadLocal to define local resources which are required for a perticular
Thread like DBConnections, counterVariables etc.,
GreenThread:
1. GreenThread Model
2. Native OS Model
GreenThread Model
The threads which are managed completely by JVM without taking support for
underlying OS, such type of threads are called Green Threads.
Native OS Model
The Threads which are managed with the help of underlying OS are called
Native Threads.
Windows based OS provide support for Native OS Model
Very few OS like SunSolaries provide support for GreenThread Model
Anyway GreenThread model is deprecated and not recommended to use.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
40 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
1. Extends Thread is useful to override the public void run() method of Thread
class.
2. Implements Runnable is useful to implement public void run() method of
Runnable interface.
Example:
Class MyClass extends Frame,Thread//invalid
If we write implements Runnable still there is a scope to extend one more class.
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
41 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading
Step 1: Declare a boolean type variable and store false in that variable.
boolean stop=false;
Step 2: If the variable becomes true return from the run() method.
If(stop) return;
Step 3: Whenever to stop the Thread store true into the variable.
System.in.read();//press enter
Obj.stop=true;
Questions:
1. What is a Thread?
2. Which Thread by default runs in every java program?
Ans: By default main Thread runs in every java program.
3. What is the default priority of the Thread?
4. How can you change the priority number of the Thread?
5. Which method is executed by any Thread?
Ans: A Thread executes only public void run() method.
6. How can you stop a Thread which is running?
7. Explain the two types of multitasking?
8. What is the difference between a process and a Thread?
9. What is Thread scheduler?
10. Explain the synchronization of Threads?
11. What is the difference between synchronized block and synchronized keyword?
12. What is Thread deadlock? How can you resolve deadlock situation?
13. Which methods are used in Thread communication?
14. What is the difference between notify() and notifyAll() methods?
15. What is the difference between sleep() and wait() methods?
16. Explain the life cycle of a Thread?
17. What is daemon Thread?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
42 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
77 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
8.1) ThreadGroup
8.2) ThreadLocal
ThreadGroup:
Based on the Functionality we can Group Threads into a Single Unit which is
Nothing but ThreadGroup i.e. ThreadGroup Represents a Set of Threads.
In Addition a ThreadGroup can Also contains Other SubThreadGroups.
t1 t2 t3 -------------tn
t5 t6 t7
SubThreadGroup
ThreadGroup
ThreadGroup Class Present in java.lang Package and it is the Direct Child Class of
Object.
ThreadGroup provides a Convenient Way to Perform Common Operation for all
Threads belongs to a Particular Group.
Eg:Stop All Consumer Threads.
Suspend All Producer Threads.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
78 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
Constructors:
Note:
In Java Every Thread belongs to Some Group.
Every ThreadGroup is the Child Group of System Group either Directly OR
Indirectly. Hence SystemGroup Acts as Root for all ThreadGroup’s in Java.
System ThreadGroup Represents System Level Threads Like ReferenceHandler,
SignalDispatcher, Finalizer, AttachListener Etc.
System
t 1 t2 t3
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
79 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
classThreadGroupDemo {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getThreadGroup().getName());
System.out.println(Thread.currentThread().getThreadGroup().getParent().getName());
ThreadGrouppg = new ThreadGroup("Parent Group");
System.out.println(pg.getParent().getName());
ThreadGroup cg = new ThreadGroup(pg, "Child Group"); main
System.out.println(cg.getParent().getName()); system
} main
} Parent Group
System
Main
Parent Group
Child Group
3) void setMaxPriority();
To Set Maximum Priority of ThreadGroup.
The Default Maximum Priority is 10.
Threads in the ThreadGroup that Already have Higher Priority, Not effected
but Newly Added Threads this MaxPriority is Applicable.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
80 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
classThreadGroupDemo {
public static void main(String[] args) {
ThreadGroup g1 = new ThreadGroup("tg");
Thread t1 = new Thread(g1, "Thread 1");
Thread t2 = new Thread(g1, "Thread 2");
g1.setMaxPriority(3);
Thread t3 = new Thread(g1, "Thread 3");
System.out.println(t1.getPriority()); 5
System.out.println(t2.getPriority()); 5
System.out.println(t3.getPriority()); 3
}
}
8) int enumerate(Thread[] t): To Copy All Active Threads of this Group into provided
Thread Array. In this Case SubThreadGroup Threads also will be Considered.
10) booleanisDaemon():
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
81 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
2
1
java.lang.ThreadGroup[name=Parent Group,maxpri=10]
Thread[Child Thread 1,5,Parent Group]
Thread[Child Thread 2,5,Parent Group]
java.lang.ThreadGroup[name=Child Group,maxpri=10]
Child Thread
Child Thread
0
java.lang.ThreadGroup[name=Parent Group,maxpri=10]
java.lang.ThreadGroup[name=Child Group,maxpri=10]
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
82 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
classThreadGroupDemo {
public static void main(String[] args) {
ThreadGroup system = Thread.currentThread().getThreadGroup().getParent();
Thread[] t = new Thread[system.activeCount()];
system.enumerate(t);
for (Thread t1: t) {
System.out.println(t1.getName()+"-------"+t1.isDaemon());
}
} Reference Handler-------true
} Finalizer-------true
Signal Dispatcher-------true
Attach Listener-------true
main-------false
ThreadLocal:
Note:
☀ ThreadLocal Class introduced in 1.2 Version.
☀ ThreadLocal can be associated with Thread Scope.
☀ All the Code which is executed by the Thread has Access to Corresponding
ThreadLocal Variables.
☀ A Thread can Access its Own Local Variables and can’t Access Other Threads
Local Variables.
☀ Once Thread Entered into Dead State All Local Variables are by Default Eligible for
Garbage Collection.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
83 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
Methods:
1) Object get(); Returns the Value of ThreadLocal Variable associated with Current
Thread.
2) Object initialValue();
Returns the initialValue of ThreadLocal Variable of Current Thread.
The Default Implementation of initialValue() Returns null.
To Customize Our initialValue we have to Override initialValue().
4) void remove();
To Remove the Current Threads Local Variable Value.
After Remove if we are trying to Access it will be reinitialized Once Again by
invoking its initialValue().
This Method Newly Added in 1.5 Version.
classThreadLocalDemo {
public static void main(String[] args) {
ThreadLocaltl = new ThreadLocal();
System.out.println(tl.get()); //null
tl.set("Durga");
System.out.println(tl.get()); //Durga
tl.remove();
System.out.println(tl.get()); //null
}
}
//Overriding of intialValue()
classThreadLocalDemo {
public static void main(String[] args) {
ThreadLocaltl = new ThreadLocal() {
protected Object initialValue() {
return "abc";
}
};
System.out.println(tl.get()); //abc
tl.set("Durga");
System.out.println(tl.get()); //Durga
tl.remove();
System.out.println(tl.get()); //abc
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
84 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
85 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
In the Above Program for Every Customer Thread a Separate customerID will be
maintained by ThreadLocal Object.
ThreadLocalVs Inheritance:
Parent Threads ThreadLocal Variables are by Default Not Available to the Child
Threads.
If we want to Make Parent Threads Local Variables Available to Child Threads we
should go for InheritableThreadLocal Class.
It is the Child Class of ThreadLocal Class.
By Default Child Thread Values are Same as Parent Thread Values but we can
Provide Customized Values for Child Threads by Overriding childValue().
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
86 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
Java.util.concurrent.locks package:
Lock(I):
A Lock Object is Similar to Implicit Lock acquired by a Thread to Execute
synchronized Method OR synchronized Block
Lock Implementations Provide More Extensive Operations than Traditional
Implicit Locks.
2) booleantryLock();
To Acquire the Lock if it is Available.
If the Lock is Available then Thread Acquires the Lock and Returns true.
If the Lock Unavailable then this Method Returns false and Continue its
Execution.
In this Case Thread is Never Blocked.
if (l.tryLock()) {
Perform Safe Operations
}
else {
Perform Alternative Operations
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
87 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
4) void lockInterruptedly();
ReentrantLock
It implements Lock Interface and it is the Direct Child Class of an Object.
Reentrant Means a Thread can acquires Same Lock Multiple Times without any
Issue.
Internally ReentrantLock Increments Threads Personal Count whenever we Call
lock() and Decrements Counter whenever we Call unlock() and Lock will be
Released whenever Count Reaches ‘0’.
Constructors:
1) ReentrantLockrl = new ReentrantLock();
Creates an Instance of ReentrantLock.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
88 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
1) void lock();
2) booleantryLock();
4) void lockInterruptedly();
5) void unlock();
To Realease the Lock.
If the Current Thread is Not Owner of the Lock then we will get Runtime
Exception Saying IllegalMonitorStateException.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
89 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
importjava.util.concurrent.locks.ReentrantLock;
class Test {
public static void main(String[] args) {
ReentrantLock l = new ReentrantLock();
l.lock();
l.lock();
System.out.println(l.isLocked()); //true
System.out.println(l.isHeldByCurrentThread()); //true
System.out.println(l.getQueueLength()); //0
l.unlock();
System.out.println(l.getHoldCount()); //1
System.out.println(l.isLocked()); //true
l.unlock();
System.out.println(l.isLocked()); //false
System.out.println(l.isFair()); //false
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
90 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
importjava.util.concurrent.locks.ReentrantLock;
class Display {
ReentrantLock l = new ReentrantLock(true);
public void wish(String name) {
l.lock(); 1
Good Morning
for(int i=0; i<5; i++) {
Dhoni
System.out.println("Good Morning");
Good Morning
try {
Dhoni
Thread.sleep(2000);
Good Morning
}
Dhoni
catch(InterruptedException e) {}
Good Morning
System.out.println(name);
} Dhoni
Good Morning
l.unlock(); 2
Dhoni
}
} Good Morning
Yuva Raj
classMyThread extends Thread {
Good Morning
Display d;
String name; Yuva Raj
Good Morning
MyThread(Display d, String name) {
Yuva Raj
this.d = d;
this.name = name; Good Morning
Yuva Raj
}
public void run() { Good Morning
Yuva Raj
d.wish(name);
Good Morning
}
ViratKohli
}
Good Morning
classReentrantLockDemo {
ViratKohli
public static void main(String[] args) {
Good Morning
Display d = new Display();
ViratKohli
MyThread t1 = new MyThread(d, "Dhoni");
Good Morning
MyThread t2 = new MyThread(d, "Yuva Raj");
MyThread t3 = new MyThread(d, "ViratKohli"); ViratKohli
Good Morning
t1.start();
ViratKohli
t2.start();
t3.start();
}
}
If we Comment Both Lines 1 and 2 then All Threads will be executed Simultaneously
and Hence we will get Irregular Output.
If we are Not Commenting then the Threads will be executed One by One and Hence we
will get Regular Output
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
91 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
importjava.util.concurrent.locks.ReentrantLock;
classMyThread extends Thread {
staticReentrantLock l = new ReentrantLock();
MyThread(String name) {
super(name);
}
public void run() {
if(l.tryLock()) {
SOP(Thread.currentThread().getName()+" Got Lock and Performing Safe Operations");
try {
Thread.sleep(2000);
}
catch(InterruptedException e) {}
l.unlock();
}
else {
System.out.println(Thread.currentThread().getName()+" Unable To Get Lock
and Hence Performing Alternative Operations");
}
}
}
classReentrantLockDemo {
public static void main(String args[]) {
MyThread t1 = new MyThread("First Thread");
MyThread t2 = new MyThread("Second Thread");
t1.start();
t2.start();
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
92 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
importjava.util.concurrent.TimeUnit;
importjava.util.concurrent.locks.ReentrantLock;
classMyThread extends Thread {
staticReentrantLock l = new ReentrantLock();
MyThread(String name) {
super(name);
}
public void run() {
do {
try {
if(l.tryLock(1000, TimeUnit.MILLISECONDS)) {
SOP(Thread.currentThread().getName()+"------- Got Lock");
Thread.sleep(5000);
l.unlock();
SOP(Thread.currentThread().getName()+"------- Releases Lock");
break;
}
else {
SOP(Thread.currentThread().getName()+"------- Unable To Get Lock And Will Try Again");
}
}
catch(InterruptedException e) {}
}
while(true);
}
}
classReentrantLockDemo {
public static void main(String args[]) {
MyThread t1 = new MyThread("First Thread");
MyThread t2 = new MyThread("Second Thread");
t1.start();
t2.start();
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
93 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
Thread Pools:
Creating a New Thread for Every Job May Create Performance and Memory
Problems.
To Overcome this we should go for Thread Pool Concept.
Thread Pool is a Pool of Already Created Threads Ready to do Our Job.
Java 1.5 Version Introduces Thread Pool Framework to Implement Thread Pools.
Thread Pool Framework is Also Known as Executor Framework.
We can Create a Thread Pool as follows
ExecutorService service = Executors.newFixedThreadPool(3);//Our Choice
We can Submit a Runnable Job by using submit().
service.submit(job);
We can ShutdownExecutiorService by using shutdown().
service.shutdown();
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
classPrintJob implements Runnable {
String name;
PrintJob(String name) {
this.name = name;
}
public void run() {
SOP(name+"....Job Started By Thread:" +Thread.currentThread().getName());
try {
Thread.sleep(10000);
}
catch (InterruptedException e) {}
SOP(name+"....Job Completed By Thread:" +Thread.currentThread().getName());
}
}
class ExecutorDemo {
public static void main(String[] args) {
PrintJob[] jobs = {
newPrintJob("Durga"),
newPrintJob("Ravi"),
newPrintJob("Nagendra"),
newPrintJob("Pavan"),
newPrintJob("Bhaskar"),
newPrintJob("Varma")
};
ExecutorService service = Executors.newFixedThreadPool(3);
for (PrintJob job : jobs) {
service.submit(job);
}
service.shutdown();
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
94 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
Output
Durga....Job Started By Thread:pool-1-thread-1
Ravi....Job Started By Thread:pool-1-thread-2
Nagendra....Job Started By Thread:pool-1-thread-3
Ravi....Job Completed By Thread:pool-1-thread-2
Pavan....Job Started By Thread:pool-1-thread-2
Durga....Job Completed By Thread:pool-1-thread-1
Bhaskar....Job Started By Thread:pool-1-thread-1
Nagendra....Job Completed By Thread:pool-1-thread-3
Varma....Job Started By Thread:pool-1-thread-3
Pavan....Job Completed By Thread:pool-1-thread-2
Bhaskar....Job Completed By Thread:pool-1-thread-1
Varma....Job Completed By Thread:pool-1-thread-3
On the Above Program 3 Threads are Responsible to Execute 6 Jobs. So that a Single
Thread can be reused for Multiple Jobs.
Note: Usually we can Use ThreadPool Concept to Implement Servers (Web Servers And
Application Servers).
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
95 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
importjava.util.concurrent.Callable;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjava.util.concurrent.Future;
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
96 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
FAQ’S
1) What Is Multi Tasking?
4) When Compared With C++ What Is The Advantage In Java With Respect To Multi
Threading?
14) After Starting A Thread If We Try To Restart The Same Thread Once Again What
Will Happen?
20) How To Get Priority From Thread And Set Priority To A Thread?
21) If We Are Trying To Set Priority Of Thread As 100, What Will Happen?
22) If 2 Threads Having Different Priority Then Which Thread Will Get Chance First
For Execution?
23) If 2 Threads Having Same Priority Then Which Thread Will Get Chance First For
Execution?
28) What Is synchronized Key Word? Explain Its Advantages And Disadvantages?
31) While A Thread Executing Any Synchronized Method On The Given Object Is It
Possible To Execute Remaining Synchronized Methods On The Same Object
Simultaneously By Other Thread?
37) Why wait(), notify(), notifyAll() Methods Are Defined In Object Instead Of Thread
Class?
39) If A Waiting Thread Gets Notification Then It Will Enter Into Which State?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
98 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Multi Threading Enhancements
43) Once A Thread Gives Notification Then Which Waiting Thread Will Get A Chance?
49) What Is Starvation And Explain Difference Between Deadlock and Starvation?
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
99 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
1 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Inner Classes
Agenda
1. Introduction.
2. Normal or Regular inner classes
o Accessing inner class code from static area of outer class
o Accessing inner class code from instance area of outer class
o Accessing inner class code from outside of outer class
o The applicable modifiers for outer & inner classes
o Nesting of Inner classes
3. Method Local inner classes
4. Anonymous inner classes
o Anonymous inner class that extends a class
o Anonymous Inner Class that implements an interface
o Anonymous Inner Class that define inside method arguments
o Difference between general class and anonymous inner classes
o Explain the application areas of anonymous inner classes ?
5. Static nested classes
o Compression between normal or regular class and static nested class ?
6. Various possible combinations of nested class & interfaces
o class inside a class
o interface inside a class
o interface inside a interface
o class inside a interface
7. Conclusions
Introduction
Sometimes we can declare a class inside another class such type of classes are
called inner classes.
Diagram:
Example:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
2 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Without existing University object there is no chance of existing Department object hence
we have to define Department class inside University class.
Example1:
Example 2:
Without existing Bank object there is no chance of existing Account object hence we have
to define Account class inside Bank class.
Example:
Example 3:
Without existing Map object there is no chance of existing Entry object hence Entry
interface is define inside Map interface.
Map is a collection of key-value pairs, each key-value pair is called an Entry.
Example:
Diagram:
Note : Without existing Outer class Object there is no chance of existing Inner class
Object.
Note: The relationship between outer class and inner class is not IS-A relationship and it
is Has-A relationship.
Based on the purpose and position of declaration all inner classes are divided into 4 types.
They are:
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
3 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
If we are declaring any named class inside another class directly without static modifier
such type of inner classes are called normal or regular inner classes.
Example:
class Outer
{
class Inner
{
}
}
Output:
Example:
class Outer
{
class Inner
{
}
public static void main(String[] args)
{
System.out.println("outer class main method");
}
}
Output:
Inside inner class we can't declare static members. Hence it is not possible to
declare main() method and we can't invoke inner class directly from the command
prompt.
Example:
class Outer
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
4 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
class Inner
{
public static void main(String[] args)
{
System.out.println("inner class main
method");
}
}
}
Output:
E:\scjp>javac Outer.java
Outer.java:5: inner classes cannot have static declarations
public static void main(String[] args)
Example:
class Outer
{
class Inner
{
public void methodOne(){
System.out.println("inner class method");
}
}
public static void main(String[] args)
{
}
}
Example:
class Outer
{
class Inner
{
public void methodOne()
{
System.out.println("inner class method");
}
}
public void methodTwo()
{
Inner i=new Inner();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
5 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
i.methodOne();
}
public static void main(String[] args)
{
Outer o=new Outer();
o.methodTwo();
}
}
Output:
E:\scjp>javac Outer.java
E:\scjp>java Outer
Inner class method
Example:
class Outer
{
class Inner
{
public void methodOne()
{
System.out.println("inner class method");
}
}
}
class Test
{
public static void main(String[] args)
{
new Outer().new Inner().methodOne();
}
}
Output:
Inner class method
From inner class we can access all members of outer class (both static and non-
static, private and non private methods and variables) directly.
Example:
class Outer
{
int x=10;
static int y=20;
class Inner{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
6 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Within the inner class "this" always refers current inner class object. To refer
current outer class object we have to use "outer class name.this".
Example:
class Outer
{
int x=10;
class Inner
{
int x=100;
public void methodOne()
{
int x=1000;
System.out.println(x);//1000
System.out.println(this.x);//100
System.out.println(Outer.this.x);//10
}
}
public static void main(String[] args)
{
new Outer().new Inner().methodOne();
}
}
1. public
2. default
3. final
4. abstract
5. strictfp
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
7 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
But for the inner classes in addition to this the following modifiers also allowed.
Diagram:
Example:
class Test
{
public void methodOne()
{
class Inner
{
public void sum(int i,int j)
{
System.out.println("The sum:"+(i+j));
}
}
Inner i=new Inner();
i.sum(10,20);
;;;;;;;;;;;;;
i.sum(100,200);
;;;;;;;;;;;;;;;
i.sum(1000,2000);
;;;;;;;;;;;;;;;;;
}
public static void main(String[] args)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
8 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
new Test().methodOne();
}
}
Output:
The sum: 30
The sum: 300
The sum: 3000
If we are declaring inner class inside instance method then we can access both
static and non static members of outer class directly.
But if we are declaring inner class inside static method then we can access only
static members of outer class directly and we can't access instance members
directly.
Example:
class Test
{
int x=10;
static int y=20;
public void methodOne()
{
class Inner
{
public void methodTwo()
{
System.out.println(x);//10
System.out.println(y);//20
}
}
Inner i=new Inner();
i.methodTwo();
}
public static void main(String[] args)
{
new Test().methodOne();
}
}
If we declare methodOne() method as static then we will get compile time error
saying "non-static variable x cannot be referenced from a static context".
From method local inner class we can't access local variables of the method in
which we declared it. But if that local variable is declared as final then we won't
get any compile time error.
Example:
class Test
{
int x=10;
public void methodOne()
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
9 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
int y=20;
class Inner
{
public void methodTwo()
{
System.out.println(x);//10
System.out.println(y); //C.E: local
variable y
is accessed from within
inner class;
needs to be declared
final.
}
}
Inner i=new Inner();
i.methodTwo();
}
public static void main(String[] args)
{
new Test().methodOne();
}
}
class Test
{
int i=10;
static int j=20;
public void methodOne()
{
int k=30;
final int l=40;
class Inner
{
public void methodTwo()
{
System.out.println(i);
System.out.println(j); //-->line 1
System.out.println(k);
System.out.println(l);
}
}
Inner i=new Inner();
i.methodTwo();
}
public static void main(String[] args)
{
new Test().methodOne();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
10 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
}
}
If we declare methodOne() method as static then which variables we can access at line 1
?
If we declare methodTwo() as static then we will get compile time error because
we can't declare static members inside inner classes.
The only applicable modifiers for method local inner classes are:
1. final
2. abstract
3. strictfp
By mistake if we are declaring any other modifier we will get compile time error.
class PopCorn
{
public void taste()
{
System.out.println("spicy");
}
}
class Test
{
public static void main(String[] args)
{
PopCorn p=new PopCorn()
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
11 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Note: Inside Anonymous inner classes we can take or declare new methods but outside
of anonymous inner classes we can't call these methods directly because we are
depending on parent reference.[parent reference can be used to hold child class object
but by using that reference we can't call child specific methods]. These methods just for
internal purpose only.
Example 1:
class PopCorn
{
public void taste()
{
System.out.println("spicy");
}
}
class Test
{
public static void main(String[] args)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
12 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
PopCorn p=new PopCorn()
{
public void taste()
{
methodOne();//valid call(internal
purpose)
System.out.println("salty");
}
public void methodOne()
{
System.out.println("child specific
method");
}
};
//p.methodOne();//here we can not call(outside
inner class)
p.taste();//salty
PopCorn p1=new PopCorn();
p1.taste();//spicy
}
}
Output:
Child specific method
Salty
Spicy
Example 2:
class Test
{
public static void main(String[] args)
{
Thread t=new Thread()
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("child
thread");
}
}
};
t.start();
for(int i=0;i<10;i++)
{
System.out.println("main thread");
}
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
13 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
Example:
class InnerClassesDemo
{
public static void main(String[] args)
{
Runnable r=new Runnable() //here we are not
creating for
Runnable interface, we are
creating
implements class object.
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("Child
thread");
}
}
};
Thread t=new Thread(r);
t.start();
for(int i=0;i<10;i++)
{
System.out.println("Main thread");
}
}
}
Example:
class Test
{
public static void main(String[] args)
{
new Thread(
new Runnable()
{
public void run()
{
for(int i=0;i<10;i++)
{
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
14 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
System.out.println("child
thread");
}
}
}).start();
for(int i=0;i<10;i++)
{
System.out.println("main thread");
}
}
}
Output:
Main thread
Main thread
Main thread
Main thread
Main thread
Main thread
Main thread
Main thread
Main thread
Main thread
Child thread
Child thread
Child thread
Child thread
Child thread
Child thread
Child thread
Child thread
Child thread
Child thread
Difference between general class and anonymous inner classes:
General Class Anonymous Inner Class
1) A general class can extends only one 1) Ofcource anonymous inner class also can
class at a time. extends only one class at a time.
2) A general class can implement any 2) But anonymous inner class can implement
no. Of interfaces at a time. only one interface at a time.
3) A general class can extends a class 3) But anonymous inner class can extends a class
and can implement an interface or can implements an interface but not both
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
15 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
simultaneously. simultaneously.
4) In normal Java class we can write 4) But in anonymous inner class we can't write
constructor because we know name of constructor because anonymous inner class not
the class. having any name.
import java.awt.*;
import java.awt.event.*;
f.addWindowListener(new WindowAdaptor(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
---------------------
}
----------------
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
16 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//perform b1 specific functionality
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//perform b2 specific functionality
}
});
---------
}
Example:
class Test
{
static class Nested
{
public void methodOne()
{
System.out.println("nested class method");
}
}
public static void main(String[] args)
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
17 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
{
Test.Nested t=new Test.Nested();
t.methodOne();
}
}
Inside static nested classes we can declare static members including main() method
also. Hence it is possible to invoke static nested class directly from the command
prompt.
Example:
class Test
{
static class Nested
{
public static void main(String[] args)
{
System.out.println("nested class main
method");
}
}
public static void main(String[] args)
{
System.out.println("outer class main method");
}
}
Output:
E:\SCJP>javac Test.java
E:\SCJP>java Test
Outer class main method
E:\SCJP>java Test$Nested
Nested class main method
From the normal inner class we can access both static and non static members of
outer class but from static nested class we can access only static members of outer
class.
Example:
class Test
{
int x=10;
static int y=20;
static class Nested
{
public void methodOne()
{
System.out.println(x);//C.E:non-static
variable x
cannot be referenced
from a static context
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
18 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
System.out.println(y);
}
}
}
Compression between normal or regular class and static nested class ?
Normal /regular inner class Static nested class
1) Without existing outer class object 1) Without existing outer class object there
there is no chance of existing inner class may be a chance of existing static nested class
object. That is inner class object is always object. That is static nested class object is not
associated with outer class object. associated with outer class object.
2) Inside normal or regular inner class we 2) Inside static nested class we can declare
can't declare static members. static members.
3) Inside normal inner class we can't 3) Inside static nested class we can declare
declare main() method and hence we can't main() method and hence we can invoke static
invoke regular inner class directly from the nested class directly from the command
command prompt. prompt.
class University {
class Department {
}
}
Without existing University object, there is no chance of existing Department object. i.e.,
Department object is always associated with University
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
19 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
class X {
interface Y {
}
}
Inside class if we required multiple implements of an interface and these implementations
of relevant to a perticular class, then we should declare interface inside a class.
class VehicleType {
interface Vehicle {
public int getNoOfWheels();
}
interface Map {
interface Entry {
public Object getKey();
public Object getValue();
public Object getValue(Object new );
}
}
Nested interfaces are always public,static whether we are declaring or not. Hence we can
implements inner inteface directly with out implementing outer interface.
interface Outer {
public void methodOne();
interface Inner {
public void methodTwo();
}
}
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
20 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
}
i.e., Both Outer and Inner interfaces we can implement independently.
Example:
interface EmailServer {
public void sendEmail(EmailDetails e);
class EmailDetails {
String from;
String to;
String subject;
}
}
In the above example Emaildetails functionality is required for EmailService and we are
not using anyware else . Hence we can declare EmailDetails class inside EmailService
interface .
We can also declare a class inside interface to provide default implementation for that
interface.
Example :
interface Vehicle {
public int getNoOfWheels();
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
21 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Core Java with SCJP/ OCJP Notes By Durga Sir Inner Classes
class Test {
public static void main(String args[]) {
Bus b=new Bus();
System.out.println(b.getNoOfWheels());
Conclusions :
1. We can declare anything inside any thing with respect to classes and interfaces.
2. Nesting interfaces are always public, static whether we are declaring or not.
3. class which is declared inside interface is always public,static whether we are
declaring or not.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
22 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com