Corejava Paid Notes
Corejava Paid Notes
BY
NAGOOR BABU
FROM
DURGA SOFT
1
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Java Details
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.C and C++ are static programming languages but JAVA is dynamic programming language:
If any programming language allows memory allocation for primitive data types at compilation time
[Static Time] then that programming language is called as Static Programming language.
EX: C and C++.
In C and C++ applications, memory will be allocated for primitive data types at compilation time only,
not at runtime.
If any programming language allows memory allocation for primitive data types at runtime, not at
compilation time then that programming language is called as Dynamic Programming Language.
EX: JAVA
In java applications, memory will be allocated for primitive data types at runtime only, not at
compilation time.
Note: In Java applications, memory will be allocated for primitive data types at the time of creating
objects only, in java applications, objects are created at runtime only.
In case of C and C++, the complete predefined library is provided in the form of header files
EX:
stdio.h
conio.h
math.h
---
----
If we want to use predefined library in C and C++ applications, we have to include header files in C
and C++ applications, for this, we have to use #include<> statement.
EX:
#include<stdio.h>
#include<conio.h>
#include<math.h>
3
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
--- Diagram-1-----
In java , the complete predefined library is provided in the form of classes and interfaces in packages
EX:
java.io
java.util
java.sql
If we want to use predefined library in java applications then we have to include packages in java
application, for this we have to use "import" statements
EX:
import java.io.*;
import java.util.*;
import java.sql.*;
If we compile java program then compiler will perform the following actions.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Pre-Processor is not required in JAVA , because, java does not include header files and #include<>
statements, alternativily, JAVA has clases and interfaces in the form of packages and import
statements.
--- Diagram-2----
Q)What are the differences between #include<> statement and import statement?
Ans:
2. #include<> statements are used to include the predefined library which is available in the form of
header files.
import statements are used to include the predefined library which are available in the form of
packages.
5. By using Single #include<> statement we are able to include only one header file.
EX:
#include<stdio.h>
#include<conio.h>
#include<math.h>
By using single import statement we are able to include more than one class or more than one
interface of the same package.
EX:
5
import java.io.*;
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between .exe file and .class file?
Ans:
4.Pointers are existed in C and C++, but, Pointers are not existed in Java:
Q)What are the differences between pointer variables and referece variables?
Ans:
1. Pointer variables are available upto C and C++.
Reference variables are available upto JAVA mainly.
2. Pointer variables are able to refer a block of memory by storing its address locations.
Reference variables are able to refer a block of memory[Object] by storing object reference values,
where Object reference value is hexa decimal form of hashcode, where hashcode is an unique
identity provided by Heap manager.
1.Single Inheritance
Page
2.Multiple Inheritance
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Class
2.Object
3.Encapsulation
4.Abstraction
5.Inheritance
6.Polymorphism
7.Message Passing
Polymorphism:
If one thing is existed in more than one form then it is called as Polymorphism.
Polymorphism is a Greak word, where Poly means many and morphism means structers or forms.
1.Static Polymorphism
2.Dynamic Polymorphism
1.Static Polymorphism:
If polymorphism is existed at compilation time then it is called as Static Polymorhism.
EX: Overloading.
2.Dynamic Polymorphism:
If the polymorphism is existed at runtime then that polymorphismn is called as Dynamic
Polymorphism.
7
Page
EX: Overriding
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Method Overloading:
If we declare more than one method with the same name and with the different parameter list
then it is called as Method Overloading
EX:
class A{
void add(int i, int j){
}
void add(float f1, float f2){
}
void add(String str1, String str2){
}
}
2.Operator Overloading:
If we define more than one functionality for any single operator then it is called as Operator
Overloding.
EX:
int a=10;
int b=20;
int c=a+b;// + is for Arithmetic Addition.
System.out.println(c);// 30
String str1="abc";
String str2="def";
String str3=str1+str2;// + is for String concatination.
System.out.println(str3);// abcdef
operators with fixed functionalities implicitly as per JAVA requirement, but, JAVA has not provided
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
8.C and C++ are following Call By Value and Call by reference parameter passing mechanisms, but,
JAVA is following only call by value parameter passing mechanism:
primitive data: byte, short, int, long, float, double, boolean, char
Address locations
9.In C and C++ , integers will take only 2 bytes of memory and characters will take 1 byte of memory,
but, in JAVA integers will take 4 bytes of memory and characters will take 2 bytes of memory:
C and C++:
Memory allocation for primitive data types is variable depending on the OS which we used.
JAVA:
Memory allocation for primitive data types is fixed irrespective of the operating system which we
used.
Primitives Sizes
---------- ------
byte ------> 1 byte
short------> 2 bytes
int--------> 4 bytes
long-------> 8 bytes
float------> 4 bytes
double-----> 8 bytes
char-------> 2 bytes
boolean----> 1 bit
Q)In case of C and C++, characters will take only 1 byte of memory then what is the required for
JAVA to assign two bytes of memory for characters?
Ans:
In case of C and C++, all the characters are represented in the form of ASCII values, here to store
ASCII values one byte of memory is sufficient.
9
In case of JAVA, all the characters are represented in the form UNICODE values, to store UNICODE
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
UNICODE is one of the character representation, it is universally accepted code and it able to
represent all the alphabet from all the natural languages like English, Hindi, Marati, chinees,
italian,...... and it will provide very good Internationalization[I18N] support.
Note: Designing java applications w.r.t the local conventions is called as Internationalization[I18N].
Java Features:
To show the nature of java programming language, JAVA has provided the following features.
1.Simple
2.Object Oriented
3.Platform independent
4.Arch Nuetral
5.Portable
6.Robust
7.Secure
8.Dynamic
9.Distributed
10.Multi Threadded
11.Interpretive
12.High Performance
1. Simple:
Java is simple programming language, because,
1.Java applications will take less memory and less execution time.
2.Java has removed all most all the confusion oriented features like pointers, multiple
inheritance,.....
3.Java is using all the simplified syntaxes from C and C++.
2. Object Oriented:
Java is an object oriented programming language, because, JAVA is able to store data in the
form of Objects only.
3. Platform Independent:
Java is platform independent programming Language, because, Java allows its applications to
10
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
5. Portable:
Java is a portable programming language, because, JAVA is able to run its applications under all
the operating systems and under all the H/W Systems.
6. Robust:
Java is Robust programming language, because,
1.Java is having very good memory management system in the form of heap memory
Management SYstem, it is a dynamic memory management system, it allocates and deallocates
memory for the objects at runtime.
2.JAVA is having very good Exception Handling mechanisms, because, Java has provided very
good predefined library to represent and handle almost all the frequently generated exceptions in
java applications.
7. Secure:
Java is very good Secure programming language, because,
1.JAVA has provided an implicit component inside JVM in the form of "Security Manager" to
provide implicit security.
2.JAVA has provided a seperate middleware service in the form of JAAS [Java Authetication
And Autherization Service] inorder to provide web security.
3.Java has provided very good predefined implementations for almost all well known network
security alg.
8. Dynamic:
If any programming language allows memory allocation for primitive data types at RUNTIME
then that programming language is called as Dynamic Programming Language.
JAVA is a dynamic programming language, because, JAVA allows memory allocation for
primitive data types at RUNTIME.
11
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
a)Standalone Applications
b)Distributed Applications
a)Standalone Applications:
If we design any java application with out using client-Server arch then that java application is
called as Standalone application.
b)Distributed Applications:
If we design any java application on the basis of client-server arch then that java application is
called as Distributed application.
To prepare Distributed applications, JAVA has provided a seperate module that is "J2EE/JAVA EE".
JAVA is following Multi Thread Model, JAVA is able to provide very good environment to create
and execute more than one thread at a time, due to this reason, JAVA is Multi threaded
Programming Language.
11. Interpretive:
JAVA is both compilative programming language and Interpretive programming language.
1.To check developers mistakes in java applications and to translate java program from High
12
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To use lower case letters and Upper case letters seperatly in java applications, JAVA has provided
the following conventions.
1. All class names , abstract class names, interface names and enum names must be started with upper
case letter and the sub sequent symbols must also be upper case letters.
EX:
String
StringBuffer
InputStreamReader
2. All java variables must be started with lower case letters, but, the subsequent symbols must be
upper case letters.
EX:
in, out, err
pageContext, bodyContent
3. All java methods must start with lower case letter , but, the sub sequent symbols must be upper
case letters
EX:
concat(--)
forName(--)
getInputStream()
EX:
MIN_PRIORITY
NORM_PRIORITY
13
MAX_PRIOITY
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
java.util
java.lang.reflect
javax.servlet.jsp.tagext
Note: All the above conventions are mandatory for predefined library, they are optional form User
defined library, but, suggestible.
EX:
1.Comment Section:
Before starting implementation part, it is convention to provide some description about our
implementation, here to provide description about our implementation we have to use Comment
Section. Description includes author name, Objective, project details, module details, client
details,......
To provide the above specified description in comment section, we will use comments.
14
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
/*
---
--description-----
----
*/
3.Documentation Comment.
It allows description in more than one page.
Syntax:
--------
/*
*----
*----
---
---
*----
*/
Note: We will use documentation comments to prepare API kind of documentations, but, it is not
suggestible. 15
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
Employee.java
public class Employee extends Person implements Serializable, Cloneable{
puiblc String eid;
public String ename;
public float esal;
public String eaddr;
public void add(String eid, String ename, float esal, String eaddr){
----
}
public String search(String eid){
return "success";
}
publc void delete(String eid){
---
}
}
Employee.txt[html/pdf]
16
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2)Name : ename
Data Type: String
Access Mod: public
----
----
Methods: 1)Name : add
Return type: void
access mod: public
parameters : eid, ename, esal, eaddr
------
Constructors: 1)Employee
----
To simpify API documentation for JAVA applications, JAVA has provided an implicit command , that
is, "javadoc".
public void add(String eid, String ename, float esal, String eaddr){
}
public String search(String eid){
return "success";
}
public void delete(String eid){
}
17
}
Page
On Command Prompt:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To provide description[Metadata] in java programs, JDK5.0 version has provided a new feature that is
"Annotations".
Q)In java applications, to provide description we have already comments then what is the requirement
to use Annotations?
Ans:
If we provide description along with comments in java program then "Lexical Analysis" phase will
remove comments and their descriotion which we provided in java program as part of Compilation.
As per the requirement,if we want to make available our description upto .java file, upto .class file and
upto RUNTIME of our applications there we have to use "Annotations".
Note: If we provide metadata with comments then we are unable to access that metadata
programatically, but, if we provide metadata with Annotations then we are able to access that metadata
through java program.
Q)In java applications, to provide metadata at RUNTIME we are able to use XML documents then
what is the requirement to use "Annotations".
Ans:
If we use XMl documents to provide description then we are able to get the following problems.
1.We have to learn XML tech.
2.Every time we have to check whether XML documents are located properly or not.
3.Every time, we have to check whether XML documents are formatted properly or not.
4.Every time we have to check whether we are using right parsing mechanisms or not to read data
from XML documents.
To overcome all the above problems we need a java alternative , that is, Annotations.
----- ------
Page
Package Section:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Modularity
2.Abstraction
3.Security
4.Reusability
5.Sharability
1.Predefined Packages
2.User defined Packages
1.Predefined Packages:
These packages are provided by Java programming language along with java software.
EX: java.io
java.util
java.sql
----
----
EX:
package p1;
package p1.p2.p3;
If we want to use package declaration statement in java files then we have to use the following two
condition.
1.Package declaration statement must be the first statement in java file after the comment section.
2.Package name must be unique, it must not be sharable and it must not be duplicated.
19
Page
Q)Is it possible to declare more than one package statement with in a single java file?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
abc.java
To provide package names, JAVA has given a convention like to include our company domain name
in reverse in package names.
EX: www.durgasoft.com
durgasoft.com
com.durgasoft
package com.durgasoft.icici.transactions.deposit;
com.durgasoft---> company domain name in reverse.
icici ----------> project name/ client name
transactions----> module name
deposit---------> sub module
3.Import Section:
The main intention of "import" statement is to make available classes and interfaces of a particular
package into the present JAVA file inorder to use in present java file.
Syntax1:
import package_Name.*;
--> It able to import all the classes and interfaces of the specified package into the present java file.
Syntax2:
import package_Name.Member_Name;
--> It able to import only the specified member from the specified package into the present java file.
Q)Is it possible to write more than one "import" statement with in a single java file?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
abc.java
package p1;
//package p2;-----> Error
//package p3;-----> Error
import java.io.*;
import java.util.*;--> No Error
import java.sql.*;---> No Error
---
----
---
Q)Is it possible to use classes and interfaces of a particular package with out importing that package?
Ans:
Yes, it is possible to use classes and interfaces of a particular package in the present java file with out
importing the respective package, but, just by using fully qualified names of the classes.
Note: Specifying class names or interface names along with their respective package names is called
as "Fully Qualified Names".
EX: java.io.BufferedReader
java.util.ArrayList
java.sql.Connection
4.Classes/Interfaces Section:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: No restrictions for no of classes in a java file or in a java application, depending on the
application requirement, we are able to write any no of classes and interfaces in java applications.
Syntax:
public static void main(String[] args){
----instructions----
}
Note:main() method is a conventional method with fixed prototype and with user defined
implementation part.
22
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
After installation of JAVA software, we have to set "path" environment variable to the location where
all JDK commands are existed that is
"C:\Java\JDK1.8.0\bin" inorder to make available all JAVA commands to Operating System.
On command Prompt:
set path=C:\Java\JDK1.8.0\bin;
If we provide "path" set up like above on the command prompt then this set up is available upto the
present command prompt only, it is not available to all the command prompts.
If we want to set "path" environment variable permanently then we have to use the following steps.
1. Right Click on "Computers" or "This PC" on desktop .
2. Select "Properties".
3. Select "Advanced System Settings" hyper link.
4. Click on "Advanced" Tab[Bydefault Selected].
5. Click on "Environment VAriables.." button.
6. Goto User Variables part and click on "New" button.
7. Provide the following details.
variable name: path
variable value: C:\Java\jdk1.8.0\bin";
8. Click on "Ok" button.
9. Click on "OK" button.
10. Click on "OK" button.
23
Page
Q)If we set all three versions[JAVA6,JAVA7,JAVA8] to the "path" environment variable then which
version will come to the command prompt?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
path=C:\Java\jdk1.6.0\bin;C:\Java\jdk1.7.0\bin;C:\Java\jdk1.8.0\bin;
On Command Prompt:
If we want to switch java from one version to another version in simpified manner as per the
requirement then we have to use batch files.
D:\java9\ java6.bat
set path=C:\Java\jdk1.6.0\bin;
D:\java9\ java7.bat
set path=C:\Java\jdk1.7.0\bin;
D:\java9\ java8.bat
set path=C:\Java\jdk1.8.0\bin;
On Command Prompt:
D:\java9>java6.bat ---> Enter button
--- we will get java6 setup----
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: In real time application development, it is not suggestible to use Editors, it is always suggestible
to use IDEs[Integrated Development Environment].
EX
D:\javaapps\ Test.java
class Test{
public static void main(String[] args){
System.out.println("First Java Application");
}
}
1.If the present java file contains any public element[class, abstract class, interface, enum] then we
must save java file with public element name only.If we voilate this condition then compiler will
rise an error.
2.If no public element is identified in our java file then it is possible to save java file with any name
like abc.java or xyz.java, but, it is suggestible to save java file with main() method class name.
25
Page
Q)Is it possible to provide more than one public class with in a single java file?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
class FirstApp{
public static void main(String[] args){
System.out.println("First Java Application");
}
}
class FirstApp{
public static void main(String[] args){
System.out.println("First Java Application");
}
}
Status: No COmpilation Error, it is suggestible.
public class A{
}
class FirstApp{
public static void main(String[] args){
System.out.println("First Java Application");
}
}
Status: Compilation Error. 26
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To compile JAVA file,we have to use the following command on command prompt from the
location where JAVA File is Saved
javac File_Name.java
EX:
d:\java9>javac FirstApp.java
27
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Operating System will take "javac" command from command prompt and search for it at its
predefined commands lists and at the locations referred by "path" environment variable.
2.If the required "javac" program is not available at the above two locations then operating System will
give a message on command prompt.
"javac can not be recognized as an internal command,external command or operable program and a
batch file"
NOTE:To make available all JDK tools like javac,java...to the operating System we have to set "path"
environment variable to
"c:\java\jdk1.7.0\bin" location.
D:\java9>set path=C:\Java\jdk1.7.0\bin;
3.If the required "javac" program is identified at "c:\java\jdk1.7.0\bin" location through "path"
environment variable then operating System will execute "javac" program and activate "Java
Compiler" software.
4.When Java Complier Software is activated then Java Complier will perform the following tasks.
c)If the required java file is not available at current location then compiler will provide the following
message on command prompt.
d)If the required java file is available at current location then compiler will start compilation from
starting point to ending point of the java file.
e)In compilation process,if any syntax violations are identified then compiler will generate error
messages on command prompt.
f)In compilation process,if no syntax errors are identified then compiler will generate .class files at
28
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to compile java file from current location and if we want to send the generated .class Files
to some other target location then we have to use the following command on command prompt
EX:
d:\java9>javac -d c:\abc FirstApp.java
If we use package declaration statement in java file and if we want to store the generated .class files by
creating directory structure w.r.t the package name in compilation process then we have to use
"-d" option along with "javac" command.
package com.durgasoft.core;
enum E{
}
interface I{
}
abstract class A{
}
class B{
class C{
}
}
class FirstApp{
public static void main(String[] args){
}
}
Compiler will compile FirstApp.java File from "D:\java9" location and it will generate E.class, I.class,
A.class, B.class, B$C.class, FirstApp.class files at the specified target location "C:\abc" by creating
directory structure w.r.t the package name "com.durgasoft.core".
If we want to compile all the java files which are available at current location then we have to use the
29
following command.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to compile all the java files which are prefixed with a word then we have to use the
following command.
D:\java9>javac Employee*.java
If we want to compile all the java files which are postfixed with a common word then we have to use
the following command.
D:\java9>javac *Address.java
If we want to compile all the java Files which contain particular word then we have to use the
following command
D:\java9>javac *Account*.java
D:\java9>javac -d C:\abc *Account*.java
java Main_Class_Name
EX:
d:\java9>java FirstApp
If we use the above command on command prompt then operating System will execute "java"
operable program at "C:\java\jdk1.7.0\bin",with this,JVM software will be activated and JVM
will perform the following actions.
2. JVM will search for Main_Class at current location,at Java predefined library and at the
locations referred by "classpath" environment variable.
3. If the required Main_Class .class file is not available at all the above locations then JVM
will provide the following.
JAVA6: java.lang.NoClassDefFoundError:FirstApp
30
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
D:\java7>set classpath=E:\XYZ;
4. If the required main class .class file is available at either of the above locations then JVM will load
main class bytecode to the memory by using "Class Loaders".
5. After loading main class bytecode to the memory,JVM will search for main() method.
6. If main() method is not available at main class byteCode then JVM will provide the following.
JAVA6: java.lang.NoSuchMethodError:main
JAVA7: Error:Main method not found in class FirstApp,please define main method as:
public static void main(String args[])
7. If main() method is available at main class bytecode then JVM will access main() method by
creating a thread called as "Main thread".
8. JVM will access main() method to start application execution by using main thread,when main
thread reached to the ending point of main() method then main thread will be in destroyed/dead
state.
9. When main Thread is in dead state then JVM will stop all of its internal processes and JVM will go
to ShutDown mode.
31
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. Tokens
2. Data Types
3. Type Casting
4. Java Statements
5. Arrays
1. Tokens:
Smallest logical unit in java programming is called as "Lexeme".
int a=b+c*d;
Tokens:
1)Data Types: int
2)Identifiers: a, b, c, d
3)Operators: =, +, "*
4)Special Symbol: ;
Types of tokens: 4
To prepare java applications, java has provided the following list of tokens.
1.Identifiers
2.Literals
3.Keywords/ Reserved Words
4.Operators
32
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
int a=10;
int ----> Data Types
a ------> variable[Identifier]
= ------> Operator
10 -----> constant
; ------> Terminator
To provide identifiers in java programming, we have to use the following rules and regulations.
1. Identifiers should not be started with any number, identifiers may be started with an alphabet, '_'
symbol, '$' symbol, but, the subsequent symbols may be a number, an alphabet, '_' symbol, '$'
symbol.
2. Identifiers are not allowing all operators and all special symbols except '_' and '$' symbols.
int empNo=111; -------> valid
int emp+No=111;-------> Invalid
String emp*Name="Durga";-----> Invalid
String #eaddr="Hyd";--->Invalid
String emp@Hyd="Durga";-----> Invalid
float emp.Sal=50000.0f;-----> Invalid
String emp-Addr="Hyd";------> Invalid
String emp_Addr="Hyd";------> Valid
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
5. In java applications, we can use all predefined class names and interface names as identifiers.
EX1:
int Exception=10;
System.out.println(Exception);
Status: No Compilation Error
OP: 10
EX2:
String String="String";
System.out.println(String);
Status: No Compilation Error
OP: String
EX3:
int System=10;
System.out.println(System);
Status: COmpilation Error
Reason: Once if we declare "System"[Class Name] as an integer variable then we must use that
"System" name as integer variable only in the remaining program, in the remaining program if we use
"System" as class name then compiler will rise an error.
In the above context, if we want to use "System" as class name then we have to use its fully qualified .
Note: Specifying class names and interface names along with package names is called as Fully
Qualified Name.
EX: java.io.BufferedReader
34
java.util.ArrayList
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Along with the above rules and regulations, JAVA has provided a set of suggessions to use identifiers
in java programs
1. In java applications, it is suggestible to provide identifiers with a particular meaning.
EX:
String xxx="abc123";------> Not Suggestible
String accNo="abc123";----> Suggestible
2. In java applications, we dont have any restrictions over the length of the identifiers, we can
declare identifiers with any length, but, it is suggestible to provide length of the identifiers around
10 symbols.
EX:
String permanentemployeeaddress="Hyd";----> Not Suggestible
String permEmpAddr="Hyd";----> Suggestible
3. If we have multiple words with in a single identifier then it is suggestible to seperate multiple
words with special notations like '_' symbols.
EX:
String permEmpAddr="Hyd";----> Not Suggestible
String perm_Emp_Addr="Hyd";----> Suggestible
2. Literals:
Literal is a constant assigned to the variables .
EX:
int a=10;
int ----> data types
a ------> variables/ identifier
= ------> Operator
10 -----> constant[Literal].
; ------> Special symbol.
35
To prepare java programs, JAVA has provioded the following set of literals.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.Boolean Literals:
boolean -----> true, false
4.String Literals:
String ---> "abc", "def",......
Note: JAVA7 has given a flexibility like to include '_' symbols in the middle of the literals inorder to
improve readability.
EX:
float f=12345678.2345f;
float f=1_23_45_678.2345f;
If we provide '_' symbols in the literals then compiler will remove all '_' symbols which we provided,
compiler will reformate that number as original number and compiler will process that number as
original number.
In java , all number systems are allowed, but, the default number system in java applications is
"Decimal Number Systems".
36
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: Binary Number system is not supported by all the java versions upto JAVA6, but , JAVA7 and
above versions are supporting Binary Number Systems, because, it is a new feature introduced in
JAVA7 version.
EX:
int a=10; ------> It is decimal nhumber, it is not octal number.
int b=012345;---> Valid
int c=O234567;---> Invalid, number is prefixed with O, not zero
int d=04567;----> Valid
int e=05678;----> Invalid, 8 is not octal number systems alphabet.
EX:
int a=10;----> Valid
int b=20;----> Valid
int c=30;----> valid
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If any predefined word having only word recognization with out internal functionality then that
predefined word is called as Reserved word.
To prepare java applications, Java has provided the following list of keywords.
5. Access Modifiers:
public, protected, private, static, final, abstract, native, volatile, transient, synchronized, strictfp,.....
6. Flow Controllers:
if, else, switch, case, default, for, while, do, break, continue, return,....
Operators:
Operator is a symbol, it will perform a particular operation over the provided operands.
To prepare java applications, JAVA has provided the following list of operators.
1. Arithmetic Operators:
+, -, *, /, %, ++, --
2. Assignment Operators:
38
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
6. Short-Circuit Operators:
&&, ||
7. Ternary Operator:
Expr1? Expr2: Expr3;
Ex1:
class Test
{
public static void main(String[] args)
{
int a=10;
System.out.println(a);
System.out.println(a++);
System.out.println(++a);
System.out.println(a--);
System.out.println(--a);
System.out.println(a);
}
}
Status: No Compilation Error
OP: 10
10
12
12
10
10
39
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
int a=5;
System.out.println((--a+--a)*(++a-a--)+(--a+a--)*(++a+a++));
}
}
OP: 16
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println(b1&b1);//true
System.out.println(b1&b2);//false
System.out.println(b2&b1);//false
System.out.println(b2&b2);//false
System.out.println(b1|b1);//true
System.out.println(b1|b2);//true
System.out.println(b2|b1);//true
System.out.println(b2|b2);//false
System.out.println(b1^b1);//false
System.out.println(b1^b2);//true
System.out.println(b2^b1);//true
System.out.println(b2^b2);//false
}
}
T----> 1
F----> 0
41
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
a&b--->10&2--> 0010-----> 2
a|b--->10|2--> 1010-----> 10
a^b--->10^2--> 1000-----> 8
Note: Removable Symbols may be o's and 1's but appendable symbols must be 0's.
Short-Circuit Operators:
The main intention of Short-Circuit operators is to improve java applications performance.
| Vs ||
In the case of Logical-OR operator, if the first operand value is true then it is not required to check
second operand value, directly, we can predict the result of overall expression is true.
42
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the case of '||' operator, if the first operand value is true then JVM will get the overall expression
result is true with out evaluating second operand value, here JVM is not evaluating second operand
expression unneccessarily, it will reduce execution time and it will improve application performance.
Note: If the first operand value is false then it is mandatory for JVM to evaluate second operand value
inorder to get overall expression result.
EX:
class Test
{
public static void main(String[] args)
{
int a=10;
int b=10;
if( (a++ == 10) | (b++ == 10) )
{
System.out.println(a+" "+b);//OP: 11 11
}
int c=10;
int d=10;
if( (c++ == 10) || (d++ == 10) )
{
System.out.println(c+" "+d);//OP: 11 10
}
}
}
& Vs &&
In the case of Logical-AND operator, if the first operand value is false then it is not required to check
second operand value, directly, we can predict the result of overall expression is false.
In the case of '&' operator, even first operand value is false , still, JVM evalutes second opoerand value
then only JVM will get the result of overall expression is false, here evaluating second operand value
is unneccessary, it will increase execution time and it will reduve application performance.
In the case of '&&' operator, if the first operand value is false then JVM will get the overall expression
43
result is false with out evaluating second operand value, here JVM is not evaluating second operand
Page
expression unneccessarily, it will reduce execution time and it will improve application performance.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
int a=10;
int b=10;
if( (a++ != 10) & (b++ != 10) )
{
}
System.out.println(a+" "+b);//OP: 11 11
int c=10;
int d=10;
if( (c++ != 10) && (d++ != 10) )
{
}
System.out.println(c+" "+d);//OP: 11 10
}
}
5. Data Types:
Java is strictly a typed programming language, where in java applicatins before representing data
first we have to confirm which type of data we representing. In this context, to represent type of
data we have to use "data types".
In java applications , data types are able to provide the following advatages.
Reason: 'byte' data type is providing a particular range for its variables like -128 to 127, in
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to identify range values for variablers onthe basis of data types then we have to use the
following formula.
n-1 n-1
-2 to 2 - 1
Where 'n' is no of bits.
8-1 8-1
-2 to 2 - 1
7 7
-2 to 2 - 1
-128 to 128 - 1
45
Page
-128 to 127
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To identify "min value" and "max value" for each and every data type, JAVA has provided the
following two constant variables from all the wrapper classes.
Note: Classes representation of primitive data types are called as Wrapper Classes
EX:
class Test{
public static void main(String[] args){
System.out.println(Byte.MIN_VALUE+"----->"+Byte.MAX_VALUE);
System.out.println(Short.MIN_VALUE+"---->"+Short.MAX_VALUE);
System.out.println(Integer.MIN_VALUE+"----->"+Integer.MAX_VALUE);
System.out.println(Long.MIN_VALUE+"----->"+Long.MAX_VALUE);
System.out.println(Float.MIN_VALUE+"----->"+Float.MAX_VALUE);
System.out.println(Double.MIN_VALUE+"----->"+Double.MAX_VALUE);
System.out.println(Character.MIN_VALUE+"----->"+Character.MAX_VALUE);
//System.out.println(Boolean.MIN_VALUE+"----->"+Boolean.MAX_VALUE);---> Error
}
}
Type Casting:
The process of converting data from one data type to another data type is called as "Type Casting".
There are two types of type castings are existed in java.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To cover all the possibilities of implicit type casting JAVA has provided the following chart.
1 2 4 8 4 8
byte ---> short ---> int ---> long ---> float ---> double
^
|
char
If we want to perform implicit type casting in java applications then we have to assign lower data type
variables to higher data type variables.
EX:
byte b=10;
int i = b;
System.out.println(b+" "+i);
If we compile the above code, when compiler encounter the above assignment stattement then
compiler will check whether right side variable data type is compatible with left side variable data type
or not, if not, compiler will rise an error like "possible loss of precision". If right side variable data
type is compatible with left side variable data type then compiler will not rise any error and compiler
will not perform any type casting.
47
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.JVM will convert right side variable data type to left side variable data type implicitly[Implicit
Type Casting]
2.JVM will copy the value from right side variable to left side variable.
Note: Type Checking is the responsibility of compiler and Type Casting is the responsibility of JVM.
EX2:
class Test
{
public static void main(String[] args)
{
int i=10;
byte b=i;
System.out.println(i+" "+b);
}
}
Status: Compilation Error, Possible loss of precision.
EX3:
class Test
{
public static void main(String[] args)
{
byte b=65;
char c=b;
System.out.println(b+" "+c);
}
}
Status: Compilation Error
48
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX5:
class Test
{
public static void main(String[] args)
{
char c='A';
int i=c;
System.out.println(c+" "+i);
}
}
Status: No Compilation Error
OP: A 65
EX6:
class Test
{
public static void main(String[] args)
{
byte b=128;
System.out.println(b);
}
}
Status: Compilation Error,possible loss of precision.
Reason: When we assign a value to a variable of data type, if the value is greater the max limit of the
left side variable data type then that value is treated as of the next higher data type value.
Note: For both byte and short next higher data type is int only.
49
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX8:
class Test
{
public static void main(String[] args)
{
byte b1=30;
byte b2=30;
byte b=b1+b2;
System.out.println(b);
}
}
X+Y=Z
byte+byte=int
byte+short=int
short+int=int
byte+long=long
long+float=float
float+double=double
50
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX10:
class Test
{
public static void main(String[] args)
{
float f=22.22f;
long l=f;
System.out.println(f+" "+l);
}
}
Due to the above reason, float data type is higher when compared with long data type so that, we are
able to assign long variable4 to float variable directly, but, we are unable to assign float variable to
long variable directly.
51
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
P a = (Q) b;
EX1:
class Test
{
public static void main(String[] args)
{
int i=10;
byte b=(byte)i;
System.out.println(i+" "+b);
}
}
When we compile the above code, when compiler encounter the above assignment statement, compiler
will check whether cast operator provided data type is compatible with left side variable data type or
not, if not, compiler will rise an error like "Possible loss of precision". If cast operator provided data
type is compatible with left side variable data type then compiler will not rise any error and compiler
will not perform type casting.
When we execute the above program, when JVM encounter the above assignment statement then JVM
will perform two actions.
1.JVM will convert right side variable data type to cast operator provided data type.
2.JVM will copy value from right side variable to left side variable.
52
Page
EX2:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX3:
class Test
{
public static void main(String[] args)
{
byte b=65;
char c=(char)b;
System.out.println(b+" "+c);
}
}
Status: No Compilation Error
OP: 65 A
EX4:
class Test
{
public static void main(String[] args)
{
char c='A';
short s=(short)c;
System.out.println(c+" "+s);
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX5:
class Test
{
public static void main(String[] args)
{
short s=65;
char c=(byte)s;
System.out.println(s+" "+c);
}
}
Status: COmpilation Error.
EX6:
class Test
{
public static void main(String[] args)
{
byte b1=30;
byte b2=30;
byte b=(byte)b1+b2;
System.out.println(b);
}
}
Status: Compilation Error
EX7:
class Test
{
public static void main(String[] args)
{
byte b1=30;
byte b2=30;
byte b=(byte)(b1+b2);
System.out.println(b);
}
}
Status: No Compilation Error
54
OP: 60
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX9:
class Test
{
public static void main(String[] args)
{
int i=130;
byte b=(byte)i;
System.out.println(b);
}
}
Java Statements:
Statement is the collection of expressions.
2. Conditional Statements:
55
1. if 2.switch
Page
3. Iterative Statements:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
4. Transfer statements:
1.break 2.continue 3.return
6. Synchronized statements:
1.synchronized methods
2.synchronized blocks
Conditional Statements:
These statements are able to allow to execute a block of instructions under a particular condition.
EX:
1. if 2.switch
1. if:
syntax-1:
if(condition)
{
---instructions----
}
Syntax-2:
if(condition)
{
---instuctions----
}
else
{
----instructions----
}
56
Page
Syntax-3:
if(condition)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX1:
class Test
{
public static void main(String[] args)
{
int i=10;
int j;
if(i==10)
{
j=20;
}
System.out.println(j);
}
}
EX2:
class Test
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX3:
class Test
{
public static void main(String[] args)
{
int i=10;
int j;
if(i==10)
{
j=20;
}
else if(i==20)
{
j=30;
}
System.out.println(j);
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX5:
class Test
{
public static void main(String[] args)
{
final int i=10;
int j;
if(i == 10)
{
j=20;
}
System.out.println(j);
}
}
EX6:
class Test
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
int i;-----> class level variable, default value is 0..
void m1(){
int j;---> local variable, no default value.
System.out.println(i);// OP: 0
//System.out.println(j);--> Error
j=20;
System.out.println(j);---> No Error
}
}
Note: Local variables must be declared in side methods, blocks, if conditions,... and these variables are
having scope upto that method only, not having scope to outside of that method. Class level variables
are declare at class level that is in out side of the methods, blocks,.... these variables are having scope
through out the clsas that is in all methods, in all blocks which we provided in the respective class.
60
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. Constant Expressions:
These expressions includes only constants including final variables and these expressions would be
evaluated by "Compiler" only, not by JVM.
EX:
1.if( 10 == 10){ } ----> Constant Expression
2.if( true ){ } ------> Constant Expression
3.final int i=10;
if( i == 10 ){ } ----> Constant Expression
Note: If we declare any variable as final variable with a value then compiler will replace final
variables with their values in the remaining program, this process is called "Constant Folding", it is
one of the code optimization tech followed by Compiler.
2. Variable Expressions:
These expressions are including atleast one variable [not including final variables] and these
expressions are evaluated by JVM, not by Compiler.
EX:
1.int i=10;
int j=10;
if( i == j ){ } ----> variable expression.
2.int i=10;
if( i == 10 ){ } ----> Variable expression
switch
'if' is able to provide single condition checking bydefault, but, switch is able to provide multiple
conditions checkings.
61
Page
Syntax:
switch(Var)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Stack Operations
1.PUSH
2.POP
3.PEEK
4.EXIT
Enter Your Option: 1
Enter element to PUSH: A
PUSH operation success
Stack Operations
1.PUSH
2.POP
3.PEEK
4.EXIT
Enter Your Option:2
POP operation success.
62
Page
Stack Operations
1.PUSH
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Stack Operations
1.PUSH
2.POP
3.PEEK
4.EXIT
Enter Your Option:4
Thanks for using STACK Operations.
EX:
class Test
{
public static void main(String[] args)
{
int i=10;
switch(i)
{
case 5:
System.out.println("Five");
break;
case 10:
System.out.println("Ten");
break;
case 15:
System.out.println("Fifteen");
break;
case 20:
System.out.println("Twenty");
break;
default:
System.out.println("Default");
break;
}
}
}
63
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
64
Note:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
String str="BBB";
switch(str)
{
case "AAA":
System.out.println("AAA");
break;
case "BBB":
System.out.println("BBB");
break;
case "CCC":
System.out.println("CCC");
break;
case "DDD":
System.out.println("DDD");
break;
default:
System.out.println("Default");
break;
}
}
}
65
2. In switch, all cases and default are optional, we can write switch with out cases and with default, we
Page
can write switch with cases and with out default, we can write switch with out both cases and default.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
Status: No Compilation Error
OP: No Output.
EX:
class Test
{
public static void main(String[] args)
{
int i=10;
switch(i)
{
default:
System.out.println("Default");
break;
}
}
}
66
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
67
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Status: No Compilation Error
OP: No Output
68
3. In switch, "break" statement is optional, we can write switch with out break statement, in this
Page
context, JVM will execute all the instructions continously right from matched case untill it
encounter either break statement or end of switch.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
case 10:
System.out.println("Ten");
case 15:
System.out.println("Fifteen");
case 20:
System.out.println("Twenty");
default:
System.out.println("Default");
}
}
Status: No Compilation Error
OP: Ten
Fifteen
Twenty
Default
69
4. In switch, all case values must be provided with in the range of the data type which we provided as
Page
parameter to switch.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
70
5. In switch, all case values must be constants including final variables, they should not be normal
Page
variables.
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Note: in the above example, if we remove final keyword then compiler will rise an error.
71
Iterative Statements:
Page
These statements are able to allow JVM to execute a set of instructions repeatedly on the basis of a
particular condition.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.for
Syntax:
for(Expr1; Expr2; Expr3)
{
----instructions-----
}
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
System.out.println(i);
}
}
}
72
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
int i=0;
for(System.out.println("Hello");i<10;i++)
{
System.out.println(i);
}
}
}
73
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0, int j=0 ;i<10 && j<10; i++,j++)
{
System.out.println(i+" "+j);
}
}
}
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0, j=0 ;i<10 && j<10; i++,j++)
{
System.out.println(i+" "+j);
}
}
}
OP: 0 0
Page
1 1
2 2
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Reason:
In for loop, Expr1 is able to allow atmost one declarative statement, it will not allow more than one
declarative statement, we can declare more than one variable with in a single declarative statement.
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
System.out.println("Before Loop");
for(int i=0; true ;i++)
{
System.out.println("Inside Loop");
}
System.out.println("After Loop");
}
}
76
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Reasons:
In java applications, if we provide any statement immediatly after infinite loop then that statement is
called as "Unreachable Statement". If compiler identifies the provided loop as an infinite loop and if
compiler identifies any followed statement for that infinite loop then compiler will rise an error like
"Unreachable Statement". If compiler does not aware the provided loop as an infinite loop then there is
no chance for compiler to rise "Unreachable Statement Error".
Note: Deciding whether a loop as an infinite loop or not is completly depending on the conditional
expression, if the conditional expression is constant expression and it returns true value always then
compiler will recognize the provided loop as an infinite loop. If the conditional expression is variable
expression then compiler will not recognize the provided loop as an infinite loop even the loop is
really infinite loop.
int i=0;
for(int i=10; i<10;i++)
{
}
77
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;System.out.println("Hello"))
{
System.out.println(i);
i=i+1;
}
}
}
Note: In for loop, Expr3 is optional, we can write for loop with out expr3, we can provide any
statement as expr3, but, it is suggestible to provide loop variable increment/decrement kind of
statements as expr3.
78
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
EX:
class Test
{
public static void main(String[] args)
{
for(;;);
}
}
Status: No Compilation Error
OP: No Output, but, JVM will be in infinite loop
EX:
class Test
{
public static void main(String[] args)
{
for(;;)
{
}
}
}
Status: No Compilation Error
OP: No Output, but, JVM will be in infinite loop
Reason:In for loop, if we want to write single statement in body then curly braces
[{ }] are optional , if we dont want to write any statement as body then we must provide either ; or
curly braces to the for loop.
In general, we will utilize for loop when we aware no of iterations in advance before writing loop.
79
EX:
Page
int[] a={1,2,3,4,5};
int size=a.length;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we use above for loop to retrive elements from arrays and from Collection objects then we are able
to get the following problems.
To overcome the above problems and to improve java application performance explicitly we have to
use "for-Each" loop provided by JDK5.0 version.
syntax:
for(Array_Data_Type var: Array_Ref_Var)
{
----
}
EX:
int[] a={1,2,3,4,5};
for(int x: a)
{
System.out.println(x);
} 80
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1
2
3
4
5
81
2. While loop:
Page
In java applications, when we are not aware the no of iterations in advance before writing loop there
we have to utilize 'while' loop.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
while(Condition)
{
---instructions-----
}
82
EX:
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
int i=0;
while()
{
System.out.println(i);
i=i+1;
}
}
}
Status: Compilation Error
Reason: Conditional Expression is mandatory.
EX:
class Test
{
public static void main(String[] args)
{
System.out.println("Before Loop");
while(true)
{
System.out.println("Inside Loop");
}
System.out.println("After Loop");
}
}
83
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
do-while:
Q) What are the differences between while loop and do-while loop?
Ans:
1.While loop is not giving any guarantee to execute loop body minimum one time.
do-while loop will give guarantee to execute loop body minimum one time.
2.In case of while, first, conditional expression will be executes, if it returns true then only loop
body will be executed.
In case of do-while loop, first loop body will be executed then condition will be executed.
3.In case of while loop, condition will be executed for the present iteration.
In case of do-while loop, condition will be executed for the next iteration.
Syntaxes:
while(Condition)
{
---instructions-----
}
do
{
---instructions---
}
84
While(Condition):
Page
EX:
class Test
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
System.out.println("Before Loop");
do
{
System.out.println("Inside Loop");
}
while (true);
System.out.println("After Loop");
}
}
85
Transfer Statements:
These statements are able to bypass flow of execution from one instruction to another instruction.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
if(i==5)
{
break;
}
System.out.println(i);
}
}
}
EX:
86
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)// Outer loop
{
for(int j=0;j<10;j++)// Nested Loop
{
if(j==5)
{
break;
}
System.out.println(i+" "+j);
}
// Out side of nested Loop
}
}
}
OP: 0 0
Page
0 1
0 2
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: If we provide "break" statement in nested loop then that break statement is applicable for only
nested loop, it will not give any effect to outer loop.
In the above context, if we want to give break statement effect to outer loop , not to the nested loop
then we have to use "Labelled break" statement.
Syntax:
break label;
Where the provided label must be marked with the respective outer loop.
Continue…..
EX:
88
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.Continue:
This transfer statement will bypass flow of execution to starting point of the loop by skipping all the
remaining instructions in the current iteration inorder to continue with next iteration.
Continue….
EX:
89
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
90
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(j==5)
{
continue;
}
System.out.println(i+" "+j);
}
}
}
}
OP:
Page
---
--
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(j==5)
{
continue;
}
System.out.println(i+" "+j);
}
}
}
}
In the above context, if we want to give continue statement effect to outer loop, not to the nested loop
then we have to use labelled continue statement.
Syntax:
continue label;
Where the provided label must be marked with the respective outer loop.
EX:
92
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OOPs
93
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between Unstructered Programming Languages and Structered
Programming Languages?
Ans:
1. Unstructered Programming Languages are out dated programming languages, they were introduced
at starting point of computers and these programming languages are not suitable for our at present
application requirements.
EX: BASIC, FOTRAN,.....
Structered Programming languages are not out dated programming languages, these programming
languages are utilized for our at present application requirements.
EX: C , PASCAL,....
2. Unstructered Programming Languages are not following any proper structer to prepare applications.
3. Unstructered Programming languages are using mnemonic[ ADD, SUB, MUL,..][ low level code]
codes to prepare applications, which are available in very less number and which may provide very
less no of features to prepare applications.
Structered Programming Languages are using high level syntaxes, which are available in more number
and which may provide more no of features to the applications.
4.Unstructered Programming Languages are using only "goto" statement to define flow of execution ,
which is not sufficient to provide very good flow of execution in applications.
Structered Programming Languages are using more and more no of flow controllers like if, switch, for,
while, do-while, break,..... to defined very good flow of execution in applications.
5.Unstructered Programming languages are not having functions feature, it will increase code
94
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between Structered Programming Languages and Object Oriented
Programming Languages?
Ans:
1. Structered Programming Languages are providing difficult approach to prepare applications.
EX: C , PASCAL,...
Object Oriented Programming Languages are providing very simplified approach to prepare
applications.
EX: JAVA, C++,....
Object Oriented Programming Languages are having very good abstraction levels.
4.Structered Programming languages are not providing very good security for the applications.
Object Oriented programming Languages are providing very good security for the application data.
6.Structered Programming Languages are not providing very good code reusability.
Object Oriented programming languages are providing very good code reusability.
If we want to prepare applications by using Object orientation then we have to provide both
Page
business logic and Services logic in combined manner, it will provide tightly coupled design , it will
reduce sharability and code reusability.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In case of Aspect orientation, we will seperate all services from business logic, we will declare each
and every sertvice as an aspect and we will inject these services to the applications at runtime as per
the requirement.
1.Class
2.Object
3.Encapsulation
4.Abstraction
5.Inheritance
6.Polymorphism
7.Message Passing
There are two types of programming languages on the basis of object oriented features.
Q)What is the difference between Object Oriented Programming Languages and Object Based
programming languages?
Ans:
Object Oriented Programming languages are able to allow all the object oriented features including
"Inheritance".
EX: Java
Object based programming languages are able to allow all the object oriented features excluding
"Inheritance".
EX: Java Script
Ans:
1. Class is a group of elements having common properties and behaviours.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2. Class is virtual.
Object is real
4. Class is Generalization.
Object is Specialization.
Ans:
The process of binding data and coding part is called as "Encapsulation".
The process showing neccessary data or implementation and hiding unneccessary data or
implementation is called as "Abstraction".
Note: In Object Oriented programming languages,both encapsulation and abstraction are improviding
"Security".
5.Inheritance:
The process of getting variables and methods from one class to another class is called as "Inheritance".
EX:
97
class Employee{
Page
String eid;
String ename;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
6.Polymorphism:
Polymorphism is "Greak" word, where poly means many and morphism means structeres[forms].
7.Message Passing:
The process of transferring data along with flow of execution from one instruction to another
instructions is called as Messsage passing.
The main advantage of message passing is to improve "Communication" between entities and "data
navigation" between entities.
Containers in Java:
98
1.Class
Page
2.Abstract Class
3.Interface
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Access Modifiers:
There are two types of Access modifiers
1.To define scopes to the progvramming elements, there are four types of access modifiers.
public, protected, <default> and private.
Where public and <default> are allowed for classes, protected and private are not allowed for
classes.
Note: All public, protected , <default> and private are allowed for inner classes.
Note:Where private and protected access modifiers are defined on the basis of classes boudaries, so
that,they are not applicable for classes, they are applicable for members of the classes including inner
classes.
2.To define some extra nature to the programming elements , we have the following access
modifiers.
Where final, abstract and strictfp are allowed for the classes.
Note: The access modifiers like static, abstract, final and strictfp are allowed for inner classes.
Note: Where static keyword was defined on the basis of classes origin, so that, it is not applicable for
99
Where 'class' is a java keyword, it can be used to represent 'Class' object oriented featurte.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Where 'extends' keyword is able to specify a particular super class name in class syntax inorder to get
variables and methods from the specified super clss to the present java class.
Note: In class syntax, 'extends' keyword is able to allow only one super class name, it will not
allowmore than one super class, because, it will represent multiple inheritnace, it is notpossible in
Java.
Where 'implements' keyword is able to specify one or more no of interfaces inclacss syntax inorder to
provide implementation for all abstract methods of that interfaces in the present class.
Note: In class syntax, extends keyword is able to allow only one super class, but, implements keyword
is able to allow more than one interface.
Note: In class syntax, 'extends' and 'implements' keywords are optional, we can write a class with
extends keyword and with out implements keyword, we can write a class with implements keyword
and with out extends keyword, we can write a class with out both extends and implements keywords ,
if we want to write both extends and implements keywords first we have to write extends keyword
then only we have to write implements keyword, we must not interchange extends and implements
keywords.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Employee
{
String eid="E-111";
String ename="Durga";
float esal=25000.0f;
String eaddr="Hyderabad";
String eemail="durga@durgasoft.com";
String emobile="91-9988776655";
emp.display_Emp_Details();
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between Concreate methods and abstract methods?
Ans:
1. Concreate method is a method, it will have both method declaration and method implementation.
2.Abstract Classes:
Abstract class is a java class, it able to allow zero or more no of concreate methods and zero or more
no of abstract methods.
Note: To declare abstract classes, it is not at all mandatory condition to have atleast one abstract
method, we can declare abstract classes with 0 no of abstract methods, but, if we want to declare a
method as an abstract method then the respective class must be abstract class.
102
For abstract classes, we are able to create only reference variables, we are unable to create objects.
Page
abstract class A{
----
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Abstract classes are able to provide more sharability when compared with classes.
Note: If we declare reference variable for abstract class then we are able to access only abstract class
members, but, if we declare reference variable for sub class then we are able to access bothe abstract
class members and sub class members.
void m1()
{
System.out.println("m1-A");
}
abstract void m2();
abstract void m3();
}
class B extends A
{
void m2()
{
System.out.println("m2-B");
}
void m3()
{
System.out.println("m3-B");
}
103
void m4()
{
Page
System.out.println("m4-B");
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between concreate classes and abstract classes?
Ans:
1.Classes are able to allow only concreate methods.
Abstract classes are able to allow both concreate methods and abstract methods.
3.For classes, we are able to create both reference variables and objects,
For abstract classes, we are able to create only reference variables, we are unable to create objects.
104
3. Interfaces:
Interface is a java feature, it able to allow zero or more nof abstract methods only.
Page
For interfaces, we are able to declare only reference variables, we are unable to create objects.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In case of interfaces, bydefault, all the methods are "public and abstract".
When compared with classes and abstract classes, iterfaces will provide more sharability.
Note: If declare reference variable for interface then we are able to access only interface members, we
arew unable to access implementation class own members.If we declare reference variable for
implementation class then we are able to access both interface members and implementation class own
members.
Example:
interface I
{
int x=20;// public static final
void m1();// public and abstract
void m2();// public and abstract
void m3();// public and abstract
}
class A implements I
{
public void m1()
{
System.out.println("m1-A");
}
public void m2()
{
System.out.println("m2-A");
}
public void m3()
105
{
System.out.println("m3-A");
Page
}
public void m4()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the differences between Class, abstract clacss and interface?
Ans:
1. class is able to allow concreate methods only.
Abstract class is able to allow both concreate methods and abstract methods
interface is able to allow abstract methods only.
3. For classes only, we are able to create both reference variables and objects.
For abstract classes and interfaces , we are able to declare reference variables , we are unable to
Page
create objects.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Methods In Java:
Method is a set of instructions, it will repersent a particular action in java applications.
Syntax:
[Access_Modifiers] return_Type method_Name([param_List])[throws Exception_List]
{
----- instructions to represent a particular action-----
}
Java methods are able to allow the access modifiers like public, protected, <default> and private.
Java methods are able to allow the access modifiers like static, final, abstract, native, synchronized,
strictfp.
Where the purpose of return_Type is to specify which type of data the present method is returning.In
java applications, all primitive data types, all user defined data types and 'void' are allowed for
methods as return types.
Note: 'void' return type is representing "Nothing is returned" from methods.
Where param_List can be used to pass some input data to the methods inorder to perform an action.In
java applications, we are able to provide all primitive data types and all user defiend data types as
parameter types.
Where "throws" keyword can be used to bypass or delegate the generated exception from present
107
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Method prototype is the description of the method, it will include access modifiers list, return type,
method name, parameters list, throws exception list.
There are two types of methods in Java w.r.t the Object state manipulations.
1.Mutator Methods
2.Accessor Methods
Q)What are the differences between Mutator methods and Accessor methods?
Ans:
Mutator methods are the java methods, which are used to set/modify data in Objects.
EX: All setXXX(--) methods in Java Bean classes are mutator methods.
Accessor methods are the java methods, which are used to get/access data from Objects.
EX: All getXXX() methods in java bean classes are Accessor methods
In general, in java applicatinos, if we declare any method with 'n' no of parameters then we must
access that method with the same 'n' no of parameter values , it is not possible to access that method by
passing 'n+1' no of parameter values and 'n-1' no of parameter values.
EX:
108
class A
{
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
As per the requirement, we want to access a method with variable no of parameter values[0 no of
params or 1 no of params or 2 no of params,....]
To achhieve this requirement we have to use "Var-Arg Method" provided by JDK5.0 version.
When we access Var-Arg method with 'n' no of parameter values then all these 'n' no of parameter
values are stored in the form of Array wehich is generated from var-ARg parameter.
EX:
109
class A
{
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: In Var-Arg methods, normal parameters are allowed along with Var-ARg parameter but they
must be provided before var-Arg parameter, not after var-Arg parameter, because, var-Arg parameter
must be last parameter in var-Arg method.
Note: Due to the above reason, Var-Arg methods are able to allow atmost one Var-Arg parameter, not
allowing more tha one Var-Arg parameters.
EX:
1.void m1(int ... i, float f){ } ----> Invalid
2.void m1(float f, int ... i){ } ----> valid
3.void m1(int ... i, float ... f){ } --->Invalid
Ans:
1.To store entities data temporarily in java applications we need objects.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
----
}
A a = new A();
When JVM encounter the above instruction,JVM will perform the following actions.
1.Creating memory for the Object
2.Generating Identities for the object
3.Providing initializations inside the Object
After loading class bytecode, JVM will identify minimal object memory size by recognizing all the
instance variables and their data types
After getting memory size, JVM will send a request to Heap manager about to creat an object with the
specified minimal memory.
As per JVM requirement,Heap Manager will create the required block of memory at Heap Memory.
After creating a block of memory[Object] for JVM requirements,Heap manager will assign an integer
value as an identity for the object called as "HashCode".
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
After getting Object reference value, JVM will assign that reference value to a variable called as
"Reference Variable".
After getting memory for the instance variables, JVM will provide inital values to the instance
variables by searching initializations at class level declaration and at constructor.
If any instance variable is not having initialization at both constructor and at class level declaration
then JVM will store default value on the basis of their datatype as initial value inside the object.
Note: In java applications, when a class bytecode is loaded to the memory ,automatically, JVM will
create java.lang.Class object at heap memory with the metadata of the loaded class.
Note: In java application, when we create a thread[Main Thread or User Thread], automatically, a
stack will be created at stack memory and it able to store methods details in the form of Frames which
are accessed by the respective thread.
To get hashcode value and reference value of an object we have to use the following two methods.
Note: Native method is a java method , declared in java , but, implemented in non java programming
languages may be C, ASL, .....
112
EX:
class A
Page
{
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
Object Hashcode : 31168322
Object Reference : A@adb9742
In Java applications, there is a common and default super class for each and every java
class[predefined classes and user defiend classes] that is "java.lang.Object" class, where
java.lang.Object class contains the following 11 methodfs inorder to share to all java classes.
1.hashCode()
2.toString()
3.getClass()
4.clone()
5.equals(Object obj)
6.finalize()
7.wait()
8.wait(long time)
9.wait(long time, int time)
10.notify()
11.notifyAll()
113
Q)If we extend a class to some other class explicitly then the respective sub class is having two super
classes[default super class [Object] and explicit super class], it repersents mutltiple inheritance, how
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
---
}
class B extends A{
---
}
Note : Here Object class is super class to A , A is super class to B
Object<--- A<--- B
In java applications, when we pass a particular class object reference variable as parameter to
System.out.println(-) method then JVM will access toString() over the provided reference variable
internally.
EX:
class A
{
}
class Test
{
public static void main(String[] args)
{
A a=new A();
String ref=a.toString();
System.out.println(ref);
System.out.println(a.toString());
System.out.println(a);//System.out.println(a.toString());
}
}
114
OP:
A@1db9742
Page
A@1db9742
A@1db9742
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
As per the requirement, if we want to display our own data instead of Object reference value when we
pass reference variable as parameter to System.out.println(-) method then we have to provide our own
toSrtring() method in the respective class.
EX:
class Employee
{
String eid="E-111";
String ename="Durga";
float esal=50000.0f;
String eaddr="Hyd";
String eemail="durga@durgasoft.com";
String emobile="91-9988776655";
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: In Java, some predefined classes like String, StringBuffer, Exception, Thread, all wrapper
classes, all Collection classes are not depending on Object class toString() method, they are having
their own toString() method inorder to display their own data.
EX:
class Test
{
public static void main(String[] args)
{
String str=new String("abc");
System.out.println(str);
OP:
abc
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Immutable Objects are Java objects, they will not allow modifications on their content. If we are trying
to perform operations over immutable objects content then data is allowed for operations, but, the
resultent data is not stored back in original object, the modified data will be storted by creating new
Object.
Mutable Objects are java objects, they will allow modifications on their content directly.
EX: Bydefault, all JAVA objects are mutable objects.
EX: StringBuffer
Ans:
----- Same above asnwer for this question also-----
117
EX:
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
Durga
Durga Software
Durga Software Solutions
118
Constructors:
1.Constructor is a java feature, it can be used to create Object.
Page
2.The role of the constructors in Object creation is to provide initial values inside the object.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
[Access_Modifier] Class_Name([Param_List])[throws Exception_List]
{
-----
}
Note1:
If we provide constructor name other than class name then compiler will rise an error like "Invalid
Method declaration, return type required", because, compiler has treated the provided constructor as
normal java method with out the return type, but, for methods return is mandatory.
EX:
class A
{
B()
{
System.out.println("A-Con");
}
}
class Test
{
public static void main(String[] args)
{
A a=new A();
}
}
Status: Compilation Error.
119
Note2:
If we provide return type to the constructors then Compiler will not rise any error and JVM will not
Page
rise any exception and JVM will not provide any output, because, the provided constructor is
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX: class A
{
void A()
{
System.out.println("A-Con");
}
}
class Test
{
public static void main(String[] args)
{
A a=new A();
a.A();
}
}
EX: class A
{
static A()
{
System.out.println("A-Con");
}
}
class Test
{
public static void main(String[] args)
{
A a=new A();
}
}
120
Note4:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX: class A
{
private A()
{
System.out.println("A-Con");
}
}
class Test
{
public static void main(String[] args)
{
A a=new A();
}
}
1.Default Constructors:
If we have not provided any constructor explicitly in java class then compiler will provide a 0-arg
constructor automatically, here the compiler provided 0-arg constructor is called as "Default
Constructor".
If we provide any constructor explicitly then compiler will not provide any default constructor.
D:\javaapps\ Test.java
public class Test{
}
121
Page
On Command Prompt:
D:\javaapps>javac Test.java
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: Default Constructors are having the same scope of the respective class.
If we provide any constructor explicictly with out parameters then that constructor is called as 0-arg
constuctor.
If we provide any constructor with atleast one parameter then that constructor is called as
parameterized Constuctor.
Note: By default, all the default constructors are 0-arg constructors, but, all 0-arg constructors are not
default constructors, some 0-arg constructors are provided by the compiler are called as Default
Constructors and some other 0-arg constuctors are provided by the users they are called as User
defined constructors.
EX:
class Employee
{
String eid;
String ename;
float esal;
String eaddr;
Employee()
{
eid="E-111";
ename="Durga";
esal=50000.0f;
eaddr="Hyd";
}
{
System.out.println("Employee Details");
Page
System.out.println("-----------------------");
System.out.println("Employee Id :"+eid);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the above program, if we create more than one object for the Employee class by executing 0-arg
constructor then same data will be stored in all multiple objects of the Employee.
As per the requirement, if we want to create multiple Employee objects with different data then we
have to provide data to the Objects explicitly, for this we have to use parameterized constructor.
EX:
class Employee
{
String eid;
String ename;
float esal;
String eaddr;
System.out.println("Employee Id :"+eid);
System.out.println("Employee Name :"+ename);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructor Overloading:
If we declare more than one constructor with the same name and with the different parameter list then
it is called as "Constructor Overloading".
EX:
class A
{
int i,j,k;
A()
{
}
A(int i1)
{
i=i1;
}
A(int i1, int j1)
{
i=i1;
j=j1;
}
A(int i1, int j1, int k1)
{
i=i1;
124
j=j1;
k=k1;
Page
}
void add()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: If we declare more than one method with the same name and with different parameter list then it
is called as "Method Overloading"
1.Instance Variables
2.Instance Methods
3.Instance Blocks
125
Page
1.Instance Variables:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Instance Variable is a variable,which will be recognized and initialized just before executing the
respective class constructor.
In Java applications,instance variables must be declared at class level and non-static, instance
variables never be declared as local variables and static variables.
In Java applications, instance variables data will be stored in Object memory that is in "Heap
Memory".
2.Instance Methods:
Instance Method is a normal Java method,it is a set of instructions,it will represent an action of an
entity.
In Java applications,instance methods will be executed when we access that method.In Java
applications,all the methods wont be executed with out the method call.
EX:
class A{
int i=m1();
A(){
System.out.println("A-Con");
}
int m1(){
System.out.println("M1-A");
return 10;
}
}
class Test{
public static void main(String args[]){
A a =new A();
}
}
OP:
M1-A
A-con
126
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP: m1-A
m2-A
A-con
3.Instance Block:
Instance Block is a set of instructions which will be recognized and executed just before executing
the respective class constructors.
Instance Block as are having the same power of constructors,it can be used as like constructors.
Syntax:
{
---instructions----
} 127
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
IB-A
A-CON
EX:
class A {
A(){
System.out.println("A-CON");
}
{
System.out.println("IB-A");
}
int m1(){
System.out.println("m1-A");
return 10;
}
int i=m1();
}
class Test{
public static void main(String args[]){
A a=new A();
}
}
OP: IB-A
m1-A
128
A-CON
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
'this' keyword:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java applications,we are able to utilize 'this' keyword in the following four ways.
this.var_Name
NOTE:In Java applications,if we provide same set of variables at local and at class level and if we
access that variables then JVM will give first priority for local variables,if local variables are not
available then JVM will search for that variables at class level, even at class level also if that variables
are not available then JVM will search at super class level.At all the above locations,if the specified
variables are not available then compiler will rise an error.
NOTE:In Java applications,if we have same set of variables at local and at class level then to access
class level variables over local variables we have to use 'this' keyword.
EX:
class A{
int i=10;
int j=20;
A(int i,int j) {
System.out.println(i+" "+j);
System.out.println(this.i+" "+this.j);
}
}
class Test{
public static void main(String args[]){
A a=new A(30,40);
}}
OP:
30 40
10 20
130
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println("Employee Details");
System.out.println("---------------------");
System.out.println("Employee Id :"+emp.getEid());
System.out.println("Employee Name :"+emp.getEname());
System.out.println("Employee Salary :"+emp.getEsal());
System.out.println("Employee Address :"+emp.getEaddr());
}
}
this.method_Name([param_List]);
Note: To access current class methods, it is not rewquired to use any reference variable and any
keyword including 'this', directly we can access.
EX:
class A{
void m1(){
System.out.println("m1-A");
}
void m2(){
System.out.println("m2-A");
m1();
this.m1();
}
}
class Test{
public static void main(String args[]){
A a=new A();
a.m2();
133
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
this([param_List]);
EX:
class A{
A(){
this(10);
System.out.println("A-0-arg-con");
}
A(int i){
this(22.22f);
System.out.println("A-int-param-con");
}
A(float f){
this(33.3333);
System.out.println("A-float-param-con");
}
A(double d){
System.out.println("A-double-param-con");
}
}
class Test{
public static void main(String args[]){
A a=new A();
}
}
OP:
A-double-param-con
A-float-param-con
A-int-param-con
A-0-arg-con
134
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:If we want to access current class constructor by using 'this' keyword then the respective 'this'
statement must be provided as first statement, if we have not provided 'this' statement as first statement
then compiler will rise an error like 'call to this must be first statement in constgructor'.
EX:
class A{
A(){
System.out.println("A-0-arg-con");
this(10);
}
A(int i){
System.out.println("A-int-param-con");
this(22.22f);
}
A(float f){
System.out.println("A-float-param-con");
this(33.3333);
}
A(double d){
System.out.println("A-double-param-con");
}
}
class Test{
public static void main(String args[]){
A a=new A();
}
}
Status: Compilation Error
NOTE:If we want to refer current class constructor by using 'this' keyword then the respective 'this'
statement must be provided in the current class another constructor only,not in normal Java methods.If
we voilate this condition then compiler will rise an error like 'call to this must be firststatement in
135
constructors'.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)Is it possible to refer more than one current class constructors by using 'this' keyword from a single
current class constructor?
Ans:
No, It is notpossible to refer more than one current class constructors by using 'this' keyword, because,
in constructors, 'this' statement must be first statement while referring current class constructors. If we
provide more than one time this(---) statement then only one this() statement is first statement among
multiple this statements,in this case, compiler will rise an error like 'call to this must be first statement'.
136
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
137
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
return this;
EX:
class A{
A getRef1(){
A a=new A();
return a;
}
A getRef2(){
return this;
}
}
class Test{
public static void main(String args[]){
A a=new A();//[a=abc123]
System.out.println(a);
System.out.println();
System.out.println(a.getRef1());//[abc123.getRef1()]
System.out.println(a.getRef1());//[abc123.getRef1()]
System.out.println(a.getRef1());//[abc123.getRef1()]
System.out.println();
System.out.println(a.getRef2());//[abc123.getRef2()]
System.out.println(a.getRef2());//[abc123.getRef2()]
System.out.println(a.getRef2());//[abc123.getRef2()]
}
}
OP:
A@5e3a78ad
A@50c8d62f
A@3165d118
A@138297fe
A@5e3a78ad
A@5e3a78ad
A@5e3a78ad
138
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the above program,for every call of getRef2() method JVM will encounter "return this"
statement,JVM will not create new Object for class A every time,JVM will return the same reference
value on which we have called getRef2() method.This approach will increase Objects reusability.
'static' keyword:
'static' is a Java keyword,it will improve sharability in Java applications.
In Java applications, static keyword will be utilized in the following four ways.
1.Static variables
2.Static methods
3.Static blocks
4.Static import
1.Static variables:
Static variables are normal Java variables,which will be recognized and executed exactly at the time
of loading the respective class bytecode to the memory.
Static variables are normal java variables,they will share their last modified values to the future
objects and to the past objects of the respective class.
In Java applications,static variables will be accessed either by using the respective class reference
variable or by using the respective class name directly.
NOTE:To access static variables we can use the respective class reference variable which may or may
not have reference value.To access static variables it is sufficient to take a reference variable with null
value.
NOTE:If we access any non-static variable by using a reference variable with null value then JVM
will rise an exception like "java.lang.NullPointerException". If we access static variable by using a
reference variable contains null value then JVM will not rise any exception.
In Java applications,static variables must be declared as class level variables only ,they never be
declared as local variables.
In Java applications,static variable vlaues will be stored in method area, not in Stack memory and not
139
in Heap Memory.
In Java applications,to access current class static variables we can use "this" keyword.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
140
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
10 10
11 11
11 10
12 11
12 11
12 11
12 10
13 11
13 11
13 11
NOTE:In Java applications,Instance variable is specific to each and every object that is a separate
copy of instance variables will be maintained by each and every object but static variable is common
141
to every object that is the same copy of static variable will be maintained by all the objects of the
respective class.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.Static Methods:
Static method is a normal java method,it will be recognized and executed the time when we access
that method.
Static methods will be accessed either by using reference variable or by using the respective class
name directly.
Note: In the case of accessing static methods by using reference variables,reference variable may or
may not have object reference value,it is possible to access static methods with the reference variables
having 'null' value. If we access non-static method by using a reference variable contains null value
then JVM
Static methods will allow only static members of the current class,static methods will not allow non-
static members of the current class directly.
Note:If we want to access non-static members of the current class in static methods then we have to
create an object for the current class and we have to use the generated reference variable.
Static methods are not allowing 'this' keyword in its body but to access current class static methods we
are able to use 'this' keyword.
EX:
class A{
int i=10;
static int j=20;
static void m1(){
System.out.println("m1-A");
System.out.println(j);
//System.out.println(i);---->error
//System.out.println(this.j);----------->error
A a=new A();
System.out.println(a.i);
}
void m2(){
System.out.println("m2-A");
this.m1();
142
}
}
Page
class Test{
public static void main(String[] args){
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
m1-A
20
10
m1-A
20
10
m1-A
20
10
Q)Is it possible to print a line of text on command prompt with out using main() method?
Ans:
Yes,it is possible to display a line of text on command prompt with out using main() method, but, by
using static variable and static method combination.
EX:
class Test{
static int i=m1();
static int m1(){
System.out.println("Welcome to durga software soultions");
System.exit(0);//to terminate the application
return 10;
}
}
OP:
Welcome to durga software soultions
143
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:The above question and answer are valid upto JAVA6 version, it is invalid from JAVA7
version, because, In JAVA6 version JVM will load main class bytecode to the memory irrespective of
main() method availability. In JAVA7, first, JVM will check whether main() method is existed or not
in main class, if main() method is available then only JVM will load main class bytecode to the
memory, if main() method is not available in main class then JVM will not load main class bytecode to
the memory and JVM will provide the following error message.
Error:Main Method not found in class Test,please define the main method as:
public static void main(String args[])
3.Static Block:
Static Block is a set of instructions,which will be recognized and executed at the time of loading the
respective class bytecode to the memory.
Static blocks are able to allow static members of the current class directly, Static blocks are not
allowing non-static members of the current class directly.
Note:If we want to access non-static members of the current class in static block then we must create
object for the respective class and we have to use the generated reference variable.
144
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
SB-A
10
20
Q)Is it Possible to print a line of text on command prompt with out using main() method,static variable
and static method?
Ans:
Yes,it is possible to display a line of text on command prompt without using main() method,static
variable,static method but by using static block.
EX:
class Test{
static{
System.out.println("Welcome to DurgaSoftware Soultions");
System.exit(0);//To terminate the programme
}
}
OP:
Welcome to DurgaSoftware Soultions
145
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:The above question and answer are valid upto JAVA6 version, they are invalid from JAVA7
version onwards, because, in JAVA6 version JVM will load main class bytecode to the memory with
out checking main() method availability but in JAVA7 , first, JVM will search for main() method , if it
is available then only JVM will load main class bytecode to the memory, if it is not existed then JVM
will provide the following Error message.
Error:Main method not found in class Test,please define the main method as:
public static void main(String args[])
Q)Is it possible to display a line of text on command prompt with out using main() method,static
variable,static method,static block?
Ans:
Yes,it is possible to display a line of text on command prompt with out using main() method,a static
variable,a static method and static block but by using "static Anonymous Inner class of Object class".
EX:
class Test{
static Object obj=new Object(){
{
System.out.println("Welcome To durga Software Solutions");
System.exit(0);//TO termiante the application.
}
};
}
OP:
JAVA6:Welcome to Durga Software Soultions
JAVA7:Error:main method not found in class Test,please define the main method as:
public static void main(String[] args)
146
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to access classes and interfaces of a particular package with out importing then we must use
fully Qualified name every time that is we have to use package name along with class names.
In Java applications, if we want to access static members of a particular class in present java file then
we must use either reference variable of the respective class or directly class name.
In Java applications,if we want to access static members without using the respective class name and
with out using the respective class reference variable then we have to import static members of that
respective class in the present Java file.
To import static members of a particular class in the present java file, JDK 5.0 version has provided a
new feature called as "static import".
Syntaxes:
1.import static package_Name.Class_Name_Or_Interface_Name.*;
--> It will import all the static members from the specified class or interface.
2.import static package_Name.Class_Name_Or_Interface_Name.member_Name;
It will import only the specified member from the specified class or interface.
147
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java,Static Context will be represented in the form of the following three elements.
1.Static variables.
2.Static methods.
3.Static blocks
In Java applications,instance context will be created separately for each and every object but static
context will be created for each and every class.
In Java applications,static context will be recognized and executed exactly at the time of loading the
respective class bytecode to the memory.
In Java applications,when we create object for a particular class,first,JVM has to access
constructor,before executing constructor,JVM has to load the respective class bytecode to the memory.
At the time of loading class bytecode to the memory,JVM has to recognize and execute static context.
148
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
static int i=m2();
A(){
System.out.println("A-con");
}
int m1(){
System.out.println("m1-A");
return 10;
}
static{
System.out.println("SB-A");
}
int j=m1();{
System.out.println("IB-A");
}
static int m2(){
System.out.println("m2-A");
return 10;
}
}
class Test{
public static void main(String args[]){
A a1=new A();
A a2=new A();
}
}
OP:
m2-A
SB-A
m1-A
IB-A
A-con
m1-A
IB-A
150
A-con
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:Design pattern is a System,it will provide problem definition and its solution inorder to solve
design problems.
EX:
class A{
private A(){
System.out.println("A-con");
}
void m1(){
System.out.println("m1-A");
}
static A getRef()//Factory Method
{
A a=new A();
return a;
}
}
class Test{
public static void main(String args[]){
A a=A.getRef();
a.m1();
}
}
OP:
A-con
m1-A
151
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
Class c=Class.forName(--);
NumberFormat nf=NumberFormat.getInstance(-);
DateFormat df=DateForamt.getInstance(--);
ResourceBundle rb=ResourceBundle.getBundle(--);
EX: Allmost all the String class methods are Instance Factory methods.
String str=new String("DurgaSoftware Solutions");
String str1=str.concat(" Hyderabad");
String str2=str.trim();
String str3=str.toUpperCase();
String str4=str.substring(5,14);
Singleton Class:
If any JAVA class allows to create only one Object then that class is called as "Singleton Class".
Singleton Class is an idea provided by a design pattern called as "Singleton Design Pattern".
152
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println(A.getRef());
}
Page
}
OP:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
class A{
static A a=new A();
private A(){
}
static A getRef(){
return a;
}
}
class Test{
public static void main(String args[]){
System.out.println(A.getRef());
System.out.println(A.getRef());
System.out.println(A.getRef());
}}
OP:
A@69cd2e5f
A@69cd2e5f
A@69cd2e5f
MVC is a design pattern, it will provide a standard structer to prepare web applications/GUI
applications, where in MVC based applications we must use a servlet/ filter[ A Java class] as
controller, a set of JSP pages/Html pages as view part and a java bean or EJb component or JDBC
program or Hibernate program as Model component. As per MVC Arch rules and regulations, only
one controller must be provided for application, that is, the class which we used as controller must
provide one object, therefore, controller class must be singleton class.
154
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Class.forName(--)
When we access a constructor along with "new" keyword then JVM will perform the following actions
automatically.
As per the requirement, if we want to load class byte code to the memory with out creating object then
we have to use the following method from java.lang.Class class.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A
{
static
{
System.out.println("Class Loading");
}
A()
{
System.out.println("Object Creating");
}
}
class Test
{
public static void main(String[] args)throws Exception
{
Class c=Class.forName("A");
}
}
OP:
Class Loading
After loading class bytecode by using Class.forName(-) method, if we want to create object explicitly
then we have to use the following method.
156
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
When JVM encounter the above instruction, JVM will pewrform the following actions.
1.JVM will goto the loaded class bytecode and JVM will check whether
0-arg and non-private constructor is existed or not.
2.If 0-arg and non-private constructor is existed then JVM will execute that constructor and JVM
will create object for the loaded class.
3.If the constructor parameterized constructor with out 0-arg constructor then JVM will rise an
excewption like "java.lang.InstantiationException".
4.If the constructor is private constrictor then JVM will rise an exception like
"java.lang.IllegalAccessException".
Note:If the constructor is both parameterized and 0-arg then JVM will rise
"java.lang.InstaitiationException" only.
EX:
class A
{
static
{
System.out.println("Class Loading");
}
A()
{
System.out.println("Object Creating");
}
}
class Test
{
public static void main(String[] args)throws Exception
{
Class c=Class.forName("A");
Object obj=c.newInstance();
}
}
OP:
Class Loading
Object Creating
157
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In general, all server side components like Servlets, JSPs, EJBs,... are executed by the
server[Container] by following their lifecycle actions like loading, instantiation, innitialization,....... In
this context, to perform server side components loading Container will use
"Class.forName(-)" method and to perform instantiation lifecycle action container will use
"newInstance()" method internally.
Final Keyword:
final is a Java Keyword it can be used to declare constant expressions.
In java applications, 'final' keyword is able to improve security.
1.final variable:
final variable is a variable,it will not allow modifications on its value.
EX:
final int i=10;
i=i+10;----> Compilation Error
EX:
for(final int i=0;i<10;i++) ----> Compilation Error
{
System.out.println(i);
}
NOTE:In general, in bank applications, after creating an account it is possible to change the account
details like account name, address details....but it is not possible to update 'accNo' value once it is
created. Due to this reason, we have to declare 'accNo' variable as 'final' variable.
158
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX1:
class A{
final void m1(){
System.out.println("m1-A");
}
}
class B extends A{
void m1(){
System.out.println("m1-B");
}
}
class Test{
public static void main(String[] args){
A a = new B();
a.m1();
}
}
}
Status: Compilation Error.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.final class:
Final class is a Java class,it will not allow inheritance.
In Java applications,super classes never be declared as final classes,but sub classes may be final.
EX:
final class A
{
}
class B extends A
{
}
Status:Invalid
EX:
final class A
{
}
final class B extends A
{
160
}
Status:Invalid
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status:Valid
In Java applications to declare constant variables Java has provided a convention like to declare
constants with "public static final".
EX:
In System Class:
public static final PrintStream out;
public static final InputStream in;
public static final PrintStream err;
In Thread Class:
public static final int MIN_PRIORITY=1;
public static final int NORM_PRIORITY=5;
public static final int MAX_PRIORITY=10;
EX:
class User_Status{
public static final String AVAILABLE="Available";
public static final String BUSY="Busy";
public static final String IDLE="Idle";
}
class Test{
public static void main(String args[]){
System.out.println(User_Status.AVAILABLE);
System.out.println(User_Status.BUSY);
System.out.println(User_Status.IDLE);
}
}
OP:
Available
Busy
161
Idle
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.We must declare "public static final" for each and every constant variable explicitly.
2.It is possible to allow multiple data types to represent one type,it will reduce typedness in Java
applications.
3.If we access constant variables then these variables will display their values,here constant variable
values may or may not reflect the actual meaning of constant variables.
1.All the constant variables are by default "public static final",no need to declare explicitly.
2.All the constant variables are by default the same enum type,it will improve Typedness in Java
applications.
3.All the constant variables are by default "Named Constants" that is,these constant variables are
displaying their names instead of their values.
Syntax:
[Access_modifier] enum Enum_Name
{
----- List of constants-----
}
EX:
enum User_Status{
AVAILABLE,BUSY,IDLE;
}
class Test{
public static void main(String args[]){
System.out.println(User_Status.AVAILABLE);
System.out.println(User_Status.BUSY);
System.out.println(User_Status.IDLE);
}
}
OP:
Available
Busy
Idle
162
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE: In Java, java.lang.Object class is common and default super class for all the classes.
Similarly,All the Java enums are having a common and default super class that is "java.lang.Enum".
NOTE: In Java applications,it is possible to implement inheritance between two classes but it is not
possible to implement inheritance between two "enums", because, bydefault, enums are final classses.
In Java applications,we can utilize enum like as classes,where we can provide normal
variables,methods,constructors....
EX
enum Apple{
A(500),B(250),C(100);
int price;
Apple(int price){
this.price=price;
}
public int getPrice(){
return price;
}
}
class Test{
public static void main(String args[]){
System.out.println("A-Grade Apple :"+Apple.A.getPrice());
System.out.println("B-Grade Apple :"+Apple.B.getPrice());
System.out.println("C-Grade Apple :"+Apple.C.getPrice());
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
public static void main(String args[])
{
----application logic---
}
Note: Main() method is not predefined method and it is not user defined method,it is a conventional
method with fixed prototype and with user defined implementation.
165
In Java,JVM is implemented in such a way to access main() method automatically in order to execute
application logic.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Case-1:
If main() method is declared as "private" then main() method will be available upto the main class only
,not to JVM.
Case-2:
If main() method is declared as "<default>" then main() method will be available upto the package
where main class is existed, not to the JVM.
Case-3:
If main() method is declared as "protected" then main() method will be available upto the package
where main class is existed and upto child classes available in other packages but not to the JVM.
Case-4:
To make available main() method to JVM,only one possibility we have to take that is "public", where
public members are available through out our system, so that, JVM can access main() method to start
application execution.
NOTE:In Java applications,if we declare main() method with out "public" then compiler will not rise
any error but JVM will provide the following.
JAVA6:Main Method not public.
JAVA7:Error:Main method not found in class Test,please define main method as:
public static void main(String args[])
Ans:
In Java applications,to start application execution JVM has to access main() method.JVM was
implemented in such a way that to access main() method by using the respective main class directly.
In Java applications, only static methods are eligible to access by using their respective class name,so
that,as per the JVM predefined implementation we must declare main() method as static.
NOTE:In Java applications,if we declare main() method without "static" then compiler will not rise
166
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
In Java applications,as per Java conventions,JVM will start application execution at the starting point
of main method and JVM will terminate application execution at the ending point of main()
method.Due to this convention,we must start application logic at the starting point of main() method
and we must terminate application logic at the ending point of main() method.To follow this Java
convention we must not return any value from main() method, for this,we must provide "void" as
return type.
NOTE:In Java applications,if we declare main() method with out void return type then compiler will
not rise any error but JVM will provide the following
JAVA6: java.lang.NoSuchMethodError:main
JAVA7:Error:Main method must return a value of type void in class Test,please define the
main method as:
public static void main(String[] args)
NOTE:The name of this method "main" is to show the importance of this method.
Ans:
In Java applications,there are three ways to provide input to the Java programs.
1.Static Input
2.Dynamic Input
3.Command Line Input
167
Page
1.Static Input:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
int i=10;
int j=20;
void add()
{
System.out.println(i+j);
}
}
2.Dynamic Input:
Providing Input to the Java program at runtime.
D:\Java7>javac Add.java
D:\java7>java Add
First value : 10
Second value :20
Addition :30
If we provide command line input like above in Java applications then JVM will perform the following
actions.
a)JVM will read all the command line input at the time of reading main class name from command
prompt.
b)JVM will store all the command line inputs in the form of String[]
c)JVM will pass the generated String[] as parameter to main() method at the time of calling main()
method.
Due to the above JVM actions,the main method is required parameters inorder to store all the
command line inputs in the form String[] array.
168
Page
Q)What is the requirement to provide only String data type as parameter to the main() method?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To allow different types of command line input, main() method must require String dataType.
EX:
class Test{
public static void main(String args[]){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
OP:
D:\java7>javac Test.java
D:\java7>java Test 10 "abc" 22.22f 34.345 'A' true
10
"abc"
22.22f
34.345
'A'
true
169
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE: If we declare main() method without String[] parameter then compiler will not rise any error
but JVM will provide the following.
JAVA6:java.lang.NoSuchMethodError:main
JAVA7:Error:Main Method not found in class Test,please define main method as:
public static void main(String args[])
Q)Find the valid syntaxes of main() method from the following list?
1.public static void main(String[] args)--> Valid
2.public static void main(String[] abc)---> valid
3.public static void main(String args)----> Invalid
4.public static void main(String[][] args)-->Invalid
5.public static void main(String args[])---> Valid
6.public static void main(String []args)---> Valid
7.public static void main(string[] args)---> Invalid
8.public static void Main(String[] args)---> Invalid
9.public static int main(String[] args)----> Invalid
10.public final void main(String[] args)---> Invalid
11.public void main(String[] args)---------> Invalid
12.static void main(String[] args)---------> Invalid
13.static public void main(String[] args)--> Valid
170
Q)Is it possible to provide more than one main() method with in a single java application?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
class A{
public static void main(String args[]){
System.out.println("main()-A");
}
}
class B{
public static void main(String args[]){
System.out.println("main()-B");
}
}
OP:
D:\java7>javac abc.java
D:\java7>java A
main()-A
D:\java7>java B
main()-B
NOTE:If we compile the above abc.java file then compiler will generate two .class
files[A.class,B.class].To execute the above program,we have to give a class name along with "java"
command,here which class name we are providing along with "java" command that class main()
method will be executed by JVM.
NOTE:In the above program,it is possible to access one main() method from another main() method
by passing String[] as parameter and by using the respective class name as main() method is static
method.
171
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Yes, In Java,it is possible to overload main() method but it is not possible to override main()
method,because,in Java applications static method overloading is possible but static method overriding
is not possible.
}
}
Page
OP:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Relationships in JAVA:
As part of Java application development,we have to use entities as per the application requirements.
1.Has-A relationship
2.IS-A relationship
3.USE-A relationship
Ans:
Has-A relationship will define associations between entities in Java applications,here associations
between entities will improve communication between entities and data navigation between entities.
IS-A Relationship is able to define inheritance between entity classes, it will improve "Code
Reusability" in java applications.
Associations in JAVA:
There are four types of associations between entities
1.One-To-One Association
2.One-To-Many Association
3.Many-To-One Association
4.Many-To-Many Association
To achieve associations between entities,we have to declare either single reference or array of
reference variables of an entity class in another entity class.
173
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.One-To-One Association:
It is a relation between entities, where one instance of an entity should be mapped with exactly one
instance of another entity.
System.out.println("Account Details");
System.out.println("----------------");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Account Details
----------------------
Account Number :abc123
Account Name :Durga N
Account Type :Savings
2.One-To-Many Association:
It is a relationship between entity classes, where one instance of an entity should be mapped with
multiple instances of another entity.
175
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
emps[1]=e2;
emps[2]=e3;
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
Department Details
-----------------------------
Department Id :D-111
Department Name:Admin
EID ENAME EADDR
----------------------------------
E-111 AAA Hyd
E-222 BBB Hyd
E-333 CCC Hyd
Many-To-One Association:
It is a relationship between entities,where multiple instances of an entity should be mapped with
exactly one instance of another entity.
EX:
class Branch{
String bid;
String bname;
Branch(String bid,String bname){
this.bid=bid;
this.bname=bname;
}
}
class Student{
String sid;
String sname;
String saddr;
Branch branch;
Student(String sid,String sname,String saddr,Branch branch){
this.sid=sid;
this.sname=sname;
this.saddr=saddr;
this.branch=branch;
}
177
System.out.println("----------------");
System.out.println("Student Id :"+sid);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
4.Many-To-Many Associations:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
1.Where Aggregation is representing weak association that is less dependency but composition is
representing strong association that is more dependency.
2.In case of Aggregation, if contained object is existed even without container object.
In case of Composition ,if contained object is not existed without container object.
3.In the case of Aggregation,the life of the contained Object is independent of the container Object
life.
In the case of composition,the life of contained objects is depending on the container object life that is
same as container object life.
EX:
If we take an association between "Library" and "Students","Library" and "Books". "Students" can
exist without "Library",so that,the association between "Library" and "Student" is
Aggregation."Books" can not exist without "Library",so that,the association between "Library" and
"Books" is composition
IS-A Relationship:
It is a relationship between entity classes,it will provide inheritance between entity classes,where
inheritance relationship will improve "code reusability" in Java application.
The process of getting variables and methods from one class to another class is called as
Inheritance.
1.Single Inheritance
2.Multiple Inheritance
181
Page
1.Single Inheritance:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.Multiple Inheritance:
The process of getting variables and methods from more than one super class to one or more no.of
sub classes is called as Multiple Inheritance.
On the basis of Single and Multiple inheritances ,there are 3 more Inheritances.
1. Multi-Level Inheritance
2. Hierarchical Inheritance
3. Hybrid Inheritance
1. Multi-Level Inheritance :
It is a Combination of single inheritance in more than one level. Java is able to allow multi-level
inheritance.
EX:
class A{
}
class B extends A{
}
class C extends B{
}
2. Hierarchical Inheritance :
It is the combination of single inheritance in a particular structure.Java is able to allow Hierarchical
inheritance.
182
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.Hybrid Inheritance:
It is the combination of single inheritance and multiple inheritances.
EX:
class A{
}
class B extends A{
}
class C extends A{
}
class D extends B,C{
}
EX:
class Employee {
String eid;
String ename;
String eaddr;
public void getEmpDetails() {
System.out.println("Employee Id :"+eid);
System.out.println("Employee name :"+ename);
System.out.println("Employee Address :"+eaddr);
}
183
}
class Manager extends Employee {
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the above context,before loading sub class bytecode to the memory, first, JVM has to load the
respective super class bytecode to the memory.
Therefore,in the case of inheritance,JVM will load all the classes bytecode right from super class to
sub class order.
If we provide static context in both super class and subclass then JVM will recognize and execute
static context of the respective classes at the time of loading the respective classes, that is from
super class to sub class ordering.
EX:
class A{
static{
System.out.println("SB-A");
}
}
class B extends A{
static{
System.out.println("B-con");
}
}
class C extends B{
static{
System.out.println("SB-C");
}
}
class Test{
public static void main(String[] args){
C c=new C();
}
}
OP:
SB-A
B-con
SB-C
185
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP: SB-A
m1-A
m2-B
SB-B
m3-C
SB-C
186
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
A(){
System.out.println("A-con");
}
}
class B extends A{
B(){
System.out.println("B-con");
}
}
class C extends B{
C(){
System.out.println("C-con");
}
}
class Test{
public static void main(String[] args){
C c=new C();
}
}
OP: A-Con
B-Con
C-Con
187
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
A(int i){
System.out.println("A-int-param-con");
}
}
class B extends A{
B(int i){
System.out.println("B-int-param-con");
}
}
class C extends B{
C(int i){
System.out.println("C-int-param-con");
}
}
class Test{
public static void main(String[] args){
C c=new C(10);
188
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the case of Inheritance,if we provide instance context at all the classes then JVM will recognize and
execute them just before executing the respective class constructors.
EX: class A{
A(){
System.out.println("A-con");
}
int i=m1();
int m1(){
System.out.println("m1-A");
return 10;
}
{
System.out.println("IB-A");
}
}
class B extends A{
int j=m2();
int m2(){
System.out.println("m2-B");
return 20;
}
{
System.out.println("IB-B");
}
B(){
System.out.println("B-Con");
}}
class C extends B{
C(){
System.out.println("C-con");
}
{
System.out.println("IB-C");
}
int k=m3();
int m3(){
189
System.out.println("m3-C");
return 30;
Page
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
m1-A
IB-A
A-con
m2-B
IB-B
B-Con
IB-C
m3-C
c-con
EX:
class A{
A(){
System.out.println("A-con");
}
static{
System.out.println("SB-A");
}
int m1(){
System.out.println("m1-A");
return 10;
}
static int m2(){
System.out.println("m2-A");
return 20;
}
{
System.out.println("IB-A");
}
static int i=m2();
int j=m1();
}
class B extends A{
{
190
System.out.println("IB-B");
}
Page
int m3(){
System.out.println("m3-B");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
Page
Super Keyword:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:We will utilize super keyword,to access super class variables when we have same set of
variables at local,at current class and at the super class.
EX:
class A{
int i=100;
int j=200;
}
class B extends A{
int i=10;
int j=20;
B(int i,int j){
System.out.println(i+" "+j);
System.out.println(this.i+" "+this.j);
System.out.println(super.i+" "+super.i);
}
}
class Test{
public static void main(String args[]){
B b=new B(50,60);
}
}
OP:
50 60
10 20
100 100
192
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
super([Param_List]);
NOTE:In general,in inheritance,JVM will execute 0-argument constructor before executing sub class
constructor.In this context,instead of executing 0-argument constructor we want to execute a
parametrized constructor at super class,for this,we have to use 'super' keyword.
EX:
class A{
A(){
System.out.println("A-Con");
}
A(int i){
System.out.println("A-int-param-Con");
}
}
class B extends A{
B(){
super(10);
System.out.println("B-Con");
}
}
class Test{
public static void main(String args[]){
B b=new B();
}
}
OP:
A-int-param-Con
B-Con
If we want to access super class constructor from subclass by using "super" keyword then the
respective "super" statement must be provided as first statement.
If we want to access super class constructor from sub class by using "super" keyword then the
respective "super" statement must be provided in the subclass constructors only,not in subclass normal
Java methods.
If we voilate any of the above conditions then compiler will rise an error like "call to super must be
193
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the case of inheritance, when we access sub class constructor then ,first, JVM will execute super
class 0-arg constructor then JVM will execute sub class constructor, this flow of execution is possible
in Java because of the following compiler actions over source code at the time of compilation.
a)Compiler will goto each and every class available in the source file and checks whether any
requirement to provide "default constructors".
b)If any class is identified with out user defined constructor explicitly then compiler will add a 0-
argument constructor as default constructor.
c)After providing default constructors,compiler will goto all the constructors at each and every class
and compiler will check "super" statement is provided or not by the developer explicitly to access
super class constructor.
d)If any class constructor is identified with out "super" statement explicitly then compiler will append
"super()" statement in the respective constructor to access a 0- argument constructor in the respective
super class.
e)With the above compiler actions,JVM will execute super class 0-arg constructor as part of executing
sub class constructor explicitly.
Write the translated code:
class A{
A(){
System.out.println("A-con");
}
}
class B extends A{
B(int i){
System.out.println("B-int-param-con");
}
}
class C extends B{
C(int i){
System.out.println("C-int-param-con");
}
}
class Test{
public static void main(String args[]){
C c=new C();
}
}
194
Status:Compilation Error
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
A-con
B-int-param-con
C-int-param-con
NOTE:In Java applications,when we have same method at both subclass and at super class,if we
access that method at sub class then JVM will execute sub class method only,not super class method
because JVM will give more priority for the local class methods.In this context,if we want to refer
super class method over sub class method then we have to "super" keyword.
195
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.UpCasting:
The process of converting the data from sub type to super type is called as UpCasting.
To perform Upcasting,we have to assign sub class reference variable to super class reference variable.
196
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we compile the above code then compiler will check whether 'b' variable data type is compatible
with 'a' variable data type or not,if not,compiler will rise an error like "InCompatible Types".If "b"
variable data type id compatible to "a" variable data type then compiler will not rise any error.
NOTE:In Java applications,always sub class types are compatible with super class types,so that we
can assign sub class reference variable to super class reference variables directly.
NOTE:In Java,super class types are not compatible with sub class types,so that,we cannot assign super
class reference variables to sub class reference variables directly,where if we want to assign super class
reference variables to sub class reference variables then we must require "cast operator" explicitly,that
is called as "Explicit Type Casting".
If we execute the above code then JVM will perform the following two actions.
1.JVM will convert "b" variable data type[sub class type] to "a" variable data type[Super class type]
implicitly.
2.JVM will copy the reference value of "b" variable to "a" variable.
With the upcasting,we are able to access only super class members among the availability of both
super class and sub class members in sub class object.
class A{
void m1(){
System.out.println("m1-A");
}
}
class B extends A{
void m2(){
System.out.println("m2-B");
}
}
class Test{
public static void main(String[] args){
B b=new B();
197
b.m1();
b.m2();
Page
A a=b;
a.m1();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.DownCasting:
The process of converting the data from super type to sub type is called as "DownCasting".
EX:
class A{
void m1(){
System.out.println("m1-A");
}
}
class B extends A{
void m2(){
System.out.println("m2-B");
}
}
class Test{
public static void main(String args[]){
case 1:
A a=new A();
B b=a;
Reason:In Java,always,subclass types are compatible with super class types but super class types are
not compatible with sub class types.It is possible to assign sub class reference variables directly but it
is not possible to assign super class reference variable to sub class reference variables directly,if we
assign then compiler will rise an error like "InCompatible Types error".
198
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Case 3:
A a=new B();
B b=(B)a;
Status:No compilation error,no exception
b.m1();
b.m2();
}
}
EX:
class A{
}
class B extends A{
}
class C extends B{
}
class D extends C{
}
Ex1:
A a=new A();
B b=a;
Status:Compilation error,incompatible types
Ex2:
A a=new A();
B b=(B)a;
Status:No Compilation error,ClassCastException
Ex3:
A a=new A();
B b=(B)a;
Status:No Compilation error,No Exception
199
Ex4:
A a=new C();
Page
B b=(C)a;
Status:No Compilation error,No Exception
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
USES-A RelationShip:
This is a relationship between entities,where one entity will use another entity upto a particular
action or behaviour or method.
To provide USES-A Relationship in java applications,we have to provide contained Entity class
reference variable as parameter to a method in Container entity class,not as class level variable.
If we declared contained entity reference variable as class level reference variable in container
entity class then that relationship is "HAS-A" relationship.
200
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Transaction Id :T-111
Account Number :abc123
Account Type :Savings
Initial Amount :10000
Deposit Amount :5000
Total Avl Amount :15000
Transaction Status:SUCCESS
********THANKQ,VISIT AGAIN**********
Polymorphism:
Polymorphism is a Greek word,where poly means many and morphism means Structures.
If one thing is existed in more than one form then it is called as Polymorphism.
1.Static Polymorphism:
If the Polymorphism is existed at compilation time then that Polymorphism is called as Static
Polymorphism.
EX:Method Overloading
2. Dynamic Polymorphism:
If the Polymorphism is existed at runtime then that Polymorphism is called as Dynamic
Polymorphism.
EX:Method Overriding.
202
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
void add(int i,int j){
System.out.println(i+j);
}
void add(float f1,float f2){
System.out.println(f1+f2);
}
void add(String str1,String str2){
System.out.println(str1+str2);
}
}
class Test{
public static void main(String[] args){
A a=new A();
a.add(10,20);
a.add(22.22f,33.33f);
a.add(“abc”,”def”);
}
}
OP:
30
55.550003
abcdef
203
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Method Overriding:
The process of replacing existed method functionality with some new functionality is called as
Method Overriding.
In Java applications, we will override super class method with sub class method.
In Java applications,we will override super class method with subclass method.
If we want to override super class method with sub class method then both super class method and
sub class method must have same method prototype.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE: To prove method overriding in Java, we have to access super class method but JVM will
execute the respective sub class method and JVM has to provide output from the respective sub class
method, not form super class method. To achieve the above requirement we must create reference
variable for only super class and we must create object for sub class.
class A{
void m1(){
System.out.println("m1-A");
}
}
class B extends A{
void m1(){
205
System.out.println("m1-B");
}
Page
}
class Test{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status:Here method Overriding is happened,but,to prove method overriding we must require super
class reference variable,not sub class reference variable,because,subclass reference variable is able to
access only sub class method when we have the same method in both sub class and super class.
*/
A a=new B();
a.m1();
}
}
EX:
class A{
private void m1(){
System.out.println("m1-A");
}
}
class B extends A{
void m1(){
System.ou.println("m1-B");
}
}
class Test{
public static void main(String args[]){
A a=new A();
a.m1();
}
206
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
int m1(){
System.ou.println("m1-A");
return 10;
}
}
class B extends A{
void m1(){
System.out.println("m1-B");
}
}
class Test{
public static void main(String args[]){
A a=new B();
a.m1();
}
}
3.To override super class method with sub class method then super class method must not be declared
as final sub class method may or may not be final.
EX:
class A{
void m1(){
System.out.println("m1-A");
}
}
class B extends A{
final void m1(){
System.out.println("m1-B");
}
}
class Test{
public static void main(String[] args){
A a=new B();
a.m1();
207
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:If we are trying to override superclass static method with sub class static method then super
class static method will override subclass static method,where JVM will generate output from super
class static method.
EX:
class A{
static void m1(){
System.out.println("m1-A");
}
}
class B extends A{
static void m1(){
System.out.println("m1-B");
}
}
class Test{
public static void main(String args[]){
A a=new B();
a.m1();
}
}
5.To override super class method with subclass method,sub class method must have either same scope
of the super class method or more scope when compared with super class method scope otherwise
compiler will rise an error.
EX:
class A{
protected void m1(){
System.out.println("m1-A");
}
}
class B extends A{
public void m1(){
System.out.println("m1-B");
208
}
}
Page
class Test{
public static void main(String args[]){
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
6.To override super class method with subclass method subclass method should have either same
access privileges or weaker access privileges when compared with super class method access
privileges.
Q)What are the differences between method overloading and method overriding?
Ans:
1. The process of extending the existed method functionality with new functionality is called as
Method Overloading.
The process of replacing existed method functionality with new functionality is called as Method
Overriding
2.In the case of method overloading, different method signatures must be provided to the methods
In the case of method overriding same method prototypes must be provided to the methods.
EX:
class DB_Driver{
public void getDriver(){
System.out.println("Type-1 Driver");
}
}
class New_DB_Driver extends DB_Driver{
public void getDriver(){
System.out.println("Type-4-Driver");
}
}
class Test{
public static void main(String args[]){
DB_Driver driver=new New_DB_Driver();
driver.getDriver();
}
}
209
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to declare abstract methods then the respective class must be abstract class.
In Java applications, if we declare any abstract class with abstract methods, then it is convention to
implement all the abstract methods by taking sub class.
To access the abstract class members, we have to create object for subclass and we have to create
reference variable either for abstract class or for subclass.
If we create reference variable for abstract class then we are able to access only abstract class
members, we are unable to access subclass own members
If we declare reference variable for subclass then we are able to access both abstract class members
and subclass members.
abstract class A{
void m1(){
System.out.println("m1-A");
}
abstract void m2();
210
class B extends A{
void m2(){
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java applications,it is not possible to create Object fro abstract classes but it possible to provide
constructors in abstract classes,because,to recognize abstract class instance variables in order to store
in the sub class objects.
B b=new B();
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
abstract class A{
abstract void m1();
abstract void m2();
abstract void m3();
}
abstract class B extends A{
void m1(){
System.out.println("m1-A");
}
}
class C extends B{
void m2(){
System.out.println("m2-C");
}
void m3(){
System.out.println("m3-C");
}
}
class Test{
public static void main(String[] args){
A a=new C();
a.m1();
a.m2();
a.m3();
}
}
212
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java applications, it is possible to extends an abstract class to concrete class and from concrete class
to abstract class.
class A{
void m1(){
System.out.println("m1-A");
}
}
abstract class B extends A{
abstract void m2();
}
class C extends B{
void m2(){
System.out.println("m2-C");
}
void m3(){
213
System.out.println("m3-C");
}
Page
}
class Test{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: In Java applications, it is not possible to extend a class to the same class, if we do the same then
compiler will rise an error like "cyclic inheritance involving".
class A extends A{
}
Status: Compilation Error: “cyclic inheritance involving".
class A extends B{
}
class B extends A{
}
Interfaces:
Interface is a Java Feature, it will allow only abstract methods.
In Java applications, for interfaces, we are able to create only reference variables, we are unable to
create objects.
In the case of interfaces, by default, all the variables are "public static final".
In the case of interfaces, by default, all the methods are "public and abstract".
In Java applications, constructors are possible in classes and abstract classes but constructors are not
214
possible in interfaces.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java applications, if we declare any interface with abstract methods then it is convention to declare
an implementation class for the interface and it is convention to provide implementation for all the
abstract methods in implementation class.
interface I{
void m1();
void m2();
void m3();
}
class A implements I{
public void m1(){
System.out.println("m1-A");
}
public void m2(){
System.out.println("m2-A");
}
public void m3(){
System.out.println("m3-A");
}
}
public void m4(){
System.out.println("m4-A");
}
}
class Test{
public static void main(String args[]){
I i=new A();
i.m1();
i.m2();
i.m3();
//i.m4();------>error
A a=new A();
a.m1();
a.m2();
a.m3();
a.m4();
}
215
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
interface I{
void m1();
void m2();
void m3();
}
abstract class A implements I{
public void m1(){
System.out.println("m1-A");
}
}
class B extends A{
public void m2(){
System.out.println("m2-B");
}
public void m3(){
System.out.println("m3-B");
}
}
class Test{
public static void main(String args[]){
I i=new I();
i.m1();
i.m2();
i.m3();
A a=new B();
a.m1();
a.m2();
a.m3();
B b=new B();
b.m1();
b.m2();
b.m3();
}
216
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
interface I1{
void m1();
}
interface I2{
void m2();
}
interface I3 extends I1,I2{
void m3();
}
class A implements I3{
public void m1(){
System.out.println("m1-A");
}
public void m2(){
System.out.println("m2-A");
}
public void m3(){
System.out.println("m3-A");
}
}
class Test{
public static void main(String args[]){
I1 i1=new A();
i1.m1();
I2 i2=new A();
i2.m2();
I3 i3=new A();
i3.m1();
i3.m2();
i3.m3();
A a=new A();
a.m1();
a.m2();
a.m3();
}
}
217
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Marker Interfaces:
Marker Interface is an Interface, it will not include any abstract method and it will provide some
abilities to the objects at runtime of our Java application.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
java.lang.Cloneable:
The process of generating duplicate object is called as Object Cloning.
IN java applications, bydefault, all objects are not eligible for Object cloning, only the objects
which implements java.lang.Cloneble interface are eligible for Object cloniong.
EX:
interface I{
default void m1(){
System.out.println("m1-A");
}
}
NOTE:It is possible to provide more than one default methods with in a single interface.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Upto JAVA7 version, static methods are not possible in interfaces but from JAVA8 version static
methods are possible in interfaces in order to improve sharability.
If we declare static methods in the interfaces then it is not required to declare any implementation class
to access that static method,we can use directly interface name to access static method.
NOTE:If we declare static methods in an interface then they will not be available to the respective
implementation classes,we have to access static methods by using only interface names not even by
using interface reference variable
221
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note:In JAVA8 version, interfaces will allow concrete methods along with either "static" keyword or
"default" keyword.
3.Functional Interface:
If any Java interface allows only one abstract method then it is called as "Functional Interface".
To make any interface as Functional Interface then we have to use the following annotation just
above of the interface.
@FunctionalInterface
EX: java.lang.Runnable
java.lang.Comparable
NOTE:In Functional Interfaces we have to provide only one abstract method but we can provide any
no.of default methods and any no.of static methods.
222
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Instanceof operator:
It is a boolean operator,it can be used to check whether the specified reference variable is
representing the specified class object or not that is compatible or not.
where ref_Var and Class_Name must be related otherwise compiler will rise an error like
"incompatible types error".
If ref_Var class is same as the specified Class_Name then instanceof operator will return "true".
If ref_Var class is subclass to the specified Class_Name then instanceof operator will return "true".
If ref_Var class is super class to the specified Class_Name then instanceof operator will return
"false".
223
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Object Cloning:
The process of creating duplicate object for an existed object is called as Object Cloning.
If we want to perform Object Cloning in Java application then we have to use the following steps.
EX:
class Student implements Cloneable{
String sid;
String sname;
String saddr;
Student(String sid,String sname,String saddr){
this.sid=sid;
this.sname=sname;
this.saddr=saddr;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
224
}
public String toString(){
Page
System.out.println("Student details");
System.out.println("----------------");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
225
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To prepare example for deep cloning provide the following clone() method in employee class in the
above example of(shallow Cloning)
public Object clone()throws CloneNotSupportedException{
Account acc1=new Account(acc.accNo,acc.accName,acc.accType);
Employee emp=new Employee(eid,ename,eaddr,acc1);
return emp;
227
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
class Outer_Class
{
class Inner_Class
{
}
}
In java applications, Inner classes are able to provide the following advantages.
1.Modularity
2.Adstraction
3.Security
4.Sharability
5.Reusability
1.Modularity:
In java appl, we are able to improv we modularity by using packages.
If we want to devide our implementation in a class in the form of modules then we have to use Inner
classes.
EX:
class Account
{
class SavingsAccount{
----
}
class CurrentAccount{
----
}
}
2.Adstraction:
If we declare any variable or method in an inner class thenthat variable and method are having
228
scope upto that inner class only , it is not available to other inner classes, so that, Inner classes are
able to improve Abstraction.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.Security:
It is not possible to declare a class as private, but, it is possible to declare an inner class as private,
so that , inner classes are able to improve Security.
EX:
private class A{
}
Status: Invalid
EX:
class A{
private class B{
----
}
}
Status: Valid.
4.Sharability:
It is not possible to declare a class as Static, but, it is possible tio declare an inner class as static, so
that, inner classes are able to improve Sharability.
EX:
static class A{
}
Status: Invalid
229
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status: Valid
5.Reusability:
In java, inheritance feature will imprive Code Reusability.
IN java applications, we can extend one inner class to another class, so that, inner classes are able to
improve Code Reusability.
EX:
class A{
class B{
---
}
class C extends B{
---
}
}
Status: Valid
Note: If we compile java file contains inner classes then Compiler will generate a seperate .class for
outer class and a seperate .class file will be generated for inner class.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Outer{
class Inner{
----
}
}
If we want to access the members of inner class then we have to create object for the inner class, for
this , we have to use the following syntax.
1.By using outer class reference variable we are able to access only outer class members, we are
unable to access inner class members.
2.By using Inner class reference variable we are ABle to access only inner class members we are
unable to access outer class members.
3.Bydefault , all outer class members are available to inner class, so we can access outer class
members inside the inner class, but, Inner class members are not available to outer classes, we are
unable to access inner class members in outer classes.
4.Member inner classes are not allowing static declarations directly, but, static keyword is allowed
along with final keyword.
EX:
class A
{
void m1()
{
System.out.println("m1-A");
}
class B
{
//static int i=10;--> Error
static final int j=20;
void m2()
{
System.out.println("m2-B");
231
System.out.println(j);
}
Page
void m3()
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Member inner classes, we can extend one inner class to another inner class but both the inner
classes must be provided with in the same outer class.
EX:
class A
{
class B
{
void m1()
{
System.out.println("m1-B");
}
void m2()
{
System.out.println("m2-B");
}
}
class C extends B
{
void m3()
{
System.out.println("m3-C");
232
}
void m4()
Page
{
System.out.println("m4-C");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
We can not extend one inner class to another inner class which are available in two different outer
classes.
EX:
class A{
class B{
---
}
}
class C{
class D extends A.B{
---
}
}
Status: Invalid.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
class B extends A{
---
}
}
Ans:
Yes, it is possible to provide an interface inside a class, but, the respective implementation class must
be provided with in the same outer class.
EX:
class A
{
interface I
{
void m1();
void m2();
void m3();
}
class B implements I
{
public void m1()
{
234
System.out.println("m1-B");
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A
{
abstract class B
{
void m1()
{
System.out.println("m1-B");
}
abstract void m2();
abstract void m3();
}
class C extends B
{
void m2()
{
System.out.println("m2-C");
}
void m3()
{
235
System.out.println("m3-C");
}
Page
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
class Outer
{
static class Inner
{
----
}
}
If we want to access the members of static inner class we have to create object for static inner class, for
this we have to use the following syntax.
1.Static inner classes are able to allow only static members of the outer class, it will not allow non
static members of the outer class.
2.IN general, inner classes are not allowing static keyword directly, but, static inner class is able to
allow static declarations directly.
EX:
class A
{
static class B
{
void m1()
{
236
System.out.println("m1-B");
}
Page
void m2()
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Yes, it is possible to write a class inside an interface, If we declare a class inside an interface then that
class is converted as a static inner class, we can access members of this inner class like static inner
class members.
EX:
interface I
{
class A// static class A
{
void m1()
{
System.out.println("m1-A");
}
void m2()
{
System.out.println("m2-A");
}
}
237
}
class Test
Page
{
public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: We can write abstract class inside an interface,but, the respective sub class must be declared in
the same interface, here the declared sub class is converted as static inner class.
EX:
interface I
{
abstract class A
{
void m1()
{
System.out.println("m1-A");
}
abstract void m2();
abstract void m3();
}
class B extends A
{
void m2()
{
System.out.println("m2-B");
}
void m3()
{
System.out.println("m3-B");
}
}
}
class Test
{
public static void main(String[] args)
{
I.A ia=new I.B();
ia.m1();
ia.m2();
238
ia.m3();
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
interface I1
{
interface I2
{
void m1();
void m2();
void m3();
}
class A implements I2
{
public void m1()
{
System.out.println("m1-A");
}
public void m2()
{
System.out.println("m2-A");
}
public void m3()
{
System.out.println("m3-A");
}
}
}
class Test
{
public static void main(String[] args)
{
I1.I2 i12=new I1.A();
i12.m1();
i12.m2();
i12.m3();
}
}
239
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we declare a class inside a method then the scope of that is available upto the respective method
only, we have to create object for5 that inner class in the respective method onky, we have to access
the members of that inner class inside the respective methpd.
EX:
class A
{
void m1()
{
class B
{
void m2()
{
System.out.println("m2-B");
}
void m3()
{
System.out.println("m3-B");
}
}//B
B b=new B();
b.m2();
b.m3();
}//m1()
}//A
class Test
{
public static void main(String[] args)
{
A a=new A();
a.m1();
}
}
240
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: For abstract class we may take sub classes and for interfaces we may take implementatin classes
to provide implementations , but, here sub classes of the abstract class and implementation class of the
interface are able to allow their own members and these sub classes and implementation classes
objects are having their identity, not interface identity and abstract class identity.
In java applicatins, if we want to provide implementations for only abstract class members or interface
members and if we want to create objects with interface identity and with abstract class identity then
we have to use Anonymous inner classes.
Syntax:
abstract class Name / interface Name
{
----
}
class Outer{
Name ref_Var=new Name()
{
---implementation----
};
}
EX:
abstract class A
{
void m1()
{
System.out.println("m1-A");
}
abstract void m2();
abstract void m3();
}
class Outer
{
A a=new A()
{
void m2()
241
{
System.out.println("m2-AIC");
Page
}
void m3()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
interface I
{
void m1();
void m2();
void m3();
}
class Outer
{
I i=new I()
{
public void m1()
{
System.out.println("m1-AIC");
}
public void m2()
{
System.out.println("m2-AIC");
}
242
System.out.println("m3-AIC");
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
IN general, we will use Anonymous Inner classes when we have requirement to pass any interface or
abstract class references as parameters to the methods.
EX:
interface I
{
void m1();
void m2();
void m3();
}
class A
{
void meth(I i)
{
i.m1();
i.m2();
i.m3();
}
}
class Test
{
public static void main(String[] args)
243
{
A a=new A();
Page
a.meth(new I()
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
244
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In java applications, Collection objects are able to store only objects , they will not store primitive
data.
JAVA has provided 8 no of wrapper classes w.r.t the 8 no of primitive data types.
Note: Java has provided all the wrapper classes in the form of immutable classes.
OP: 10 10
OP: 10 10
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP: 10 10
3)Conversions from String type to Object Type:
a)By using String parameterized constructors from wrapper classes:
public XXX(String value)
XXX----> Wrapper classes
EX: String data="10";
Integer in=new Integer(data);
System.out.println(data+" "+in);
OP: 10 10
b)By using static valueOf(-) method from wrapper classes:
public
static XXX valueOf(String data)
EX: String data="10";
Integer in=Integer.valueOf(data);
246
System.out.println(data+" "+in);
Page
OP: 10 10
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Package is a folder contains .class files representing related classes and interfaces
1.Modularity
2.Abstraction
3.Security
4.Sharability
5.Reusability
1.Modularity:
Deviding a requirement set into no of pieces , providing solutions to the individual parts and
combining all individual solutions to a single is called as "Modularization".
In java applications, Module is a folder contains .class files representing related classes and
interfaces as a single unit.
Due to the above module definition, we can conclude that Packages are able to improve modularity.
2.Abstraction:
If we declare classes and interfaces in a module or in a package then that classes and interfaces are
not visible in out side of the package bydefault, so that, packages are able to improve Abstraction.
3.Security:
IN java applications, packages are able to provide Abstraction and Encapsulation, where both are
able to improve Security.
4.Sharability:
In java applications, if we declare packages one time then we are able to share that package content
to any no of applications or modules at a time.
5.Reusability
In java applications, if we declare a package one time then we are able to reuse any no of times with in
248
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Predefined Packages:
These packages are provided by JAVA programming language along with Java software.
EX1: java.lang :
This package is default package in java applications , no need to import this package to the present
java file, when we save java file with .java extension then automatically java.lang package is imported
internally.
This package is able to provide all fundamental classes and interfaces which are required to prepare
basic java applications.
java.lang package includes the following classes and interfaces to prepare java applications.
EX2: java.io :
This package is able to provide predefined classes and interfaces inorder to perform Input and Output
operations in Java.
This package includes the following classes and interfaces in java applications.
EX3: java.util :
249
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX4: java.awt :
This package is able to provide predefined classes and interfaces repersenting all GUI components
inorder to prepare GUI applications.
This packege has provided the following classes and interfaces to prepare GUI applications.
EX5: javax.swing :
Ans:
1. AWT provided GUI components are platform dependent GUI components.
SWING provided GUI components are Platform Independent GUI Components.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX6: java.net :
If we prepare any java application with out using Client-Server Arch then that java application is
called as Standalone Application.
If we prepare any java application on the basis of Client-Server Arch then that java application is
called as Distributed application.
To prepare distributed applications, JAVA has provided the following distributed technologies.
1.Socket Programming
2.RMI[Remote Method Invocation]
3.CORBA[Common Object Request Broker Arch/Agent]
4.EJBs[Enterprise Java Beans]
5.Web Services
java.net package has provided predefined library to prepare distributed applications by using Socket
Programming.
Socket
ServerSocket
URL, URI, URN
URLConnection
---
---
EX7: java.rmi :
java.rmi package is able to provide predefined library to prepare Distributed applications on the basis
RMI .
Remote
RemoteException
Naming
251
---
---
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The process of interacting with database from java application is called as JDBC[Java Dayabase
Connectivity].
To prepare JDBC applications, java has provided predefined library in the form of java.sql package.
java.sql package has provided the following classes and interfaces to prepare JDBC applications.
If we want to use package declaration statement in java applications then we have to use the following
two conditions.
1.Package Declaration Statement must be first statement.
2.Package name must be unique, it must not be sharable and it must not be duplicated.
Q)Is it possible to provide more than one package declaration statement with in a single java file?
Ans:
No, it is not possible to provide more than one package declaration statement with in a single java file,
because, package declaration statement must be provided as first statement in java files.
To provide package names in java applications, JAVA has provided a convention like to include our
company domain name in reverse.
EX:
package com.durgasoft.icici.transactions.deposit;
com.durgasoft---> Company Domain name in reverse.
icici -----> client/project name
transactions---> Module name
deposit ------> sub module name
If we declare classes and interfaces in a package and if we want to use these classes and interfaces in
252
the present java file then we have to import the respective package to the present java file.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import package_Name.*;
--> It able to import all the classes and interfaces of the specified package.
import package_Name.member_Name;
--> It able to import only the specified member from the specified package.
Note: In java files, we are able to provide atmost one package declaration statement, but, we are able
to provide any no of import statements.
Q)Is it possible to use classes and interfaces of a particular package with out importing the respective
package?
Ans:
Yes, it is possible to use classes and interfaces of a particular package with out importing that package,
but by using fully qualified names of the respective classes and interfaces.
Note: Specifying class name or interface name along with package name is called as "Fully Qualified
Name"
EX: java.io.BufferedReader
java.util.ArrayList
---
----
A java program with import statement:
import java.io.*;
---
BufferedReader br=new BufferedReader(new InputStreamReader( System.in));
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
D:\abc
------
Employee.java
C:\xyz
------
com
|----durgasoft
|----core
|-----Employee.class
D:\javaapps\ packages
---------------------
Test.java
Test.class
Employee.java
--------------
package com.durgasoft.core;
public class Employee
{
String eid;
String ename;
float esal;
String eaddr;
public Employee(String eid, String ename, float esal, String eaddr)
{
this.eid=eid;
this.ename=ename;
this.esal=esal;
this.eaddr=eaddr;
}
public void getEmpDetails()
{
System.out.println("Employee Details");
System.out.println("-----------------------");
254
System.out.println("Employee Id :"+eid);
System.out.println("Employee Name :"+ename);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
On Command Prompt:
D:\abc>javac -d C:\xyz Employee.java
Test.java
import com.durgasoft.core.*;
public class Test
{
public static void main(String[] args)
{
Employee emp=new Employee("E-111", "Durga", 50000.0f, "Hyderabad");
emp.getEmpDetails();
}
}
On Command Prompt:
D:\javaapps\packages>set classpath=C:\xyz;.;
D:\javaapps\packages>javac Test.java
D:\javaapps\packages>java Test
--- Employee Details----
EX:
D:\javaapps>jar -cvf durgaapp.jar *.*
255
To extract JAR file we have to use the following command on command prompt.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to access packages or classes or interfaces from JAR file then we have to set
classpath path environment variable to JAR file directly.
Application-2:
D:\abc
------
Account.java
C:\xyz
------
com
|---durgasoft
|----icici
|-----accounts
|------Account.class
C:\xyz
-------
durga_icici.jar
D:\javaapps\packages
---------------------
Test.java
Test.class
256
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
package com.durgasoft.icici.accounts;
public class Account
{
String accNo;
String accName;
String accType;
String accBranch;
String accBank;
public Account(String accNo, String accName, String accType, String accBranch, String
accBank)
{
this.accNo=accNo;
this.accName=accName;
this.accType=accType;
this.accBranch=accBranch;
this.accBank=accBank;
}
public void getAccountDetails()
{
System.out.println("Account Details");
System.out.println("---------------------");
System.out.println("Account Number :"+accNo);
System.out.println("Account Name :"+accName);
System.out.println("Account Type :"+accType);
System.out.println("Account Branch :"+accBranch);
System.out.println("Account Bank :"+accBank);
}
}
On Command Priompt:
D:\abc>javac -d C:\xyz Account.java
C:\xyz>jar -cvf durga_icici.jar *.*
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
On Command Prompt:
D:\javaapps\packages>set classpath=D:\xyz\durga_icici.jar;.;
D:\javaapps\packages>javac Test.java
D:\javaapps\packages>java Test
---- Account Details-----
1.Prepare Java application as per the requirement and Compile Java application:
EX:D:\javaapps\packages\ Test.java
import java.awt.*;
class LogoFrame extends Frame
{
LogoFrame()
{
this.setVisible(true);
this.setSize(900,300);
this.setBackground(Color.green);
this.setTitle("Logo Frame");
258
}
public void paint(Graphics g)
Page
{
Font f=new Font("arial", Font.BOLD, 40);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
On Command Prompt:
D:\javaapps\packages>javac Test.java
2.Prepare a text file with "Main-Class" attribute with Main class name:
D:\javaapps\packages\ abc.txt
Main-Class: Test
Note: The main intention to specify "Main-Class" attribute in text file is to send Main-Class attribute
information to MANIFEST.MF file.
On Command Prompt
D:\javaapps\packages>jar -cvfm durgaapp.jar abc.txt *.*
On Command prompt:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to execute the above application through batch file, first, we have to prepare batch file with
the required execution command then double click on that batch.
NOTE: We must save both jar file and bat file at the same location.
260
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java, to perform String operations JAVA has provided the following predefined classes.
1.java.lang.String
2.java.lang.StringBuffer
3.java.lang.StringBuilder
4.java.util.StringTokenizer
Ans:
1.String class objects are immutable objects, where Immutable objects are not allowing modifications
over their content, if we are trying to perform modifications over immutable object content then
operations are allowed , but, the resultent data will not be stored back in original object, where the
resultent data will be stored by creating new object.
StringBuffer objects are mutable objects, they are able to allow modifications on their content.
Ans:
1.StringBuffer class was introduced in JDK1.0 version.
StringBuilder class was introduced in JDK5.0 version.
2.StringBuffer is synchronized .
StringBuilder is not Synchronized.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
9.StringBuffer is threadsafe.
StringBuilder is not threadsafe.
Q)What is String tokenization and how it is possible to perform String Tokenization in java
applications?
Ans:
The process of deviding a string into no of tokens is called as String Tokenization.
To perform String Tokenization JAVA has provided a predefined class in the form of
java.util.StringTokenizer.
To perform String Tokenization in java applications we have to use the following steps.
When JVM encounter the above instruction, JVM will take the provided String , JVM will devide the
provided String into no of tokens and JVM will store thegenerated tokens by creating object for
StringTokenizer class.
NOTE: When StringTokenizer class object is created with the no of tokens then a pointer or cursor
will be created before the first token.
To get no of tokens which are existed in StringTokenizer class object we have to use the following
method.
262
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To retrive tokens from StringTokenizer object we have to use the following steps for each and every
token.
a)Check whether more tokens are available or not from the current cursor position by using the
following method.
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
StringTokenizer st=new StringTokenizer ("Durga Software Solutions");
System.out.println("No Of Tokens :"+st.countTokens());
while(st.hasMoreTokens())
{
System.out.println(st.nextToken());
}
}
}
263
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.public String()
--> It able to create an emptyy String object.
EX: String str=new Stirng();
Ans:
To create String class object if we use first statement then one String object will be created at heap
memory as per "new" keyword and another String object will be created at String Constant Pool Area
inside method Area as per "".
To create String object if we use second statement then String object will be created at String COnstant
Pool Area only in Method Area.
Note: The objects which are created in String Constant Pool Area are not eligible for Garbage
Collection.The objects which are created in Heap memory are eligible for Garbage Collection.
3.public String(byte[] b)
--> This constructor can be used to create String object with the String equalent of the specified byte[]
.
EX: byte[] b={65,66,67,68,69,70};
String str=new String(b);
System.out.println(str);
OP: ABCDEF
264
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP: CDE
EX:char[] ch={'A','B','C','D','E','F'};
String str=new String(ch);
System.out.println(str);
OP: ABCDEF
EX:char[] ch={'A','B','C','D','E','F'};
String str=new String(ch,2,3);
System.out.println(str);
OP: CDE
Note: Construuctors 3 and 4 are used to convert data from byte[] to String and constuctors 5 and 6 are
used to convert data from char[] to String.
Methods:
1.public int length()
--> This method will return an integer value representing the no of characters existed in the String
including spaces.
OP: 24
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
String str1=new String("Durga ");
String str2=str1.concat("Software ");
String str3=str2.concat("Solutions");
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
OP: Durga
Durga Software
Durga Software Solutions
EX:
String str="Durga".concat("Software ").concat("Solutions");
System.out.println(str);
OP:
Durga Software Solutions
Ans:
'==' is basically a comparision operator, it will check whether the provided operand values are same or
not, where operands may be normal primitive variables or object reference variables.
Iniitally equals(-) method was defined in java.lang.Object class , it was implemented in such a way
that to provide comparision between two object reference values.
String class has overridden Object class equals(-) method in such a way that to provide comparision
between two String object contents
266
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
int i=10;
int j=10;
EX:
String str1=new String("abc");
String str2=new String("ABC");
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
OP:
false
true
267
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
str1.compareTo(str2)
a)If str1 come first when compared with str2 in dictionary order then compareTo() method will return -
ve value.
b)If str2 come first when compared with str1 in dictinary order then compareTo() method will return
+ve value.
c)If str1 and str2 are available at the same position in dictionary order then compareTo() method will
return 0 value.
EX:
String str1=new String("abc");
String str2=new String("def");
String str3=new String("abc");
System.out.println(str1.compareTo(str2));
System.out.println(str2.compareTo(str3)); System.out.println(str3.compareTo(str1));
OP: -3
3
0
6.public boolean startsWith(String str)
--> It will check whether the String starts with the specified String or not.
EX:
String str=new String("Durga Software Solutions");
System.out.println(str.startsWith("Durga"));
System.out.println(str.endsWith("Solutions"));
System.out.println(str.contains("Software"));
OP:
true
true
true
268
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
String str=new String("Durga Software Solutions");
System.out.println(str);
System.out.println(str.replace('S', 's'));
System.out.println(str.charAt(6));
System.out.println(str.indexOf("So"));
System.out.println(str.lastIndexOf("So"));
OP:
Durga Software Solutions
Durga software solutions
S
6
15
EX:
String str=new String("Durga Software Solutions");
System.out.println(str.substring(6));
System.out.println(str.substring(6,14));
OP:
Software Solutions
269
Software
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
String str=new String("Durga Software Solutions");
byte[] b=str.getBytes();
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println();
char[] ch=str.toCharArray();
for(int i=0;i<ch.length;i++)
{
System.out.print(ch[i]+" ");
}
EX:
String str=new String("Durga Software Solutions");
String[] s=str.split(" ");
for(int i=0;i<s.length;i++)
{
System.out.println(s[i]);
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
StringBuffer:
Costructors:
1.public StringBuffer()
-->This constructor can be used to create an empty StringBuffer object with 16 elements as initial
capacity.
New_capacity=Iitial_Capacity+data_Length;
EX:
StringBuffer sb=new StringBuffer("abc");
System.out.println(sb);
System.out.println(sb.capacity());
OP: abc
271
19
Page
Methods:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
StringBuffer sb1=new StringBuffer("Durga ");
StringBuffer sb2=sb1.append("Software ");
StringBuffer sb3=sb2.append("Solutions");
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
OP:
Durga Software Solutions
Durga Software Solutions
Durga Software Solutions
EX:
StringBuffer sb=new StringBuffer();
sb.ensureCapacity(10);
System.out.println(sb.capacity());
OP: 16
EX:
StringBuffer sb=new StringBuffer("Durga Software Solutions");
System.out.println(sb);
System.out.println(sb.reverse());
272
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
StringBuffer sb=new StringBuffer("Durga Software Solutions");
System.out.println(sb);
System.out.println(sb.delete(6,14));
EX:
Durga Software Solutions
Durga Solutions
EX:
StringBuffer sb=new StringBuffer("Durga Solutions");
System.out.println(sb);
System.out.println(sb.insert(6,"Software"));
OP:
Durga Solutions
Durga Software Solutions
273
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Error is a problem in java applications.
There are two types of errors in java.
1.Compile time Errors
2.Runtime Errors
NOTE: Some other errors are generated by Compiler when we voilate JAVA rules and regulations in
java applications.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.Exception:
Exception is a problem, for which we are able to provide solutions programatically.
EX: ArithmeticException
NullPointerException
ArrayIndexOutOfBoundsException
----
-----
Exception: Exception is an unexpected event occured in java applications at runtime , which may be
provided by users while entering dynamic input in java applications, provided by the Database Engines
while executing sql queries in Jdbc applications, provided by Network while establish connection
between local machine and remote machine,.....causes abnormal termination to the java applications.
1.Smooth Termination
2.Abnormal Termination
In general, Exceptions are providing abnormal terminations, these abnormal termionations may crash
local operating systems , these abnormal terminations may provide hangedout situations to the
network,.....
To overcome the above problems we have to handle exceptions properly, to handle exceptions
properly wew have to use "Exception Handling Mechanism".
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Predefined Exceptions
These Exceptions are defined by JAVA programming language and provided along Java software.
-- Diagram----
Ans:
Checked Exception is an exception recognized at compilation time, but, not occured at compilation
time.
Unchecked Exceptions are not recognized at compilation time, these exceptions are recognized at
runtime by JVM.
Note: In Exceptions Arch, RuntimeException and its sub classes and Error and its sub classes are the
examples for Unchecked Exceptions and all the remaining classes are the examples for Checked
Exceptions.
Q)What is the difference between Pure checked exception and Partially Checked Exceptions?
Ans:
If any checked exception is having only checked exceptions as sub classes then this exception is called
as Pure Checked Exception.
276
EX: IOException
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.ArithmeticException
In java applications, when we have a situation like a number is devided by zero then JVM will rise
Arithmetic Exception.
EX:
class Test
{
public static void main(String[] args)
{
int i=10;
int j=0;
float f=i/j;
System.out.println(f);
}
}
If we run the above program then JVM will provide ArithmeticException with the following Exception
message.
The above exception message is devided into the following three parts.
1.Exception Name: java.lang.ArithmeticException
2.Exception Descrioptioun: / by zero
3.Exception Location : Test.java:7 277
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test
{
public static void main(String[] args)
{
java.util.Date d=null;
System.out.println(d.toString());
}
}
If we run the above code then JVMwill provide the following exception details.
1.Exception Name : java.lang.NullPointerException
2.Exception Description: --- No description----
3.Exception Location: Test.java:6
3.ArrayIndexOutOfBoundsException:
In java applications, when we insert an element to an array at a particular index value and when we
are trying to access an element from an array at a particular index value and if the specified index
value is in out side of the arrays size then JVM will rise an exception like
"ArrayIndexOutOfBoundsException".
EX:
class Test
{
public static void main(String[] args)
{
int [] a={1,2,3,4,5};
System.out.println(a[10]);
}
}
If we run the above program then JVM will rise an exception with the following details.
Exception Name : java.lang.ArrayindexOutOfBoundsException
Exception Description: 10
Exception Location: Test.java: 6
278
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A
{
}
class B extends A
{
}
class Test
{
public static void main(String[] args)
{
A a=new A();
B b=(B)a;
}
}
If we run the above code then JVM will rise an exception with the following details.
Exception Name: java.lang.ClassCastException
Exception Description: A can not be cast to B
Excepttion location: Test.java: 12
5.ClassNotFoundException:
In java applications, if we want to load a particular class bytecode to the memory with out creating
object then we will use the following method from java.lang.Class class.
When JVM encounter the above instuction, JVM will search for A.class file at current location, at java
predefined library and at the locations refered by "classpath" environment variable, if the required
A.class file is not identified at all the locations then JVM will rise ClassNotFoundException.
279
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we run this code the JVM will provide the following exception details.
1.Exception Name: java.lang.ClassNotFoundException
2.Exception Description: AAA
3.Exception Location: Test.java: 12
4.InstantiationException 5.IllegalArgumentException
When JVM encouter the above code then JVM will search for 0-arg constructor and non-private
constructor in the loaded class. if 0-arg constructor is not availabnle, if parameterized construcvtor is
existed then JVM will rise "java.lang.instantiationException". If non-private constructor is not
available, if private constructor is available then JVM will rise "java.lang.IllegalAccessException".
280
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If run the above code then JVM will provide an exception with the following details.
1.Exception Name : java.lang.InstantiationException
2.Exception Description: A
3.Exception Location:Test.java: 17
EX:
class A
{
static
{
System.out.println("Class Loading");
}
private A()
{
System.out.println("Object Creating");
}
}
class Test
{
281
Class c=Class.forName("A");
Object obj=c.newInstance();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we run the above code then JVM will rise an exception with the following details
1.Exception Name : java.lang.IllegalAccessException
2.Exception Decrition: Test class can not access the members of class A with the
modifier "private".
3.Exception Location" Test.java: 17
'throw' keyword:
'throw' is a java keyword, it can be used to rise exceptions intentionally as per the developers
application requirement.
Syntax:
throw new Exception_Name("----Exception Description-----");
EX:
class Test
{
public static void main(String[] args)throws Exception
{
String accNo=args[0];
String accName=args[1];
int pin_Num=Integer.parseInt(args[2]);
String accType=args[3];
System.out.println("Account Details");
System.out.println("---------------------");
System.out.println("Account Number :"+accNo);
System.out.println("Account Name :"+accName);
System.out.println("Account Type :"+accType);
System.out.println("Account PIN Number:"+pin_Num);
if(pin_Num>=1000 && pin_Num<=9999)
{
System.out.println("valid PIN Number");
}
else
{
throw new RuntimeException("Invalid PIN Number, enter Valid 4 digit
PIN Number");
}
}
282
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
---Account details----
Exception in thread "main" java.lang.RuntimeException: Invalid PIN Number, enter valid 4 digit PIN
number
at Test.main(Test.java:17)
1.'throws' keyword:
It is a Java keyword,it can be used to bypass the generated exception from the present method or
constructor to the caller method (or) constructor.
In Java applications, 'throws' keyword will be used in method declarations,not in method body.
In Java applications,”throws” keyword allows an exception class name,it should be either same as
the generated exception or super class to the generated exception.It should not be subclass to the
generated Exception.
'throws' keyword allows more than one exception in method prototypes.
Status:Valid
Status:InValid
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status:Valid
EX:
Void m1() throws IOException,FileNotFoundException
{
}
If we specify any super exception class along with throws keyword,then it is not necessary to specify
any of its child exception classes along with “throws” keyword.
NOTE:In any Java method,if we call some other method which is bypassing an exception by using
“throws” keyword,then we must handle that exception either by using “throws” keyword in the present
method[Caller Method] prototype or by using “try-catch-finally” in the body of the present
method[Caller method].
EX:
Void m1() throws Exception{
-----
------
}
Void m2(){
try{
m1();
}
catch(Exception e){
e.printStackTrace();
}
}
284
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.io.*;
class A{
void add() throws Exception{
concat();
}
Void concat() throws IOException{
throw new IOException();
}
}
class Test{
public static void main(String args[]) throws Throwable{
A a=new A();
a.add();
}
}
Internal Flow:
If we execute the above program,then JVM will recognize throw keyword in concat() method and
JVM will rise an exception in concat() method, due to throws keyword in concat() method prototype,
Exception will be bypassed to concat() method call that is in add(), due to throws keyword in add()
method Exception will be bypassed to add() method call , that is , in main() method, Due to 'throws'
keyword in main() method Excepotion will be bypassed to main() method call , that is, to JVM, where
JVM will activate "Default Exception Handler" , where Default Exception Handler will display
exception details.
Ans:
1.'throw' keyword can be used to rise the exceptions intentionally as Per the application reqirement.
'throws' keyword is able to by pass the exception from the present method to the caller method.
2.'throw' keyword will be utilized in method body.
285
'throws' keyword will be used in method declarations or in method prototype (or) in method header
part.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
try-catch-finally:
In Java application “throws” keyword is not really an exception handler,because “throws” keyword
will bypass the exception handling responsibility from present method to the caller method.
If we want to handle the exceptions,the location where exceptions are generated then we have to use
“try-catch-finally”.
Syntax:
try{
----
}
catch(Exception_Name e){
----
}
finally{
----
}
where the purpose of try block is to include a set of exceptions , which may rise an exception.
If JVM identify any exception inside "try" block then JVM will bypass flow of execution to "catch"
block by skipping all the remaining instructions in try block and by passing the generated Exception
object reference as parameter.
If no exception is identified in "try" block then JVM will execute completely "try" block,at the end of
try block, JVM will bypass flow of execution to "finally" block directly.
The main purpose of catch block is to catch the exception from try block and to display exception
details on command prompt.
To display exception details on command prompt,we have to use the following three approaches.
1.e.printStackTrace()
2.System.out.println(e):
3.System.out.println(e.getMessage());
1.e.printStackTrace():
It will display the exception details like Exception Name,Exception Description and Exception
286
Location.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.System.out.println(e.getMessage()):
Where getMessage() method will return a String contains the exception details like only Description
of the exception.
EX:
class Test{
public static void main(String args[]){
try{
throw new ArithmeticException("My Arithmetic Exception");
}
catch(ArithmeticException e){
e.printStackTrace();
System.out.println();
System.out.println(e);
System.out.println();
System.out.println(e.getMessage());
}
finally{
}
}
}
OP:
java.lang.ArithmeticException:My Arithmetic Exception
at Test.main(Test.java:7)
My Arithmetic Exception
Where the main purpose of finally block is to include some Java code , it will be executed
irrespective of getting exception in "try" block and irrespective of executing "catch" block.
287
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
1."final" is a keyword it can be used to declare constant expressions.
There are three ways to use final keyword in java applications.
2.finally block: It is part of try-catch-finally syntax,it will include some instructions,which must be
executed by JVM irrespective of getting exception from try block and irrespective of executing catch
block.
3.finalize(): It is a method in java.lang.Object class,it will be executed just before destroying objects
inorder to give final notification to the user about to destroy objects.
OP:
Before try
Inside try
Inside finally
After finally
288
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println(val);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:finally block provided return statement is the finally return statement for the method
Ans:
Yes,it is possible to provide try block with out catch block but by using "finally" Block.
Syntax:
try{
}
finally{
}
EX:
class Test{
public static void main(String args[]){
System.out.println("Before try");
try{
System.out.println("Before Exception inside try");
int i=100;
int j-0;
float f=i/j;
System.out.println("After Exception inside try");
}
finally{
System.out.println("Inside finally");
}
System.out.println("After Finally");
}
}
OP:
Before try
Before exception inside try
Inside finally
Exception in thread “main” java.lang.ArithmeticException:/by zero
290
at Test.main(Test.java:11)
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Yes,it is possible to provide "try" block with out "finally" block but by using "catch" block.
Syntax:
try{
-------
--------
}
catch(Exception e){
-------------
-------------
}
Ans:
Yes,it is possible to provide try-catch-finally inside try block,inside catch block and inside finally
block.
Syntax-1:
try{
try{
}
catch(Exception e){
}
finally{
}
}
catch(Exception e){
}
finally{
291
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax-3:
try{
}
catch(Exception e){
}
finally{
try{
}
catch(Exception e){
}
finally{
}
}
Q)Is it possible to provide more than one catch block for a single try block?
Ans:
Yes,it is possible to provide more than one catch block for a single try block but with the following
conditions.
1.If no inheritance relation existed between exception class names which are specified along with
catch blocks then it is possible to provide all the catch blocks in any order.If inheritance relation is
existed between exception class names then we have to arrange all the catch blocks as per Exception
classes inheritance increasing order.
2.In general,specifying an exception class along with a catch block is not giving any guarantee to rise
the same exception in the corresponding try block,but if we specify any pure checked exception along
292
with any catch block then the corresponding "try" block must rise the same pure checked exception.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status:Valid Combination
Ex2:
try{
}
catch(NullPointerException e){
}
catch(ArithmeticException e){
}
catch(ClassCastException e){
}
status:Valid Combination
Ex3:
try{
}
catch(ArithmeticException e){
}
catch(RuntimeException e){
}
catch(Exception e){
}
Status:Valid 293
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
status: Invalid
Ex5:
try{
throws new ArithmeticException("My Exception");
}
catch(ArithmeticException e){
}
catch(IOException e){
}
catch(NullPointerException e){
}
Status:Invalid
Ex6:
try{
throw new IOException("My Exception");
}
catch(ArithmeticException e){
}
catch(IOException e){
}
catch(NullPointerException e){
}
status:Valid
294
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.Create and Rise exception in Java application as per the application requirement:
try{
throw new MyException("My Custom Exception");
}
catch(MyException me){
me.printStackTrace();
}
{
this.accNo=accNo;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we specify "Exception" class along with catch block then it able to catch and handle all the
exceptions which are either same as Exception or child classes to Exception, this approach will not
handling exceptions individually, it will handle all the exceptions in the common way.
If we want to handle to the Exceptions separately then we have to use multiple catch blocks for a
single try block.
try{
}catch(ArithmeticException e){
}catch(NullPointerException e){
}catch(ClassCastException e){
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test{
public static void main(String args[]){
try{
/* int a=10;
int b=0;
float c=a/b;
*/
/*java.util.Date d=null;
System.out.println(d.toString());
*/
int[] a={1,2,3,4,5};
System.out.println(a[10]);
}
catch(ArithmeticException | NullPointerException | ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}
}
In general,in Java applications,we may use the resources like Files,Streams,Database Connections....as
per the application requirements.
If we want to manage the resources along with try-catch-finally in Java applications then we have to
use the following conventions.
The main intention to declare the resources before "try" block is to make available resources variables
298
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To manage the resources in Java applications,if we use the above convention then developers have to
use close() methods explicitly,Developers have to provide try-catch-finally inside "finally" block,this
convention will increase no.of instructions in Java applications.
To overcome all the above problems,JAVA7 version has provided a new Feature in the form of "Try-
With-Resources" or "Auto Closeable Resources".
In the case of "Try-With-Resources",just we have to declare and create the resources along with
"try"[not inside try block,not before try block] and no need to close these resources inside the finally
block,why because,JVM will close all the resources automatically when flow of execution is coming
out from "try" block.
In the case of "Try-With-Resources",it is not required to close the resources explicitly,it is not required
299
to use close() methods in finally block explicitly,so that it is not required to use "finally" block in try-
catch-finally syntax.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Where all the specified Resources classes or interfaces must implement "java.io.AutoCloseable"
interface.
Where if we declare resources as AutoCloseable resources along with "try" then the resources
reference variables are converted as "final" variables.
EX:
try(File f=new File("abc.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Connection con=DriverManager.getConnection("jdbc:odbc:nag","system","durga");)
{
-------
-------
}
catch(Exception e){
e.printStackTrace();
}
300
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
process is a flow of execution to perform a particular task.
At starting point of the computers we have Single Process Mechanism or Single Tasking to execute
applications.
In Single Process Mechanism, System is able to allow only one task at a time to load into the memory
even our system main memory is capable to manage all the tasks.
In Single Process mechanism, System is able to allow only one process to execute all the tasks which
are available in our application, it will follow sequenetial kind of execution , it will increase
application execution time and it will reduce application performance.
To overcome the above problems we have to use Multi Process Mechanim or multi tasking.IN Multi
tasking system is able to allow to load more than one task at a time in main memory and it able to
allow more than one process to execute application, it will follow parallel execution , it will reduce
application execution time and it will improve application performance.
To execute applications by using Multi Tasking or Multi Process Mechanism we have to use the
following components.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Process is heavy weight , to handle it System has to consume more memory and more execution time,
it will reduce application performance.
Thread is light weight, to handle it system has to consume less memory and less execution time, it will
improve application performance.
Java is following Multi Thread Model to execute applications and it will provide very good
environment to create and execute more than one thared at a time.
In java applications, to create Threads JAVA has provided the following predefined library in the
302
Q)What is thread and in how many ways we are able to create threads in java?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
303
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The main intention of start() method is to create new thread and to access run() method by passing the
generated thread.
EX:
304
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
In java applications, to create threads if we use first approach then we have to declare an user defined
class and it must be extended from java.lang.Thread class, in this context, it is not possible to extend
other classes , if we extend any other class like Frame,.. along with Thread class then it will represent
Multiple Inheritance, it is not possible in java .
To overcome the above problem, we have to use second approach to create thread , that is,
implementing Runnable interface.
case-1:
MyThread mt=new MyThread();
mt.start();
Reason: start() method was not declared in MyThread class and in its super class java.lang.Object
305
class,
start() method is existed in java.lang.Thread class.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status: No Compilation Error, but, only Main thread access MyThread class run() method like a
normal java method, no multi threadding environment.
Case-3:
MyThread mt=new MyThread();
Thread t=new Thread();
t.start();
Status: No Compilation Error, start() method creates new thread and it access Thread class run()
method, not MyThread class run() method.
Case-4:
MyThread mt=new MyThread();
Thread t=new Thread(mt);
t.start();
Status: No Compilation Error, start() method creates new thread and it will bypass new thread to
MyThread class run() method.
Thread Lifecycle:
The collective information of a thread right from its starting point to ending point is called as "Thread
Life Cycle".
In java applications, Threads are able to have the following states as part of their lifecycle.
1.New/Born State:
When we create Thread class object in java applications then Thread will come to New/Born state.
2.Ready/Runnable State:
When we access start() method Thread Schedular has to assign system resources like memory and
time, here before assigninig system resources and after calling start() method is called as
Ready/Runnable state.
3.Running State:
In java applications, after calling start() method and after getting system resources like memory and
execution time is called as "Running State".
306
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
4.Dead/Destroy State:
In java applications, when we access stop() method over Running thread then that thread will come
to Dead/Destroy state.
5.Blocked State:
In java applications, we are able to keep a thread in Blocked state from Running state in the
following situations.
a)When we access sleep(--) method with a particular sleep time.
b)When we access wait() method.
c)When we access suspend() method.
d)When we perform IO Operations.
In java applications, we are able to bring a thread from Blocked state to Ready / Runnable state in the
following situations.
a)When sleep time is over.
b)If any other thread access notify() / notifyAll() methods.
c)If any other thread access resume() method.
d)When IO Operations are completed.
Consrtuctors:
1.public Thread()
--> This constructor can be used to create thread class object with the following properties.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.public Thread(Runnable r)
-->This constructor can be used to create Thread class object with the specified Runnable reference.
OP: Thread[Thread-1,5,main]
NOTE: To provide ThreadGroup name we have to use a predefined class like java.lang.ThreadGroup,
to create ThreadGroup class object we have to use the following Constructor.
OP: Thread[Thread-1,5,Java]
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:Thread[Core Java,5,Java]
Methods:
1.public void setName(String name)
-->It can be used to sett a particular name to the Thread explicitly.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To represent Thread priority values, java.lang.Thread class has provided the following constants.
EX:
class Test
{
public static void main(String[] args)
{
Thread t=new Thread();
System.out.println(t.getPriority());
t.setPriority(7);
System.out.println(t.getPriority());
t.setPriority(Thread.MAX_PRIORITY-2);
System.out.println(t.getPriority());
//t.setPriority(15);-->IllegalArgumentException
}
}
EX:
class Test
{
public static void main(String[] args)
{
Thread t=new Thread();
t.start();
System.out.println(Thread.activeCount());
310
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
mt1.setName("AAA");
mt2.setName("BBB");
mt3.setName("CCC");
mt1.start();
mt2.start();
mt3.start();
311
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Daemon Threads
These threads are running internally to provided services to some other thread and it will be terminated
along with the threads which are taking services.
EX: mt.setDaemon(true);
To check whether a thread is daemon thread or not we have to use the following method.
EX: In Java, Garbage Collector is a thread running internally inside JVM and it will provide Garbage
Collection services to JVM and it will be terminated along with JVM automatically.
Synchronization:
In java applications, if we execute more than one thraed on a single data item then there may be a
chance to get data inconsistency, it may generate wrong results in java applications.
IN java applications, to provide data consistency in the above situation we have to use
"Synchronization".
"Synchronization" is a mechanism , it able to allow only one thread at a time , it will not allow more
than one at a time, it able to allow other threads after completion of the present thread.
312
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In java applications, to ptovide synchronization JAVA has provided a keyword in the form of
"synchronized".
In java applications, we are able to achieve "synchronization" in the following two ways.
1.synchronized method
2.synchronized block
1.synchronized method:
It is a normal java method, it willallow only one thread at a time to execute instructions, it will not
allow more than one thread at a time, it will allow other threads after completion of the present
thread execution.
EX:
class A
{
synchronized void m1()
{
for(int i=0;i<10;i++)
{
String thread_Name=Thread.currentThread().getName();
System.out.println(thread_Name);
}
}
}
class MyThread1 extends Thread
{
A a;
MyThread1(A a)
{
this.a=a;
}
313
a.m1();
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
mt1.setName("AAA");
mt2.setName("BBB");
mt3.setName("CCC");
mt1.start();
mt2.start();
314
mt3.start();
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
In java applications, if we use synchronized method to achieve synchronization then it will provide
synchronization through out the method irrespective of the actual requirment.If we need
synchronization upto a block inside the synchronized method then it will provide unneccessary
sychronization fpor the remianing part of the method, it will increase execution time and it will
reduuce application performance.
In the above context, to provide synchronization upto the required part then we have to use
synchronized block.
Synchronized block:
It is a set of instructions, it able to allow only one thread at a time to execute instructions, it will not
allow more than one thread at a time, it will allow other threads after completion of the present thread
execution.
Syntax:
synchronized(Object o)
{
-----
-----
}
EX:
class A
{
void m1()
{
String thread_Name=Thread.currentThread().getName();
System.out.println("Before Synchronized Block :"+thread_Name);
synchronized(this)
{
for(int i=0;i<10;i++)
{
String thread_Name1=Thread.currentThread().getName();
System.out.println("Inside Synchronized Block :"+thread_Name1);
}
}
315
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
mt1.setName("AAA");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
mt1.start();
mt2.start();
mt3.start();
}
}
1.wait()
2.notify()
3.notifyAll()
Where notify() method can be used to give a notification to a thread which is available in waiting state.
Where notifyAll() method can be used to give a notification to all the threads which are available i
waiting state.
If we want to use these methods in java applications then we must provide "Synchronization".
IN general, Inter Thread Communication will provide solutions for the problems like "Producer-
Consumer" problems.
In Propducer-Consumer problem, producer and cosumer are two threads, where producer has to
produce an item and consumer has to consume that item, the same sequence has to be provided infinite
no of times, where Producer must not produce an item with out consuming previous item by consumer
and consumer must not consume an item with out producing that item by producer.
317
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
else
{
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
p.start();
c.start();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Dead Lock:
Dead Lock is a situation , where more than one thread is depending on each other in circular
dependency.
In java applications, once we are getting deadlock then program will struct in the middle, so that, it
will not have any recovery mechanisms, it will have only prevention mechanisms.
EX:
this.course_Name=course_Name;
this.faculty_Name=faculty_Name;
Page
}
public void run()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
class Test
{
public static void main(String[] args)
{
Object course_Name=new Object();
Object faculty_Name=new Object();
Register_Course rc=new Register_Course(course_Name, faculty_Name);
Cancel_Course cc=new Cancel_Course(course_Name, faculty_Name);
rc.start();
cc.start();
}
}
321
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In case of C and C++ applications,we are able to perform input and output operations by using some
predefined library in the form of printf(),scanf(),cin>>,cout<<,......
Similarly in Java Applications,to perform input and output operations we have to use streams.
Java has represented all the streams in the form of predefined classes in "java.io" package.
Stream:
Stream is medium or channel,it will allow the data in continuous flow from input devices to java
program and from Java program to output devices
.
In Java IOStreams are divided into following ways:
1.Byte oriented Streams.
2.Character-Oriented Streams
1.Byte-Oriented Streams:
These are Streams, which will allow the data in the form of bytes from input devices to Java
program and from java program to output devices.
The length of the data in byte-oriented streams is 1 byte.
1.InputStream
2.OutputStream
1.InputStream:
It is a byte-oriented Stream,it will allow data in the form of bytes from input devices to Java
Applications.
EX:
ByteArrayInputStream
FilterInputStream
DataInputStream
ObjectInputStream
322
FileInputStream
StringBufferInputStream
BufferedInputStream….
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
ByteArrayOutputStream
FilterOutputStream
DataOutputStream
FileOutputStream
PrintStream
BufferedOutputStream..
NOTE: All the ByteOrientedStream classes are terminated with "Stream" word.
NOTE: The length of data items in Byte Oriented Streams is 1 byte.
2.Character-Oriented Streams:
These are the Streams,which will allow the data in the form of characters from input devices to java
program and form java program to output devices.
2.Writer:
It is a character-oriented stream,it will allow the data in the form of characters from java program to
output devices.
EX:
CharArrayWriter
FilterWriter
FileWriter
323
PrintWriter
BufferedWriter….
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
FileOutPutStream:
It is byte-oriented Stream,it can be used to transfer the data from Java program to a particular target
file.
To transfer the data from Java program to a particular target file by using FileOutPutstream we have
to use the following Steps.
EX:
FileOutPutStream fos=new FileOutPutStream("abc.txt");
-->It will override the existed data in the target file at each and every write operation.
FileOutPutStream fos=new FileOutPutStream("abc.txt",true);
-->It will not override the existed data in the target file,it will append the specified new data to
the existed data in the target file.
When JVM encounter the above instruction,JVM will perform the following tasks.
a)JVM will take the specified target file.
b)JVM will search for the specified target file at the respective location.
c)If the specified target file is available then JVM will establish FileOutPutStream from java
program to target file.
d)If the specified target file is not available then JVM will create a file with the target file name and
establish FileOutPutStream from Java program to target file.
EX:
fos.write(b);
4)Close FileOutPutStream:
324
fos.close();
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
FileInputStream fis=new FileInputStream("abc.txt");
When JVM encounter the above instruction then JVM will perform the following actions.
1.JVM will take the specified source file name.
2.JVM will search for the specified source file at the respective location.
3.If the source file is not available at the respective location then JVM will raise an excpetion
like "java.io.FileNotFoundException".
4.If the required source file is available then JVM will establish FileInputStream from source file
to JAVA program.
5.After creating FileInputStream,JVM will transfer the data from source file to FileInputStream
in the form bytes.
2.Get the size of the data from FileInputStream and prepare byte[] with the data size:
To get the size of the data from FileInputStream,we have to use the following method
public int available()
EX:
int size=fis.available();
byte[] b=new byte[size];
3.Read the data from FileInputStream into byte[]:
To read the data from FileInputStream into byte[],we have to use the following method.
public void read(byte[] b)throws IOException
EX:
fis.read(b);
4.Convert data from byte[] to String:
String data=new String(b);
System.out.println(data);
5.close FileInputStream:
fis.close();
325
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.io.*;
class DisplayEx{
public static void main(String args[]) throws Exception{
String file_Name=args[0];
FileInputStream fis=new FileInputStream(file_Name);
int size=fis.available();
byte b[]=new byte[size];
fis.read();
String data=new String(b);
System.out.println(data);
fis.close();
}
}
Write a Java program to count no of words available in a particular text file and how many times the
word "Durga" is repeated?
import java.io.*;
import java.util.*;
class Word_Count_Ex{
public static void main(String args[]) throws Exception{
FileInputStream fis=new FileInputStream("abc.txt");
int size=fis.available();
byte b[]=new byte[size];
fis.read();
String data=new String(b);
StringTokenizer st=new StringTokenizer(data);
int tokens=st.countTokens();
System.out.println("No of words :"+tokens);
int count=0;
while(st.hasMoreTokens()){
String token=st.nextToken();
if(token.equals("Durga")){
count=count+1;
}
}
System.out.println("'Durga' is repeated :"+count);
326
fis.close();
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
FileWriter:
This character-oriented Stream can be used to transfer the data from Java Application to a particular
target File.
If we want to transfer the data from java application to a particular target file by using FileWriter
then we have to use the following steps:
1.Create FileWriter object:
To create FileWriter class object,we have to use the following constructor.
public FileWriter(String target_File)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
public class FileWriterEx{
public static void main(String args[])throws Exception{
FileWriter fw=new FileWriter("abc.txt",true);
String data="DurgaSoftwareSolutions";
char[] ch=data.toCharArray();
fw.write(ch);
fw.close();
}
}
FileReader:
This character-oriented stream can be used to transfer the data from a particular source file to Java
program.
If we want to transfer the data from a particular source file to Java program by using FileReader
then we have to use the following steps:
1.Create FileReader class Object:
To create FileReader class object,we have to use the following constructor.
public FileReader(String file_Name)throws FileNotFoundException
EX:
FileReader fr=new FileReader("abc.txt");
when JVM encounter the above instruction,JVM will perform the following steps.
a)JVM will take source file name from FileReader constructor.
b)JVM will check whether the specified file is available or not at the respective location.
c)If the specified source file is not available at the respective location then JVM will rise an
exception like "java.io.FileNotFoundException".
d)If the specified file is existed at the respective location then JVM will establish FileReader
from source file to Java program.
e)After creating FileReader,JVM will transfer the content of source file to FileReader object in
the form of characters.
2.Read data from FileReader:
To read data from FileReader,we have to use the following steps.
a)Read character by character from FileReader in the form of ASCII values.
b)Convert that ASCII values into the respective characters.
328
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
public class FREx{
public static void main(String args[])throws Exception{
FileWriter fr=new FileWriter("abc.txt");
String data="";
int val=fr.read();
while(val!=-1){
data=data+(char)val;
val=fr.read();
}
System.out.println(data);
fr.close();
}
}
Write a JAVA programme to copy a document from one file to another file by using character
oriented Streams?
import java.io.*;
public class FileCopyEx{
public static void main(String args[])throws Exception{
FileReader fr=new FileReader("hibernatecgf.xml");
String data="";
int val=fr.read();
while(val!=-1){
data=data+(char)val;
val=fr.read();
}
char[] ch=data.toCharArray();
FileWriter fw=new FileWriter("abc.xml");
fw.write(ch);
fr.close();
fw.close();
}
}
329
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.BufferedReader:
If we want to take dynamic input by using BufferedReader in java applications then we have to use
the following statement.
where "in" is static variable,it will refer a predefined "InputStream" object which is connected with
command prompt.
If we provide data on command prompt then that data will be transfered to InputStream object in
the form of binary data.
where "InputStreamReader can be used to convert the data from binary representation to character
representation.
where BufferedReader can be used to improve the performance of Java application while
performing input operation.
To read the data from BufferedReader,we will use the following method
1.readLine()
2.read()
Ans:
readLine() method will read a line of text from command prompt[BufferedReader] and it will return
that data in the form of String.
read() method will read a single character from command prompt[BufferedReader] and it will return
that character in the form of its ASCII value.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we provide 10 and 20 as dynamic input to the above programme then the above programme will
display "1020" value instead of 30 that is the above programme has performed String concatenation
instead of performing Arithmetic Addition because br.readLine() method has return 10 and 20 values
in the form String data.
In the above programme,if we want to perform Arithmetic operations over dynamic input then we have
to convert String data into the respective primitive data,for this we have to use Wrapper Classes.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Scanner:
This class is provided by Java in java.util package along with JDK5.0 Version.
In java applications, if we use BufferedReader to dynamic input then we must use wrapper classes
while reading primitive data as dynamic Input.
In java applications, if we use "Scanner" to read dynamic input then it is not required to use
wrapper classes while reading primitive data as dynamic input, scanner is able to provide
environment to read primitive data directly from command prompt.
If we want to use scanner in Java applications then we have to use the following steps.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println("Employee Details");
System.out.println("---------------------");
System.out.println("Employee Number :"+eno);
System.out.println("Employee Name :"+ename);
System.out.println("Employee Salary :"+esal);
System.out.println("Employee Address :"+eaddr);
}
}
EX:
import java.util.*;
public class ScannerEx1
{
public static void main(String[] args)throws Exception
{
Scanner s=new Scanner(System.in);
System.out.print("Enter Text Data :");
String data1=s.nextLine();
System.out.print("Enter The same text data again :");
String data2=s.next();
System.out.println("First Entered :"+data1);
System.out.print("Second Entered :"+data2);
}
}
333
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java applications,to take dynamic input,if we use BufferedReader and Scanner then we are able to
get the following drawbacks:
1.We have to consume 2 instructions for each and every dynamic input[s.o.pln(..) and readLine() or
nextXXX() methods]
2.These are not providing security for the data like password data,pin numbers.....
To overcome the above problems,we have to use "Console" dynamic input approach.
If we want to use Console in Java applications then we have to use the following Steps:
EX:
Console c=System.console();
2.Read dynamic Input:
To read String data,we have to use the following method.
public String readLine(String msg)
To read password data,we have to use the following method.
public char[] readPassword(String msg)
EX:
import java.io.*;
public class ConsoleEx{
public static void main(String args[])throws Exception{
Console c=System.console();
String uname=c.readLine("User Name :");
char[] pwd=c.readPassword("PassWord :");
String upwd=new String(pwd);
if(uname.equals("durga")&&upwd.equals("durga")){
System.out.println("Valid User");
}
else{
System.out.println("InValid User");
334
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Java, Object is a block of memory, it is not possible to transfer the object through network, where
we have to transfer object data from one machine to another machine through network.
To transfer an Object through network from one machine to another machine, first we have to
separate the data from an object at local machine and convert the data from system representation to
network representation then transfer the data to network.
At remote machine, we have to get the data from network and convert the data from system
representation to System representation and reconstruct an object on the basis of data.
----Diagram--------------
The process of converting the data from System representation to network representation is called
as "Marshalling".
The process of converting the data from Network representation to System representation is called
as "UnMarshalling".
To perform Serialization and Deserialization in Java applications, JAVA has given two predefined
byte-oriented streams like java.io.ObjectOutputStream for Serialization java.io.ObjectInputStream
for Deserialization
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Employee implements Serializable{
int eno=111;
String ename="AAA";
float esal=5000;
}
Employee e1=new Employee();
3.Create ObjectOutPutStream:
To create ObjectoutputStream,we have to use the following constructor.
public ObjectOutputStream(FileOutputStream fos)
EX:
ObjectOutputStream oos=new ObjectOutputStream(fos);
4.Write Serializable object to ObjectOutputStream:
To write Serializable object to ObjectOutputStream,we have to use the following method.
public void writeObject(Object obj)throws NotSerializableException
EX: oos.writeObject(e1);
2.Create ObjectInputStream:
To create ObjectInputStream class object,we have to use the Following constructor.
public ObjectInputStream(FileInputStream fis)
336
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
oos.writeObject(emp1);
System.out.println();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
oos.writeObject(u);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status:"java.io.NotSerializableException".[Exception]
-->In Java applications, if we implement Serializable interface to the super class then automatically all
the sub class objects are eligible for Serialization and Deserialization.
EX:
import java.io.*;
class A implements Serializable{
int i=10;
int j=20;
}
class B extends A{
int k=30;
int l=40;
}
class Test{
public static void main(String args[])throws Exception{
FileOutputStream fos=new FileOutputStream("abc.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
B b=new B();
oos.writeObject(b);
}
}
339
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.io.*;
class A {
int i=10;
int j=20;
}
class B extends A implements Serializable{
int k=30;
int l=40;
}
class Test{
public static void main(String args[])throws Exception{
FileOutputStream fos=new FileOutputStream("abc.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
B b=new B();
oos.writeObject(b);
}
}
-->In Java applications,while Serializing an object if any associated object is available then JVM will
serialize the respective associated object also but the respective associated object must implement
Serializable interface otherwise JVM will rise an exception like "java.io.NotSerializableException".
EX:
import java.io.*;
class Branch implements Serializable{
String bid;
String bname;
Branch(String bid,String bname){
this.bid=bid;
this.bname=bname;
}
}
class Account implements Serializable{
String accNo;
String accName;
340
Branch branch;
Account(String accNo,String accName,Branch branch){
Page
this.accNo=accNo;
this.accName=accName;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the above context to have controlling over serialization and deserialization processes inorder to
341
provide the services like security, data compression,data decompression, data encoding.....over
serialized and deserialized data we have to go for "Externalization".
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
java.io.Serializable interface is a marker interface, which is not having abstract methods but
java.io.Externalizable interface is not marker interface,which includes the following methods.
---implementation---
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
import java.io.*;
class Employee implements Externalizable{
String eid;
String ename;
String email;
String emobile;
//It will be used to construct object while performing deserialization in Externalization process
public Employee(){
}
Employee(String eid,String ename,String email,String emobile){
this.eid=eid;
this.ename=ename;
this.email=email;
this.emobile=emobile;
}
public void writeExternal(ObjectOutput oop)throws IOException{
try{
StringTokenizer st1=new StringTokenizer(eid,"-");
st1.nextToken();
int no=Integer.parseInt(st1.nextToken());
StringTokenizer st2=new StringTokenizer(email,"@");
String mail=st2.nextToken();
StringTokenizer st3=new StringTokenizer(emobile,"-");
st3.nextToken();
String mobile=st3.nextToken();
oop.writeInt(no);
oop.writeUTF(ename);
oop.writeUTF(mail);
343
oop.writeUTF(mobile);
}
Page
catch(Exception e){
e.printStackTrace();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
344
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Sequential Files
2.RandomAccessFiles
1.Sequential Files:
It will allow the user to retrive data in Sequential manner.
To represent Sequential files,Java has given a predefined class in the form of java.io.File.
Creating File class object is not sufficient to create a file at directory structure we have to use the
following method.
public File createNewFile()
To get file / directory parent location,we have to use the following method.
To check whether the created thing File or not,we have to use the following method.
To check whether the created thing is directory or not we have to use the following method.
345
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
RandomAccessFile:
It is a Storage area,it will allow the user to read data from random positions.
To represent this file,java has given a predefined class in the form of
"java.io.RandomAccessFile".
To create RandomAccessFile class object,we have to use the following constructor.
public RandomAccessFile(String file_name,String access_Privileges)
where access_Privileges may be "r" [Read] or "rw" [Read and Write]
To move file pointer to a particular position in RandomAccessFile,we have to use the following
method.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
347
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Standalone Appl
2.Distributed Appl
1.Standalone Application:
If we prepare any java application with out using client-server arch then that java application is
called as "Standalone Application".
To prepare standalone applicatins we can use Core Libraries like java.io, java.util, java.lang,....
2.Distributed Application:
If we prepare any java application on the basis of Client-Server arch then that java application is
called as Distributed application.
To prepare Distributed applications, JAVA has provided the following set iof technologies.
1.Socket Programming
2.RMI
3.CORBA
4.EJBs
5.WebServices
1.Socket Programming:
If we want to prepare distributed applications by using Socket Programming then we have to use
Sockets between machines to transfer data from one machine to another machine.
Socket is a Channel or medium to transfer data from one machine to another machine.
In Socket programming we have to establish Sockets on the basis of System IP Address and Port
Numbers.
348
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
IP Address is an unique identity to each and every machine over the network and which is provided by
network manager at the time of network configuration.
Port Number is an unique identity to each and every process being executed with in a single machine
and it would be provided by local operating system.
To prepare distributed applications by using Socket Programming the required predefined library was
provided by JAVA in the form of "java.net" package.
---- Diagram-------
NOTE: If server socket is available at the same machine then we are able to use "localhost" inplace of
Server_IP_Addr.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE: With the above steps , data will be send to Server, where Server will send response data to
client.
ps.println(data);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The above application provides one time communication, but, if we want to provide infinite
communication then we have to use infinite loops at both client application and Server application.
Applcation-2:
ClientApp.java
import java.io.*;
import java.net.*;
public class ClientApp
{
public static void main(String[] args)throws Exception
{
Socket s=new Socket("localhost", 4444);
OutputStream os=s.getOutputStream();
PrintStream ps=new PrintStream(os);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
InputStream is=s.getInputStream();
BufferedReader br2=new BufferedReader(new InputStreamReader(is));
while(true)
{
String data1=br1.readLine();
ps.println(data1);
String data2=br2.readLine();
System.out.println(data2);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.io.*;
import java.net.*;
public class ServerApp
{
public static void main(String[] args)throws Exception
{
ServerSocket ss=new ServerSocket(4444);
Socket s=ss.accept();
InputStream is=s.getInputStream();
BufferedReader br1=new BufferedReader(new InputStreamReader(is));
OutputStream os=s.getOutputStream();
PrintStream ps=new PrintStream(os);
BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String data1=br1.readLine();
System.out.println(data1);
String data2=br2.readLine();
ps.println(data2);
352
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)In java applications, to represent a group of other elements we have already arrays then what is the
requirement to use Collections?
or
Q)What are the differences between Array and Collection?
Ans:
1.Arrays are having fixed size in nature.In case of arrays, we are able to add the elements upto the
specified size only, we are unable to add the elements over its size, if we are trying to add elements
over its size then JVM will rise an exception like "java.lang.ArrayIndexOutOfBoundsException".
EX:
Student[] std=new Student[3];
std[0]=new Student();
std[1]=new Student();
std[2]=new Student();
std[3]=new Student();--> ArrayIndexOutOfBoundsException
Collections are having dynamically Growble nature, even if we add the elements over its size then
JVM will not rise any exception.
EX:
ArrayList al=new ArrayList(3);
al.add(new Student());
al.add(new Student());
al.add(new Student());
al.add(new Student());--> No Exception
2.In java, bydefault, Arrays are able to allow homogeneous elements, if we are trying to add the
elements which are not same Array data type then Compiler will rise an error like "Incompatible
Types".
EX:
Student[] std=new Student[3];
std[0]=new Student();
353
std[1]=new Student();
std[2]=new Customer();--> Incompatible Types Error
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
ArrayList al=new ArrayList(3);
al.add(new Student());
al.add(new Employee());---> No Error
al.add(new Customer();----> No Error
3.Arrays are not having predefined methods to perform searching and sorting operations over the
elements, in case of arrays to perfrom searching and sorting operations developers have to provide
their own logic.
In case of Collections, predefined methods or predefined Collections are defined to perform Searching
and Sorting operations over the elements.
OP: [A,B,C,D,E,F]
4.Arrays are able to allow only one type of elements, so Arrays are able to improve Typedness in java
applications and they are able to perform Typesafe operations.
Collections are able to allow different types of elements, so Collections are able to reduce typedness in
java applications and they are unable to perform Typesafe operations.
5.If we know the no of elements in advance at the time of writing java applications then Arrays are
better to use in java applications and they will provide very good performance in java applications, but,
But Arrays are not flexible to design applications.
In java applications, Collections are able to provide less performance, but, They will provide flexibility
354
to design applications.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)What are the classes and interfaces are existed in java.util package to repersent Collections?
--- Diagram---
Ans:
Collections are able to store all the elements individually, not in the form of Key-value pairs.
Maps are able to store all the elements in the form of Key-value pairs.
EX: To repersent Telephone Directory , where we are representing phone number and Customer Name
we have to use Maps.
Ans:
1.List is index based, it able to allow all the elements as per indexing.
Set is not index based, it able to allow all the elements on the basis of elements hashcode values.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Collection:
--> It is an interface provided by JAVA along with JDK1.2 version.
--> It able to repersent a group of individual elements as single unit.
--> It has provided the following methods common to every implementation class.
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
HashSet hs=new HashSet();
System.out.println(hs.add("A"));
hs.add("B");
hs.add("C");
hs.add("D");
System.out.println(hs);
System.out.println(hs.add("A"));
System.out.println(hs);
}
}
OP:
true
[A,B,C,D]
false
[A,B,C,D]
356
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
HashSet hs=new HashSet();
hs.add("A");
hs.add("B");
hs.add("C");
hs.add("D");
System.out.println(hs);
HashSet hs1=new HashSet();
System.out.println(hs1.addAll(hs));
System.out.println(hs1);
System.out.println(hs1.addAll(hs));
System.out.println(hs1);
}
}
OP:
[D,A,B,C]
true
[D,A,B,C]
false
[D,A,B,C]
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
System.out.println(al);
System.out.println(al.remove("B"));
System.out.println(al);
System.out.println(al.remove("B"));
System.out.println(al);
}
}
OP:
[A,B,C,D]
true
[A,C,D]
false
[A,C,D]
358
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
360
al.add("E");
al.add("F");
Page
System.out.println(al);
ArrayList al1=new ArrayList();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
System.out.println(al);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
al.add("F");
System.out.println(al);
System.out.println(al.size());
Object[] obj=al.toArray();
362
for(Object o: obj)
{
Page
System.out.print(o+" ");
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
List :
-->List is a direct chaild interface to Collection interface
-->List was provided by JAVA along with its JDK1.2 version
-->List is index based, it able to arrange all the elements as per indexing.
-->List is able to allow duplicate elements.
-->List is following insertion order.
-->List is not following Sorting order.
-->List is able to allow any no of null values.
-->List is able to allow heterogeneous elements.
List interface has provided the following methods common to all of its implementation classes.
1.public void add(int index, Object obj)
-->It able to add the specified element at the specified index value.
2.public Object set(int index, Object obj)
-->It able to set the specifiedf element at the specified index value.
Ans:
add(--) method is able to perform insert operation. if any element is existed at the specified element
then add() method will insert the specified new element at the specified index value and add() method
will adjust the existed element to next index value. If no element is existed at the specified index then
add() method add the specified element at the specified index.
set(--) method is able to perform replace operation. If any element is existed at the specified index then
363
set() method will remove the existed element and set(-) method will add the specified element to the
specified index and set() method will return the removed element. If no element is existed at the
Page
specified index value then set() method will rise an exception like
java.lang.indexOutOfBoundsException.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
System.out.println(al);
al.add(1,"X");
System.out.println(al);
al.add(6,"F");
System.out.println(al);
al.set(3,"Y");
System.out.println(al);
//al.set(7,"Z");--->IndexOutOfBoundsException
System.out.println(al.get(4));
System.out.println(al.remove(6));
System.out.println(al);
al.add(6,"X");
al.add(7,"B");
al.add(8,"X");
System.out.println(al);
System.out.println(al.indexOf("X"));
System.out.println(al.lastIndexOf("X"));
}
364
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructors:
1.public ArrayList()
-->It can be used to create an empty ArrayList object with 10 elements as default capacity value.
EX: ArrayList al=new ArrayList();
3.public ArrayList(Collection c)
-->It can be used to create an ArrayList object with all the elements of the specified Collection
object.
365
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructors:
1.public Vector()
--> It can be used to create an empty Vector object with the initial capacity 10 elements.
OP: 10
2.public Vector(int capacity)
--> It can be used to create an empty vector object with the specified capacity value.
OP: 20
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Vector v=new Vector(5,5);
System.out.println(v.capacity());
for(int i=1;i<=6;i++)
{
v.add(i);
}
System.out.println(v.capacity());
for(int i=7;i<=11;i++)
{
v.add(i);
}
System.out.println(v.capacity());
}
}
OP:
5
10
15
368
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Vector v=new Vector();
v.add("A");
v.add("B");
v.add("C");
v.add("D");
System.out.println(v);
Vector v1=new Vector(v);
System.out.println(v1);
}
}
OP:
[A,B,C,D]
[A,B,C,D]
Methods:
1.public void addElement(Object obj)
-->It will add the specified element to Vector.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Vector v=new Vector();
v.addElement("A");
v.addElement("B");
v.addElement("C");
v.addElement("D");
v.addElement("E");
System.out.println(v);
System.out.println(v.firstElement());
System.out.println(v.lastElement());
System.out.println(v.elementAt(3));
v.removeElement("D");
System.out.println(v);
v.removeElementAt(2);
System.out.println(v);
v.removeAllElements();
System.out.println(v);
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
12.We are unable to get capacity value of ArrayList, because, no capacity() method in ArrayList class.
We can get capacity value of Vector, because, capacity() method is existed in vector class.
Stack:
It was introduced in JDK1.0 version, it is a Legacy Collection and it is a chaild class to Vector
class. It able to arrange all the elements as per "Last In First Out"
[LIFO] alg.
Constructor:
public Stack()
--> It will create an empty Stack object.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Stack s=new Stack();
s.push("A");
s.push("B");
s.push("C");
s.push("D");
s.push("E");
System.out.println(s);
System.out.println(s.pop());
System.out.println(s);
System.out.println(s.peek());
System.out.println(s);
System.out.println(s.search("B"));
System.out.println(s.search("X"));
}
}
372
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructors:
1.public LinkedList()
-->It will create an empty LinkedList object.
2.public LinkedList(Collection c)
-->It will create LinkedList object with all the elements of the specified Collection object.
EX:
LinkedList ll1=new LinkedList();
ll1.add("A");
ll1.add("B");
ll1.add("C");
ll1.add("D");
System.out.println(ll1);
LinkedList ll2=new LinkedList(ll1);
System.out.println(ll2);
373
OP: [A, B, C, D]
[A, B, C, D]
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
LinkedList ll=new LinkedList();
ll.add("A");
ll.add("B");
ll.add("C");
ll.add("D");
ll.add("E");
System.out.println(ll);
ll.addFirst("X");
ll.addLast("Y");
System.out.println(ll);
ll.removeFirst();
ll.removeLast();
System.out.println(ll);
System.out.println(ll.getFirst());
374
System.out.println(ll.getLast());
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP: [A, B, C, D]
As per the requirement, we dont want to display all the Elements at a time on command prompt, we
want to retrive elements one by one individually from Collection objects and we want to display all the
elements one by one on Command prompt.
To achieve the above requirment, Collection Framework has provided the following three Cursors or
Iterators.
1.Enumeration
2.Iterator
3.ListIterator
1.Enumeration:
It is a Legacy Cursor, it is applicable for only Legacy Collections to retirve elements in one by one
fashion.
To retrive elements from Collections by using Enumeration we have to use the following steps.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Vector v=new Vector();
v.add("A");
v.add("B");
v.add("C");
v.add("D");
v.add("E");
System.out.println(v);
Enumeration e=v.elements();
while(e.hasMoreElements())
{
System.out.println(e.nextElement());
}
}
}
Drawbacks:
1.Enumeration is applicable for only Legacy Collections.
2.Enumeration is able to allow only read operation while iterating elements.
Iterator:
Iterator is an interface provided JAVA along with its JDK1.2 version.
Iterator can be used to retrive all the elements from Collection objects in one by one fashion.
Iterator is applicable for all the Collection interface implementation classes to retrive elements.
376
Iterator is able to allow both read and remove operatins while iterating elements.
If we want to use Iterator in java applications then we have to use the following steps.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:Iterator it=al.iterator();
b)If next element is existed then read next element and move cursor to next position by using the
following method.
NOTE: To remove an element available at current cursor position then we have to use the following
method
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
377
System.out.println(al);
Iterator it=al.iterator();
Page
while(it.hasNext())
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
1.Enumeration is Legacy Cursor, it was introduced in JDK1.0 version.
Iterator is not Legacy Cursor, it was introduced in JDK1.2 version.
ListIterator:
It is an interface provided by JAVA along with JDK1.2 version.
It able to allow to read elements in both forward direction and backward direction.
It able to allow the operations like read, insert, replace and remove while iterating elements .
If we want to use ListIterator in java applications then we have to use the following steps.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To retirv elements from ListIterator in Forward direction then we have to use the following methods.
To perform the operations like remove, insert and replace over the elements we have to use the
following methods.
379
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
ll.add("F");
System.out.println(ll);
Page
ListIterator lit=ll.listIterator();
while(lit.hasNext())
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
1.Enumeration is applicable for only Legacy Collections.
2.Enumeration and Iterator are allowd to iterate elements in only Forward direction.
ListIterator is able to allow to iterate elements in both Forward direction and backward direction.
Iterator is able to allow both read and remove operations while iterating elements.
ListIterator is able to allow the operations like insert, replace, remove adn read operations while
iterating elements.
381
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
HashSet:
-->HashSet is a direct implementation class to Set interface.
-->It was introduced in JDK1.2 version.
-->It is not index based, it able to arrange all the elements on the basis of elements hashcode
values.
-->It will not allow duplicate elements.
-->It will not follow insertion order.
-->It will not follow Sorting order.
-->It able to allow only one null value.
-->Its interal data structer is "Hashtable".
-->its initial capacity is "16" elements and its initial fill_Ratio is 75%.
-->it is not synchronized.
-->Almost all the methods are not synchronized in HashSet
-->It allows more than one thread at a time.
-->It follows parallel execution.
-->It will reduce execution time.
-->It improves performance of the applications.
-->It is not giving guarantee for data consistency.
-->It is not threadsafe.
Constuctors:
1.public HashSet()
--> This constructor can be used to create an empty HashSet object with 16 elements as initial
capacity and 75% fill ratio.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
4.public HashSet(Collection c)
--> This constructor can be used to create HashSet object with all the elements of the specified
Collection .
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
HashSet hs1=new HashSet();
hs1.add("A");
hs1.add("B");
hs1.add("C");
hs1.add("D");
hs1.add("E");
System.out.println(hs1);
HashSet hs2=new HashSet(hs1);
System.out.println(hs2);
}
}
OP:
[D,E,A,B,C]
[D,E,A,B,C]
383
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
LinkedHashSet:
Q)What are the differences between HashSet and LinkedHashSet?
Ans:
1.HashSet was introduced in JDK1.2 version.
LinkedhashSet was introduced in JDK1.4 version.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
SortedSet:
-->It was introduced in JDK1.2 version.
-->It is a chaild interface to Set interface.
-->It is not index based.
-->It is not allowing duplicate elements.
-->It is not following insertion order.
-->It follows Sorting order.
-->It allows only homogeneous elements.
-->It will not allow heterogeneous elements, if we are trying to add heterogeneous elements then
JVM will rise an exception like java.lang.ClasscastException.
-->It will not allow null values, if we are trying to add any null value then JVM will rise an
exception like java.lang.NullPointerException.
-->It able to allow only Comparable objects bydefault, if we are trying to add non comparable
385
Note:If we are trying to add non comparable objects then we have to use Comparator.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet ts=new TreeSet();
ts.add("D");
ts.add("F");
ts.add("B");
ts.add("E");
ts.add("C");
ts.add("A");
System.out.println(ts);
System.out.println(ts.first());
System.out.println(ts.last());
System.out.println(ts.headSet("D"));
System.out.println(ts.tailSet("D"));
System.out.println(ts.subSet("B","E"));
}
}
386
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Methods:
1.public Object ceiling(Object obj)
--> It will return lowest element among all the elements which are greater than or equals to the
specified element.
387
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
TreeSet:
-->It was introduced in JDK1.2 version.
-->It is not Legacy Collection.
-->It has provided implementation for Collection, Set, SortedSet and navigableSet interfaces.
-->It is not index based.
-->It is not allowing duplicate elements.
-->It is not following insertion order.
-->It follows Sorting order.
-->It allows only homogeneous elements.
-->It will not allow heterogeneous elements, if we are trying to add heterogeneous elements then
JVM will rise an exception like java.lang.ClasscastException.
-->It will not allow null values, if we are trying to add any null value then JVM will rise an
exception like java.lang.NullPointerException.
-->It able to allow only Comparable objects bydefault, if we are trying to add non comparable
388
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructors:
1.public TreeSet()
-->It can be used to create an Empty TreeSet object.
2.public TreeSet(Comparator c)
-->It will create an empty TreeSet object with the explicit Sorting mechanism in the form of
Comparator
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet ts1=new TreeSet();
ts1.add("B");
ts1.add("C");
ts1.add("F");
ts1.add("A");
ts1.add("E");
ts1.add("D");
System.out.println(ts1);
TreeSet ts2=new TreeSet(ts1);
System.out.println(ts2);
}
}
389
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("B");
al.add("C");
al.add("F");
al.add("A");
al.add("E");
al.add("D");
System.out.println(al);
TreeSet ts=new TreeSet(al);
System.out.println(ts);
}
}
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet ts=new TreeSet();
ts.add("B");
ts.add("C");
ts.add("F");
ts.add("A");
ts.add("E");
ts.add("D");
System.out.println(ts);
ts.add("B");
System.out.println(ts);
//ts.add(null);--> NullPointerException
//ts.add(new Integer(10));-->ClassCastException
390
//ts.add(new StringBuffer("BBB"));->ClassCastException
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.TreeSet will Retrive all the elements from balanced Tree by following Inorder traversal.
str1.compareTo(str2);
1.If str1 come first when compared with str2 as per dictionary order then compareTo() method will
return -ve value.
2.If str2 come first when compared with str1 in dictionary order then compareTo() method will
return +ve value.
3.If str1 and str2 are same or available at same location in dictionary order then compareTo(-)
method will return 0 value.
If we want to add user defined elements like Employee, Student, Customer to TreeSet then we have to
use the following steps.
---Program----
391
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to add non-Comparable objects to TreeSet object then we must provide sorting logic to
TreeSet object explicitly , for this, we have to use java.util.Comparator interface.
If we want to use Comparator interface in java applications then we have to use the following steps.
Note: In User defined class it is not required to implement equals(-) method, because, equals(-)
method will come from default super class Object.
4.Provide User defined Comparator object to TreeSet object
EX:
import java.util.*;
class MyComparator implements Comparator
{
public int compare(Object obj1, Object obj2)
{
StringBuffer s1=(StringBuffer)obj1;
StringBuffer s2=(StringBuffer)obj2;
int length1=s1.length();
int length2=s2.length();
int val=0;
if(length1<length2)
{
val=-100;
}
else if(length1>length2)
392
{
val=100;
Page
}
else
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class MyComparator implements Comparator
{
public int compare(Object obj1, Object obj2)
{
Student s1=(Student)obj1;
Student s2=(Student)obj2;
int val=s1.saddr.compareTo(s2.saddr);
return -val;
}
}
class Student
393
{
String sid;
Page
String sname;
String saddr;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Q)In Java applications, if we provide both implicit Sorting through Comparable and explicit sorting
through Comparator to the TreeSet object at a time then which Sorting logic would be prefered by
TreeSet inorder to Sort elements?
Ans:
If we provide both implicit Sorting through Comparable and Explicit Sorting through Comparator to
the TreeSet object at a time then TreeSet will take explicit Sorting through Comparator to sort all the
elements.
394
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
int val=cust1.caddr.compareTo(cust2.caddr);
return -val;
}
}
class Customer implements Comparable
{
String cid;
String cname;
String caddr;
{
Customer c1=new Customer("C-111", "Durga", "Hyd");
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Queue:
--> It was introduced in JDK5.0 version.
--> It is a direct chaild interface to Collection interface.
--> It able to arrange all the elements as per FIFO [First In First Out],but, it is possible to
change this algorithm as per our requirement.
--> It able to allow duplicate elements.
--> It is not following Insertion order.
--> It is following Sorting order.
--> It will not allow null values, if we add null value then JVM will rise an Exception like
java.lang.NullPointerException.
--> It will not allow heterogeneous elements, if we add heterogeneous elements then JVM will
rise an exception like java.lang.ClassCastException.
--> It able to allow only homogeneous elements.
-->It able to allow comparable objects bydefault, if we add non comparable objects then JVM will
rise an exception like java.lang.ClassCastException.
-->If we want to add non comparable objects then we have to use Comparator.
-->It able to manage all elements prior to process.
Methods:
1.public void offer(Object obj)
-->It can be used to insert the specified element to Queue.
2.public Object peek()
-->It can be used to return head element of the Queue.
3.public Object element()
-->It can be used to return head element of the Queue
Note: If we access peek() method on an empty Queue then peek() will return "nll" value. If we access
element() method on an empty Queue then element() method will rise an exception like
java.util.NoSuchElementException
396
-->It can be used to return and remove head element from Queue.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: If we access poll() method on an empty Queue then poll() method will return "null" value.If we
access remove() method on an empty Queue then remove() method will rise an exception like
"java.util.NoSuchElementException".
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
398
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
5.public PriorityQueue(Collection c)
-->It able to create PriorityQueue object with all the elements of the specified Collection.
EX:
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
399
System.out.println(al);
PriorityQueue p=new PriorityQueue(al);
Page
System.out.println(p);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Map:
-->It was introduced in JDK1.2 version.
-->It is not chaild interface to Collection interface.
-->It able to arrange all the elements in the form of Key-value pairs.
-->In Map, both keys and values are objects.
-->Duplicates are not allowed at keys , but values may be duplicated.
-->Only one null value is allowed at keys side, but, any no of null values are allowed at values
side.
-->Both keys and Values are able to allow heterogeneous elements.
-->Insertion order is not followed.
-->Sorting order is not followed.
400
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
401
Page
EX:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
402
Page
HashMap:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
403
Page
Constructors:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
HashMap hm=new HashMap();
hm.put("A","AAA");
hm.put("B","BBB");
hm.put("C","CCC");
hm.put("D","DDD");
hm.put("E","EEE");
System.out.println(hm);
hm.put("B","FFF");
System.out.println(hm);
hm.put("F","CCC");
System.out.println(hm);
hm.put(null,"GGG");
hm.put(null,"HHH");
hm.put("G",null);
hm.put("H",null);
System.out.println(hm);
hm.put(new Integer(10), new Integer(20));
System.out.println(hm);
}
}
404
Page
LinkedHashMap:
Q)What are the differences between HashMap and LinkedHashMap?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
HashMap hm=new HashMap();
hm.put("A","AAA");
hm.put("B","BBB");
hm.put("C","CCC");
hm.put("D","DDD");
hm.put("E","EEE");
System.out.println(hm);
IdentityHashMap:
Q)What are the differences between HashMap and IdentityHashMap?
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.HashMap and IdentityhashMap are not allowing duplicate keys, to check duplicate keys HashMap
will use equals(-) method, but, IdentityHashMap will use '==' operator.
Note: '==' operator will perform references comparision always, but, equals() method was defined in
Object class initially, later on it was overridden in String class and in all wrapper classes inorder to
perform contents comparision.
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
Integer in1=new Integer(10);
Integer in2=new Integer(10);
HashMap hm=new HashMap();
hm.put(in1,"AAA");
hm.put(in2,"BBB");// in2.equals(in1)-->true
System.out.println(hm);// {10=BBB}
406
Page
WeakHashMap:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
Once if we add an element to HashMap then HashMap is not allowing Garbage Collector to destroy
its objects.
EX:
import java.util.*;
class A
{
public String toString()
{
return "A";
}
}
class Test
{
public static void main(String[] args)
{
A a1=new A();
HashMap hm=new HashMap();
hm.put(a1, "AAA");
System.out.println("HM Before GC :"+hm);// {A=AAA}
a1=null;
System.gc();
System.out.println("HM After GC :"+hm);// {A=AA}
A a2=new A();
WeakHashMap whm=new WeakHashMap();
whm.put(a2, "AAA");
System.out.println("WHM Before GC :"+whm);// {A=AAA}
a2=null;
System.gc();
System.out.println("WHM After GC :"+whm);// {}
}
}
407
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class A{
A(){
System.out.println("Object Creating");
}
public void finalize(){
System.out.println("Object Destroying");
}
}
class Test{
public static void main(String[] args) {
A a=new A();
a=null;
System.gc();
}
}
SortedMap:
-->It was introduced in JDK1.2 version.
-->It is a direct chaild interface to Map interface
-->It able to allow elements in the form of Key-Value pairs, where both keys and values are
objects.
-->It will not allow duplicate elements at keys side, but, it able to allow duplicate elements at
values side.
-->It will not follow insertion order.
-->It will follow sorting order.
-->It will not allow null values at keys side. If we are trying to add null values at keys side then
JVM will rise an exception like java.lang.NullPointerException.
-->It will not allow heterogeneous elements at keys side, if we are trying add heterogeneous
elements then JVm will rise an exception like java.lang.ClassCastException.
-->It able to allow only comparable objects at keys side bydefault, if we are trying to add non
comparable objects then JVM will rise an exception like java.lang.ClassCastException.
-->If we want to add non comparable objects then we must use Comparator.
408
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeMap tm=new TreeMap();
tm.put("B", "BBB");
tm.put("E", "EEE");
tm.put("D", "DDD");
tm.put("A", "AAA");
tm.put("F", "FFF");
tm.put("C", "CCC");
System.out.println(tm);
System.out.println(tm.firstKey());
System.out.println(tm.lastKey());
System.out.println(tm.headMap("D"));
System.out.println(tm.tailMap("D"));
System.out.println(tm.subMap("B", "E"));
}
}
NavigableMap:
It was introduuced in JAVA6 version, it is a chaild interface to SortedMap and it has defined
methods to provide navigations over the elements.
Methods:
1.public Object CeilingKey(Object obj)
2.public Object higherKey(Object obj)
3.public Object floorKey(Object obj)
4.public Object lowerKey(Object obj)
5.public NavigableMap descendingMap()
6.public Map.Entry pollFirstEntry()
409
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
TreeMap:
-->It was introduced in JDK1.2 version.
-->It is not Legacy.
-->It is an implementation class to Map, SoortedMap and NavigableMap interfaces.
-->It able to allow elements in the form of Key-Value pairs, where both keys and values are
objects.
-->It will not allow duplicate elements at keys side, But, it able to allow duplicate elements at
values side.
-->It will not follow insertion order.
-->It will follow sorting order.
-->It will not allow null values at keys side. If we are trying to add null values at keys side then
JVM will rise an exception like java.lang.NullPointerException.
-->It will not allow heterogeneous elements at keys side, if we are trying add heterogeneous
elements then JVm will rise an exception like java.lang.ClassCastException.
-->It able to allow only comparable objects at keys side bydefault, if we are trying to add non
410
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
411
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:
1.HashMap was introduced in JDK1.2 version.
Hashtable was introduced in JDK1.0 version.
3.In HashMap, one null value is allowed at keys side and any no of null values are allowed at
values side.
In case of Hashtable, null values are not allowed at both keys and values side.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Properties:
In java applications, if we have any data which we want to change frequently then we have to
manage that type of data in a properties file, otherwise we have to perform recompilation on every
modification.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
uname=User Name
upwd=User password
uname.required=User Name is Required
upwd.required=User Password is required
exception.insufficientfunds=Funds are not sufficient in your Account.
In java applicatioons, to repersent data of a particular properties file we have to use java.util.Properties
class.
To get data from a particular properties file to Properties object we have to use the following steps.
1.Create Properties file with the data in the form of Key-value pairs.
2.Create Properties class object.
3.Create FileInputStream to get data from properties file.
4.Load data from FileInputStream to Properties object by using the following method.
public void load(FileInputStream fis)
5.Get data from Properties object by using the following method.
public String getProperty(String key)
To send data from Properties object to properties file we have to use the following steps.
1.Create Properties class object.
2.Set data to Properties object by using the following method.
public void setProperty(String key, String val)
3.Create FileOutputStream with the target file.
4.Store Properties object data to FileOutputStream by using the following method.
public void store(FileOutputStream fos, String des)
db.properties
driver_Class=sun.jdbc.odbc.JdbcOdbcDriver
driver_URL=jdbc:odbc:dsn_name
db_User=system
db_Password=durga
414
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Test1.java
import java.util.*;
import java.io.*;
class Test1
{
public static void main(String[] args)throws Exception
{
Properties p=new Properties();
p.setProperty("uname","Durga");
p.setProperty("upwd", "durga123");
p.setProperty("uqual", "M Tech");
p.setProperty("uemail", "durga@durgasoft.com");
p.setProperty("umobile","91-9988776655");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.CUI Applications
2.GUI Applications
Ans:
CUI Application is a java application, it would be desinged in such a way that ti take input from
command prompt and to provide output on the same command prompt, where command prompt is
acting as an user interface and it is supporting characters data.
GUI Application is a java application, it would be designed in such a way that to take input from the
collection of Graphics components and to provide output on the same collection of Graphics
components, where the collection of graphics components is acting an user interface and it is
supporting graphics data.
To prepare GUI Applications, JAVA has provided the complete predefined library in the form of the
following three packages.
java.awt
java.applet
javax.swing
AWT is a toolkit or collection of predefined classes and interfaces to design GUI Applications.
TO prepare GUI applications, AWT is able to provide support for the following GUI components.
To represent the above GUI components, java.awt package has provided the following predefined
classes.
416
Page
Frame:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To repersent Frame in GUI applications, JAVA has provided a seperate predefiend class in the form of
java.awt.Frame.
To create Frame class object we have to use the following constructor from Frame class.
public Frame()
--> It will create a Frame with out title.
In GUI applications, when we create Frame then Frame will be created with invisible mode, where to
give visibleness to the Frame we will use the following methods.
In GUI applications, when we create Frame then Frame will be created with 0 width and 0 hight,
where to provide size to the Frame explicitly we have to use the following method.
To set a particular title to the Frame explicitly we have to use the following method.
To set a particular background color to the frame we have to use the following method.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In GUI applications, above approach is not suggestible to create Frames, because, we are unable to
perfrom customizations over the Frame. To implement customizations over the Frame we have to
create user defined Frames.
To create User defined frames we have to use the following steps.
1.Declare an user defined class.
2.Extend User defined class from java.awt.Frame class.
3.Declare a 0-arg constructor in user defined class.
4.Provide all Frame properties in User defined class constructor.
5.In main class, in main() method, create object for user defined Frame class.
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To set foreground color to the Frame we have to use the following methode from java.awt.Frame class.
public void setForeground(Color clr)
To set Font properties to the Graphics object we have to use the following method.
public void setFont(Font f)
NOTE: When we create user defined Frame class object, JVM has to access superr class 0-arg
constructor, that is, Frame class 0-arg constructor, where in Frame class 0-arg constructor JVM will
access repaint(-) method, where repaint() method will access paint() method.
EX:
import java.awt.*;
class LogoFrame extends Frame
{
LogoFrame()
{
this.setVisible(true);
this.setSize(700,400);
this.setTitle("Paint Example");
this.setBackground(Color.green);
}
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD+Font.ITALIC, 35);
g.setFont(f);
this.setForeground(Color.red);
g.drawString("DURGA SOFTWARE SOLUTIONS", 100,100);
}
}
class PaintEx
{
public static void main(String[] args)
{
LogoFrame lf=new LogoFrame();
419
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In GUI applications, Listers will take events from GUI components , handle them , perform the
required actions by executing listener methods and return the result back to GUI application. Here ,
the process delegating events from GUI components to Listeners inorder to handle is called as
"Event Delegation Model" or Event Handling.
To implement Event handling in GUI applications, JAVA has provided the following predefined
library as part of
"java.awt.event" package.
NOTE: In GUI Applications, in general, we will take container class as implementation class for
Listener interfase, in the same container class Listener interface methods must be implemented.
420
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.awt.*;
import java.awt.event.*;
class WindowListenerImpl implements WindowListener
{
public void windowOpened(WindowEvent we)
{
System.out.println("WindowOpened");
}
public void windowClosed(WindowEvent we)
{
System.out.println("WidnowClosed");
}
public void windowClosing(WindowEvent we)
{
System.out.println("WidnowClosing");
System.exit(0);
}
public void windowIconified(WindowEvent we)
{
System.out.println("WidnowIconified");
}
421
System.out.println("windowDeiconified");
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In Window Events, if we want to provide only window closing option to the frame then we have to use
only
windowClosing() method in the above implementation. To provide only windowClosing() method if
we implement WindowListener interface then we must provide implementation for all the methods of
WindowListener interface, this approach will increase unneccessary methods implementations in GUI
Applications.
To overcome the above problem, to avoid unneccessary methods implementations AWT has provided
an adapter class in the form of "java.awt.event.WindowAdapter abstract class.
WindowListener interface.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.awt.*;
import java.awt.event.*;
class WindowListenerImpl extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
class MyFrame extends Frame
{
MyFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setTitle("Window Events Example");
this.setBackground(Color.green);
this.addWindowListener(new WindowListenerImpl());
}
}
class WindowEventsEx
{
public static void main(String[] args)
{
MyFrame mf=new MyFrame();
}
}
To provide window closing option to the frame if we use the above approach then we have to provide
a seperate class for implementing windowClosing(-) method, it will increase no of classes in GUI
applications, here to remove this type of unneccessary classes we have to use anonymous inner class of
WindowAdapter abstract class as parameter to addWindowListener(-) method directly.
423
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.awt.*;
import java.awt.event.*;
class MouseListenerImpl implements MouseListener
{
public void mousePressed(MouseEvent me)
{
System.out.println("Mouse Pressed["+me.getX()+","+me.getY()+"]");
}
public void mouseReleased(MouseEvent me)
{
System.out.println("Mouse Released["+me.getX()+","+me.getY()+"]");
424
}
public void mouseClicked(MouseEvent me)
Page
{
System.out.println("Mouse Clicked["+me.getX()+","+me.getY()+"]");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
this.addMouseListener(new MouseListenerImpl());
}
}
class MouseEventsEx
{
public static void main(String[] args)
{
MyFrame mf=new MyFrame();
}
}
425
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To set a particular Layout mechanism to the Container we have to use the following method.
1.FlowLayout:
It able to arrange all the GUI components in rows manner.
To repersent this Layout mechanism AWT has provided a predefined class in the form of
java.awt.FlowLayout.
To set flow layout to the Frame we have to use the following instruction.
f.setLayout(new FlowLayout());
2.BorderLayout:
It able to arrange GUI components along with borders of the containers.
To repersent this Layout mechanism AWT has provided a predefined class in the form of
java.awt.BorderLayout .
f.setLayout(new BorderLayout());
To repersents the locations in container , BorderLayout class has provided the constants like EAST,
NORTH, SOUTH, WEST, CENTER.
In case of Border layout , if we want to add the elements to the container we have to use the
427
following method.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.GridLayout:
It able to arrange all the GUI components in rows and columns wise in the form of grids.
To represent this layout mechanism, AWT has provided a predefined class in the form of
java.awt.GridLayout.
f.setLayout(new GridLayout(4,4));
Where 4 , 4 is no of rows and no columns.
If we want to use GridLayout in GUI applications then we must follow the following rules.
1.All the GUI components must have equals size.
2.We must not leave any empty grid in between GUI components.
4.GridbagLayout:
This layout mechanism is almost all same as GridLayout, but, it able to allow empty grids between
the components and it able to allow the GUI components having variable sizes.
To represent this layout mechanism, AWT has provided a predefined class in the form of
java.awt.GridbagLayout.
f.setLayout(new GridbagLayout(3,3));
5.Card Layout:
It able to arrange all the elements in the form of cards which are available in overlapped manner.
To represent this layout , AWT has provided a predefined class in the form of java.awt.cardLayout.
f.setLayout(new CardLayout(4));
Where 4 is no of cards.
428
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To represent Label GUI component AWT has provided a predefined class in the form of
java.awt.Label.
To create Object for Label class we ahev to use the following constructors.
public Label()
public Label(String label)
public Label(String label, int alignment)
Where alignment may be the constants like LEFT, RIGHT, CENTER from Label class.
Button:
It is an output GUI component, it able to generate ActionEvent inorder to perform a particular
Action.
To repersent this GUI component AWT has provided a predefined class in the form of
"java.awt.Button".
public Button()
public Button(String label)
To set label to the button and to get label from Button we have to use the following methods.
To get clicked button label among the multiple buttons we have to use the following method.
429
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
b1=new Button("Red");
b2=new Button("Green");
b3=new Button("Blue");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b1.setBackground(Color.red);
b2.setBackground(Color.green);
b3.setBackground(Color.blue);
this.add(b1);
this.add(b2);
this.add(b3);
}
public void actionPerformed(ActionEvent ae)
{
String label=ae.getActionCommand();
430
if(label.equals("Red"))
{
Page
this.setBackground(Color.red);
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
TextField:
It is an input GUI coponent, it able to take a single line of data from User.
To repersent this GUI component , AWT has provided a predefined class in the form of
"java.awt.TextField".
public TextField()
public TextField(int size)
public TextField(String def_msg, int size)
To set data to the TextField and to get data from Text field we have to use the following methods.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To represent this GUI component, AWT has provided a predefined class in the form of
"java.awt.TextArea".
To create TextArea class object AWT has provided the following constructors.
public TextArea()
public TextArea(int rows, int columns)
public TextArea(String def_Message, int rows, int cols)
To set data to Text Area and to get data from Text Area we have to use the following methods.
NOTE:If we want to prepare Password field in GUI applications then we have to take a text filed,
where we have to hide data with a particular character called as Echo Character, where to set a
particular Echo Character we have to use the following method.
EX:
import java.awt.*;
import java.awt.event.*;
class UserFrame extends Frame implements ActionListener
{
Label l1, l2, l3, l4, l5;
TextField tf1, tf2, tf3, tf4;
TextArea ta;
Button b;
String uname="";
String upwd="";
String uemail="";
String umobile="";
String uaddr="";
UserFrame()
432
{
this.setVisible(true);
Page
this.setSize(500,500);
this.setTitle("User Frame");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
tf1=new TextField(20);
tf2=new TextField(20);
tf2.setEchoChar('*');
tf3=new TextField(20);
tf4=new TextField(20);
ta=new TextArea(3,15);
b=new Button("Registration");
b.addActionListener(this);
this.add(l1); this.add(tf1);
433
this.add(l2); this.add(tf2);
this.add(l3); this.add(tf3);
Page
this.add(l4); this.add(tf4);
this.add(l5); this.add(ta);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
public void actionPerformed(ActionEvent ae)
{
uname=tf1.getText();
upwd=tf2.getText();
uemail=tf3.getText();
umobile=tf4.getText();
uaddr=ta.getText();
repaint();
}
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD, 20);
g.setFont(f);
g.drawString("User Name :"+uname,50,250);
g.drawString("Password :"+upwd,50,300);
g.drawString("User Email :"+uemail,50,350);
g.drawString("User Mobile :"+umobile,50,400);
g.drawString("User Address :"+uaddr,50,450);
}
}
class TextFieldEx
{
public static void main(String[] args)
{
UserFrame uf=new UserFrame();
}
}
434
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To represent this GUI component AWT has provided a predefined class in the form of
"java.awt.Checkbox".
public Checkbox()
public Checkbox(String label)
public Checkbox(String label, boolean state)
public Checkbox(String label, CheckboxGroup cg, boolean state)
To set label to the Checkbox and to get label from Check box we have to use the following methods.
To get current state of the check box and to set a particular state to check box we have to use the
following methods.
Radio:
It is an input GUI component, it able to allow to select an item.
In general, Checkboxes are able to allow multiple selections , but, Radio button is able to allow single
selection.
To create radio buttons we have to use Checkbox class object with CheckboxGroup object reference.
EX:
CheckboxGroup cg=new CheckboxGroup();
Checkbox cb1==new Checkbox("Male", cg, false);
Checkbox cb2==new Checkbox("Female", cg, false);
435
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To set a particular state to the checkbox and to get current state from checkbox we have to use the
following methods.
EX:
import java.awt.*;
import java.awt.event.*;
class UserFrame extends Frame implements ItemListener
{
Label l1, l2;
Checkbox cb1, cb2, cb3, cb4, cb5;
String uqual="";
String ugender="";
UserFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setTitle("Check Box Example");
this.setBackground(Color.green);
this.setLayout(new FlowLayout());
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
cb1.addItemListener(this);
cb2.addItemListener(this);
cb3.addItemListener(this);
cb4.addItemListener(this);
cb5.addItemListener(this);
this.add(l1);
this.add(cb1);
this.add(cb2);
this.add(cb3);
this.add(l2);
this.add(cb4);
this.add(cb5);
}
public void itemStateChanged(ItemEvent ie)
{
if(cb1.getState() == true)
{
uqual=uqual+cb1.getLabel()+" ";
}
if(cb2.getState() == true)
{
uqual=uqual+cb2.getLabel()+" ";
}
if(cb3.getState() == true)
{
uqual=uqual+cb3.getLabel()+" ";
}
if(cb4.getState() == true)
437
{
ugender=cb4.getLabel();
Page
}
if(cb5.getState() == true)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
List:
It is an input GUI component, It able to repersent more than one element to select.
To represent this GUI component AWT has provided a predefined class java.awt.List
public List()
public List(int size)
public List(int size, boolean b)
To get the selected item from List we have to use the following method.
public String getSelectedItem()
To get the selected items from List we have to use the following method.
438
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To get the selected item from Choice we have to use the following method.
EX:
import java.awt.*;
import java.awt.event.*;
class UserFrame extends Frame implements ItemListener
{
Label l1, l2;
List l;
Choice ch;
String utech="";
String uprof="";
UserFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setTitle("List Example");
this.setBackground(Color.green);
this.setLayout(new FlowLayout());
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
439
l=new List(4,true);
l.add("C");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
ch=new Choice();
ch.add("Student");
ch.add("Employee");
ch.add("Teacher");
ch.addItemListener(this);
this.add(l1); this.add(l);
this.add(l2); this.add(ch);
}
public void itemStateChanged(ItemEvent ie)
{
String[] items=l.getSelectedItems();
for(int i=0;i<items.length;i++)
{
utech=utech+items[i]+" ";
}
uprof=ch.getSelectedItem();
repaint();
}
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD, 30);
g.setFont(f);
g.drawString("Technologies :"+utech, 50, 300);
g.drawString("Profession :"+uprof, 50, 350);
utech="";
}
}
class ListEx
{
public static void main(String[] args)
{
UserFrame uf=new UserFrame();
440
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To repesent Menu in GUI applicatins, AWT has provided a set of predefined classes like
java.awt.MenuBar, java.awt.Menu and java.awt.MenuItem.
EX:
import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame implements ActionListener
{
MenuBar mb;
Menu m;
MenuItem mi1, mi2, mi3;
String item="";
MyFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setTitle("Menu Example");
this.setBackground(Color.green);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
mb=new MenuBar();
this.setMenuBar(mb);
m=new Menu("File");
441
mb.add(m);
Page
mi1=new MenuItem("New");
mi2=new MenuItem("Open");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
item=ae.getActionCommand();
repaint();
}
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD, 30);
g.setFont(f);
g.drawString("Selected Item :"+item, 50, 300);
}
}
class MenuEx
{
public static void main(String[] args)
{
MyFrame mf=new MyFrame();
}
}
Scrollbar:
It able to move frame top to bottom or left to right inorder to visible the components.
To represent Scroll bar AWT has provided a predefined class in the from of java.awt.Scarollbar.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame implements AdjustmentListener
{
Scrollbar sb;
int position;
MyFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setTitle("Scrollbar Example");
this.setLayout(new BorderLayout());
this.setBackground(Color.green);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
sb=new Scrollbar(Scrollbar.VERTICAL);
sb.addAdjustmentListener(this);
this.add(BorderLayout.EAST, sb);
}
public void adjustmentValueChanged(AdjustmentEvent ae)
{
position=sb.getValue();
repaint();
}
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD, 30);
g.setFont(f);
443
}
class ScrollBarEx
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Applets:
Applet is a container, it able to manage some other GUI components.
To represent Applet, JAVA has provided a predefined class in the from of java.applet.Applet .
If we want to use Applets in GUI applications then we have to use the following steps.
The main intentin of Applet configuratino file is to declare Applet class and its location and to
declare size of the Applet,.....
Syntax:
<applet code="---" width="--" height="--">
</applet>
Where "code" attribute will take the name and location of the Applet class.
Where "width" and "hight" attributes are used to take applet size.
444
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:In general, Applets are executed by following Applet lifecycle only, Applets are not having
main() method to execute.
---Diagram-----
LogoApplet.java
import java.awt.*;
import java.applet.*;
public class LogoApplet extends Applet
{
public void paint(Graphics g)
{
Font f=new Font("arial", Font.BOLD, 30);
g.setFont(f);
g.drawString("DURGA SOFTWARE SOLUTIONS",100,100);
}
}
LogoApplet.html
<applet code="LogoApplet" width="700" height="500">
</applet>
On Command Prompt
D:\java830>javac LogoApplet.java
D:\java830>appletviewer LogoApplet.html 445
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2.AWT GUI Components are able to follow the local operating system provided Look And Feel, it
is fixed upto the present operating syste,.
SWING GUI components are having Pluggable Look And Feel nature irrespective of the operating
system which we used.
3.AWT GUI components are Heavy Weight GUI components, they will more execution time and
much meory.
Swing GUI compoents are light weight GUI components, they will take less memory and less
execution time.
4.AWT GUI compnents are able to provide less performance in GUI applications.
SWING GUI components are able to provide very good performance in GUI applicatins.
5.AWT GUI components are PEER GUI components, for every GUI component a seperate
duplicate component is created at Operating System.
SWING GUI components are not PEER Gui components , no seperate duplicate component will be
created at Operating System .
8.In AWT, we are able to add all the GUI components to Frame directly.
Page
In SWING, we are able to add all the GUI components to the Panes .
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To repersent all GUI components in SWING , javax.swing package has provided the following
predefined classes.
NOTE:
To clode Frames in AWT we have to use WindowListener implementation class or WindowAdapter
abstract class or Anonymous inner class of WindowAdapter abstract class. In case of SWING to
provide window closing option to the Frame we have to use the following instuction .
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
EX:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
class RegistrationFrame extends JFrame implements ActionListener
{
JLabel l1,l2,l3,l4,l5,l6,l7;
JTextField tf;
JPasswordField pf;
JCheckBox cb1,cb2,cb3;
JRadioButton rb1,rb2;
JList l;
JComboBox cb;
JTextArea ta;
JButton b;
Container c;
String uname="",upwd="",uqual="",ugen="",utech="",uprof="",uaddr="";
RegistrationFrame()
{
447
this.setVisible(true);
this.setSize(500,600);
Page
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c=getContentPane();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
tf=new JTextField(20);
tf.setBounds(150,90,100,30);
tf.setToolTipText("This Is Text Field");
pf=new JPasswordField(20);
pf.setBounds(150,140,100,30);
pf.setToolTipText("This Is Password Field");
cb1=new JCheckBox("BSC");
cb1.setBounds(150,190,60,30);
cb2=new JCheckBox("MCA");
cb2.setBounds(220,190,60,30);
cb3=new JCheckBox("PHD");
cb3.setBounds(290,190,60,30);
rb1=new JRadioButton("Male");
rb1.setBounds(150,240,80,30);
rb2=new JRadioButton("Female");
rb2.setBounds(250,240,80,30);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
448
String[] techs={"C","C++","JAVA"};
Page
l=new JList(techs);
l.setBounds(150,280,60,60);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
ta=new JTextArea(5,25);
ta.setBounds(150,380,100,40);
b=new JButton("Registration");
b.setBounds(50,450,110,40);
b.addActionListener(this);
c.add(l1);c.add(tf);
c.add(l2);c.add(pf);
c.add(l3);c.add(cb1);c.add(cb2);c.add(cb3);
c.add(l4);c.add(rb1);c.add(rb2);
c.add(l5);c.add(l);
c.add(l6);c.add(cb);
c.add(l7);c.add(ta);
c.add(b);
}
public void actionPerformed(ActionEvent ae)
{
uname=tf.getText();
upwd=pf.getText();
if(cb1.isSelected()==true)
{
uqual=uqual+cb1.getLabel()+" ";
}
if(cb2.isSelected()==true)
{
uqual=uqual+cb2.getLabel()+" ";
}
if(cb3.isSelected()==true)
{
uqual=uqual+cb3.getLabel()+" ";
}
if(rb1.isSelected()==true)
{
ugen=rb1.getLabel();
449
}
if(rb2.isSelected()==true)
Page
{
ugen=rb2.getLabel();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
public void paint(Graphics g)
{
Font f=new Font("arial",Font.BOLD,25);
g.setFont(f);
g.drawString("User Name :"+uname,50,100);
g.drawString("Password :"+upwd,50,150);
g.drawString("Qualification :"+uqual,50,200);
g.drawString("User Gender :"+ugen,50,250);
g.drawString("Technologies :"+utech,50,300);
g.drawString("Proffession :"+uprof,50,350);
g.drawString("Address :"+uaddr,50,400);
}
}
DisplayFrame df=new DisplayFrame();
}
}
class RegistrationApp
{
public static void main(String[] args)
{
RegistrationFrame rf=new RegistrationFrame();
450
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To repersent this GUI component, SWING has provided a predefined class in the form of
javax.swing.JColorChooser.
public JColorChooser()
To get the current SelectionModel from JColorChooser we have to use the following method.
To get the selected color from JColorChooser we have to use the following method.
EX:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class ColorChooserFrame extends JFrame implements ChangeListener
{
JColorChooser cc;
Container c;
ColorChooserFrame()
{
this.setVisible(true);
this.setSize(500,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c=this.getContentPane();
cc=new JColorChooser();
451
cc.getSelectionModel().addChangeListener(this);
c.setLayout(new FlowLayout());
Page
c.add(cc);
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JFileChooser:
It is a swing specific GUI component, it able to display all the file system which is available in our
system harddisk inorder to select.
To represent this GUI component, SWING has provided a predefined class in the form of
javax.swing.JFileChooser.
public JFileChooser()
To get Selected file from JFileChooser we have to use the following method.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
File f=fc.getSelectedFile();
String path=f.getAbsolutePath();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JTable: It is a SWING specific GUI component, it able to display data in rows and columns.
To rpersent this GUI component, SWING has provided a predefined class in the form of
javax.swing.JTable.
To create JTable class object we have to use the following constructor.
public JTable(Object[][] body, Object[] header)
c.add(t,BorderLayout.CENTER);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Java is able to provide very good Internationalization support due to UNICODE representations in
java.
UNICODE is one of the character representations following by JAVA, it able to represent all the
alphabet from all the natural languages.
3.System Varient[OS]: It will be represented in the form of three lower case letters.
EX: win, lin, uni,......
To represent a group of Local users in java applications, JAVA has provided a predefined class in the
form of "java.util.Locale" .
To create Objects for java.util.Locale class we have to use the following consrtructors.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Number Formations
2.Date Foamtions
3.Message Formations
1.Number Formations:
From language to language, country to country number representations are varied. Torepresent
numbers w.r.t a particular Locale JAVA has provided a predefined class in the from of
"java.text.NumberFormat"
To represent number w.r.t a particular Locale by using NumberFormat class we have to use the
following steps.
456
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Date Formations:
From language to language, country to country Date representations are varied. To represent Dates
w.r.t a particular Locale JAVA has provided a predefined class in the from of
"java.text.DateFormat"
To represent Date w.r.t a particular Locale by using DateFormat class we have to use the following
steps.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3.Message Formations:
From language to language , from country to country, messages repersentations are varied, if we
want to represent message w.r.t a particular Locale then we have to use java.util.ResourceBundle
class provided by JAVA.
To represent messages w.r.t a particular Locale by using ResourceBundle class we have to use the
following steps.
File_name_<lang>_<country>_<sys_Var>.properties
EX1: abc_en_US.properties
welcome=Welcome to en US Users.
EX2: abc_it_IT.properties
EX3: abc_hi_IN.properties
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
String message=rb.getString("welcome");
EX:
abc_en_US.properties
welcome=Welcome to en US Users.
abc_it_IT.properties
abc_hi_IN.properties
I18NEx.java
import java.util.*;
class I18NEx
{
public static void main(String[] args)throws Exception
{
Locale l=new Locale("hi","IN");
ResourceBundle rb=ResourceBundle.getBundle("abc",l);
459
System.out.println(rb.getString("welcome"));
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Reflection:
The process of analyzing all the capabilities of a particular class at runtime is called as
"Reflection".
Reflection API is a set of predefined classes provided by Java to perform reflection over a
particular class.
Reflection API is not useful in projects development,reflection API is useful in products
development like Compilers,JVM's,Server's,IDE's,FrameWork's.....
Java has provided the complete predefined library for Reflection API in the form of "java.lang"
package and "java.lang.reflect" package.
Java.lang
Class
java.lang.reflect
Field
Method
Constructor
Package
Modifier
---
---
Java.lang.Class:
This class can be used to represent a particular class metadata which includes class name,super
class details,implemented interfaces details,access modifiers......
To get the above class metadata,first we have to create Class Object for the respective class.
There are three ways to create object for java.lang.Class
460
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
class c=Class.forName("Employee");
when JVM encounter the above instruction,JVM will perform the following actions.
a)JVM will take provided class from forName() method.
b)JVM will search for its .class file at current location,at java predefined library and at the
locations refefered by "classpath" environment variable.
c)If the required .class file is not available at all the above locations then JVM will rise an
exception like "java.lang.ClassNotFoundException".
d)If the required .class file is available at either of the above locations then JVM will load its
bytecode to the memory.
e)After loading its bytecode to the memory,JVM will collect the respective class metadata and
stored in the form of java.lang.Class object.
EX:
Employee e=new Employee();
Class c=e.getClass();
EX:
Class c=Employee.class
To get name of the class,we have to use the following method.
461
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
int val=c.getModifiers()
String modifiers=Modifier.toString(val);
import java.lang.reflect.*;
public abstract class Employee implements java.io.Serializable,java.lang.Cloneable{
}
class Test{
public static void main(String args[]) throws Exception{
Class c1=Clas.forName("Employee");
System.out.println(c1.getName());
Employee e=new Employee();
Class c2=e.getClass();
System.out.println(c2.getName());
Class c3=Employee.class;
System.out.println(c3.getName());
Class c=Class.forName("Employee");
System.out.println("Class Name :"+c.getName());
System.out.println("Super Class :"+c.getSuperclass().getName());
Class[] cls=c.getInterfaces();
System.out.println("Interfaces :");
for(int i=0;i<cls.length;i++){
Class cl=cls[i];
System.out.println(cl.getName()+" ");
}
System.out.println();
int val=c.getModifiers();
System.out.println("Modifers :"+Modifier.toString(val));
}
}
462
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.lang.reflect.*;
class Employee{
public static String eid="E-111";
public static String ename="Durga";
public static String eaddr="Hyd";
}
class Test{
public static void main(String args[])throws Exception{
Class c=Employee.class;
Field[] flds=c.getDeclaredFields();
463
for(int i=0;i<flds.length;i++){
Field f=flds[i];
System.out.println("Field Name :"+f.getName());
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Java.lang.Method:
This class can be used to represent the metadata of a particular method,which includes method
name,return type,parameter types,access modifiers and exception types
If we want to get all the methods metadata in the form of method[],first we have to get
java.lang.Class object then we have to use either of the following methods.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.lang.reflect.*;
class Employee{
public Employee(String eid,String ename,String eaddr)throws
ClassNotFoundException,NullPointerException{
}
public Employee(String eid,String ename)throws ClassCastException{
}
public Employee(String eid)throws ClassCastException,ClassNotFoundException{
}
}
class Test{
public static void main(String args[])throws Exception{
Class c=Employee.class;
Constructor[] con=c.getDeclaredConstructors();
for(int i=0;i<con.length;i++){
Constructor constructor =con[i];
System.out.println("Constructor Name :"constructor.getName());
int val=constructor.getModifiers();
466
System.out.println("Modifiers :"+Modifier.toString(val));
Class[] cls=constructor.getParameterTypes();
System.out.println("Parametes :");
Page
for(int j=0;j<cls.length;j++){
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
467
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Annotation:
Annotation is a Java Feature provided by JDK 5.0 version,it can be used to represent metadata in
Java applications.
Q)In java applications,to describe metadata we have already Comments then what is the
requirement to go for Annotations?
Ans:In Java applications,if we provide metadata by using comments then "Lexical Analyzer" will
remove comments metadata from Java program as part of Compilation.
As per the application requirement,if we want to bring metadata upto .java file,upto .class file and
upto RUNTIME of our application then we have to use "Annotations".
Q)In Java applications,to provide metadata at runtime of Java applications we are able to use XML
documents then what is the requirement to go for "Annotations"?
Ans:In Java applications,if we provide metadata by using XML documents then we are able to get the
following problems.
1.Every time we have to check whether XML documents are located properly or not.
2.Every time we have to check whether XML documents are formatted properly or not.
3.Every time we have to check whether we are using right parsing mechanism or not to access
the data from XML document.
4.First Developers must aware XML tech.
To Overcome all the above problems,we have to use Java alternative that is "Annotation".
468
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:Annotations are not the complete alternative for XML tech,with in a Java application we
can use annotations as an alternative for XML documents but when we go for distributed
applications where applications are designed on different tech.standards there annotations are
not possible,only we have to use XML tech.
To process the annotations,Java has provided a predefined tool in the form of "Annotation
Processing tool"[APT},it was managed by Java upto JAVA7 version,it was removed from Java in
JAVA8 version.
469
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Marker Annotations:
It is an annotation with out members.
EX:
@interface Override{
}
2.Single-Valued Annotation:
It is an Annotation with exactly one single member
EX:
@interface SuppressWarnings{
String value();
}
3.Multi-Valued Annotation:
It is an annotation with more than one member.
EX:
@interface WebServlet{
int loadOnStartup();
String[] urlPatterns();
-----
}
470
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Standard Annotations:
These are predefined Annotations provided by Java along with Java software.
There are two types of Standard Annotations
1.General Purpose Annotations
2.Meta Annotations
EX:
@Override
@Deprecated
@SuppressWarnings
@FunctionalInterface [JAVA 8]
2)Meta Annotations:
These Annotations can be used to define another Annotations.
These Annotations are provided by Java as part of java.lang.annotation package.
EX:
@Inherited
@Documented
@Target
@Retention
1.@Override:
In Java applications if we want to perform method overriding then we have to provide a method
in subclass with the same prototype of super class method.
While performing method Overriding,if we are not providing the same super class method at sub
class method then compiler will not rise any error and JVM will not rise any exception,JVM will
provide super class method output.
In the above context,if we want to get an error about to describe failure case of method
471
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
@Deprecated:
The main intention of this annotation is to make a method as deprecated method and to provide
deprecation message when we access that deprecated method.
In general,Java has provided Deprecation support for only predefined methods,if we want to get
deprecation support for the user defined methods we have to use @Deprecated annotation.
NOTE:Deprecated method is an outdated method introduced in the initial versions of Java and
having alternative methods in the later versions of Java.
472
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
@SuppressWarnings(--):
In Java applications,when we perform unchecked or unsafe operations then compiler will rise some
warning messages.In this context,to remove the compiler generated warning messages we have to
use @SuppressWarnings("unchecked") annotation.
EX:
import java.util.*;
class Bank{
@SuppressWarnings("unchecked")
public ArrayList listCustomers(){
ArrayList al=new ArrayList();
al.add("chaitu");
al.add("Mahesh");
al.add("Jr NTR");
al.add("Pavan");
return al;
}
}
class Test{
public static void main(String args[]){
Bank b=new Bank();
List l=b.listCustomers();
473
System.out.println(l);
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
@FunctionalInterface
interface Loan{
void getLoan();
}
class GoldLoan implements Loan{
public void getLoan(){
System.out.println("GoldLoan");
}
}
class Test{
public static void main(String args[]){
Loan l=new GoldLoan();
l.getLoan();
}
}
474
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:In the above example,both Employee class objects and manager class objects are
Persistable i.e eligible to store in database.
475
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
@interface Persistable
{
}
@Persistable
class Employee
{
}
javadoc Employee.java
If we prepare html documentation for Employee class by using "javadoc" tool then @Persistable
annotation is not listed in the html documentation.
@Documented
@interface Persistable
{
}
@Persistable
class Employee
{
}
If we prepare html documentation for Employee class by using "javadoc" tool then @Persistable
annotation will be listed in the html documentation.
@Target:
The main intention of this annotation is to define a list of target elements to which we are applying
the respective annotation.
Synatx:
@Target(--list of constants from ElementType enum---)
Where ElementType enum contains FIELD,CONSTRUCTOR,METHOD,TYPE[Classes,abstract
classes,interfaces]
476
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
@Persistable
public Address getAddress(){}
}
@Retention:
The main intention of the annotation is to define life time of the respective annotation in Java
application.
Syntax:
@Retention(---a constant from RestentionPolicy enum---)
Where RestentionPolicy enum contains the constants like SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)
@interface Persistable
{
}
@Persistable
class Employee
{
}
477
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2)If the annotation is Field level annotation then use the following steps:
a)Get java.lang.Class object of the respective class
b)Get java.lang.reflect.Field class object of the respective variable from java.lang.Class by using
getField(String field_name) method
c)Get Annotation object by using getAnnotation(Class c) method from java.lang.reflect.Field
class.
3)If the annotation is Method level annotation then use the following steps:
a)Get java.lang.Class object of the respective class
b)Get java.lang.reflect.Method class object of the respective Method from java.lang.Class by
using getMethod(String method_name) method
c)Get Annotation object by using getAnnotation(Class c) method from java.lang.reflect.Method
class.
MainApp.java
import java.lang.annotation.*;
import java.lang.reflect.*;
public class MainApp{
public static void main(String args[])throws Exception{
Account acc=new Account("abc123","Durga","Hyd");
acc.getAccountDetails();
System.out.println();
Class c=acc.getClass();
Annotation ann=c.getAnnotation(Bank.class);
Bank b=(Bank)ann;
System.out.println("Bank Details");
System.out.println("------------");
System.out.println("Bank Name :"+b.name());
System.out.println("Branch Name :"+b.branch());
System.out.println("Phone "+b.phone());
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Student.java:
public class Student{
String sid;
String sname;
String saddr;
public Student(String sid,String sname,String saddr){
this.sid=sid;
this.sname=sname;
this.saddr=saddr;
}
@Course(cid="C-222",cname=".NET")
public void getStudentDetails(){
System.out.println("Student Details");
System.out.println("---------------");
System.out.println("Student Id :"+sid);
System.out.println("Sudent Name :"+sname);
System.out.println("Student Address:"+saddr);
}
}
ClientApp.java
import java.lang.annotation.*;
import java.lang.reflect.*;
public class ClientApp{
public static void main(String args[])throws Exception{
Student std=new Student("S-111","Durga","Hyd");
std.getStudentDetails();
480
System.out.println();
Class cl=std.getClass();
Page
Method m=cl.getMethod("getStudentDetails");
Annotation ann=m.getAnnotation(Course.clas);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
481
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To overcome the above problems, SUN Microsystems has provided an alternative distributed tech to
prepare distributed applications, that is, RMI.
In case of RMI, the complete distributed applications infrastructer like Server socket, socket, input
streams and OutputStreams,.... are provided by RMI internally, developers are not required to provide
distributed applications infrastructer explicitly.
RMI will use the following two components internally to provide Distributed applicatins infrastructer.
1.Stub
2.Skeleton
1.Stub:
It is a special component in RMI, it will be existed at Local Machine, it will provide Client side
socket, Input and Output Streams and it is capable to perform Serialization and Deserialization,
Marshalling and Unmarshalling and it able to recieve remote method calls from local machine and
it will send remote method call to network, it able to recieve return values from remote method call
from network and it will send that return values to client application.
2.Skeleton:
It is a special component in RMI, it will be existed at Remote machine, it will provide server socket,
InputStreams and OutputSTream, it is capable to perform Serialization and Deserialization ,
Marshalling and Unmarshalling and it able to reacieve remote method call from Network, it able to
access remote methods and it able to carry return values of remote methods to network.
NOTE: To expose Remote objects in network, RMI will use a seperate Registry Software called as
"RMIRegistry.
RMI Arch:
---------
--- Diagram-----
482
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
STEPS:
a)Declare an user defined interface.
b)Extend java.rmi.Remote interface to user defined interface.
c)Declare remote methods in the form of abstract methods.
d)Throws out java.rmi.RemoteException at each and every remote metod.
483
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
STEPS:
a)Declare an user defined class.
b)Extend java.rmi.server.UnicastRemoteObject abstract class to user defined class inorder to make
network enable.
c)Implement User defined Remote interface in user defined class.
d)Declare public and 0-arg constructor in user defined class with throws java.rmi.RemoteException.
e)Provide implementation for Service methods.
EX:
public class MyRemoteImpl extends java.rmi.server.UnicastRemoteObject implements MyRemote
{
public MyRemoteImpl()throws java.rmi.RemoteException
{
}
public String myRemoteService1()throws java.rmi.RemoteException
{
----
}
public String myRemoteService2()throws java.rmi.RemoteException
{
----
}
----
}
484
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
STEPS:
a)Declare an user defined class with main() method.
b)In main() method, create Objectt for Remote interface implementation class.
C)Bind Remote object with a logical name in RMIRegistry by using the following method
from java.rmi.Naming class.
public static void bind(String logical_Name, Remte r) throws RemoteException
STEPS:
a)Declare an user defined class with main() method.
b)In main() method, get Remote object from RMIRegistry by using the following method from
java.rmi.Naming class.
public static Remote lookup(String logical_Name)
c)Access Remote methods.
----
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Application1:
D:\java830\rmi\app1
HelloRemote.java
HelloRemoteImpl.java
HelloRegistry.java
ClientApp.java
HelloRemote.java
import java.rmi.*;
public interface HelloRemote extends Remote
{
public String sayHello(String name)throws RemoteException;
}
HelloRemoteImpl.java
import java.rmi.*;
import java.rmi.server.*;
public class HelloRemoteImpl extends UnicastRemoteObject implements HelloRemote
{
public HelloRemoteImpl()throws RemoteException
{
}
public String sayHello(String name)throws RemoteException
{
return "Hello..."+name+"!";
}
486
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.rmi.*;
public class HelloRegistry
{
public static void main(String[] args)throws Exception
{
HelloRemote hr=new HelloRemoteImpl();
Naming.bind("hello", hr);
System.out.println("HelloRemote Object is binded with the logical 'hello' in
RMIRegistry");
}
}
ClientApp.java
import java.rmi.*;
public class ClientApp
{
public static void main(String[] args)throws Exception
{
HelloRemote hr=(HelloRemote)Naming.lookup("hello");
String msg=hr.sayHello("Durga");
System.out.println(msg);
}
}
Application2:
D:\java830\rmi\app2
CalculatorRemote.java
CalculatorRemoteImpl.java
CalculatorRegistry.java
ClientApp.java 487
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.rmi.*;
public interface CalculatorRemote extends Remote
{
public int add(int i, int j)throws RemoteException;
public int sub(int i, int j)throws RemoteException;
public int mul(int i, int j)throws RemoteException;
}
CalculatorRemoteImpl.java
import java.rmi.*;
import java.rmi.server.*;
public class CalculatorRemoteImpl extends UnicastRemoteObject implements CalculatorRemote
{
public CalculatorRemoteImpl()throws RemoteException
{
}
public int add(int i, int j)throws RemoteException
{
return i+j;
}
public int sub(int i, int j)throws RemoteException
{
return i-j;
}
public int mul(int i, int j)throws RemoteException
{
return i*j;
}
}
488
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.rmi.*;
public class CalculatorRegistry
{
public static void main(String[] args)throws Exception
{
CalculatorRemote cr=new CalculatorRemoteImpl();
Naming.bind("cal", cr);
System.out.println("CalculatorRemote object is binded with the logical name 'cal'
in RMIRegistry");
}
}
ClientApp.java
import java.rmi.*;
public class ClientApp
{
public static void main(String[] args)throws Exception
{
CalculatorRemote cr=(CalculatorRemote) Naming.lookup("cal");
System.out.println("ADD :"+cr.add(10,5));
System.out.println("SUB :"+cr.sub(10,5));
System.out.println("MUL :"+cr.mul(10,5));
}
}
489
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
1.We can write a Regular Expression to represent all valid mail ids.
2.We can write a Regular Expression to represent all valid mobile numbers.
To repersent and use Regular Expressions in Java applications, JAVA has provided predefined library
in the form of a package like "java.util.regex" in JDK1.4 version.
To prepare and Use Regular Expressions in java applications we have to use the following actions.
To create Regular Expression in the form Pattern object we have to use the following method from
java.util.regex.Pattern class.
2.Create java.util.regex.Matcher class object with a string which we want to compare with
Regular expression:
A Matcher object can be used to match character sequences against a Regular Expression.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
importjava.util.regex.*;
classRegularExpressionDemo{
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);
}
}
OP:
0------2------ab
4------6------ab
7------9------ab
The no of occurrences: 3
491
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Character Classes
2.Quantifiers
Character classes:
Character classes are used to specify alphabets and digits in Regular Expressions.
EX:
importjava.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());
}
}
}
OP:
492
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
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'
EX: importjava.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());
}
}
}
EX 1:importjava.util.regex.*;
class RegularExpressionDemo{
public static void main(String[] args){
Pattern p=Pattern.compile("\\s");
String[] s=p.split("Durga software solutions");
for(String s1:s){
System.out.println(s1);
493
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.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:
This class present in java.util package.
It is a specially designed class to perform string tokenization. 494
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Requirement:
Write a regular expression to represent all valid identifiers in java language.
Rules:
The allowed characters are:
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.
495
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Program: importjava.util.regex.*;
classRegularExpressionDemo
{
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
{
496
System.out.println("invalid number");
}
Page
}
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
E:\javaapps>javac RegularExpressionDemo.java
E:\javaapps>java RegularExpressionDemo 9989123456
Valid number
OP:
E:\javaapps>javac RegularExpressionDemo.java
E:\javaapps>javac RegularExpressionDemo.java
E:\javaapps>java RegularExpressionDemo 9989123456
Valid number
E:\javaapps>java RegularExpressionDemo 09989123456
Valid number
E:\javaapps>java RegularExpressionDemo 919989123456
Valid number
E:\javaapps>java RegularExpressionDemo 69989123456
Invalid number
497
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Program:
importjava.util.regex.*;
class RegularExpressionDemo
{
public static void main(String[] args)
{
Pattern p=Pattern.compile("
[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");
}
}
}
OP:
E:\javaapps>javac RegularExpressionDemo.java
E:\javaapps>java RegularExpressionDemo sunmicrosystem@gmail.com
Valid mail id
E:\javaapps>java RegularExpressionDemo 999sunmicrosystem@gmail.com
Invalid mail id
E:\javaapps>java RegularExpressionDemo 999sunmicrosystem@gmail.co9
Invalid mail id
Requirement:
Write a program to extract all valid mobile numbers from a file. 498
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
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:\javaapps folder.
499
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
OP:
input.txt
output.txt
outut.txt
3
0-9
#
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
[aA][a-zA-Z]*
To represent all names starts with 'A' ends with 'K'
[aA][a-zA-Z]*[kK]
501
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Introduction
2.Approaches to make an Object Eligible for Garbage Collection
3.Approaches for requesting garbage Collector to Run Garbage Collector
4.Finalization
5.Java Heap Memory and its Memory Areas
6.Garbage Collection in Young Generation
7.Garbage Collection in Old generation
8.Types Of Garbage Collectors for Old generation\
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.
std1=null;
std2=null;
-----
Page
-----
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX 1:
class Test{
public static void main(String[] args){
m1();
}
static void m1(){
Student std1=new Student();
Student std2=new Student();
}
}
503
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
t1.t=t2;
t2.t=t3;
t3.t=t1;
The following are various ways for requesting jvm to run GC:
1)By System class:
System class contains a static method GC for this purpose.
EX: System.gc();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX: importjava.util.Date;
classRuntimeDemo
{
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());
}
}
OP:
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)
(new Runtime).gc(); (invalid)
Runtime.getRuntime().gc(); (valid)
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.
505
NOTE: In java it is not possible to find size of an object and address of an object.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
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.
EX:
class Test
{
public static void main(String args[]){
String s=new String("Durga Software Solutions");
Test t=new Test();
s=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method is executed");
}
}
OP:
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 .
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
}
public void finalize(){
System.out.println("finalize() method is executed");
}
}
OP:
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.
EX:
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");
507
}
}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Case 3:
finalize() method can be call either by the programmer or by the GC .
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.
EX:
class Test
{
public static void main(String args[]){
Test t=new Test();
//t.finalize();-------line(1)
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.
Which of the following is true?
While executing finalize() method JVM ignores every exception(invalid).
While executing finalize() method JVM ignores only uncaught exception(valid).
508
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX: classFinalizeDemo
{
staticFinalizeDemo 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;
}
}
OP:
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.
1.What is the algorithm followed by GC.
2.Exactly at what time JVM runs GC.
3.In which order GC identifies the eligible objects.
4.In which order GC destroys the object etc.
5.Whether GC destroys all eligible objects or not.
509
When ever the program runs with low memory then the JVM runs GC, but we can't except exactly at
Page
what time.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
When we create object newly, that object will come to Yound Generation, in Yound Generation , that
Object will come to Eden Space, at Eden space Minor Garbage Collection will be performed, if any
object is dereferenced object then Minor Garbage Collection will remove that object. In Eden Space ,
if any object is still live then Garbage Collector will move that live objects to Survivor space, in
Survivor space , initial objects will come to S0 survivor space, there also Minor Garbage Collection
will be performed, where if any object is dereferenced then Garbage Collector will remove that objects
and the remaining objects are moved to S1 Survivor space, there again Minor Garbage Collection is
going on, still any object is live then that object will be moved to Old Generation. In Old Generation,
Major Garbage Collection will be performed.
IN Old Generation, we will perform Garbage Collection by using either of the following Garbage
Collectors.
1.Serial Garbage Collector
2.Parallel Garbage Collector
3.Parallel Old Garbage Collector
4.Concurrent Mark andSweep [CMS] Garbage Collector
5.Garbage First [G1] Garbage Collector
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
--> To acrtivate this Garbage Collector we have to use the following command.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
D:\java9>java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m
-XX:MaxPermSize=20m -XX:+UseSerialGC Test
512
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JVM
--->JVM is the Part of JRE.
--->JVM is Responsible to Load and Run Java Applications.
--->JVM Runs Java Byte Code by creating 5 Identical Runtime Areas to execute Class Members.
1.Class Loader Sub System
2.Memory Management System
3.Execution Engine
4.PC-Registers
5.Native Methds Stack
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 OR enum.
2)Fully Qualified Name of its Immediate Parent Class OR Interface OR enum.
3)Whether .class File is related to Class OR Interface OR enum.
4)The Modifiers Information
5)Variable OR Fields Information
6)Method Information
7)Constant Pool Information and so on.
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.
513
The Class Object used by Programmer to got Class Level Information Like Fully Qualified Name of
the Class, Parent Name, Method and Variable Information Etc.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2)Linking:
Linking Consists of 3 Activities
1)Verification
2)Preparation
3)Resolution
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 and whether
.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 Default
Values (But Not Original Values Assign to the Variable).
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.
3)Initialization:
In this Phase All Static Variables Assignments with Original Values and Static Block Execution
will be performed from Parent Class to Child Class.
NOTE: While Loading, Linking and Initialization if any Error Occurs then we will get Runtime
Exception Saying LinkageError.
514
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Bootstrap ClassLoader:
-->This ClassLoader is Responsible for loading 4 Java API Classes.
-->That is the Classes Present in rt.jar (runtime.jar).
Location: %JAVA_HOME%\jre\lib\rt.jar
-->This Location is Called Bootstrap Class Path.
-->That is Bootstrap ClassLoader is Responsible to Load Classes from Bootstrap Class Path.
-->Bootstrap ClassLoader is by Default Available with the JVM.
-->It is implemented in Native Languages Like C and C++.
Extension ClassLoader:
-->It is the Child of Bootstrap ClassLoader.
-->This ClassLoader is Responsible to Load Classes from Extension Class Path.
Location: %JAVA_HOME\jre\lib\ext
-->This ClassLoader is implemented in Java and the corresponding .class File Name is
sun.misc.Launcher$extClassLoader.class
-->If the required .class is Available, then it will be Loaded. Otherwise Bootstrap ClassLoader
Delegates that Request to Extension ClassLoader.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1)Method Area:
-->Method Area will be Created at the Time of JVM Start - Up.
-->It will be Shared by All Threads (Global Memory).
-->This Memory Area Need Not be Continuous.
-->Method area shows runtime constant pool.
-->Total Class Level Binary Information including Static Variables Stored in Method Area.
2)Heap Area:
-->Programmer Point of View Heap Area is Consider as Important Memory Area.
-->Heap Area will be Created at the Time of JVM Start - Up.
-->Heap Area can be accessed by All Threads (Global OR Sharable Memory).
-->Heap Area Nee Not be Continuous.
-->All Objects and corresponding Instance Variables will be stored in the Heap Area.
-->Every Array in Java is an Object and Hence Arrays Also will be stored in Heap Memory Only.
-->We are able to get Heap memory calculations by using java.lang.Runtime class.
-->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.
1)maxMemory(): Returns Number of Bytes of Max Memory allocated to the Heap.
2)totalMemory(): Returns Number of Bytes of Total (Initial) Memory allocated to the Heap.
3)freeMemory(): Returns Number of Bytes of Free Memory Present in Heap.
516
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Runtime rt=Runtime.getRuntime();
System.out.println(rt.maxMemory());
System.out.println(rt.totalMemory());
System.out.println(rt.freeMemory());
System.out.println(rt.totalMemory()-rt.freeMemory());
}
}
3)Stack Memory:
-->For Every Thread JVM will Create a Separate Runtime Stack.
-->Runtime Stack will be Created Automatically at the Time of Thread Creation.
-->All Method Calls and corresponding Local Variables, Intermediate Results will be stored in the
Stack.
-->For Every Method Call a Separate Entry will be Added to the Stack and that Entry is Called
Stack Frame OR Activation Record.
-->After completing that Method Call the corresponding Entry from the Stack will be Removed.
-->After completing All Method Calls, Just Before terminating the Thread, the Runtime Stack
will be destroyed by the JVM.
-->The Data stored in the Stack can be accessed by Only the corresponding Thread and it is Not
Available to Other Threads.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
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.
1)Interpreter
2)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.
518
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
NOTE:
JVM Interprets Total Program Line by Line at least Once.
JIT Compilation is Applicable Only for Repeatedly invoked Methods. But Not for Every Method.
519
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To repersent one thing if we allow more than one type then it is Type unsafe operation.
EX: Collection objects are providing type Unsafe operation, because, Collection objects are able to
allow heterogeneous elements.
ArrayList al=new ArrayList();
al.add("AAA");
al.add(new Employee());
al.add(new Integer(10));
al.add(new StringBuffer("CCC"));
In Collections to improve typedness or to provide typesafe operations then we have to use "Generics".
2.If we add elements to the Collection object and if we want to retrive elements from Collection
objects we must perform type casating, because, get(--) methods of Collections are able to retrive
elements in the form of java.lang.Object type.
EX:
ArrayList al=new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
System.out.println(al);
String str=al.get(2);---> Compilation Error, Incompatible types.
String str=(String)al.get(2);--> Valid
520
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
Collection_Name<Generic_Type> ref=new Collection_Name<GenericType>([ Params]);
EX:
ArrayList<String> al=new ArrayList<String>();
The above ArrayList object is able to add only String type elements, if we are trying to add any other
elements then Compiler will rise an error.
EX:
import java.util.*;
class Test
{
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
System.out.println(al);
al.add(new Integer(10));---> Error
System.out.println(al);
}
}
}
public Object get(int index)
Page
{
}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
al.add("A");---> Valid
al.add("B");---> Valid
al.add("C");---> Valid
al.add(new Integer(10));---> Invalid.
String str=al.get(2); 522
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Here add(-) method is able to take only Integer elements to add to the ArrayList and get() method will
return only Integer elements.
If any java class is having Generic type parameter at its declaration then that class is called as "Generic
Class".
NOTE: "Generics" feature is provided by JAVA along with its JDK5.0 version.
EX:
class Account<T>
{
}
In the above Generic class declaration, we can use any valid java identifier as Type parameter.
523
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status: Valid
EX:
class Account<Durga>
{
}
Status: Valid
In the above Generic class declaration, we can use any no of Type parameters by provide ','
seperator.
EX:
class Account<T>
{
T obj;
public void set(T obj)
{
this.obj=obj;
}
public T get()
{
return obj;
}
public void display_Type()
{
System.out.println(obj.getClass().getName());
524
}
}
Page
class Test
{
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Bounded Types:
In Generic Classes, we can bound the type parameter for a particular range by using "extends"
keyword.
EX1:
class Test<T>
{
}
EX2:
class Test<T extends X>
{
}
If X is a class type then we can pass either X type elements or sub class elements of X type as
parameter types.
EX:
class Payment
{
}
class CashPayment extends Payment
{
}
class CardPayment extends Payment
{
}
525
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:
class Test<T extends Number>
{
}
Test<Number> t=new Test<Number>()---> Valid
Test<Integer> t=new Test<Integer>();----> Valid
Test<Float> t=new Test<Float>();----> Valid
Test<String> t=new Test<String>();---> Invalid
If 'X' is an interface then we are ABle to pass either X type elements of its implementation class
types as parameter.
EX:
interface Java
{
}
class CoreJava implements Java
{
}
class AdvJava implements Java
{
}
class Course<T extends Java>
{
}
NOTE: Bouded parameters are not allowing "implements" keyword and "super" keyword.
class Test<T implements Runnable>
{
}
526
Status: Invalid
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status: Invalid
In Generic classes , we can use more than one type as bounded parameter by using '&' symbol.
EX:
class Test<T extends Number & Serializable>
{
}
Here Test class is able to allow the elements which must be either same as NUmber or sub classes to
the number and which must be the implementations of Serializable interface.
EX:
clas Test<T extends Number & Thread>
{
}
Status: Invalid
Reason: extends keyword will not allow two class types at a time.
EX:
class Test<T extends Runnbale & Serializable>
{
}
Statis: valid.
Reason: extends keyword is able to allow more than one interface type.
527
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Status: Valid.
Reson: Extends is able to allow both class type and interface type , but, first we have to specify class
type then we ahve to specify Interface type.
EX:
class Test<T extends Runnable & Number>
{
}
Status: Invalid.
EX:
import java.util.*;
class Account
{
String accNo;
String accName;
String accType;
}
class Bank
{
public ArrayList<Account> getAccountsList(ArrayList<Account> al)
{
528
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
529
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Storage Areas:
As part of the Enterprise Application development it is essential to manage the organizations data
like Employee Details, Customer Details, Products Details..etc
-->To manage the above specified data in enterprise applications we have to use storage areas
(Memory elements). There are two types of Storage areas.
File Systems:
It is a System, it will be provided by the local operating System.
--->Due to the above reason File Systems are not suitable for platform independent technologies
like JAVA.
--->File Systems are able to store less volume of the data.
--->File Systems are able to provide less security.
--->File Systems may increases data Redundancy.
--->In case of File Systems Query Language support is not available. So that all the database
operations are complex.
DBMS:
-->Database Management System is very good compare to file System but still it able to store less
data when compared to DataWareHouses.
-->DBMS is very good at the time of storing the data but which is not having Fast Retrieval
Mechanisms.
530
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->Data ware houses having fast retrieval mechanisms in the form of data mining techniques.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Step1:
Query Tokenization:
This Phase will take SQL Query as an Input,divided into no.of tokens and Generate Stream of tokens
as an output.
Step2:
Query Processing:
This phase will take Stream of tokens as an Input,constructs Query Tree with the Tokens,if Query
Tree Success then no Syntax error is available in the provided SQL Query.If Query Tree is not Success
then there are some syntax errors in the provided SQL Query.
Step3:
Query Optimization:
The main purpose of Query Optimization phase is to perform optimization on Query Tree in order to
reduce execution time and to optimize memory utilization.
Step4:
Query Execution:
This phase will take optimized Query Tree as an input and execute the Query by using interpreters.
532
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->JDBC is an API,which will provide very good predefined library to connect with database from
JAVA Applications in order to perform the basic database operations:
-->In case of JDBC Applications we will define the database logic and Java application and we will
send a Java represented database logic to Database Engine.But database engine is unable to
execute the Java represented database logic,it should required the database logic in Query
Language Representations.
-->In the above context, to execute JDBC applications we should require a conversion mechanism to
convert the database logic from Java representations to Query language representations and from
Query language representations to Java representations.
-->In the above situation the required conversion mechanisms are available in the form of a software
called as "Driver".
Driver:
-->Driver is an interface existed between Java application and database to map Java API calls to Query
language API calls and Query language API calls to Java API calls.
533
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->If we want to use Drivers in JDBC applications then we have to get Driver implementation from the
respective database software's.
->There are 180+ numbers of drivers but all these drivers could be classified into the following
Four types
1) Type 1
2) Type 2
3) Type 3
4) Type 4
Type 1 Driver:
-->Type 1 Driver is also called as JDBC-ODBC Driver and Bridge Driver.
-->Sun MicroSystems has provided JDBC-ODBC Driver with the inter dependent on the Microsoft’s
product ODBC Driver.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->If we want to use JDBC-ODBC Driver in our JDBC Applications first we have to install the
MicroSoft Product ODBC Driver native library.
-->To interact with the database from Java Application if we use JDBC-ODBC Driver then we should
require two types conversions so that JDBC-ODBC Driver is Slower Driver.
-->JDBC-ODBC Driver is highly recommended for stand alone applications,it is not suitable for
web applications,distributed applications and so on.
-->JDBC-ODBC Driver is suggestable for Simple JDBC applications,not for complex JDBC applications.
535
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->When compared to Type1 Driver Type2 Driver is faster Driver because it should not require two
times conversions to interact with the Database from Java Applications.
-->Type2 Driver is still recommended for standalone application not suggestible for web applications
and Enterprise applications.
-->If we want to use Type2 Driver in our Jdbc applications then we have to install the database
vendor provided native library.
-->Type2 Driver's portability is not good when compared to Type3 Driver and Type4 Driver.
536
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->Type 3 Driver is purely designed for Enterprise applications it is not suggestible for stand alone
applications.
-->Type 3 Driver portability is very good when compared to Type1 and Type2 Driver's.
-->Type 3 Driver will provide very good environment to interact with multiple no.of databases.
-->Type 3 Driver will provide very good environment to switch from one database to another
database without having modifications in client applications.
-->Type 3 Driver should not require any native library installations, it should require the
Compatibility with the application server.
537
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->Type 4 Driver is the frequent used Driver when compared to all the remaining Drivers.
-->Type 4 Driver is recommended for any type application includes standalone applications,
Network Applications....
-->Type 4 Driver portability is very good when compared to all the remaining Drivers.
-->Type 4 driver should not require any native library dependences and it should require
one time conversion to interact with database from Java Applications.
538
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->To load and Register the Driver first we have to make available Driver implementation to
JDBC application.For this we have to set classpath environment variable to the location Where we
have Driver implementation class.
-->If we want to use Type1 Driver provided by Sun MicroSystems in our JDBC applications then it is
not required to set classpath environment variable because Type1 Driver was provided by Sun
MicroSystems as part of Java Software in the form of sun.jdbc.odbc.JdbcOdbcdriver
-->If we want to use Type1 Driver in our JDBC applications then before loading we have to
Configure the Microsoft product odbc Driver.
-->To configure Microsoft product odbc Driver we have to use the following path.
539
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Control Panel
Administrative Tools
user DSN
Click on OK
-->To load and register Driver in our Jdbc applications we have to use the following method from
class
‘Class’
Public static Class forName(String class_Name)
EX: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
-->When JVM encounter the above instruction JVM will pickup the parameter that is JDBCOdbcDriver
Class name and JVM will search for its .class file in the current location,if it is not available then
JVM will search for it in Java predefined library.
-->If JVM identify JDBCODBCDriver.class file in Java pre-defined library(rt.jar) then JVM will load
JdbcOdbcDriver class byte code to the memory.
540
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->In case of Type1 Driver if we use either Jdbc 4.0 version or Jdk 6.0 version then it is optional
To perform loading and register the driver step because JVM will perform Drvier registration
automatically at the time of establishing the connection between Java application and Database.
NOTE:To prepare Jdbc applications Java API has provided the required pre-defined library in the form
of java.sql package so that we have to import this package in our Java file.
Import java.sql.*;
-->java.sql package includes the following pre-defined library to design Jdbc applications.
1. Driver (I)
2. DriverManager (C)
3. Connection (I)
4. Statement (I)
5. PreparedStatement (I)
6. ResultSet (I)
7. ResultSetMetaData (I)
8. DatabaseMetaData (I)
9. Savepoint(i)
541
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->To establish the connection between Java application and Database we have to use the following
Method from DriverManager class.
EX:Connection con=DriverManager.getConnection(“jdbc:odbc:dsnName”,”system”,”durga”);
-->When JVM encounter the above instruction JVM will access getConnection method,as part of the
getConnection method JVM will access connect() method to establish virtual socket connection
Between Java application and database as per the url which we provided.
-->If we use Type1 Driver then we have to use the following Driver class name and URL
d-class : sun.jdbc.odbc.JdbcOdbcDriver
url :jdbc:odbc:dsnName
-->In general all the Jdbc Drivers should have an url with the following format.
main-protocol: sub-protocol
-->where main-protocol name should be Jdbc for each and every Driver but the sub protocol name
should be varied from Driver to Driver.
Q) In Jdbc applications getConnecction() method will establish the connection between Java
application and Database and return connection object but connection is an interface how it is
possible to
542
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ans:In general in Java technology we are unable to create objects for the interfaces directly,if we
want to accommodate interface data in the form of objects then we have to take either an
implementation class or Anonymous Inner class.
-->If we take implementation class as an alternative then it may allow its own data a part from the
data Declared in interface and implementation class object should have its own identity instead of
interface identity.
-->If we want to create an object with only interface identity and to allow only interface data we have
to use Anonymous inner class as an alternative.
-->In jdbc applications getConnection() method will return connection object by returning
anonymous
NOTE: To create connection object taking an implementation class or anonymous inner class is
Completely depending on the Driver Implementation.
-->To write and execute SQL Queries we have to use same predefined library from Statement
prepared Statement and callableStatement.
-->To use the above required predefined library we have to prepare either Statement or
preparedStatement or CallableStatement objects.
543
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->In jdbc applications when we have a requirement to execute the same SQL Query in the next
Sequence where to improve the performance of JDBC application we will use prepared Statement.
-->In jdbc applications when we have a requirement to access stored procedures and functions
available At Database from Java application we will use Callable Statement object.
-->To prepare Statement object we have to use the following method from Connection.
Where createStatement() method will return Statement object by creating Statement interfaces
Anonymous inner class object.
Ans: Where executeQuery() method can be used to execute “selection group SQL Queries” in order
to fetch(retrieve) data from Database.
-->when JVM encounter executeQuery() method with selection group SQL query then JVM will pickup
Selection group SQL Query,send to JdbcOdbcDriver,it will send to connection.Now connection will
carry that SQL Query to the database engine through Odbc Driver.
-->At database database engine will execute the selection group SQL Query by performing Query
Tokenization,Query parsing,Query optimization and Query Execution.
544
-->By the execution of selection group SQL Query database engine will fetch the data from database
and return to Java Application.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->As per the predefined implementation of executeQuery method JVM will return the generated
ResultSet object reference as return value from executeQuery() method.
-->where executeUpdate() method can be used to execute updation group SQLQueries in order to
Perform the database operations like create,insert,update,delete,Drop….
-->when JVM encounter updation group SQL Query with execteUpdate() method the JVM will pickup
That Sql Query and send to Database through Database connection.At Database side Database
engine Will execute it,perform updation from Database,identify rowCount value (number of
records got updated) and return to Java application.
-->As per the predefined implementation of executeUpdate() method JVM will return row count
value From executeUpdate() method.
-->In Jdbc applications execute() method can be used to execute both selection group and updation
Group SQL Queries.
-->when JVM encounter selection group SQL Query with execute() method then JVM will send
selection Group SQL Query to database engine,where database engine will execute it and send
back the fetched Data to Java Application.
-->In Java application ResultSet object will be created with the fetched data but as per the predefined
implementation of execute() method JVM will return “true” as a Boolean value.
-->when JVM encounter updation group SQL Query as parameter to execute() method then JVM
Will send it to the database engine,where database engine will perform updations on database
and return row Count value to Java application.But as per the predefined implementation of
545
execute() method JVM will return “false” as Boolean value from execute() method
public Boolean execute(String sql_Query) throws SQLException.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
EX:con.close();
JdbcApp1: The following example demonstrate how to create a table on Database through a JDBC
application by taking table name as Dynamic input.
//import section
import java.sql.*;
import java.io.*;
class JdbcApp1{
public static void main(String args[]) throws Exception{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//prepare Statement
Statement st=con.createStatement();
//create BufferedReader
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
//prepare SQLQuery
st.executeUpdate(sql);
con.close();
}}
547
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
import java.io.*;
import java.sql.*;
public class JdbcApp2 {
public static void main(String[] args)throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","durga");
Statement st=con.createStatement();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
System.out.print("Employee Number :");
int eno=Integer.parseInt(br.readLine());
System.out.print("Employee Name :");
String ename=br.readLine();
System.out.print("Employee Salary :");
float esal=Float.parseFloat(br.readLine());
System.out.print("Employee Address :");
String eaddr=br.readLine();
In Jdbc applications if we want to used Type1 driver provided by sun micro systems then we have to
548
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->Oracle Driver is a class provided by oracle software in the form of Ojdbc14.jar file
-->Oracle Software has provided ojdbc14.jar file at the following location
C:\oracleexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc.jar
-->If we want to use Type4 Driver provided by oracle in our Jdbc applications we have to set
classpath environment variable to the location where we have ojdbc14.jar
D:\jdbc4>set
classpath=%classpath%;C:\oracleexe\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14.jar
JdbcApp3: The following example Demonstrate how to perform updations on Database table
through Jdbc Application
import java.io.*;
import java.sql.*;
public class JdbcApp3 {
public static void main(String[] args)throws Exception {
//Class.forName("oracle.jdbc.OracleDriver");
Connection con=DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","durga");
Statement st=con.createStatement();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Bonus Amount :");
int bonus_Amt=Integer.parseInt(br.readLine());
System.out.print("Salary Range :");
float sal_Range=Float.parseFloat(br.readLine());
int rowCount=st.executeUpdate
("update emp1 set esal=esal+"+bonus_Amt+" where esal<"+sal_Range);
System.out.println("Employees Updated :"+rowCount);
549
con.close();
}}
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
-->In jdbc application we will use executeUpdate() method to execute the Updation group SQL
queries like create,insert,update,delete,drop,alter and so on.
-->If we execute the SQL Queries like insert,update and delete then really some no.of record will
be updated on database table then that number will be return as rowCount value from
executeUpdate().
-->If we execute the SQL Queries like create,alter,drop with executeUpdate() method then records
manipulation is not available on database,in this context the return value from executeUpdate()
method is completely depending on the type of Driver which we used in JDBC application.
-->In the above context if we use type1 Driver provided by SunMicroSystems the executeUpdate()
method will return "-1" as rowCount value.
-->For the above requirement if we use Type4 Driver provided by oracle then executeUpdate()
method will return "0" as rowCount value
550
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JdbcApp6:
import java.sql.*;
public class JdbcApp6 {
public static void main(String[] args)throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection con=DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","durga");
Statement st=con.createStatement();
int rowCount1=st.executeUpdate("create table emp1(eno number)");
System.out.println(rowCount1);
int rowCount2=st.executeUpdate("drop table emp1");
System.out.println(rowCount2);
con.close();
}
} 551
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Java 10 - 2018
553
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
☀ The Main Objective of Lambda Expression is to bring benefits of functional programming into Java.
Ex: 1
() {
public void m1() { sop(“hello”);
sop(“hello”); }
} () { sop(“hello”); }
() sop(“hello”);
Ex:2
If the type of the parameter can be decided by compiler automatically based on the context then we can
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Conclusions:
Ex:
() sop(“hello”);
(int a ) sop(a);
(inta, int b) return a+b;
2) Usually we can specify type of parameter. If the compiler expects the type based on the context then we can
remove type. i.e., programmer is not required.
Ex:
(inta, int b) sop(a+b);
(a,b) sop(a+b);
3) If multiple parameters present then these parameters should be separated with comma (,).
4) If zero number of parameters available then we have to use empty parameter [ like ()].
Ex: () sop(“hello”);
5) If only one parameter is available and if the compiler can expect the type then we can remove the type and
parenthesis also.
Ex:
555
(int a) sop(a);
(a) sop(a);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
6) Similar to method body lambda expression body also can contain multiple statements. If more than one
statements present then we have to enclose inside within curly braces. If one statement present then curly
braces are optional.
7) Once we write lambda expression we can call that expression just like a method, for this functional interfaces
are required.
Functional Interfaces
If an interface contain only one abstract method, such type of interfaces are called functional interfaces and the
method is called functional method or single abstract method (SAM).
Ex:
1) Runnable It contains only run() method
2) Comparable It contains only compareTo() method
3) ActionListener It contains only actionPerformed()
4) Callable It contains only call() method
Inside functional interface in addition to single Abstract method (SAM) we write any number of default and static
methods.
Ex:
1) interface Interf {
2) public abstract void m1();
3) default void m2() {
4) System.out.println (“hello”);
5) }
6) }
In Java 8, Sun Micro System introduced @Functional Interface annotation to specify that the interface is
Functional Interface.
Ex:
@Functional Interface
556
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
@Functional Interface {
public void m1(); This code gives compilation error.
public void m2();
}
Inside Functional Interface we have to take exactly only one abstract method.If we are not declaring that abstract
method then compiler gives an error message.
Ex:
@Functional Interface {
interface Interface { compilation error
}
Ex:
1) @Functional Interface
2) interface A {
3) public void methodOne();
4) }
5) @Functional Interface
6) Interface B extends A {
7) }
In the child interface we can define exactly same parent interface abstract method.
Ex:
1) @Functional Interface
557
2) interface A {
3) public void methodOne();
4) }
Page
5) @Functional Interface
No Compile Time Error
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the child interface we can’t define any new abstract methods otherwise child interface won’t be Functional
Interface and if we are trying to use @Functional Interface annotation then compiler gives an error message.
1) @Functional Interface {
2) interface A {
3) public void methodOne(); Compiletime Error
4) }
5) @Functional Interface
6) interface B extends A {
7) public void methodTwo();
8) }
Ex:
@Functional Interface
interface A {
No compile time error
public void methodOne();
}
interface B extends A {
public void methodTwo(); This’s Normal interface so that code compiles without error
}
In the above example in both parent & child interface we can write any number of default methods and there are
no restrictions. Restrictions are applicable only for abstract methods.
Where ever Functional Interface concept is applicable there we can use Lambda Expressions
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) interface Interf {
2) public void methodOne() {}
3) class Test {
4) public static void main(String[] args) {
5) Interfi = () System.out.println(“MethodOne Execution”);
6) i.methodOne();
7) }
8) }
1) interface Interf {
2) public void sum(inta,int b);
3) }
4) class Demo implements Interf {
5) public void sum(inta,int b) {
6) System.out.println(“The sum:” +(a+b));
7) }
8) }
9) public class Test {
10) public static void main(String[] args) {
11) Interfi = new Demo();
559
12) i.sum(20,5);
13) }
Page
14) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) interface Interf {
2) public void sum(inta, int b);
3) }
4) class Test {
5) public static void main(String[] args) {
6) Interfi = (a,b) System.out.println(“The Sum:” +(a+b));
7) i.sum(5,10);
8) }
9) }
1) interface Interf {
2) publicint square(int x);
3) }
4) class Demo implements Interf {
5) public int square(int x) {
6) return x*x; OR (int x) x*x
7) }
8) }
9) class Test {
10) public static void main(String[] args) {
11) Interfi = new Demo();
12) System.out.println(“The Square of 7 is: “ +i.square(7));
13) }
14) }
1) interface Interf {
2) public int square(int x);
3) }
Page
4) class Test {
5) public static void main(String[] args) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) class ThreadDemo {
2) public static void main(String[] args) {
3) Runnable r = () {
4) for(int i=0; i<10; i++) {
5) System.out.println(“Child Thread”);
6) }
7) };
8) Thread t = new Thread(r);
9) t.start();
10) for(i=0; i<10; i++) {
11) System.out.println(“Main Thread”);
12) }
561
13) }
14) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) class Test {
2) public static void main(String[] args) {
3) Thread t = new Thread(new Runnable() {
4) public void run() {
5) for(int i=0; i<10; i++) {
6) System.out.println("Child Thread");
7) }
8) }
9) });
10) t.start();
11) for(int i=0; i<10; i++)
12) System.out.println("Main thread");
13) }
14) }
1) class Test {
2) public static void main(String[] args) {
3) Thread t = new Thread(() {
4) for(int i=0; i<10; i++) {
5) System.out.println("Child Thread");
6) }
7) });
8) t.start();
9) for(int i=0; i<10; i++) {
10) System.out.println("Main Thread");
562
11) }
12) }
Page
13) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
☀ We can reduce length of the code so that readability of the code will be improved.
☀ We can resolve complexity of anonymous inner classes.
☀ We can provide Lambda expression in the place of object.
☀ We can pass lambda expression as argument to methods.
Note:
☀ Anonymous inner class can extend concrete class, can extend abstract class, can implement interface with any
number of methods but
☀ Lambda expression can implement an interface with only single abstract method (Functional Interface).
☀ Hence if anonymous inner class implements Functional Interface in that particular case only we can replace
with lambda expressions. Hence wherever anonymous inner class concept is there, it may not possible to
replace with Lambda expressions.
☀ Anonymous inner class! = Lambda Expression
Ex:
Ex:
1) interface Interf {
2) public void m1();
3) }
4) class Test {
563
5) int x = 777;
6) public void m2() {
7) Interfi = () {
Page
8) int x = 888;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
☀ From lambda expression we can access enclosing class variables and enclosing method variables directly.
☀ The local variables referenced from lambda expression are implicitly final and hence we can’t perform re-
assignment for those local variables otherwise we get compile time error.
Ex:
1) interface Interf {
2) public void m1();
3) }
4) class Test {
5) int x = 10;
6) public void m2() {
7) int y = 20;
8) Interfi = () {
9) System.out.println(x); 10
10) System.out.println(y); 20
11) x = 888;
12) y = 999; //CE
13) };
14) i.m1();
15) y = 777;
16) }
17) public static void main(String[] args) {
18) Test t = new Test();
19) t.m2();
20) }
21) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
565
Default Methods
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
☀ Interface default methods are by-default available to all implementation classes. Based on requirement
implementation class can use these default methods directly or can override.
Ex:
1) interface Interf {
2) default void m1() {
3) System.out.println("Default Method");
4) }
5) }
6) class Test implements Interf {
7) public static void main(String[] args) {
8) Test t = new Test();
9) t.m1();
10) }
11) }
Note: We can’t override object class methods as default methods inside interface otherwise we get compile time
error.
566
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) interface Interf {
2) default inthashCode() {
3) return 10;
4) }
5) }
CompileTimeError
Reason: Object class methods are by-default available to every Java class hence it’s not required to bring through
default methods.
1) Eg 1:
2) interface Left {
3) default void m1() {
4) System.out.println("Left Default Method");
5) }
6) }
7)
8) Eg 2:
9) interface Right {
10) default void m1() {
11) System.out.println("Right Default Method");
12) }
13) }
14)
15) Eg 3:
16) class Test implements Left, Right {} 567
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
1) interface Interf {
2) public static void sum(int a, int b) {
3) System.out.println("The Sum:"+(a+b));
4) }
5) }
6) class Test implements Interf {
7) public static void main(String[] args) {
8) Test t = new Test();
9) t.sum(10, 20); //CE
10) Test.sum(10, 20); //CE
11) Interf.sum(10, 20);
12) }
13) }
☀ As interface static methods by default not available to the implementation class, overriding concept is not
applicable.
☀ Based on our requirement we can define exactly same method in the implementation class, it’s valid but not
overriding.
Ex:1
569
1) interface Interf {
2) public static void m1() {}
3) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:2
1) interface Interf {
2) public static void m1() {}
3) }
4) class Test implements Interf {
5) public void m1() {}
6) }
Ex3:
1) class P {
2) private void m1() {}
3) }
4) class C extends P {
5) public void m1() {}
6) }
From 1.8 version onwards we can write main() method inside interface and hence we can run interface directly
from the command prompt.
Ex:
1) interface Interf {
570
5) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Predicates
A predicate is a function with a single argument and returns boolean value.
To implement predicate functions in Java, Oracle people introduced Predicate interface in 1.8 version
(i.e.,Predicate<T>).
Predicate interface present in Java.util.function package.
It’s a functional interface and it contains only one method i.e., test()
Ex:
interface Predicate<T> {
public boolean test(T t);
}
Ex:1 Write a predicate to check whether the given integer is greater than 10 or not.
Ex:
571
return true;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
(Integer I) {
if(I > 10)
return true;
else
return false;
}
I (I>10);
1) import Java.util.function;
2) class Test {
3) public static void main(String[] args) {
4) predicate<Integer> p = I (i>10);
5) System.out.println(p.test(100));
6) System.out.println(p.test(7));
7) System.out.println(p.test(true)); //CE
8) }
9) }
# 1 Write a predicate to check the length of given string is greater than 3 or not.
Predicate<String> p = s (s.length() > 3);
System.out.println (p.test(“rvkb”)); true
System.out.println (p.test(“rk”)); false
#-2 write a predicate to check whether the given collection is empty or not.
Predicate<collection> p = c c.isEmpty();
Predicate joining
572
It’s possible to join predicates into a single predicate by using the following methods.
Page
and()
or()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
1) import Java.util.function.*;
2) class test {
3) public static void main(string[] args) {
4) int[] x = {0, 5, 10, 15, 20, 25, 30};
5) predicate<integer> p1 = i->i>10;
6) predicate<integer> p2=i -> i%2==0;
7) System.out.println("The Numbers Greater Than 10:");
8) m1(p1, x);
9) System.out.println("The Even Numbers Are:");
10) m1(p2, x);
11) System.out.println("The Numbers Not Greater Than 10:");
12) m1(p1.negate(), x);
13) System.out.println("The Numbers Greater Than 10 And Even Are:†);
14) m1(p1.and(p2), x);
15) System.out.println("The Numbers Greater Than 10 OR Even:†);
16) m1(p1.or(p2), x);
17) }
18) public static void m1(predicate<integer>p, int[] x) {
19) for(int x1:x) {
20) if(p.test(x1))
21) System.out.println(x1);
22) }
23) }
24) }
573
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
interface function(T,R) {
public R apply(T t);
}
1) import Java.util.function.*;
2) class Test {
3) public static void main(String[] args) {
4) Function<String, Integer> f = s ->s.length();
5) System.out.println(f.apply("Durga"));
6) System.out.println(f.apply("Soft"));
7) }
8) }
Note: Function is a functional interface and hence it can refer lambda expression.
574
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Predicate can return only Function can return any type of value
boolean value.
Note: Predicate is a boolean valued function and(), or(), negate() are default methods present inside Predicate
interface.
575
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax
If our specified method is static method If the method is instance method
Classname::methodName Objref::methodName
Functional Interface can refer lambda expression and Functional Interface can also refer method reference.
Hence lambda expression can be replaced with method reference. Hence method reference is alternative
syntax to lambda expression.
1) class Test {
2) public static void main(String[] args) {
3) Runnable r = () {
4) for(int i=0; i<=10; i++) {
5)
System.out.println("Child Thread");
576
6) }
7) };
8) Thread t = new Thread(r);
Page
9) t.start();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) class Test {
2) public static void m1() {
3) for(int i=0; i<=10; i++) {
4) System.out.println("Child Thread");
5) }
6) }
7) public static void main(String[] args) {
8) Runnable r = Test:: m1;
9) Thread t = new Thread(r);
10) t.start();
11) for(int i=0; i<=10; i++) {
12) System.out.println("Main Thread");
13) }
14) }
In the above example Runnable interface run() method referring to Test class static method m1().
Method reference to Instance method:
Ex:
1) interface Interf {
2) public void m1(int i);
3) }
4) class Test {
5) public void m2(int i) {
6) System.out.println("From Method Reference:"+i);
7) }
8) public static void main(String[] args) {
9) Interf f = I ->sop("From Lambda Expression:"+i);
10) f.m1(10);
11) Test t = new Test();
12) Interf i1 = t::m2;
577
13) i1.m1(20);
14) }
Page
15) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Constructor References
We can use :: ( double colon )operator to refer constructors also
Ex:
Interf f = sample :: new;
functional interface f referring sample class constructor
Ex:
1) class Sample {
2) private String s;
3) Sample(String s) {
4) this.s = s;
5) System.out.println("Constructor Executed:"+s);
6) }
7) }
8) interface Interf {
9) public Sample get(String s);
10) }
11) class Test {
12) public static void main(String[] args) {
13) Interf f = s -> new Sample(s);
14) f.get("From Lambda Expression");
15) Interf f1 = Sample :: new;
16) f1.get("From Constructor Reference");
17) }
18) }
Note: In method and constructor references compulsory the argument types must be matched.
578
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to represent a group of individual objects as a single entity then We should go for collection.
If we want to process a group of objects from the collection then we should go for streams.
We can create a stream object to the collection by using stream() method of Collection interface. stream()
method is a default method added to the Collection in 1.8 version.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1.Configuration
2.Processing
1) Configuration:
We can configure either by using filter mechanism or by using map mechanism.
Filtering:
We can configure a filter to filter elements from the collection based on some boolean condition by using
filter()method of Stream interface.
Ex:
Stream s = c.stream();
Stream s1 = s.filter(i -> i%2==0);
Hence to filter elements of collection based on some Boolean condition we should go for filter() method.
Mapping:
If we want to create a separate new object, for every object present in the collection based on our requirement
then we should go for map() method of Stream interface.
Ex:
Stream s = c.stream();
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) import Java.util.*;
2) class Test {
3) public static void main(String[] args) {
4) ArrayList<Integer> l1 = new ArrayList<Integer>();
5) for(int i=0; i<=10; i++) {
6) l1.add(i);
7) }
8) System.out.println(l1);
9) ArrayList<Integer> l2 = new ArrayList<Integer>();
10) for(Integer i:l1) {
11) if(i%2 == 0)
12) l2.add(i);
13) }
14) System.out.println(l2);
15) }
581
16) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) import Java.util.*;
2) import Java.util.stream.*;
3) class Test {
4) public static void main(String[] args) {
5) ArrayList<String> l = new ArrayList<String>();
6) l.add("rvk"); l.add("rk"); l.add("rkv"); l.add("rvki"); l.add("rvkir");
7) System.out.println(l);
8) List<String> l2 = l.Stream().map(s -
>s.toUpperCase()).collect(Collectors.toList());
9) System.out.println(l2);
10) }
11) }
II.Processing by count()method
This method returns number of elements present in the stream.
Ex:
long count = l.stream().filter(s ->s.length()==5).count();
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
List<String> l3=l.stream().sorted().collect(Collectors.toList());
sop(“according to default natural sorting order:”+l3);
max(Comparator c)
returns maximum value according to specified comparator
Ex:
String min=l.stream().min((s1,s2) -> s1.compareTo(s2)).get();
sop(“minimum value is:”+min);
V.forEach() method
583
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
1) import Java.util.*;
2) import Java.util.stream.*;
3) class Test1 {
4) public static void main(String[] args) {
5) ArrayList<Integer> l1 = new ArrayaList<Integer>();
6) l1.add(0); l1.add(15); l1.add(10); l1.add(5); l1.add(30); l1.add(25); l1.add(20);
7) System.out.println(l1);
8) ArrayList<Integer> l2=l1.stream().map(i-> i+10).collect(Collectors.toList());
9) System.out.println(l2);
10) long count = l1.stream().filter(i->i%2==0).count();
11) System.out.println(count);
12) List<Integer> l3=l1.stream().sorted().collect(Collectors.toList());
13) System.out.println(l3);
14) Comparator<Integer> comp=(i1,i2)->i1.compareTo(i2);
15) List<Integer> l4=l1.stream().sorted(comp).collect(Collectors.toList());
16) System.out.println(l4);
17) Integer min=l1.stream().min(comp).get();
18) System.out.println(min);
19) Integer max=l1.stream().max(comp).get();
20) System.out.println(max);
21) l3.stream().forEach(i->sop(i));
22) l3.stream().forEach(System.out:: println);
23)
24) }
25) }
VI.toArray() method
We can use toArray() method to copy elements present in the stream into specified array
VII.Stream.of()method
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
Stream s=Stream.of(99,999,9999,99999);
s.forEach(System.out:: println);
Double[] d={10.0,10.1,10.2,10.3};
Stream s1=Stream.of(d);
s1.forEach(System.out :: println);
To overcome this problem in the 1.8version oracle people introduced Joda-Time API. This API developed by
joda.org and available in Java in the form of Java.time package.
1) import Java.time.*;
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
O/p:
2015-11-23
12:39:26:587
Once we get LocalDate object we can call the following methods on that object to retrieve Day,month and year
values separately.
Ex:
1) import Java.time.*;
2) class Test {
3) public static void main(String[] args) {
4) LocalDate date = LocalDate.now();
5) System.out.println(date);
6) int dd = date.getDayOfMonth();
7) int mm = date.getMonthValue();
8) int yy = date.getYear();
9) System.out.println(dd+"..."+mm+"..."+yy);
10) System.out.printf("\n%d-%d-%d",dd,mm,yy);
11) }
12) }
Once we get LocalTime object we can call the following methods on that object.
Ex:
1) importJava.time.*;
2) class Test {
3) public static void main(String[] args) {
4) LocalTime time = LocalTime.now();
5) int h = time.getHour();
586
6) int m = time.getMinute();
7) int s = time.getSecond();
Page
8) int n = time.getNano();
9) System.out.printf("\n%d:%d:%d:%d",h,m,s,n);
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If we want to represent both Date and Time then we should go for LocalDateTime object.
LocalDateTimedt = LocalDateTime.now();
System.out.println(dt);
O/p: 2015-11-23T12:57:24.531
We can represent a particular Date and Time by using LocalDateTime object as follows.
Ex:
LocalDateTime dt1 = LocalDateTime.of(1995,Month.APRIL,28,12,45);
sop(dt1);
Ex:
LocalDateTime dt1=LocalDateTime.of(1995,04,28,12,45);
Sop(dt1);
Sop(“After six months:”+dt.plusMonths(6));
Sop(“Before six months:”+dt.minusMonths(6));
To Represent Zone:
ZoneId object can be used to represent Zone.
Ex:
1) import Java.time.*;
2) class ProgramOne {
3) public static void main(String[] args) {
4) ZoneId zone = ZoneId.systemDefault();
5) System.out.println(zone);
6) }
7) }
Ex:
ZoneId la = ZoneId.of("America/Los_Angeles");
587
ZonedDateTimezt = ZonedDateTime.now(la);
System.out.println(zt);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Ex:
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1989,06,15);
Period p = Period.between(birthday,today);
System.out.printf("age is %d year %d months %d days",p.getYears(),p.getMonths(),p.getDays());
588
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
589
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) interface Prior2Java8Interf
2) {
3) public void m1();
4) public void m2();
5) }
Assume this interface is implemented by 1000s of classes and each class provided implementation for both
methods.
1) interface Prior2Java8Interf
2) {
3) public void m1();
4) public void m2();
5) }
6) class Test1 implements Prior2Java8Interf
7) {
8) public void m1(){}
9) public void m2(){}
10) }
11) class Test2 implements Prior2Java8Interf
12) {
13) public void m1(){}
14) public void m2(){}
15) }
16) class Test3 implements Prior2Java8Interf
17) {
18) public void m1(){}
591
22) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
It is valid because all implementation classes provided implementation for both m1() and m2().
Assume our programming requirement is we have to extend the functionality of this interface by adding a new
method m3().
1) interface Prior2Java8Interf
2) {
3) public void m1();
4) public void m2();
5) public void m3();
6) }
If we add new method m3() to the interface then all the implementation classes will be effected and won't be
compiled,because every implementation class should implement all methods of interface.
CE: Test1 is not abstract and does not override abstract method
m3() in PriorJava8Interf
Hence prior to java 8,it is impossible to extend the functionality of an existing interface without effecting
implementation classes. JDK 8 Engineers addresses this issue and provides solution in the form of Default
methods, which are also known as Defender methods or Virtual Extension Methods.
1) interface Java8Interf
2) {
3) public void m1();
592
7) //"Default Implementation
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Interface default methods are by-default available to all implementation classes.Based on requirement
implementation class can ignore these methods or use these default methods directly or can override.
Hence the main advantage of Default Methods inside interfaces is, without effecting implementation classes we
can extend functionality of interface by adding new methods (Backward compatibility).
Eg:
27) }
28) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
D:\java9durga>java Test
common functionality of methods m1 & m2
common functionality of methods m1 & m2
Inside Java 8 interaces, we can take public static methods also.If several static methods having some common
functionality, we can seperate that common functionality into a private static method and we can call that private
static method from public static methods where ever it is required.
1) interface Java9Interf
2) {
3) public static void m1()
Page
4) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
D:\durga_classes>java Test
common functionality of methods m1 & m2
common functionality of methods m1 & m2
Note: Interface static methods should be called by using interface name only even in implementation classes
also.
1. Code Reusability
2. We can expose only intended methods to the API clients (Implementation classes), because interface private
methods are not visible to the implementation classses.
Note:
1. private methods cannot be abstract and hence compulsory private methods should have the body.
596
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) interface Prior2Java8Interface
2) {
3) public-static-final variables
4) public-abstract methods
5) }
2. In Java 8 ,we can declare default and public-static methods also inside interface.
1) interface Java8Interface
2) {
3) public-static-final variables
4) public-abstract methods
5) default methods with implementation
6) public static methods with implementation
7) }
3. In Java 9, We can declare private instance and private static methods also inside interface.
1) interface Java9Interface
2) {
3) public-static-final variables
4) public-abstract methods
5) default methods with implementation
6) public static methods with implementation
7) private instance methods with implementation
8) private static methods with implementation
9) }
Note: The main advantage of private methods inside interface is Code Reusablility without effecting
implemenation classes.
597
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) BufferedReader br=null;
2) try
3) {
4) br=new BufferedReader(new FileReader("abc.txt"));
5) //use br based on our requirements
6) }
7) catch(IOException e)
8) {
9) // handling code
10) }
11) finally
12) {
598
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To overcome these problems Sun People introduced "try with resources" in 1.7 version.
Conclusions:
1. We can declare any number of resources but all these resources should be separated with ; (semicolon)
1) try(R1 ; R2 ; R3)
2) {
3) -------------
4) }
2. All resources should be AutoCloseable resources. A resource is said to be auto closable if and only if the
corresponding class implements the java.lang.AutoCloseable interface either directly or indirectly.
All database related, network related and file io related resources already implemented AutoCloseable interface.
599
Being a programmer we should aware this point and we are not required to do anything extra.
3. AutoCloseable interface introduced in Java 1.7 Version and it contains only one method: close()
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
5. Untill 1.6 version try should be followed by either catch or finally but in 1.7 version we can take only try with
resource without catch or finally
1) try(R)
2) {
3) //valid
4) }
6. The main advantage of "try with resources" is finally block will become dummy because we are not required to
close resources of explicitly.
We should create the resource in try block primary list or we should declare with new reference variable in try
block. i.e. Resource reference variable should be local to try block.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
But from JDK 9 onwards we can use the resource reference variables which are created outside of try block
directly in try block resources list. i.e. The resource reference variables need not be local to try block.
But make sure resource(br) should be either final or effectively final. Effectively final means we should not
perform reassignment.
Demo Program:
6) }
7) public void doProcess()
Page
8) {
9) System.out.println("Resource Processing...");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
50) r.doProcess();
51) }
Page
52) catch(Exception e)
53) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
94)
95) System.out.println("Program Execution With JDK9");
Page
96) JDK9();
97) System.out.println("Program Execution Multiple Resources With JDK9");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Program Execution With PreJDK7
Resource Creation...
Resource Processing...
Resource Closing...
Program Execution With JDK7
Resource Creation...
Resource Processing...
Resource Closing...
Program Execution With JDK9
Resource Creation...
Resource Processing...
Resource Closing...
Program Execution Multiple Resources With JDK9
Resource Creation...
Resource Creation...
Resource Creation...
Resource Creation...
Resource Processing...
Resource Processing...
Resource Processing...
Resource Processing...
Resource Closing...
Resource Closing...
Resource Closing...
Resource Closing...
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Case 1: Type-Safety
Arrays are always type safe. i.e 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.
For the 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.
Eg:
String[] can contains only String type of elements. Hence, we can always give guarantee for the type of elements
present inside array. Due to this arrays are safe to use with respect to type. Hence arrays are type safe.
But collections are not type safe that is we can't give any guarantee for the type of elements present inside
collection. For example if our programming requirement is to hold only string type of objects, and if we choose
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.
Hence we can't give any guarantee for the type of elements present inside collections. Due to this collections are
605
not safe to use with respect to type, i.e collections are not Type-Safe.
Case 2: Type-Casting
Page
In the case of array at the time of retrieval it is not required to perform any type casting.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
But in the case of collection at the time of retrieval compulsory we should perform type casting otherwise we will
get compile time error.
Eg:
To overcome the above problems of collections(type-safety, type casting),Java people introduced Generics
concept in 1.5version.Hence the main objectives of Generics are:
For this ArrayList we can add only string type of objects. By mistake if we are trying to add any other type then we
will get compile time error.
1) l.add("Durga");//valid
2) l.add("Ravi");//valid
3) l.add(new Integer(10));//error: no suitable method found for add(Integer)
606
At the time of retrieval it is not required to perform any type casting we can assign elements directly to string
type variables.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Prior to Java 7, Programmer compulsory should explicitly include the Type of generic class in the Type Parameter
of the constructor.
Whenever we are using Diamond Operator, then the compiler will consider the type automatically based on
context, Which is also known as Type inference. We are not required to specify Type Parameter of the Constructor
explicitly.
Hence the main advantage of Diamond Operator is we are not required to speicfy the type parameter in the
constructor explicitly,length of the code will be reduced and readability will be improved.
Eg 2:
List<Map<String,Integer>> l = new ArrayList<Map<String,Integer>>();
But until Java 8 version we cannot apply diamond operator for Anonymous Generic classes. But in Java 9, we can
use.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Anonymous class:
Sometimes we can declare classes without having the name, such type of nameless classes are called Anonymous
Classes.
Eg 1:
We are creating a child class that extends Thread class without name(Anonymous class) and we are creating
object for that child class.
Eg 2:
We are creating an implementation class for Runnable interface without name(Anonymous class) and we are
creating object for that implementation class.
Eg 3:
We are creating a child class that extends ArrayList class without name(Anonymous class) and we are creating
object for that child class.
From JDK 9 onwards we can use Diamond Operator for Anonymous Classes also.
608
3) };
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) class MyGenClass<T>
2) {
3) T obj;
4) public MyGenClass(T obj)
5) {
6) this.obj = obj;
7) }
8)
9) public T getObj()
10) {
11) return obj;
12) }
13) public void process()
14) {
15) System.out.println("Processing obj...");
16) }
17) }
18) public class Test
19) {
20) public static void main(String[] args)
21) {
22) MyGenClass<String> c1 = new MyGenClass<String>("Durga")
23) {
24) public void process()
25) {
26) System.out.println("Processing... " + getObj());
27) }
28) };
29) c1.process();
30)
31) MyGenClass<String> c2 = new MyGenClass<>("Pavan")
32) {
33) public void process()
609
34) {
35) System.out.println("Processing... " + getObj());
Page
36) }
37) };
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Processing... Durga
Processing... Pavan
If we compile the above program according to Java 1.8 version,then we will get compile time error
D:\durga_classes>javac -source 1.8 Test.java
error: cannot infer type arguments for MyGenClass<T>
MyGenClass<String> c2 = new MyGenClass<>("Pavan")
^
reason: cannot use '<>' with anonymous inner classes in -source 1.8
(use -source 9 or higher to enable '<>' with anonymous inner classes)
1) import java.util.Iterator;
2) import java.util.NoSuchElementException;
3) public class DiamondOperatorDemo
4) {
5) public static void main(String[] args)
6) {
7) String[] animals = { "Dog", "Cat", "Rat", "Tiger","Elephant" };
8) Iterator<String> iter = new Iterator<>()
9) {
10) int i = 0;
11) public boolean hasNext()
12) {
13) return i < animals.length;
14) }
15) public String next()
16) {
17) if (!hasNext())
18) throw new NoSuchElementException();
19) return animals[i++];
20) }
21) };
610
24) System.out.println(iter.next());
25) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Dog
Cat
Rat
Tiger
Elephant
Note - 1:
Note - 2:
Be Ready for Partial Diamond Operator in the next versions of Java, as the part of Project "Amber". Open JDK
people already working on this.
611
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To understand the importance of this annotation, first we should aware var-arg methods and heap pollution
problem.
But from 1.5 version onwards, we can declare a method with variable number of arguments, such type of
methods are called var-arg methods.
5) System.out.println("var-arg method");
6) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output
var-arg method
var-arg method
var-arg method
Output
The Sum:0
The Sum:10
The Sum:60
If we use var-arg methods with Generic Type then there may be a chance of Heap Pollution.
At runtime if one type variable trying to point to another type value, then there may be a chance of
ClasssCastException. This problem is called Heap Pollution.
Page
In our code, if there is any chance of heap pollution then compiler will generate warnings.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Compilation:
javac Test.java
Execution:
java Test
RE: java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.lang.String
In the above program at runtime, String type variable name is trying to point to Integer type,which causes Heap
Pollution and results ClassCastException.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) import java.util.*;
2) public class Test
3) {
4) public static void main(String[] args)
5) {
6) List<String> l1= Arrays.asList("A","B");
7) List<String> l2= Arrays.asList("C","D");
8) m1(l1,l2);
9) }
10) @SafeVarargs
11) public static void m1(List<String>... l)
12) {
13) for(List<String> l1: l)
14) {
15) System.out.println(l1);
16) }
17) }
18) }
Output:
[A, B]
[C, D]
In the program, inside m1() method we are not performing any reassignments. Hence there is no chance of Heap
Pollution Problem. Hence we can suppress Compiler generated warnings with @SafeVarargs annotation.
Note: At compile time observe the difference with and without SafeVarargs Annotation.
1) import java.util.*;
2) public class Test
3) {
Page
4) @SafeVarargs //valid
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
FAQs:
Q1. For which purpose we can use @SafeVarargs annotation?
Q2. What is Heap Pollution?
Factory Methods for creating unmodifiable Collections
List: An indexed Collection of elements where duplicates are allowed and insertion order is preserved.
Set: An unordered Collection of elements where duplicates are not allowed and insertion order is not preserved.
Map: A Map is a collection of key-value pairs and each key-value pair is called Entry.Entry is an inner interface
present inside Map interface.Duplicate keys are not allowed,but values can be duplicated.
As the part of programming requirement, it is very common to use Immutable Collection objects to improve
Memory utilization and performance.
616
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
This way of creating unmodifiable Collections is verbose and not convenient.It increases length of the code and
reduces readability.
JDK Engineers addresses this problem and introduced several factory methods for creating unmodifiable
collections.
8. static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Upto 10 elements the matched method will be executed and for more than 10 elements internally var-arg method
will be called.JDK Enginerrs identified List of upto 10 elements is the common requirement and hence they
provided the corresponding methods. For remaining cases var-arg method will be executed, which is very costly.
These many methods just to improve performance.
Note:
1. While using these factory methods if any element is null then we will get NullPointerException.
2. After creating the List object,if we are trying to change the content(add|remove|replace elements)then we will
get UnsupportedOperationException because List is immutable(unmodifiable).
List<String> fruits=List.of("Apple","Banana","Mango");
fruits.add("Orange"); //UnsupportedOperationException
fruits.remove(1); //UnsupportedOperationException
fruits.set(1,"Orange"); //UnsupportedOperationException
Creation of unmodifiable Set(Immutable Set) with Java 9 Factory Methods:
9. static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)
10.static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)
11.static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note:
1. While using these Factory Methods if we are trying to add duplicate elements then we will get
IllegalArgumentException, because Set won't allow duplicate elements
Set<Integer> numbers=Set.of(10,20,30,10);
RE: IllegalArgumentException: duplicate element: 10
2. While using these factory methods if any element is null then we will get NullPointerException.
3. After creating the Set object, if we are trying to change the content (add|remove elements)then we will get
UnsupportedOperationException because Set is immutable(unmodifiable).
Set<String> fruits=Set.of("Apple","Banana","Mango");
fruits.add("Orange"); //UnsupportedOperationException
fruits.remove("Apple"); //UnsupportedOperationException
6. static <K,V> Map<K,V> of(K k1,V v1,K k2,V v2,K k3,V v3,K k4,V v4,K k5,V v5)
7. static <K,V> Map<K,V> of(K k1,V v1,K k2,V v2,K k3,V v3,K k4,V v4,K k5,V v5,K k6,V v6)
Page
8. static <K,V> Map<K,V> of(K k1,V v1,K k2,V v2,K k3,V v3,K k4,V v4,K k5,V v5,K k6,V v6,K k7,V v7)
9. static <K,V> Map<K,V> of(K k1,V v1,K k2,V v2,K k3,V v3,K k4,V v4,K k5,V v5,K k6,V v6,K k7,V v7,K k8,V v8)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note:
Up to 10 entries,it is recommended to use of() methods and for more than 10 items we should use ofEntries()
method.
Map.Entry<String,String> e=Map.entry("A","Apple");
This Entry object is immutable and we cannot modify its content. If we are trying to change we will get RE:
UnsupportedOperationException
e.setValue("Durga"); UnsupportedOperationException
By using these Entry objects we can create unmodifiable Map object with Map.ofEntries() method.
Eg:
1) import java.util.*;
2) class Test
3) {
4) public static void main(String[] args)
5) {
6) Map.Entry<String,String> e1=Map.entry("A","Apple");
7) Map.Entry<String,String> e2=Map.entry("B","Banana");
8) Map.Entry<String,String> e3=Map.entry("C","Cat");
9) Map<String,String> m=Map.ofEntries(e1,e2,e3);
10) System.out.println(m);
11) }
12) }
620
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note:
1. While using these Factory Methods if we are trying to add duplicate keys then we will get
IllegalArgumentException: duplicate key.But values can be duplicated.
Map<String,String> map=Map.of("A","Apple","A","Banana","C","Cat","D","Dog");
RE: java.lang.IllegalArgumentException: duplicate key: A
2. While using these factory methods if any element is null (either key or value) then we will get
NullPointerException.
3. After creating the Map object, if we are trying to change the content(add|remove|replace elements)then we
will get UnsupportedOperationException because Map is immutable(unmodifiable).
Eg:
Map<String,String> map=Map.ofEntries(entry("A","Apple"),entry("B","Banana"));
map.put("C","Cat"); UnsupportedOperationException
map.remove("A"); UnsupportedOperationException
Serialization
Page
e1 e2 e3
CONTACT US: e1 e2 e3
l1
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
e1 21e2
+91- 7207 e3
24 27/28 WEBSITE: www.durgasoftonline.com
31)
32) System.out.println("Deserialization of List Object...");
33) FileInputStream fis=new FileInputStream("emp.ser");
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
D:\durga_classes>java Test
[100=Sunny, 200=Bunny, 300=Chinny]
Serialization of List Object...
Deserialization of List Object...
[100=Sunny, 200=Bunny, 300=Chinny]
After deserialization also we cannot modify the content, otherwise we will get UnsupportedOperationException.
Note: The Factroy Methods introduced in Java 9 are not to create general collections and these are meant for
creating immutable collections.
623
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The main objective of Streams concept is to process elements of Collection with Functional Programming (Lambda
Expressions).
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Before Filtering:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
After Filtering:[0, 2, 4, 6, 8, 10]
Demo Program:
1) import java.util.*;
2) import java.util.stream.*;
3) public class Test
4) {
5) public static void main(String[] args) {
6) ArrayList<Integer> l1 = new ArrayList<Integer>();
7) for(int i =0; i <=10; i++)
8) {
9) l1.add(i);
625
10) }
11) System.out.println("Before using map() method:"+l1);
12) List<Integer> l2=l1.stream().map(i->i*i).collect(Collectors.toList());
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Before using map() method:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
After using map() method:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Typical use is for the mapper function of flatMap to return Stream.empty() if it wants to send zero values, or
something like Stream.of(x, y, z) if it wants to return several values.
Demo Program:
1) import java.util.*;
2) import java.util.stream.*;
3) public class Test
4) {
5) public static void main(String[] args)
6) {
7) ArrayList<Integer> l1 = new ArrayList<Integer>();
8) for(int i =0; i <=10; i++)
9) {
10) l1.add(i);
11) }
12) System.out.println("Before using map() method:"+l1);
13) List<Integer> l2=l1.stream().flatMap(
14) i->{ if (i%2 !=0) return Stream.empty();
15) else return Stream.of(i);
16) }).collect(Collectors.toList());
17) System.out.println("After using flatMap() method:"+l2);
18)
19) List<Integer> l3=l1.stream().flatMap(
20) i->{ if (i%2 !=0) return Stream.empty();
21) else return Stream.of(i,i*i);
22) }).collect(Collectors.toList());
626
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. takeWhile()
2. dropWhile()
3. Stream.iterate()
4. Stream.ofNullable()
Note: takeWhile() and dropWhile() methods are default methods and iterate() and ofNullable() are static
methods of Stream interface.
1. takeWhile():
It is the default method present in Stream interface.
But, in the case of takeWhile() method, there is no guarantee that it will process every element of the Stream. It
will take elements from the Stream as long as predicate returns true. If predicate returns false, at that point
onwards remaining elements won't be processed, i.e rest of the Stream is discarded.
627
Eg: Take elements until we will get even numbers. Once we got odd number then stop and ignore rest of the
stream.
Page
Demo Program:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
Initial List:[2, 4, 1, 3, 6, 5, 8]
After Filtering:[2, 4, 6, 8]
After takeWhile:[2, 4]
Eg 2:
Stream.of("A","AA","BBB","CCC","CC","C").takeWhile(s->s.length()<=2).forEach(System.out::println);
Output:
A
AA
2. dropWhile()
It is the default method present in Stream interface.
It drops elements instead of taking them as long as predicate returns true. Once predicate returns false then rest
of the Stream will be returned.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) import java.util.*;
2) import java.util.stream.*;
3) public class Test
4) {
5) public static void main(String[] args)
6) {
7) ArrayList<Integer> l1 = new ArrayList<Integer>();
8) l1.add(2);
9) l1.add(4);
10) l1.add(1);
11) l1.add(3);
12) l1.add(6);
13) l1.add(5);
14) l1.add(8);
15) System.out.println("Initial List:"+l1);
16) List<Integer> l2=l1.stream().dropWhile(i->i%2==0).collect(Collectors.toList());
17) System.out.println("After dropWhile:"+l2);
18) }
19) }
Output:
Initial List:[2, 4, 1, 3, 6, 5, 8]
After dropWhile:[1, 3, 6, 5, 8]
Eg 2:
Stream.of("A","AA","BBB","CCC","CC","C").dropWhile(s->s.length()<=2).forEach(System.out::println);
Output:
BBB
CCC
CC
C
3. Stream.iterate():
It is the satic method present in Stream interface.
629
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Eg: Stream.iterate(1,x->x+1).forEach(System.out::println);
Output:
1
2
3
...infinite times
How to limit the number of iterations:
For this we can use limit() method.
Eg: Stream.iterate(1,x->x+1).limit(5).forEach(System.out::println);
Output:
1
2
3
4
5
To prevent infinite loops, in Java 9, another version of iterate() method introduced, which is nothing but 3-arg
iterate() method.
for(int i =0;i<10;i++){}
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
1
2
3
4
4. ofNullable():
public static Stream<T> ofNullable(T t)
This method will check whether the provided element is null or not. If it is not null, then this method returns the
Stream of that element. If it is null then this method returns empty stream.
Eg 1:
List l=Stream.ofNullable(100).collect(Collectors.toList());
System.out.println(l);
Output:[100]
Eg 2:
List l=Stream.ofNullable(null).collect(Collectors.toList());
System.out.println(l);
Output: []
Demo Program:
631
1) import java.util.*;
2) import java.util.stream.*;
Page
3) import java.util.*;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
[A, B, null, C, D, null]
[A, B, C, D]
[A, B, C, D]
Demo Program:
1) import java.util.*;
2) import java.util.stream.*;
3) public class Test
4) {
5) public static void main(String[] args)
6) {
7) Map<String,String> m=new HashMap<>();
8) m.put("A","Apple");
9) m.put("B","Banana");
632
10) m.put("C",null);
11) m.put("D","Dog");
12) m.put("E",null);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Output:
[A, B, C, D, E]
[Apple, Banana, Dog]
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
By using this tool we can execute Java code snippets and we can get immediate results.
For beginners it is very good to start programming in fun way.
By using this Jshell we can test and execute Java expressions, statements, methods, classes etc. It is useful for
testing small code snippets very quickly, which can be plugged into our main coding based on our requirement.
Prior to Java 9 we cannot execute a single statement, expression, methods without full pledged classes. But in
Java 9 with JShell we can execute any small piece of code without having complete class structure.
634
It is not new thing in Java. It is already there in other languages like Python, Swift, Lisp, Scala, Ruby etc..
Python IDLE
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
2. JShell is not replacement of Regular Java IDEs like Eclpise, NetBeans etc
3. It is not that much impressed feature. All other languages like Python, LISP, Scala, Ruby, Swift etc are already
having this REPL tools
635
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: Observe the difference b/w with -v and without -v (verbose mode)
D:\durga_classes>jshell -v
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
Note: If any information displaying on the jshell starts with '|', it is the information to the programmer from the
jshell
jshell> 10+20
$1 ==> 30
| created scratch variable $1 : int
jshell> 20-30*6/2
$2 ==> -70
| created scratch variable $2 : int
jshell> System.out.println("DURGASOFT")
636
DURGASOFT
Here if we observe the output not starts with | because it is not information from the Jshell.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> Math.sqrt(4)
$4 ==> 2.0
| created scratch variable $4 : double
jshell> Math.max(10,20)
$5 ==> 20
| created scratch variable $5 : int
jshell> Math.random()
$6 ==> 0.6956946870985563
| created scratch variable $6 : double
jshell> Math.random()
$7 ==> 0.3657412865477785
| created scratch variable $7 : double
jshell> Math.random()
$8 ==> 0.8828801968574324
| created scratch variable $8 : double
Note: We are not required to import Java.lang package, because by default available.
Note: The following packages are bydefault available to the Jshell and we are not required to import. We can
check with /imports command
jshell> /imports
| import Java.io.*
| import Java.math.*
| import Java.net.*
| import Java.nio.file.*
| import Java.util.*
| import Java.util.concurrent.*
| import Java.util.function.*
637
| import Java.util.prefs.*
| import Java.util.regex.*
| import Java.util.stream.*
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> l.add("Sunny");l.add("Bunny");l.add("Chinny");
$2 ==> true
$3 ==> true
$4 ==> true
jshell> l
l ==> [Sunny, Bunny, Chinny]
jshell> l.isEmpty()
$6 ==> false
jshell> l.get(2)
$7 ==> "Chinny"
jshell> l.get(10)
| Java.lang.IndexOutOfBoundsException thrown: Index 10 out-of-bounds for length 3
jshell> l.size()
$9 ==> 3
Note: Interlly jshell having Java compiler which is responsible to check syntax.If any violation we will get Compile
time error which is exactly same as normal compile time errors.
jshell> System.out.println(x+y)
| Error:
| cannot find symbol
| symbol: variable x
| System.out.println(x+y)
| ^
638
| Error:
| cannot find symbol
Page
| symbol: variable y
| System.out.println(x+y)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: In our program if there is any chance of getting checked exceptions compulsory we required to handle
either by try-catch or by throws keyword. Otherwise we will get Compile time error.
Eg:
1) import Java.io.*;
2) class Test
3) {
4) public static void main(String[] args)
5) {
6) PrintWriter pw=new PrintWriter("abc.txt");
7) pw.println("Hello");
8) }
9) }
D:\durga_classes>Javac Test.Java
Test.Java:6: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
PrintWriter pw=new PrintWriter("abc.txt");
But in the case of Jshell, jshell itself will takes care of these and we are not required to use try-catch or throws.
Thanks to Jshell.
Conclusions:
1. From the jshell we can execute any expression, any Java statement.
2. Most of the packages are not required to import to the Jshell because by default already available to the jshell.
3. Internally jshell use Java compiler to check syntaxes
4. If we are not handling any checked exceptions we won’t get any compile time errors, because jshell will takes
care.
639
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JShell can provide complete information about available commands with full documentation, and how to use
each command and what are various options are available etc..
Agenda:
1) To know list of options allowed with jshell:
jshell>/help commandname
jshell>/command - tab
640
jshell> /list -
-all -history -start
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
D:\durga_classes>jshell --help
Usage: jshell <options> <load files>
where possible options include:
--class-path <path> Specify where to find user class files
--module-path <path> Specify where to find application modules
--add-modules <module>(,<module>)*
Specify modules to resolve, or all modules on the
module path if <module> is ALL-MODULE-PATHs
--startup <file> One run replacement for the start-up definitions
--no-startup Do not run the start-up definitions
--feedback <mode> Specify the initial feedback mode. The mode may be
predefined (silent, concise, normal, or verbose) or
previously user-defined
-q Quiet feedback. Same as: --feedback concise
-s Really quiet feedback. Same as: --feedback silent
-v Verbose feedback. Same as: --feedback verbose
-J<flag> Pass <flag> directly to the runtime system.
Use one -J for each runtime flag or flag argument
-R<flag> Pass <flag> to the remote runtime system.
Use one -R for each remote flag or flag argument
-C<flag> Pass <flag> to the compiler.
Use one -C for each compiler flag or flag argument
--version Print version information and exit
--show-version Print version information and continue
--help Print this synopsis of standard options and exit
--help-extra, -X Print help on non-standard options and exit
D:\durga_classes>jshell --version
jshell 9
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /help
| Type a Java language expression, statement, or declaration.
| Or type one of the following commands:
| /list [<name or id>|-all|-start]
| list the source you have typed
| /edit <name or id>
| edit a source entry referenced by name or id
| /drop <name or id>
| delete a source entry referenced by name or id
642
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
| /methods -start
| List the automatically added start-up jshell methods
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /
/! /? /drop /edit /env /exit /help
/history /imports /list /methods /open /reload /reset
/save /set /types /vars
If we press tab again then we will get one line synopsis for every command:
jshell> /
/!
re-run last snippet
/-<n>
re-run n-th previous snippet
/<id>
re-run snippet by id
/?
get information about jshell
/drop
delete a source entry referenced by name or id
/edit
edit a source entry referenced by name or id
/env
view or change the evaluation context
/exit
645
exit jshell
/help
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
/imports
list the imported items
/list
list the source you have typed
/methods
list the declared methods and their signatures
/open
open a file as source input
/reload
reset and replay relevant history -- current or previous (-restore)
/reset
reset jshell
/save
Save snippet source to a file.
/set
set jshell configuration information
/types
list the declared types
/vars
list the declared variables and their values
If we press tab again then we can see full documentation of command one by one:
jshell> /
/!
646
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /
/<id>
Reevaluate the snippet specified by the id.
jshell> /list -
-all -history -start
jshell> /list -
If we press tab again then we will get synopsis:
jshell> /list -
list the source you have typed
/list
List the currently active snippets of code that you typed or read with /open
/list -start
647
/list -all
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
/list <id>
List the snippet with the specified snippet id
Conclusions:
1) To know list of options allowed with jshell
Type jshell --help from normal command prompt
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell>/command - tab
jshell> /list -
-all -history -start
jshell> System.out.println("Hello")
Page
Hello
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> 10+20
$3 ==> 30
| created scratch variable $3 : int
jshell> $3>x
$4 ==> true
| created scratch variable $4 : boolean
jshell> m1()
hello
Note: We can use /list command to list out all snippets stored in the jshell memory with snippet id.
jshell> /list
1 : System.out.println("Hello")
2 : int x=10;
3 : 10+20
4 : $3>x
650
5 : String s= "Durga";
6 : public void m1()
Page
{
System.out.println("hello");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The numbers 1,2,3 are snippet id. In the future we can access the snippet with id directly.
Note: There are some snippets which will be executed automatically at the time jshell star-tup,and these are
called start-up snippets. We can also add our own snippets as start-up snippets.
We can list out all start-up snippets with command: /list -start
s1 : import Java.io.*;
s2 : import Java.math.*;
s3 : import Java.net.*;
s4 : import Java.nio.file.*;
s5 : import Java.util.*;
s6 : import Java.util.concurrent.*;
s7 : import Java.util.function.*;
s8 : import Java.util.prefs.*;
s9 : import Java.util.regex.*;
s10 : import Java.util.stream.*;
s1 : import Java.io.*;
s2 : import Java.math.*;
s3 : import Java.net.*;
s4 : import Java.nio.file.*;
s5 : import Java.util.*;
s6 : import Java.util.concurrent.*;
s7 : import Java.util.function.*;
s8 : import Java.util.prefs.*;
s9 : import Java.util.regex.*;
s10 : import Java.util.stream.*;
1 : System.out.println("Hello")
2 : int x=10;
651
3 : 10+20
4 : $3>x
Page
e1 : String s =10;
5 : String s= "Durga";
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /list 1
1 : System.out.println("Hello")
jshell> /list 1 2
1 : System.out.println("Hello")
2 : int x=10;
jshell> /list 1 5
1 : System.out.println("Hello")
5 : String s= "Durga";
We can also access snippets directly by using name.The name can be either variable name,class name ,method
name etc
jshell> /list m1
jshell> /list x
2 : int x=10;
jshell> /list s
5 : String s= "Durga";
jshell> /3
10+20
Page
$8 ==> 30
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /7
m1()
hello
jshell> /list
1 : System.out.println("Hello")
2 : int x=10;
3 : 10+20
4 : $3>x
5 : String s= "Durga";
6 : public void m1()
{
System.out.println("hello");
}
7 : m1()
8 : 10+20
9 : m1()
jshell> /drop $3
| dropped variable $3
jshell> /list
1 : System.out.println("Hello")
2 : int x=10;
4 : $3>x
5 : String s= "Durga";
6 : public void m1()
{
System.out.println("hello");
}
7 : m1()
8 : 10+20
9 : m1()
653
jshell> /4
$3>x
| Error:
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Conclusions:
1. We can use /list command to list out all snippets stored in the jshell memory with snippet id.
jshell>/list
2. In the future we can access the snippet with id directly without retypinng whole snippet.
jshell>/list id
3. There are some snippets which will be executed automatically at the time jshell star-tup,and these are called
start-up snippets. We can list out all start-up snippets with command: /list -start
jshell> /list 1
7. We can access snippets directly by using name.The name can be either variable name,class name ,method
name etc
jshell> /list m1
jshell> /3
Once we dropped a snippet,we cannot use otherwise we will get compile time error.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /list
1 : int x=10;
2 : String s="Durga";
3 : System.out.println("Hello");
4 : class Test{}
jshell> /history
int x=10;
String s="Durga";
System.out.println("Hello");
class Test{}
/list
/history
1. By using down arrow and up arrow we can navigate through history.While navigating we can use left and right
arrows to move character by character with in the snippet.
2. We can Ctrl+A to move to the beginning of the line and Ctrl+E to move to the end of the line.
3. We can use Alt+B to move backward by one word and Alt+F to move forward by one word.
4. We can use Delete key to delete the character at the cursor. We can us Backspace to delete character before
the cursor.
5. We can use Ctrl+K to delete the text from the cursor to the end of line.
6. We can use Alt+D to delete the text from the cursor to the end of the word.
7. Ctrl+W to delete the text from cursor to the previous white space.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
656
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. Explicit variables
2. Implicit variables or Scratch variables
Explicit variables:
These variables created by programmer explicitly based on our programming requirement.
Eg:
The variables x and s provided explicitly by the programmer and hence these are explicit variables.
Page
Implicit Variables:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Eg:
jshell> 10+20
$3 ==> 30
| created scratch variable $3 : int
jshell> 10<20
$4 ==> true
| created scratch variable $4 : boolean
The variables $3 and $4 are created by JShell and hence these are implicit variables.
jshell> $3+40
$5 ==> 70
| created scratch variable $5 : int
If we are trying to declare a variable with the same name which is already available then old variable will be
replaced with new variable.i.e in JShell, variable overriding is possible.
In JShell at a time only one variable is possible with the same name.i.e 2 variables with the same name is not
allowed.
While declaring variables compulsory the types must be matched,otherwise we will get compile time error.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
| int $3 = 30
| boolean $4 = true
| String x = "DURGASOFT"
Page
| String s1 = (not-active)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /vars
| String s = "Durga"
| int $3 = 30
| boolean $4 = true
| String x = "DURGASOFT"
| String s1 = "Hello"
jshell> /drop $3
| dropped variable $3
jshell> /vars
| String s = "Durga"
| boolean $4 = true
| String x = "DURGASOFT"
| String s1 = "Hello"
jshell>List<String> heroes=List.of("Ameer","Sharukh","Salman");
heroes ==> [Ameer, Sharukh, Salman]
| created variable heroes : List<String>
jshell>List<String> heroines=List.of("Katrina","Kareena","Deepika");
heroines ==> [Katrina, Kareena, Deepika]
| created variable heroines : List<String>
jshell> /vars
| String s = "Durga"
| boolean $4 = true
| String x = "DURGASOFT"
| String s1 = "Hello"
| List<String> heroes = [Ameer, Sharukh, Salman]
| List<String> heroines = [Katrina, Kareena, Deepika]
| List<List<String>> l = [[Ameer, Sharukh, Salman], [Katrina,Kareena, Deepika]]
660
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> System.out.println("Hello");
Hello
jshell> System.out.printf("Hello:%s\n","Durga")
Hello:Durga
$11 ==> Java.io.PrintStream@10bdf5e5
| created scratch variable $11 : PrintStream
jshell> $11.printf("Hello")
Hello$12 ==> Java.io.PrintStream@10bdf5e5
| created scratch variable $12 : PrintStream
jshell> /vars
| String s = "Durga"
| boolean $4 = true
| String x = "DURGASOFT"
| String s1 = "Hello"
| List<String> heroes = [Ameer, Sharukh, Salman]
| List<String> heroines = [Katrina, Kareena, Deepika]
| List<List<String>> l = [[Ameer, Sharukh, Salman],
[Katrina, Kareena, Deepika]]
| PrintStream $11 = Java.io.PrintStream@10bdf5e5
| PrintStream $12 = Java.io.PrintStream@10bdf5e5
FAQs:
661
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Eg:
jshell> m1()
Hello
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the JShell there may be a chance of multiple methods with the same name but different argument types, and
such type of methods are called overloaded methods.Hence we can declare oveloaded methods in the JShell.
jshell> /methods
| void m1()
| void m1(int)
jshell> /methods
663
| void m1()
| void m2()
| void m1(int)
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /methods
| int m1(int)
Eg1: To print the number of occurrences of specified character in the given String
jshell> charCount("Jajaja",'j')
664
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> sum(10,20)
The Sum:30
jshell> sum(10,20,30,40)
The Sum:100
In JShell,inside method body we can use undeclared variables and methods.But until declaring all dependent
variables and methods,we cannot invoke that method.
jshell> m1()
| attempted to call method m1() which cannot be invoked until variable x is declared
jshell> m1()
10
...> m2();
...> }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> m1()
| attempted to call method m1() which cannot be invoked until method m2() is declared
jshell> m1()
Hello DURGASOFT
jshell> m2()
Hello DURGASOFT
We can drop methods by name with /drop command. If multiple methods with the same name then we should
drop by snippet id.
jshell> /methods
| void m1()
| void m1(int)
| void m2()
| void m3()
jshell> /drop m3
| dropped method m3()
666
jshell> /methods
| void m1()
Page
| void m1(int)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /drop m1
| The argument references more than one import, variable, method, or class.
| Use one of:
| /drop 1 : public void m1(){},
| /drop 2 : public void m1(int i){}
jshell> /methods
| void m1()
| void m1(int)
| void m2()
jshell> /list
jshell> /drop 2
| dropped method m1(int)
jshell> /methods
| void m1()
| void m2()
FAQs:
1. Is it possible to declare methods in the JShell?
2. Is it possible to declare multiple methods with the same name in JShell?
667
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
It is very difficult to type lengthy code from JShell. To overcome this problem,JShell provide in-built editor.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
diagram(image) of inbuilt-editor
If we are not satisfied with JShell in-built editor ,then we can set our own editor to the JShell.For this we have to
use /set editor command.
Eg:
jshell> /edit
But this way of setting editor is temporary and it is applicable only for current session.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: It is not recommended to set IntelliJ,Eclipse,NetBeans as JShell editors,because it increases startup time
and shutdown time of jshell.
FAQs:
1. How to open default editor of JShell?
2. How to configure our own editor to the JShell?
3. How to configure Notepad as editor to the JShell?
4. How to make our customized editor as permanent editor in the JShell?
670
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /types
| class Student
| interface Interf
| enum Colors
jshell> /edit
| created class Student
671
jshell> /types
| class Student
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> s.getName()
$3 ==> "Durga"
| created scratch variable $3 : String
jshell> s.getRollno()
$4 ==> 101
| created scratch variable $4 : int
jshell> /edit
| created interface Interf
| created enum Beer
jshell> Interf.m1()
672
jshell> Beer.KF.getTaste()
Page
$8 ==> "Sour"
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Assume all our required snippets are available in mysnippets.jsh. This file can be with any extension like .txt,But
recommended to use .jsh.
mysnippets.jsh:
String s="Durga";
public void m1()
{
System.out.println("method defined in the file");
}
int x=10;
We can load all snippets of this file from the JShell with /open command as follows.
jshell> /list
jshell> /list
1 : String s="Durga";
2 : public void m1()
{
System.out.println("method defined in the file");
}
3 : int x=10;
Once we loaded snippets,we can use these loaded snippets based on our requirement.
jshell> m1()
673
jshell> s
s ==> "Durga"
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> x
x ==> 10
| value of x : int
Note: If the specified file is not available then this save command itself will create that file.
jshell> /ex
674
| Goodbye
D:\>type active.jsh
Page
int x=10;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
D:\>type start.jsh
import Java.io.*;
import Java.math.*;
import Java.net.*;
import Java.nio.file.*;
import Java.util.*;
import Java.util.concurrent.*;
import Java.util.function.*;
import Java.util.prefs.*;
import Java.util.regex.*;
import Java.util.stream.*;
Note: Bydefault,all files will be created in current working directory. If we want in some other location then we
have to use absolute path(Full Path).
Eg:
jshell> 10+20
$2 ==> 30
| created scratch variable $2 : int
jshell> System.out.println("Hello");
Hello
675
jshell> /list
Page
1 : int x=10;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /exit
| Goodbye
D:\>jshell -v
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
Eg:
jshell> /list
1 : int x=10;
676
2 : 10+20
3 : System.out.println("Hello");
Page
jshell> /reset
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /list
mysnippets.jsh:
1) import Java.sql.*;
2) public void getEmpInfo() throws Exception
3) {
677
4) Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","sc
ott","tiger");
Page
5) Statement st=con.createStatement();
6) ResultSet rs=st.executeQuery("select * from employees");
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
DaTabase info:
jshell> getEmpInfo()
100..Sunny..1000.0..Mumbai
200..Bunny..2000.0..Hyd
300..Chinny..3000.0..Hyd
678
400..Vinny..4000.0..Delhi
Note: Internally JShell will use environment variable CLASSPATH if we are not setting CLASSPATH explicitly.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
s1 : import Java.io.*;
s2 : import Java.math.*;
s3 : import Java.net.*;
s4 : import Java.nio.file.*;
s5 : import Java.util.*;
s6 : import Java.util.concurrent.*;
s7 : import Java.util.function.*;
s8 : import Java.util.prefs.*;
s9 : import Java.util.regex.*;
s10 : import Java.util.stream.*;
679
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
int x =10;
String s="DURGA";
System.out.println("Hello Durga Welcome to JShell");
s1 : int x =10;
s2 : String s="DURGA";
s3 : System.out.println("Hello Durga Welcome to JShell");
Note: if we want DEFAULT import start-up snippets also then we have to open JShell as follows.
jshell> /list
1 : int x =10;
2 : String s="DURGA";
3 : System.out.println("Hello Durga Welcome to JShell");
s1 : import Java.io.*;
s2 : import Java.math.*;
s3 : import Java.net.*;
s4 : import Java.nio.file.*;
s5 : import Java.util.*;
s6 : import Java.util.concurrent.*;
s7 : import Java.util.function.*;
s8 : import Java.util.prefs.*;
680
s9 : import Java.util.regex.*;
s10 : import Java.util.stream.*;
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /list
s1 : import Java.applet.*;
s2 : import Java.awt.*;
s3 : import Java.awt.color.*;
..
s172 : import org.xml.sax.ext.*;
s173 : import org.xml.sax.helpers.*;
Note: In addition to JAVASE, to provide our own snippets we have to open JShell as follows
jshell> /list
1 : int x =10;
2 : String s="DURGA";
3 : System.out.println("Hello Durga Welcome to JShell");
s1 : import Java.applet.*;
s2 : import Java.awt.*;
s3 : import Java.awt.color.*;
..
s172 : import org.xml.sax.ext.*;
s173 : import org.xml.sax.helpers.*;
1. jshell -v
2. jshell -v --startup mystartup.jsh
3. jshell -v --startup DEFAULT mystartup.jsh
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Hence to print statements to the console just we can use print() or println() methods directly instead of using
System.out.print() or System.out.println() methods.
Now onwards,to print some statements to the console directly we can use print() and println() methodds.
jshell> print("Hello");
682
Hello
jshell> print(10.5)
10.5
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. Total 21 overloaded print(),println() and printf() methods provided because of PRINTING shortcut.
2. Whenever we are using PRINTING shortcut,then DEFAULT imports won't come. Hence,to get DEFAULT imports
and PRINTING shortcut simultaneously,we have to open JShell as follows.
Note:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> /imports
| import Java.io.*
| import Java.math.*
| import Java.net.*
| import Java.nio.file.*
| import Java.util.*
| import Java.util.concurrent.*
| import Java.util.function.*
| import Java.util.prefs.*
| import Java.util.regex.*
| import Java.util.stream.*
| import Java.sql.Connection
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
jshell> String.<Tab>
CASE_INSENSITIVE_ORDER class copyValueOf(
format( join( valueOf(
jshell> s.sub<Tab>
subSequence( substring(
jshell> s.substring(
substring(
jshell> s.substring(<Tab>
Signatures:
String String.substring(int beginIndex)
String String.substring(int beginIndex, int endIndex)
jshell> s.substring(<Tab>
String String.substring(int beginIndex)
Returns a string that is a substring of this string.The substring begins with the character at the specified index and
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Parameters:
beginIndex - the beginning index, inclusive.
Returns:
the specified substring.
Note: Even this <Tab> short cut applicable for our own classes and methods also.
jshell> m1(<Tab>
m1(
jshell> m1(<Tab>
Signatures:
void m1(int... x)
686
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
JPMS Agenda
1) Introduction
4) What is a Module
9) JPMS vs NoClassDefFoundError
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Until Java 1.8 version we can develop applications by writing several classes, interfaces and enums. We can places
these components inside packages and we can convert these packages into jar files. By placing these jar files in
the classpath, we can run our applications. An enterprise application can contain 1000s of jar files also.
Hence jar file is nothing but a group of packages and each package contains several .class files.
But in Java 9, a new construct got introduced which is nothing but 'Module'. From java 9 version onwards we can
develop applications by using module concept.
Module is nothing but a group of packages similar to jar file. But the specialty of module when compared with jar
file is, module can contain configuration information also.
Hence module is more powerful than jar file. The configuration information of module should be specified in a
special file named with module-info.java
Every module should compulsory contains module-info.java, otherwise JVM won't consider that as a module of
Java 9 platform.
module-info.java
Page
In Java 9, JDK itself modularized. All classes of Java 9 are grouped into several modules (around 98) like
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
durgajava9
|-A1.java
|-A2.java
|-A3.java
|-Test.java
A1.java:
1) package pack1;
2) public class A1
3) {
4) public void m1()
5) {
6) System.out.println("pack1.A");
7) }
8) }
A2.java
689
1) package pack2;
2) import pack1.A1;
3) public class A2
Page
4) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
A3.java:
1) import pack2.A2;
2) class Test
3) {
4) public static void main(String[] args)
5) {
6) System.out.println("Test class main");
7) A2 a= new A2();
8) a.m2();
9) }
10) }
D:\durgajava9>javac -d . A1.java
D:\durgajava9>javac -d . A2.java
D:\durgajava9>javac -d . A3.java
D:\durgajava9>javac Test.java
durgajava9
|-Test.class
|-pack1
|-A1.class
|-pack2
|-A2.class
At runtime, by mistake if pack1 is not available then after executing some part of the code in the middle, we will
get NoClassDefFoundError.
D:\durgajava9>java Test
Test class main
pack2.A2 method
Exception in thread "main" java.lang.NoClassDefFoundError: pack1/A1
But in Java9, there is a way to specify all dependent modules information in module-info.java. If any module is
missing then at the beginning only, JVM will identify and won't start its execution. Hence there is no chance of
690
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
classpath = jar1;jar2;jar3;jar4
If jar4 requires Test.class file of jar3.But Different versions of Test.class is available in jar1, jar2 and jar3. In this
case jar1 Test.class file will be considered, because JVM will always search from Left to Right in the classpath. It
will create version conflicts and causes abnormal behavior of program.
But in java9 module system, there is a way to specify dependent modules information for every module
seperately.JVM will always consider only required module and there is no order importance. Hence version
conflicts won't be raised in Java 9.
Package Package
pack1 pack2
Jar File
Assume pack1 can be used by other jar files, but pack2 is just for internal purpose only. Until Java 8 there
is no way to specify this information. Everything in jar file is public and available to everyone. Hence there may be
a chance of Security problems.
But in Java 9 Module system, we can export particular package of a module. Only this exported package can be
used by other modules. The remaining packages of that module are not visible to outside. Hence Strong
encapsulation is available in Java 9 and there is no chance of security problems.
Even though class is public, if module won't export the corresponding package, then it cannot be accessed by
other modules. Hence public is not really that much public in Java 9 Module System.
The number of classes in Java is increasing very rapidly from version to version.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To run small program also, total rt.jar should be loaded, which makes our application heavy weight and not
suitable for IOT applications and micro services which are targeted for portable devices.
It will create memory and performance problems also.
(This is something like inviting a Big Elephant in our Small House: Installing a Heavy Weight Java application in a
small portable device).
But in java 9, rt.jar removed. Instead of rt.jar all classes are maintained in the form of modules. Hence from Java 9
onwards JDK itself modularized. Whenever we are executing a program only required modules will be loaded
instead of loading all modules, which makes our application light weighted.
Now we can use java applications for small devices also. From Java 9 version onwards, by using JLINK , we can
create our own very small custom JREs with only required modules.
middle of execution.
4) In the classpath the order of jar files 4) In the module-path order is not important.
important and JVM will always considers from JVM will always check from the dependent
Page
left to right for the required .class files. If module only for the required .class files. Hence
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
This set of Problems is called Jar Hell OR Classpath Hell. To overcome this, we should go for JPMS.
What is a Module:
Module is nothing but collection of packages. Each module should compulsory contains a special configuration
file: module-info.java.
693
module-info.java
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module moduleName
{
Here we have to define module dependencies which represents
1. What other modules required by this module?
2. What packages exported by this module for other modules?
etc
}
src
moduleA
pack1
Test.java
module-info.java
1) package pack1;
2) public class Test
Page
3) {
4) public static void main(String[] args)
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module moduleA
{
}
src
moduleA
pack1
Test.java
module-info.java
695
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
out
moduleA
pack1
Test.class
module-info.class
Case-1:
If module-info.java is not available then the code won't compile and we will get error. Hence module-info.java is
mandatory for every module.
Case-2:
696
Every class inside module should be part of some package, otherwise we will get compile time error saying :
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Case-3:
The module name should not ends with digit(like module1,module2 etc),otherwise we will get warning at compile
time.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module moduleName
{
Here we have to define module dependencies which represents
1. What other modules required by this module?
2. What packages exported by this module for other modules?
etc
}
1. requires directive:
It can be used to specify the modules which are required by current module.
Eg:
1) module moduleA
2) {
3) requires moduleB;
4) }
Note:
1. We cannot use same requires directive for multiple modules. For every module we have to use separate
requires directive.
2. We can use requires directive only for modules but not for packages and classes.
2. exports directive:
698
It can be used to specify what packages exported by current module to the other modules.
Page
Eg:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
It indicates that moduleA exporting pack1 package so that this package can be used by other modules.
Note: We cannot use same exports directive for exporting multiple packages. For every package a separate
exports directive must be required.
Note: Be careful about syntax requires directive always expecting module name where as exports directive
expecting package name.
1) module modulename
2) {
3) requires modulename;
4) exports packagename;
5) }
Note:
By default all packages present in a module are private to that module. If module exports any package only that
particular package is accessible by other modules. Non exporting packages cannot be accessed by other modules.
Eg: Assume moduleA contains 2 packages pack1 and pack2. If moduleA exports only pack1 then other modules
can use only pack1. pack2 is just for its internal purpose and cannot be accessed by other modules.
1) module moduleA
2) {
3) exports pack1;
4) }
pack1 pack2
(A.java) (Test.java)
Page
module-info.java module-info.java
module-info.java:
1) module moduleA
2) {
3) exports pack1;
4) }
moduleB components:
Test.java:
1) package pack2;
2) import pack1.A;
3) public class Test
700
4) {
5) public static void main(String[] args)
6) {
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module-info.java:
1) module moduleB
2) {
3) requires moduleA;
4) }
src
moduleA moduleB
pack1 pack2
A.java Test.java
module-info.java module-info.java
Compilation:
C:\Users\Durga\Desktop>javac --module-source-path src -d out -m moduleA,moduleB
Note: space is not allowed between the module names otherwise we will get error.
out
701
moduleA moduleB
Page
pack1 pack2
CONTACT US:
Mobile: +91- 8885 25 26 27 A.class Mail ID: durgasoftonlinetraining@gmail.com
Test.class
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module-info.class module-info.class
FLAT NO: 202, HMDA MYTRIVANUM, AMEERPET, HYDERABAD.
Execution:
C:\Users\Durga\Desktop>java --module-path out -m moduleB/pack2.Test
Output:
moduleB accessing members of moduleA
Method of moduleA
Case-1:
Even though class A is public, if moduleA won't export pack1, then moduleB cannot access A class.
Eg:
1) module moduleA
2) {
3) //exports pack1;
4) }
Case-2:
We have to export only packages. If we are trying to export modules or classes then we will get compile time
error.
Eg-1: exporting module instead of package
702
1) module moduleA
2) {
Page
3) exports moduleA;
4) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In this case compiler considers moduleA as package and it is trying to search for that package.
1) module moduleA
2) {
3) exports pack1.A;
4) }
In this case compiler considers pack1.A as package and it is trying to search for that package.
Case-3:
If moduleB won't use "requires moduleA" directive then moduleB is not allowed to use members of moduleA,
even though moduleA exports.
1) module moduleB
2) {
3) //requires moduleA;
4) }
import pack1.A;
^
(package pack1 is declared in module moduleA, but module moduleB does not read it)
Page
1 error
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If compiled codes of moduleA is available in out and compiled codes of moduleB available in out2
out out 2
moduleA moduleB
pack1 pack2
A.class Test.class
module-info.class module-info.class
704
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
If source codes of two modules are in different directories then how to compile?
Assume moduleA source code is available in src directory and moduleB source code is available in src2
src src 2
moduleA moduleB
pack1 pack2
A.java Test.java
module-info.java module-info.java
Note: We can use exports directive only for packages but not modules and classes, and we can use requires
705
directive only for modules but not for packages and classes.
Note: To access members of one module in other module, compulsory we have to take care the following 3
Page
things.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Demo Program:
Components of moduleA:
A.java:
1) package pack1;
2) public class A
3) {
4) public void m1()
5) {
6) System.out.println("Method of moduleA");
7) }
8) }
module-info.java:
1) module moduleA
2) {
3) exports pack1;
706
4) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) package pack2;
2) import pack1.A;
3) public class B
4) {
5) public void m2()
6) {
7) System.out.println("Method of moduleB");
8) A a = new A();
9) a.m1();
10) }
11) }
module-info.java:
1) module moduleB
2) {
3) requires moduleA;
4) exports pack2;
5) }
Components of moduleC:
Test.java:
1) package pack3;
2) import pack2.B;
3) public class Test
4) {
5) public static void main(String[] args)
6) {
707
10) }
11) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) module moduleC
2) {
3) requires moduleB;
4) }
If we delete compiled code of module (inside out folder), then JVM will raise error at the beginning only and JVM
won't start program execution.
But in Non Modular programming, JVM will start execution and in the middle, it will raise NoClassDefFoundError.
Hence in Java Platform Module System, there is no chance of getting NoClassDefFoundError in the middle of
program execution.
Student1 requires Material, only for himself, if any other person asking he won't share.
1) module student1
2) {
3) requires material;
708
4) }
"Student1 requires material not only for himself, if any other person asking him, he will share it"
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Sometimes module requires the components of some other module not only for itself and for the modules that
requires that module also. For this requirement we can use transitive keyword.
The transitive keyword says that "Whatever I have will be given to a module that asks me."
Case-1:
1) module moduleA
2) {
3) exports pack1;
4) }
5) module moduleB
6) {
7) requires moduleA;
8) }
9) module moduleC
10) {
11) requires moduleB;
12) }
requires requires
moduleC moduleB moduleA
In this case only moduleB is available to moduleC and moduleA is not available. Hence moduleC cannot use the
members of moduleA directly.
Case-2:
1) module moduleA
2) {
3) exports pack1;
4) }
709
5) module moduleB
6) {
7) requires transitive moduleA;
Page
8) }
9) module moduleC
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
requires requires
Module C Module B Module A
requires
In this both moduleB and moduleA are available to moduleC. Now moduleC can use members of both modules
directly.
Case Study:
Assume Modules C1, C2,....C10 requires Module B and Module B requires A.
C1
C2
A B
C3
:
:
:
C10
1) module B
710
2) {
3) requires transitive A;
4) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: Transitive means implied readability i.e., Readability will be continues to the next level.
moduleA components:
A.java:
1) package pack1;
2) public class A
3) {
4) public void m1()
5) {
6) System.out.println("moduleA method");
7) }
8) }
module-info.java:
1) module moduleA
2) {
3) exports pack1;
4) }
moduleB components:
B.java:
711
1) package pack2;
2) import pack1.A;
3) public class B
Page
4) {
5) public A m2()
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
module-info.java:
1) module moduleB
2) {
3) requires transitive moduleA;
4) exports pack2;
5) }
moduleC components:
Test.java:
1) package pack3;
2) import pack2.B;
3) public class Test
4) {
5) public static void main(String[] args)
6) {
7) System.out.println("Test class main method");
8) B b = new B();
9) b.m2().m1();
10) }
11) }
module-info.java:
1) module moduleC
2) {
712
3) requires moduleB;
4) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
In the above program if we are not using transitive keyword then we will get compile time error because moduleA
is not available to moduleC.
The static keyword is used to say that, "This dependency check is mandatory at compile time and optional at
runtime."
Eg1:
1) module moduleB
2) {
3) requires moduleA;
4) }
moduleA should be available at the time of compilation and runtime. It is not optional dependency.
Eg2:
1) module moduleB
2) {
3) requires static moduleA;
4) }
At the time of compilation moduleA should be available, but at runtime it is optional. i.e., at runtime even
713
moduleA moduleB
moduleA components:
A.java:
1) package pack1;
2) public class A
3) {
4) public void m1()
5) {
6) System.out.println("moduleA method");
7) }
8) }
module-info.java:
1) module moduleA
2) {
3) exports pack1;
4) }
moduleB components:
Test.java:
1) package pack2;
2) public class Test
3) {
4) public static void main(String[] args)
5) {
6) System.out.println("Optional Dependencies Demo!!!");
7)
714
8) }
9) }
Page
module-info.java:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
At the time of compilation both modules should be available. But at runtime, we can run moduleB Test class, even
moduleA compiled classes are not available i.e., moduleB having optional dependency with moduleA.
If we remove static keyword and at runtime if we delete compiled classes of moduleA, then we will get error.
1. When distributing a library and we may not want to force a big dependency to the client.
2. On the other hand, a more advanced library may have performance benefits, so whatever module client needs,
he can use.
3. We may want to allow easily pluggable implementations of some functionality. We may provide
implementations using all of these, and pick the one whose dependency is found.
715
1) module moduleB
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Cyclic Dependencies:
If moduleA depends on moduleB and moduleB depends on moduleA, such type of dependency is called cyclic
dependency.
Demo Program:
moduleA moduleB
moduleA components:
module-info.java
1) module moduleA
2) {
3) requires moduleB;
4) }
moduleB components:
module-info.java
1) module moduleB
716
2) {
3) requires moduleA;
4) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
There may be a chance of cyclic dependency between more than 2 modules also.
moduleA requires moduleB
moduleB requires moduleC
moduleC requires moduleA
717
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Syntax:
exports <pack1> to <module1>,<module2>,...
Eg:
1) module moduleA
2) {
3) exports pack1;//to export pack1 to all modules
4) exports pack1 to moduleA;// to export pack1 only for moduleA
5) exports pack1 to moduleA,moduleB;// to export pack1 for both moduleA,moduleB
6) }
Components of exportermodule:
A.java:
1) package pack1;
2) public class A
3) {
4) }
B.java:
719
1) package pack2;
2) public class B
3) {
Page
4) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) package pack3;
2) public class C
3) {
4) }
module-info.java:
1) module exportermodule
2) {
3) exports pack1;
4) exports pack2 to moduleA;
5) exports pack3 to moduleA,moduleB;
6) }
moduleA moduleB
pack1 √ √
pack2 √
pack3 √ √
Components of moduleA:
Test.java:
1) package packA;
2) import pack1.A;
3) import pack2.B;
4) import pack3.C;
5) public class Test
6) {
7) public static void main(String[] args)
8) {
9) System.out.println("Qualified Exports Demo");
10) }
11) }
module-info.java:
720
1) module moduleA
2) {
3) requires exportermodule;
Page
4) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) package packB;
2) import pack1.A;
3) import pack2.B;
4) import pack3.C;
5) public class Test
6) {
7) public static void main(String[] args)
8) {
9) System.out.println("Qualified Exports Demo");
10) }
11) }
module-info.java:
1) module moduleB
2) {
3) requires exportermodule;
4) }
Explanation:
For moduleB, only pack1 and pack3 are available. pack2 is not available. But in moduleB we are trying to access
pack2 and hence we will get compile time error.
1. requires moduleA;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Answers: 1,5,6,7,11,12
Module Graph:
The dependencies between the modules can be represented by using a special graph, which is nothing but
Module Graph.
1) module moduleA
2) {
3) requires moduleB;
4) }
moduleA
moduleB
Eg 2: If moduleA requires moduleB and moduleC then the corresponding module graph is:
1) module moduleA
2) {
3) requires moduleB;
4) requires moduleC;
5) }
722
moduleA
Page
1) module moduleA
2) {
3) requires moduleB;
4) }
5) module moduleB
6) {
7) requires moduleC;
8) }
moduleA
moduleB
moduleC
Eg 4: If moduleA requires moduleB and moduleB requires transitive moduleC then the corresponding module
graph is:
1) module moduleA
2) {
3) requires moduleB;
4) }
5) module moduleB
6) {
7) requires transitive moduleC;
8) }
moduleA
moduleB
723
moduleC
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) module moduleA
2) {
3) requires moduleB;
4) requires moduleC;
5) }
6) module moduleC
7) {
8) requires moduleD;
9) requires transitive moduleE;
10) }
moduleA
moduleB moduleC
moduleD moduleE
Java 9 JDK itself modularized. All classes of Java SE are divided into several modules.
Eg:
java.base
java.sql
java.xml
java.rmi
etc...
The module graph of JDK is
724
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Observable Modules:
The modules which are observed by JVM at runtime are called Observable modules.
The modules we are specifying with --module-path option with java command are observed by JVM and hence
these are observable modules.
JDK itself contains several modules (like java.base, java.sql, java.rmi etc). These modules can be observed
automatically by JVM at runtime and we are not required to use --module-path. Hence these are observable
modules.
Observable Modules = All Predefined JDK Modules + The modules specified with --module-path option
We can list out all Observable Modules by using --list-modules option with java command.
725
Eg1: To print all readymade compiled modules (pre defined modules) present in Java 9
Page
C:\Users\Durga\Desktop>java --list-modules
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Eg2: Assume our own created compiled modules are available in out folder. To list out these modules including
readymade java modules
Aggregator Module:
Sometimes a group of modules can be reused by multiple other modules. Then it is not recommended to read
each module individually. We can group those common modules into a single module, and we can read that
module directly. This module which aggregates functionality of several modules into a single module is called
Aggregator module. If any module reads aggregator module then automatically all its modules are by default
available to that module.
Aggregator module won't provide any functionality by its own, just it gathers and bundles together a bunch of
other modules.
aggregatorModule
726
1) module aggregatorModule
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Aggregator Module not required to contain a single java class. Just it "requires transitive" of all common modules.
If any module reads aggregatorModule automatically all 3 modules are by default available to that module also.
1) module useModule
2) {
3) requires aggregatorModule;
4) }
Now useModule can use functionality of all 3 modules moduleA, moduleB and moduleC.
module-info.java
727
aggregatorModule
Page
1) package pack1;
2) public class A
3) {
4) public void m1()
5) {
6) System.out.println("moduleA method");
7) }
8) }
module-info.java:
1) module moduleA
2) {
3) exports pack1;
4) }
moduleB components:
B.java:
1) package pack2;
2) public class B
3) {
4) public void m1()
5) {
6) System.out.println("moduleB method");
7) }
728
8) }
module-info.java:
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
moduleC components:
C.java:
1) package pack3;
2) public class C
3) {
4) public void m1()
5) {
6) System.out.println("moduleC method");
7) }
8) }
module-info.java:
1) module moduleC
2) {
3) exports pack3;
4) }
aggregatorModule components:
module-info.java:
1) module aggregatorModule
2) {
3) requires transitive moduleA;
4) requires transitive moduleB;
729
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) package packA;
2) import pack1.A;
3) import pack2.B;
4) import pack3.C;
5) public class Test
6) {
7) public static void main(String[] args)
8) {
9) System.out.println("Aggregator Module Demo");
10) A a = new A();
11) a.m1();
12)
13) B b = new B();
14) b.m1();
15)
16) C c = new C();
17) c.m1();
18) }
19) }
module-info.java:
Here we are not required to use requires directive for every module, just we have to use requires only for
aggregatorModule.
1) module useModule
2) {
3) //requires moduleA;
4) //requires moduleB;
5) //requires moduleC;
6) requires aggregatorModule;
7) }
moduleB method
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
But in Java 9 module System, two modules cannot contain a package with same name; otherwise we will get
compile time error. Hence in module system, there is no chance of version conflicts and abnormal behavior of the
program.
Demo Program:
moduleA components:
A.java:
1) package pack1;
2) public class A
3) {
4) public void m1()
5) {
6) System.out.println("moduleA method");
7) }
8) }
731
module-info.java:
Page
1) module moduleA
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
moduleB components:
B.java:
1) package pack1;
2) public class B
3) {
4) public void m1()
5) {
6) System.out.println("moduleB method");
7) }
8) }
module-info.java:
1) module moduleB
2) {
3) exports pack1;
4) }
useModule components:
Test.java:
1) package packA;
2) public class Test
3) {
4) public static void main(String[] args)
5) {
6) System.out.println("Package Naming Conflicts");
7) }
8) }
module-info.java:
732
1) module useModule {
Page
2) requires moduleA;
3) requires moduleB;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
But in module programming, JVM will search for the required modules in the module-path before it starts
execution. If any module is missing at the beginning only JVM will identify and won't start its execution. Hence in
modular programming, there is no chance of getting NoClassDefFoundError in the middle of program execution.
Demo Program:
useModule
moduleA
moduleB
moduleC moduleD
733
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) package packA;
2) public class Test
3) {
4) public static void main(String[] args)
5) {
6) System.out.println("Module Resolution Process(MRP) Demo");
7) }
8) }
module-info.java:
1) module useModule
2) {
3) requires moduleA;
4) }
Components of moduleA:
module-info.java:
1) module moduleA
2) {
3) requires moduleB;
4) }
Components of moduleB:
module-info.java:
1) module moduleB
2) {
3) requires moduleC;
4) requires moduleD;
734
5) }
Components of moduleC:
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) module moduleC
2) {
3)
4) }
Components of moduleD:
module-info.java:
1. module moduleD
2. {
3.
4. }
Note:
The following are restricted keywords in java 9:
module, requires, transitive, exports
In normal Java program no restrictions and we can use for identifier purpose also.
735
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
To overcome this problem, Java people introduced Compact Profiles in Java 8. But they didn't succeed that much.
In Java 9, they introduced a permanent solution to reduce the size of Java Runtime Environment, which is nothing
but JLINK.
JLINK is Java's new command line tool (which is available in JDK_HOME\bin) which allows us to link sets of only
required modules (and their dependencies) to create a runtime image (our own JRE).
Now, our Custom JRE contains only required modules and classes instead of having all 4300+ classes.
It reduces the size of Java Runtime Environment, which makes java best suitable for IOT and micro services.
Hence, Jlink's main intention is to avoid shipping everything and, also, to run on very small devices with little
memory. By using Jlink, we can get our own very small JRE.
Jlink also has a list of plugins (like compress) that will help optimize our solutions.
module-info.java:
1) module demoModule
2) {
3) }
Test.java:
736
1) package packA;
2) public class Test
Page
3) {
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Compilation:
C:\Users\Durga\Desktop>javac --module-source-path src -d out -m demoModule
o/p: JLINK Demo To create our own customized & small JRE
out
|-java.base.jmod
|-demoModule
|-module-info.class
|-packA
|-Test.class
737
Now observe the size of durgajre is just 35.9MB which is very small when compared with default JRE size 203MB.
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
C:\Users\Durga\Desktop\durgajre\bin>java -m demoModule/packA.Test
o/p: JLINK Demo To create our own customized & small JRE
738
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
C:\Users\Durga\Desktop\durgajre2\bin>java -m demoModule/packA.Test
o/p: JLINK Demo To create our own customized & small JRE
Now we can run our application only with the name demoapp
739
C:\Users\Durga\Desktop\durgajre3\bin>demoapp
JLINK Demo To create our own customized & small JRE
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
The way of communication with processor is varied from system to system (i.e. os to os). For example, in
windows one way, but in Mac other way. Being a programmer we have to write code based on operating system,
which makes programming very complex.
To resolve this complexity, JDK 9 engineers introduced several enhancements to Process API. By using this
Updated API, we can write java code to communicate with any processor very easily. According to worldwide Java
Developers, Process API Updates is the number 1 feature in Java 9.
With this Enhanced API, we can perform the following activities very easily.
2. Added several new methods (like startPipeline()) to ProcessBuilder class. We can use ProcessBuilder class to
create operating system processes.
3. Introduced a new powerful interface ProcessHandle. With this interface, we can access current running process,
we can access parent and child processes of a particular process etc
4. Introduced a new interface ProcessHandle.Info, by using this we can get complete information of a particular
740
process.
Page
Note: All these classes and interfaces are part of java.lang package and hence we are not required to use any
import statement.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. ProcessHandle handle=ProcessHandle.current();
Returns the ProcessHandle of current running Process
2. ProcessHandle handle=p.toHandle();
Returns the ProcessHandle of specified Process object.
3. Optional<ProcessHandle> handle=ProcessHandle.of(PID);
Returns the ProcessHandle of proccess with the specified pid.
Here, the return type is Optional, because PID may exist or may not exist.
ProcessHandle.Info:
741
ProcessHandle p = ProcessHandle.current();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1. user():
Return the user of the process.
public Optional<String> user()
2. command():
Returns the command,that can be used to start the process.
public Optional<String> command()
3. startInstant():
Returns the start time of the process.
public Optional<String> startInstant()
4. totalCpuDuration():
Returns the total cputime accumulated of the process.
public Optional<String> totalCpuDuration()
7) ProcessHandle p=opt.get();
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
ProcessBuilder:
We can use ProcessBuilder to create processes.
We can create ProcessBuilder object by using the following constructor.
Eg:
ProcessBuilder pb = new ProcessBuilder("javac","Test.java");
ProcessBuilder pb = new ProcessBuilder("java","Test");
ProcessBuilder pb = new ProcessBuilder("notepad.exe","D:\\names.txt");
Once we create a ProcessBuilder object,we can start the process by using start() method.
pb.start();
1) import java.awt.*;
2) import java.awt.event.*;
3) public class FrameDemo
4) {
5) public static void main(String[] args)
6) {
743
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Test.java
Use Case-5: To open a file with notepad from java by using ProcessBuilder
Use Case-6: To start and destroy a process from java by using ProcessBuilder
1) class Test
2) {
3) public static void main(String[] args) throws Exception
4) {
5) ProcessBuilder pb=new ProcessBuilder("java","FrameDemo");
744
6) Process p=pb.start();
7) System.out.println("Process Started with id:"+p.pid());
8) Thread.sleep(10000);
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
22) }
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Note: If Current Process not having any child processes then we won't get any output
D:\durga_classes>java Test
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
D:\durga_classes>java Test
Process Started with id:12512
Process[pid=12512, exitValue=1]
Process Terminated with Id:12512
Observe exit value: 0 for normal termination and non-zero for abnormal termination
HTTP/2 Client
What is the purpose of HTTP/2 Client:
HTTP/2 Client is one of the most exciting features, for which developers are waiting for long time.
By using this new HTTP/2 Client, from Java application, we can send HTTP Request and we can process HTTP
Response.
HTTP Request
Java Application
(HTTP/2 Client API)
Prior to Java 9, we are using HttpURLConnection class to send HTTP Request and to Process HTTP Response. It is
the legacy class which was introduced as the part of JDK 1.1 (1997).There are several problems with this
HttpURLConnection class.
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
3. It works only in Blocking Mode (Synchronous Mode), which creates performance problems.
Because of these problems, slowly developers started using 3rd party Http Clients like Apache Http client and
Google Http client etc.
JDK 9 Engineers addresses these issues and introduced a brand new HTTP/2 Client in Java 9.
Module: jdk.incubator.httpclient
Package: jdk.incubator.http
1. HttpClient
2. HttpRequest
3. HttpResponse
Note:
748
Incubator module is by default not available to our java application. Hence compulsory we should read explicitly
by using requires directive.
Page
1) module demoModule
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Steps to send Http Request and process Http Response from Java Application:
1. Create HttpClient Object
2. Create HttpRequest object
3. Send HttpRequest by using HttpClient and Get the HttpResponse
4. Process HttpResponse
String url="http://www.durgasoft.com";
HttpRequest req=HttpRequest.newBuilder(new URI(url)).GET().build();
Note:
newBuilder() method returns Builder object.
GET() method sets the request method of this builder to GET.
build() method builds and returns a HttpRequest.
public static HttpRequest.Builder newBuilder(URI uri)
public static HttpRequest.Builder GET()
public abstract HttpRequest build()
Eg:
HttpResponse resp=client.send(req,HttpResponse.BodyHandler.asString());
749
HttpResponse resp=client.send(req,HttpResponse.BodyHandler.asFile(Paths.get("abc.txt")));
Note:
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
4. Process HttpResponse:
HttpResponse contains the status code, response headers and body.
Status Line
Response Headers
Response Body
Structure of HTTP Response
HttpResponse class contains the following methods retrieve data from the response
1. statusCode()
Returns status code of the response
It may be (1XX,2XX,3XX,4XX,5XX)
2. body()
Returns body of the response
3. headers()
Returns header information of the response
Eg:
System.out.println("Status Code:"+resp.statusCode());
System.out.println("Body:"+resp.body());
System.out.println("Response Headers Info");
HttpHeaders header=resp.headers();
Map<String,List<String>> map=header.map();
map.forEach((k,v)->System.out.println("\t"+k+":"+v));
demoModule
packA
Test.java
750
module-info.java
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
1) module demoModule
2) {
3) requires jdk.incubator.httpclient;
4) }
Test.java:
1) package packA;
2) import jdk.incubator.http.HttpClient;
3) import jdk.incubator.http.HttpRequest;
4) import jdk.incubator.http.HttpResponse;
5) import jdk.incubator.http.HttpHeaders;
6) import java.net.URI;
7) import java.util.Map;
8) import java.util.List;
9) public class Test
10) {
11) public static void main(String[] args) throws Exception
12) {
13) String url="https://www.redbus.in/info/aboutus";
14) sendGetSyncRequest(url);
15) }
16) public static void sendGetSyncRequest(String url) throws Exception
17) {
18) HttpClient client=HttpClient.newHttpClient();
19) HttpRequest req=HttpRequest.newBuilder(new URI(url)).GET().build();
20) HttpResponse resp=client.send(req,HttpResponse.BodyHandler.asString());
21) processResponse(resp);
22) }
23) public static void processResponse(HttpResponse resp)
24) {
25) System.out.println("Status Code:"+resp.statusCode());
26) System.out.println("Response Body:"+resp.body());
27) HttpHeaders header=resp.headers();
28) Map<String,List<String>> map=header.map();
29) System.out.println("Response Headers");
30) map.forEach((k,v)->System.out.println("\t"+k+":"+v));
31) }
751
32) }
Page
Note:
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
Paths is a class present in java.nio.file package and hence we should write import as
import java.nio.file.Paths;
In this case, abc.html file will be created in the current working directory which contains total response body.
Demo Program:
demoModule
packA
Test.java
module-info.java
module-info.java:
1) module demoModule
2) {
3) requires jdk.incubator.httpclient;
4) }
Test.java:
1) package packA;
2) import jdk.incubator.http.HttpClient;
3) import jdk.incubator.http.HttpRequest;
4) import jdk.incubator.http.HttpResponse;
5) import jdk.incubator.http.HttpHeaders;
752
6) import java.net.URI;
7) import java.util.Map;
8) import java.util.List;
Page
9) import java.nio.file.Paths;
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
abc.html will be created in the current working directory. Open that file to see body of response.
Asynchronous Communication:
In Blocking Mode (Synchronous Mode), Once we send Http Request, we should wait until getting response. It
creates performance problems.
But in Non-Blocking Mode (Asynchronous Mode), we are not required to wait until getting the response. We can
continue our execution and later point of time we can use that HttpResponse once it is ready, so that
performance of the system will be improved.
753
CompletableFuture<HttpResponse<String>> cf = client.sendAsync(req,HttpResponse.BodyHandler.asString());
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
demoModule
packA
Test.java
module-info.java
module-info.java:
1) module demoModule
2) {
3) requires jdk.incubator.httpclient;
4) }
Test.java:
1) package packA;
2) import jdk.incubator.http.HttpClient;
3) import jdk.incubator.http.HttpRequest;
4) import jdk.incubator.http.HttpResponse;
5) import jdk.incubator.http.HttpHeaders;
6) import java.net.URI;
7) import java.util.Map;
8) import java.util.List;
9) import java.util.concurrent.CompletableFuture;
10) public class Test
11) {
12) public static void main(String[] args) throws Exception
754
13) {
14) String url="https://www.redbus.in/info/aboutus";
Page
15) sendGetAsyncRequest(url);
16) }
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com
755
Page
CONTACT US:
Mobile: +91- 8885 25 26 27 Mail ID: durgasoftonlinetraining@gmail.com
+91- 7207 21 24 27/28 WEBSITE: www.durgasoftonline.com