124
Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Embed Size (px)

Citation preview

Page 1: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Core Java (Part- 1)

Jun 24, 2014

By : Ghanshyam Dhomse

Page 2: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

2

Agenda

1.What is Input and Output in Java (I/O)?

2.What is Serialization?

3.What is Exception Handling ?

4.What is Nested Class?

5.What is Garbage Collection?

6.What is Java Annotation?

Page 3: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Exception Handling in Java

1. Exception Handling

2. Advantage of Exception Handling

3. Hierarchy of Exception classes

Types of Exception

1. Checked Exception

2. Unchecked Exception

3. Error

5. Scenarios where exception may occur

3

Page 4: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Input and Output in Java (I/O)

Input and Output(I/O):

I/O is used to process the input and produce the output based on the

input. Java uses the concept of stream to make I/O operations fast. java.io

package contains all the classes required for input and output operations.

Stream:

A stream is a sequence of data.In Java a stream is composed of bytes. It's

called a stream because it's like a stream of water that continues to flow.

Three streams are created for us automatically:

1) System.out: standard output stream

2) System.in: standard input stream

3) System.err: standard error4

Page 5: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

OutputStream

Java application uses an output stream to write data to a destination, it

may be a file, an array, peripheral device or socket.

5

Page 6: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

InputStream

Java application uses an input stream to read data from a source, it may

be a file,an array,peripheral device or socket.

6

Page 7: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

OutputStream class

OutputStream class ia an abstract class.It is the superclass of all classes

representing an output stream of bytes. An output stream accepts output

bytes and sends them to some sink.

Commonly used methods of OutputStream class:

1) public void write(int)throws IOException: is used to write a byte to the

current output stream.

2) public void wrire(byte[])throws IOException: is used to write an array of

byte to the current output stream.

3) public void flush()throws IOException: flushes the current output stream.

4) public void close()throws IOException: is used to close the current output

stream.

7

Page 8: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

OutputStream class

8

Page 9: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

InputStream class

InputStream class ia an abstract class.It is the superclass of all classes

representing an input stream of bytes.

Commonly used methods of InputStream class:

1) public abstract int read()throws IOException: reads the next byte of

data from the input stream.It returns -1 at the end of file.

2) public int available()throws IOException: returns an estimate of the

number of bytes that can be read from the current input stream.

3) public void close()throws IOException: is used to close the current input

stream.

9

Page 10: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

InputStream class

10

Page 11: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

A FileOutputStream

FileInputStream and FileOutputStream (File Handling):

FileInputStream and FileOutputStream classes are used to read and write

data in file. In another words, they are used for file handling in java.

FileOutputStream class:

A FileOutputStream is an output stream for writing data to a file.

If you have to write primitive values then use FileOutputStream.Instead,

for character-oriented data, prefer FileWriter.But you can write byte-

oriented as well as character-oriented data.

11

Page 12: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of FileOutputStream class

//Simple program of writing data into the file

import java.io.*;

class Test{

public static void main(String args[]){

try{

FileOutputstream fout=new FileOutputStream("abc.txt");

String s="Sachin Tendulkar is my favourite player";

byte b[]=s.getBytes();

fout.write(b); fout.close(); System.out.println("success...");

}catch(Exception e){system.out.println(e);}

} } Output:success...12

Page 13: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

13

Page 14: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

FileInputStream class

A FileInputStream obtains input bytes from a file.It is used for reading streams of

raw bytes such as image data. For reading streams of characters, consider using

FileReader. It should be used to read byte-oriented data. For example, to read

image etc.

//Simple program of reading data from the file

import java.io.*;

class SimpleRead{

public static void main(String args[]){

try{ FileInputStream fin=new FileInputStream("abc.txt"); int i;

while((i=fr.read())!=-1)

System.out.println((char)i); fin.close();

}catch(Exception e){system.out.println(e);} } } Output:Sachin is my favourite

14

Page 15: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

FileInputStream class

15

Page 16: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of Reading the data of current java file and writing it into another file

We can read the data of any file using the FileInputStream class whether it is java

file, image file, video file etc. In this example, we are reading the data of C.java file

and writing it into another file M.java.

import java.io.*;

class C{

public static void main(String args[])throws Exception{

FileInputStream fin=new FileInputStream("C.java");

FileOutputStream fout=new FileOutputStream("M.java");

int i=0;

while((i=fin.read())!=-1){

fout.write((byte)i);

} fin.close(); } }

16

Page 17: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

ByteArrayOutputStream class

In this stream, the data is written into a byte array. The buffer automatically grows

as data is written to it.

Closing a ByteArrayOutputStream has no effect.

Commonly used Constructors of ByteArrayOutputStream class:

1) ByteArrayOutputStream():creates a new byte array output stream with the

initial capacity of 32 bytes, though its size increases if necessary.

2) ByteArrayOutputStream(int size):creates a new byte array output stream, with a

buffer capacity of the specified size, in bytes.

Commonly used Methods of ByteArrayOutputStream class:

1) public synchronized void writeTo(OutputStream out) throws IOException: writes

the complete contents of this byte array output stream to the specified output

stream.

17

Page 18: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of ByteArrayOutputStream class

//Simple program of writing data by ByteArrayOutputStream

class import java.io.*;

class S{

public static void main(String args[])throws Exception{

FileOutputStream fout1=new FileOutputStream("f1.txt");

FileOutputStream fout2=new FileOutputStream("f2.txt");

ByteArrayOutputStream bout=new ByteArrayOutputStream();

bout.write(239); bout.writeTo(fout1); bout.writeTo(fout2);

bout.flush();

bout.close();//has no effect

System.out.println("success..."); } } Output:success...

18

Page 19: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of ByteArrayOutputStream class

19

Page 20: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

SequenceInputStream class

SequenceInputStream class is used to read data from multipule streams.

Constructors of SequenceInputStream class:

1) SequenceInputStream(InputStream s1, InputStream s2):creates a new

input stream by reading the data of two input stream in order, first s1 and

then s2.

2) SequenceInputStream(Enumeration e):creates a new input stream by

reading the data of an enumeration whose type is InputStream.

Simple example of SequenceInputStream class

In this example, we are printing the data of two files f1.txt and f2.txt.

20

Page 21: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of SequenceInputStream that reads data of 2 files

import java.io.*;

class Simple{

public static void main(String args[])throws Exception{

FileinputStream fin1=new FileinputStream("f1.txt");

FileinputStream fin2=new FileinputStream("f2.txt");

SequenceinputStream sis=new SequenceinputStream(fin1,fin2);

int i;

while((i=sis.read())!=-1)

{

System.out.println((char)i);

} } }

21

Page 22: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of SequenceInputStream class that reads the data from two files and write it into another

In this example, we are writing the data of two files f1.txt and f2.txt into another file

named f3.txt. //reading data of 2 files and writing it into one file

import java.io.*;

class Simple{

public static void main(String args[])throws Exception{

FileinputStream fin1=new FileinputStream("f1.txt");

FileinputStream fin2=new FileinputStream("f2.txt");

FileOutputStream fout=new FileOutputStream("f3.txt");

SequenceinputStream sis=new SequenceinputStream(fin1,fin2);

int i;

while((i.sisread())!=-1)

{ fout.write(i); } sis.close(); fout.close(); fin.close(); fin.close(); } }

22

Page 23: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of SequenceInputStream class that reads the data from multiple files using enumeration

If we need to read the data from more than two files, we need to have these

information in the Enumeration object. Enumeration object can be get by calling

elements method of the Vector class. HERE are reading the data from the 4 files.

import java.io.*;

import java.util.*;

class B{

public static void main(String args[])throws IOException{

//creating the FileInputStream objects for all the files

FileInputStream fin=new FileInputStream("A.java");

FileInputStream fin2=new FileInputStream("abc2.txt");

FileInputStream fin3=new FileInputStream("abc.txt");

FileInputStream fin4=new FileInputStream("B.java");

23

Page 24: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of SequenceInputStream class that reads the data from multiple files using enumeration

//creating Vector object to all the stream

Vector v=new Vector();

v.add(fin); v.add(fin2); v.add(fin3); v.add(fin4);

//creating enumeration object by calling the elements method

Enumeration e=v.elements();

//passing the enumeration object in the constructor

SequenceInputStream bin=new SequenceInputStream(e);

int i=0;

while((i=bin.read())!=-1){

System.out.print((char)i);

}

bin.close(); fin.close(); fin2.close();

} }

24

Page 25: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

BufferedOutputStream class

BufferedOutputStream used an internal buffer. It adds more efficiency

than to write data directly into a stream. So, it makes the performance

fast.

Example of BufferedOutputStream class:

In this example, we are writing the textual information in the

BufferedOutputStream object which is connected to the

FileOutputStream object. The flush() flushes the data of one stream and

send it into another. It is required if you have connected the one stream

with another.

25

Page 26: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

import java.io.*;

class Test{

public static void main(String args[])throws Exception{

FileOutputStream fout=new FileOutputStream("f1.txt");

BufferedOutputStream bout=new BufferedOutputStream(fout);

String s="Sachin is my favourite player";

byte b[]=s.getBytes();

bout.write(b);

bout.flush();

bout.close(); System.out.println("success"); } }

Output:success...26

Page 27: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of BufferedInputStream class

//Simple program of reading data from the file using buffer

import java.io.*;

class SimpleRead{

public static void main(String args[]){

try{

FileInputStream fin=new FileInputStream("f1.txt");

BufferedInputStream bin=new BufferedInputStream(fin);

int i;

while((i=bin.read())!=-1)

System.out.println((char)i);

fin.close(); }catch(Exception e){system.out.println(e);} } }

Output:Sachin is my favourite player27

Page 28: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

FileWriter class

FileWriter class is used to write character-oriented data to the file. Sun

Microsystem has suggested not to use the FileInputStream and FileOutputStream

classes if you have to read and write the textual information.

Example of FileWriter class:- this example, we are writing the data in the file abc.txt.

import java.io.*;

class Simple{

public static void main(String args[]){

try{

FileWriter fw=new FileWriter("abc.txt");

fw.write("my name is sachin");

fw.flush(); fw.close(); }catch(Exception e){System.out.println(e);}

System.out.println("success"); } } Output:success...

28

Page 29: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

FileReader class

FileReader class is used to read data from the file.

Example of FileReader class:

In this example, we are reading the data from the file abc.txt file.

import java.io.*;

class Simple{

public static void main(String args[])throws Exception{

FileReader fr=new FileReader("abc.txt");

int i;

while((i=fr.read())!=-1)

System.out.println((char)i);

fr.close(); } } Output:my name is sachin

29

Page 30: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

CharArrayWriter class

The CharArrayWriter class can be used to write data to multiple files. This class

implements the Appendable interface. Its buffer automatically grows when data is

written in this stream. Calling the close() method on this object has no effect.

Example of CharArrayWriter class:

In this example, we are writing a common data to 4 files a.txt, b.txt, c.txt and d.txt.

import java.io.*;

class Simple{

public static void main(String args[])throws Exception{

CharArrayWriter out=new CharArrayWriter();

out.write("my name is");

FileWriter f1=new FileWriter("a.txt");

FileWriter f2=new FileWriter("b.txt");

30

Page 31: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

CharArrayWriter class

FileWriter f3=new FileWriter("c.txt");

FileWriter f4=new FileWriter("d.txt");

out.writeTo(f1);

out.writeTo(f2);

out.writeTo(f3);

out.writeTo(f4);

f1.close();

f2.close();

f3.close();

f4.close(); } }

31

Page 32: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Reading data from keyboard

There are many ways to read data from the keyboard. For example:

• InputStreamReader

• Console

• Scanner

• DataInputStream etc.

InputStreamReader class:

InputStreamReader class can be used to read data from keyboard.It performs two

tasks:

• connects to input stream of keyboard

• converts the byte-oriented stream into character-oriented stream

BufferedReader class:

BufferedReader class can be used to read data line by line by readLine() method.

32

Page 33: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of reading data from keyboard by InputStreamReader and BufferdReader class

In this example, we are connecting the BufferedReader stream with the

InputStreamReader stream for reading the line by line data from the keyboard.

//Program of reading data

import java.io.*;

class G5{

public static void main(String args[])throws Exception{

InputStreamReader r=new InputStreamReader(System.in);

BufferedReader br=new BufferedReader(r);

System.out.println("Enter ur name");

String name=br.readLine();

System.out.println("Welcome "+name);

} } Output:Enter ur name Amit Welcome Amit

33

Page 34: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Diagram

34

Page 35: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

Another Example of reading data from keyboard by InputStreamReader and BufferdReader

class until the user writes stop --In this example, we are reading and printing the data until

the user prints stop.

import java.io.*;

class G5{

public static void main(String args[])throws Exception{

InputStreamReader r=new InputStreamReader(System.in);

BufferedReader br=new BufferedReader(r);

String name="";

while(name.equals("stop")){

System.out.println("Enter data: "); name=br.readLine(); System.out.println("data

is: "+name); } br.close(); r.close(); } } Output:Enter data: Amit data is:

Amit Enter data: 10 data is: 10 Enter data: stop data is: stop

35

Page 36: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Console class (I/O)

The Console class can be used to get input from the keyboard.

How to get the object of Console class?

System class provides a static method named console() that returns the unique

instance of Console class.

Syntax:

public static Console console(){}

36

Page 37: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Commonly used methods of Console class

1) public String readLine(): is used to read a single line of text from the

console.

2) public String readLine(String fmt,Object... args): it provides a formatted

prompt then reads the single line of text from the console.

3) public char[] readPassword(): is used to read password that is not being

displayed on the console.

4) public char[] readPassword(String fmt,Object... args): it provides a

formatted prompt then reads the password that is not being displayed on

the console.

37

Page 38: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of Console class that reads name of user

import java.io.*;

class A{

public static void main(String args[]){

Console c=System.console();

System.out.println("Enter ur name");

String n=c.readLine();

System.out.println("Welcome "+n);

}

}

38

Page 39: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of Console class that reads password

import java.io.*;

class A{

public static void main(String args[]){

Console c=System.console();

System.out.println("Enter password");

char[] ch=c.readPassword();

System.out.println("Password is");

for(char ch2:ch)

System.out.print(ch2);

} }

39

Page 40: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

java.util.Scanner class

There are various ways to read input from the keyboad, the java.util.Scanner class is one of

them. The Scanner class breaks the input into tokens using a delimiter which is whitespace

bydefault.

Commonly used methods of Scanner class

There is a list of commonly used Scanner class methods:

• public String next(): it returns the next token from the scanner.

• public String nextLine(): it moves the scanner position to the next line and returns

the value as a string.

• public byte nextByte(): it scans the next token as a byte.

• public short nextShort(): it scans the next token as a short value.

• public int nextInt(): it scans the next token as an int value.

• public long nextLong(): it scans the next token as a long value.

• public double nextDouble(): it scans the next token as a double value.40

Page 41: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of java.util.Scanner class

Example of the Scanner class which reads the int, string and double value as an input:

import java.util.Scanner;

class ScannerTest{

public static void main(String args[]){

Scanner sc=new Scanner(System.in);

System.out.println("Enter your rollno");

int rollno=sc.nextInt(); System.out.println("Enter your name");

String name=sc.next(); System.out.println("Enter your fee");

double fee=sc.nextDouble();

System.out.println("Rollno:"+rollno+" name:"+name+" fee:"+fee);

} } Output: Enter your rollno 111 Enter your name Ratan

Enter 450000 Rollno:111 name:Ratan fee:450000

41

Page 42: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Serialization

1. Serialization

2. Serializable Interface

3. ObjectOutputStream class

4. Example of Serialization

5. Deserialization

6. ObjectInputStream class

7. Example of Deserialization

8. Serialization with Inheritance

9. Externalizable interface

42

Page 43: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Advantage of Serialization

Serialization is a machanism of writing the state of an object into a byte

stream. It is mainly used in Hibernate, JPA, EJB etc. The reverse operation

of the serialization is called deserialization. The String class and all the

wrapper classes implements Serializable interface bydefault.

Advantage of Serialization

It is mainly used to travel object's state on the network.

About Serializable interface:

Serializable is a marker interface(have no body). It is just used to "mark"

Java classes which support a certain capability. It must be implemented by

the class whose object you want to persist. Let's see the example given

below:

43

Page 44: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Serializable interface Example

import java.io.Serializable;

public class Student implements Serializable{

int id;

String name;

public Student(int id, String name) {

this.id = id;

this.name = name;

}

}

44

Page 45: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

ObjectOutputStream class

An ObjectOutputStream is used to write primitive data types and Java

objects to an OutputStream.Only objects that support the

java.io.Serializable interface can be written to streams.

Commonly used Constructors:

1) public ObjectOutputStream(OutputStream out) throws IOException

{}creates an ObjectOutputStream that writes to the specified

OutputStream.

Commonly used Methods:

1) public final void writeObject(Object obj) throws IOException {}write the

specified object to the ObjectOutputStream.

2) public void flush() throws IOException {}flushes the current output

stream. 45

Page 46: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of Serialization

In this example, we are going to serialize the object of Student class. The

writeObject() method of ObjectOutputStream class provides the functionality to

serialize the object. We are saving the state of the object in the file named f.txt.

46

Page 47: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

import java.io.*;

class Persist{

public static void main(String args[])throws Exception{

Student s1 =new Student(211,"ravi");

FileOutputStream fout=new FileOutputStream("f.txt");

ObjectOutputStream out=new ObjectOutputStream(fout);

out.writeObject(s1);

out.flush();

System.out.println("success");

}

}

Output:succss47

Page 48: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Deserilization

Deserialization is the process of reconstructing the object from the serialized

state.It is the reverse operation of serialization.

ObjectInputStream class:

An ObjectInputStream deserializes objects and primitive data written using an

ObjectOutputStream.

Commonly used Constructors:

1) public ObjectInputStream(InputStream in) throws IOException {}creates an

ObjectInputStream that reads from the specified InputStream.

Commonly used Methods:

1) public final Object readObject() throws IOException,

ClassNotFoundException{}reads an object from the input stream.

48

Page 49: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of Deserialization

import java.io.*;

class Depersist{

public static void main(String args[])throws Exception{

ObjectInputStream in=new ObjectInputStream(new

FileInputStream("f.txt"));

Student s=(Student)in.readObject();

System.out.println(s.id+" "+s.name);

in.close();

} }

Output:211 ravi

49

Page 50: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Serialization with Inheritance

If a class implements Serilizable then all its subclasses will also be serilizable. Let's

see the example given below:

import java.io.Serializable;

class Person implements Serializable{

int id; String name; public Student(int id, String name) {

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

class Student extends Person{

String course; int fee;

public Student(int id, String name, String course, int fee) {

super(id,name); this.course=course; tihs.fee=fee; } }

50

Page 51: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Externalizable interface

Now you can serialize the Student class object that extends the Person class which

is Serializable.Parent class properties are inherited to subclasses so if parent class

is Serializable, subclass would also be.

Externalizable interface:

The Externalizable interface provides the facility of writing the state of an object

into a byte stream in compress format. It is not a marker interface.

The Externalizable interface provides two methods:

public void writeExternal(ObjectOutput out) throws IOException

public void readExternal(ObjectInput in) throws IOException

Serialization with Static datamember

Note: If there is any static data member in a class, it will not be serialized because

static is related to class not to instance.

51

Page 52: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

class Employee implements Serializable{

int id;

String name;

static String companyName="IBM";//it won't be serialized

public Student(int id, String name) {

this.id = id;

this.name = name;

}

}

52

Page 53: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Exception

The exception handling is one of the powerful mechanism provided in java. It

provides the mechanism to handle the runtime errors so that normal flow of the

application can be maintained.

Exception

Dictionary Meaning: Exception is an abnormal condition.

In java, exception is an event that disrupts the normal flow of the program. It is an

object which is thrown at runtime.

Exception Handling

Exception Handling is a mechanism to handle runtime errors.

Advantage of Exception Handling

The core advantage of exception handling is that normal flow of the application is

maintained. Exception normally disrupts the normal flow of the application .

53

Page 54: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Why Perform Exception Handling

statement 1; statement 2;

statement 3;

statement 4;

statement 5;

statement 6;

statement 7;

statement 8;

statement 9;

statement 10;

Suppose there is 10 statements in your program and there occurs an exception at

statement 5, rest of the code will not be executed i.e. statement 6 to 10 will not

run. If we perform exception handling, rest of the exception will be executed. That

is why we use exception handling.54

Page 55: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Hierarchy of Exception classes

55

Page 56: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Types of Exception

Types of Exception:

There are mainly two types of exceptions: checked and unchecked where error is

considered as unchecked exception. The sun microsystem says there are three

types of exceptions:

1. Checked Exception

2. Unchecked Exception

3. Error

What is the difference between checked and unchecked exceptions ?

1) Checked Exception

The classes that extend Throwable class except RuntimeException and Error are

known as checked exceptions e.g.IOException, SQLException etc. Checked

exceptions are checked at compile-time.

56

Page 57: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Types of Exception

2) Unchecked Exception

The classes that extend RuntimeException are known as unchecked exceptions

e.g. ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException

etc. Unchecked exceptions are not checked at compile-time rather they are

checked at runtime.

3) Error

Error is irrecoverable e.g. OutOfMemoryError, VirtualMachineError, AssertionError

etc.

Common scenarios of Exception Handling where exceptions may occur

There are given some scenarios where unchecked exceptions can occur. They are

as follows:

57

Page 58: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Common scenarios of Exception Handling

1) Scenario where ArithmeticException occurs

If we divide any number by zero, there occurs an ArithmeticException.

int a=50/0;//ArithmeticException

2) Scenario where NullPointerException occurs

If we have null value in any variable, performing any operation by the variable

occurs an NullPointerException.

String s=null;System.out.println(s.length());//NullPointerException

3) Scenario where NumberFormatException occurs

The wrong formatting of any value, may occur NumberFormatException.

Suppose I have a string variable that have characters, converting this variable into

digit will occur NumberFormatException.

String s="abc";int i=Integer.parseInt(s); //NumberFormatException

58

Page 59: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Common scenarios of Exception Handling

4) Scenario where ArrayIndexOutOfBoundsException occurs

If you are inserting any value in the wrong index, it would result

ArrayIndexOutOfBoundsException as shown below:

int a[]=new int[5];a[10]=50; //ArrayIndexOutOfBoundsException

Use of try-catch block in Exception handling:

Five keywords used in Exception handling:

try

catch

finally

throw

throws59

Page 60: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Use of try-catch block in Exception handling

try block

Enclose the code that might throw an exception in try block. It must be used

within the method and must be followed by either catch or finally block.

Syntax of try with catch block

try{……...}

catch(Exception_class_Name reference){ }

Syntax of try with finally block

try{........}

finally{ }

catch block

Catch block is used to handle the Exception. It must be used after the try block.

60

Page 61: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Problem without exception handling

Problem without exception handling

class Simple{

public static void main(String args[]){

int data=50/0;

System.out.println("rest of the code...");

}

}

Output: Exception in thread main java.lang.ArithmeticException:/ by zero

As displayed in the above example, rest of the code is not executed i.e. rest of the

code... statement is not printed.

61

Page 62: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

What happens behind the code int a=50/0;

62

Page 63: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

What happens behind the code int a=50/0;

The JVM firstly checks whether the exception is handled or not. If

exception is not handled, JVM provides a default exception handler that

performs the following tasks:

Prints out exception description.

Prints the stack trace (Hierarchy of methods where the exception

occurred).

Causes the program to terminate.

But if exception is handled by the application programmer, normal flow of

the application is maintained i.e. rest of the code is executed.

63

Page 64: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Solution by exception handling

class Simple{

public static void main(String args[]){

try{

int data=50/0;

}catch(ArithmeticException e){System.out.println(e);}

System.out.println("rest of the code...");

}

}

Output: Exception in thread main java.lang.ArithmeticException:/ by zero

rest of the code...

Now, as displayed in the above example, rest of the code is executed i.e. rest of

the code... statement is printed.

64

Page 65: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Multiple catch block

If you have to perform different tasks at the occrence of different Exceptions,

use multple catch block.

class Excep4{

public static void main(String args[]){

try{

int a[]=new int[5];

a[5]=30/0; }

catch(ArithmeticException e){System.out.println("task1 is completed");}

catch(ArrayIndexOutOfBoundsException e){System.out.println("task 2 completed");}

catch(Exception e){System.out.println("common task completed");}

System.out.println("rest of the code..."); } } Output:task1 completed

rest of the code...

65

Page 66: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Rule:At a time only one Exception is occured and at a time only one catch block is executed

Rule:All catch blocks must be ordered from most specific to most general i.e. catch

for ArithmeticException must come before catch for Exception .

class Excep4{

public static void main(String args[]){

try{

int a[]=new int[5];

a[5]=30/0; }

catch(Exception e){System.out.println("common task completed");}

catch(ArithmeticException e){System.out.println("task1 is completed");}

catch(ArrayIndexOutOfBoundsException e){System.out.println("task 2 completed");}

System.out.println("rest of the code..."); } } Output:Compile-time error

66

Page 67: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Nested try block:

try block within a try block is known as nested try block.

Why use nested try block?

Sometimes a situation may arise where a part of a block may cause one error and the entire

block itself may cause another error. In such cases, exception handlers have to be nested

Syntax:

try

{

statement 1; statement 2;

try

{

statement 1; statement 2;

}

catch(Exception e) { }

} catch(Exception e) { }

67

Page 68: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of nested try block

class Excep6{

public static void main(String args[]){

try{ try{ System.out.println("going to divide");

int b =39/0;

}catch(ArithmeticException e){System.out.println(e);}

try{

int a[]=new int[5]; a[5]=4; }

catch(ArrayIndexOutOfBoundsException e){System.out.println(e);}

System.out.println("other statement);

}catch(Exception e){System.out.println("handeled");}

System.out.println("normal flow.."); } }

68

Page 69: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

finally block

The finally block is a block that is always executed. It is mainly used to perform

some important tasks such as closing connection, stream etc.

69

Page 70: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program in case exception does not occur

case 1

class Simple{

public static void main(String args[]){

try{

int data=25/5;

System.out.println(data);

}

catch(NullPointerException e){System.out.println(e);}

finally{System.out.println("finally block is always executed");}

System.out.println("rest of the code...");

} } Output:5 finally block is always executed rest of the code...

70

Page 71: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program in case exception occurred but not handled

class Simple{

public static void main(String args[]){

try{

int data=25/0;

System.out.println(data);

}

catch(NullPointerException e){System.out.println(e);}

finally{System.out.println("finally block is always executed");}

System.out.println("rest of the code...");

} } Output:finally block is always executed

Exception in thread main java.lang.ArithmeticException:/ by zero

71

Page 72: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program in case exception occurred and handled

class Simple{

public static void main(String args[]){

try{

int data=25/0;

System.out.println(data);

}

catch(ArithmeticException e){System.out.println(e);}

finally{System.out.println("finally block is always executed");}

System.out.println("rest of the code...");

} } Output:Exception in thread main java.lang.ArithmeticException:/ by zero

finally block is always executed

rest of the code...

72

Page 73: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Some important Tips

Note: Before terminating the program, JVM executes finally block(if any).

Note: finally must be followed by try or catch block.

Why use finally block?

finally block can be used to put "cleanup" code such as closing a

file,closing connection etc.

Rule: For each try block there can be zero or more catch blocks, but only

one finally block.

Note: The finally block will not be executed if program exits(either by

calling System.exit() or by causing a fatal error that causes the process to

abort).

73

Page 74: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

throw keyword

The throw keyword is used to explictily throw an exception.

We can throw either checked or uncheked exception. The throw keyword is mainly

used to throw custom exception. We will see custom exceptions later.

Example of throw keyword

In this example, we have created the validate method that takes integer value as a

parameter. If the age is less than 18, we are throwing the ArithmeticException

otherwise print a message welcome to vote.

class Excep13{

static void validate(int age){ if(age<18) throw new ArithmeticException("not valid");

else System.out.println("welcome to vote"); }

public static void main(String args[]){ validate(13);

System.out.println("rest of the code..."); } } Output:Exception in thread main

java.lang.ArithmeticException:not valid74

Page 75: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Exception propagation

An exception is first thrown from the top of the stack and if it is not caught, it

drops down the call stack to the previous method,If not caught there, the

exception again drops down to the previous method, and so on until they are

caught or until they reach the very bottom of the call stack.This is called exception

propagation.

Rule: By default Unchecked Exceptions are forwarded in calling chain (propagated).

Program of Exception Propagation

class Simple{

void m(){

int data=50/0;

}

75

Page 76: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of Exception Propagation

void n(){

m();

}

void p(){

try{

n();

}catch(Exception e){System.out.println("exception handled");}

} public static void main(String args[]){

Simple obj=new Simple(); obj.p();

System.out.println("normal flow...");

} } Output:exception handled normal flow...

76

Page 77: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Figure

In the above example exception occurs in m() method where it is not handled,so it

is propagated to previous n() method where it is not handled, again it is

propagated to p() method where exception is handled.

Exception can be handled in any method in call stack either in main() method,p()

method,n() method or m() method.

77

Page 78: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

throws keyword

The throws keyword is used to declare an exception. It gives an

information to the programmer that there may occur an exception so it is

better for the programmer to provide the exception handling code so that

normal flow can be maintained.

Exception Handling is mainly used to handle the checked exceptions. If

there occurs any unchecked exception such as NullPointerException, it is

programmers fault that he is not performing check up before the code

being used.

Syntax of throws keyword:

void method_name() throws exception_class_name{

... }

78

Page 79: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Advantage of throws keyword

Which exception should we declare?

Ans) checked exception only, because:

• unchecked Exception: under your control so correct your code.

• error: beyond your control e.g. you are unable to do anything if there occurs

VirtualMachineError or StackOverflowError.

Advantage of throws keyword:

Now Checked Exception can be propagated (forwarded in call stack).

79

Page 80: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program which describes that checked exceptions can be propagated by throws keyword.

import java.io.IOException;

class Simple{

void m()throws IOException{

throw new IOException("device error");//checked exception

} void n()throws IOException{ m(); }

void p(){

try{ n();

}catch(Exception e){System.out.println("exception handled");} }

public static void main(String args[]){ Simple obj=new Simple();

obj.p(); System.out.println("normal flow..."); } }

Output:exception handled

normal flow...80

Page 81: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Case1: You handle the exception

Rule: If you are calling a method that declares an exception, you must either caught or

declare the exception.

There are two cases:

1. Case1:You caught the exception i.e. handle the exception using try/catch.

2. Case2:You declare the exception i.e. specifying throws with the method.

Case1: You handle the exception

• In case you handle the exception, the code will be executed fine whether

exception occurs during the program or not.

import java.io.*;

class M{

void method()throws IOException{

throw new IOException("device error"); } }

81

Page 82: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Case1: You handle the exception

class Test{

public static void main(String args[]){

try{

Test t=new Test();

t.method();

}catch(Exception e){System.out.println("exception handled");}

System.out.println("normal flow...");

} }

Output:exception handled normal flow...

82

Page 83: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Case2: You declare the exception

• A)In case you declare the exception, if exception does not occur, the code will be

executed fine.

• B)In case you declare the exception if exception occures, an exception will be

thrown at runtime because throws does not handle the exception.

A)Program if exception does not occur

import java.io.*;

class M{

void method()throws IOException{

System.out.println("device operation performed");

}

}

83

Page 84: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program if exception does not occur

class Test{

public static void main(String args[])throws IOException{//declare exception

Test t=new Test();

t.method();

System.out.println("normal flow...");

}

}

Output:device operation performed

normal flow...

84

Page 85: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program if exception occur

import java.io.*;

class M{

void method()throws IOException{

throw new IOException("device error");

} }

class Test{

public static void main(String args[])throws IOException{//declare exception

Test t=new Test();

t.method();

System.out.println("normal flow..."); } }

Output:Runtime Exception85

Page 86: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Difference between throw and throws

1)throw is used to explicitly throw an exception.

throws is used to declare an exception.

2)checked exception can not be propagated without throws.

checked exception can be propagated with throws.

3)throw is followed by an instance.

throws is followed by class.

4)throw is used within the method.

throws is used with the method signature.

5)You cannot throw multiple exception

You can declare multiple exception e.g. public void method()throws

IOException,SQLException.

86

Page 87: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Exception Handling with Method Overriding

There are many rules if we talk about method overriding with exception

handling. The Rules are as follows:

If the super class method does not declare an exception

If the super class method does not declare an exception, subclass

overridden method cannot declare the checked exception but it can

declare unchecked exception.

If the superclass method declares an exception

If the superclass method declares an exception, subclass overridden

method can declare same, subclass exception or no exception but cannot

declare parent exception

87

Page 88: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

If the superclass method does not declare an exception

1) Rule: If the superclass method does not declare an exception, subclass overridden

method cannot declare the checked exception.

2) import java.io.*;

class Parent{

void msg(){System.out.println("parent");}

}

class Child extends Parent{

void msg()throws IOException{

System.out.println("child");

} public static void main(String args[]){ Parent p=new Child(); p.msg();

} } Output:Compile Time Error88

Page 89: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

2) Rule: If the superclass method does not declare an exception, subclass overridden

method cannot declare the checked exception but can declare unchecked

exception.

import java.io.*;

class Parent{

void msg(){System.out.println("parent");}

}

class Child extends Parent{

void msg()throws ArithmeticException{

System.out.println("child");

} public static void main(String args[]){ Parent p=new Child(); p.msg();

} } Output:child

89

Page 90: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

If the superclass method declares an exception

1) Rule: If the superclass method declares an exception, subclass overridden

method can declare same, subclass exception or no exception but cannot declare

parent exception.

Example in case subclass overridden method declares parent exception

import java.io.*;

class Parent{

void msg()throws ArithmeticException{System.out.println("parent");} }

class Child extends Parent{

void msg()throws Exception{System.out.println("child");}

public static void main(String args[]){

Parent p=new Child(); try{ p.msg(); }catch(Exception e){} } }

Output: Compile Time Error

90

Page 91: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example in case subclass overridden method declares same exception

import java.io.*;

class Parent{

void msg()throws Exception{System.out.println("parent");} }

class Child extends Parent{

void msg()throws Exception{System.out.println("child");}

public static void main(String args[]){

Parent p=new Child();

try{

p.msg();

}catch(Exception e){}

} } Output:child

91

Page 92: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example in case subclass overridden method declares subclass exception

import java.io.*;

class Parent{

void msg()throws Exception{System.out.println("parent");}

}

class Child extends Parent{

void msg()throws ArithmeticException{System.out.println("child");}

public static void main(String args[])

{ Parent p=new Child();

try{ p.msg();

}catch(Exception e){} } } Output: child

92

Page 93: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example in case subclass overridden method declares no exception

import java.io.*;

class Parent{

void msg()throws Exception{System.out.println("parent");}

}

class Child extends Parent{

void msg(){System.out.println("child");}

public static void main(String args[]){

Parent p=new Child();

try{

p.msg();

}catch(Exception e){} } } Output:child

93

Page 94: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Nested classes (Inner classes)

Nested classes

Advantage of Nested classes

Difference between nested class and inner class

Types of Nested classes

94

Page 95: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Nested Class

A class declared inside a class is known as nested class. We use nested

classes to logically group classes in one place so that it can be more

readable and maintainable code. Moreover, it can access all the members

of outer class including private members.

Syntax of Nested class

class Outer_class_Name{

...

class Nested_class_Name{

...

}

... }

95

Page 96: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Advantage of nested classes

There are basically three advantages of nested classes. They are

• Nested classes represent a special type of relationship that is it can access all the

members (data members and methods) of outer class including private.

• Nested classes can lead to more readable and maintainable code because it

logically group classes in one place only.

• Code Optimization as we need less code to write.

What is the difference between nested class and inner class?

Inner class is a part of nested class. Non-static nested classes are known as nested

classes.

Types of Nested class:

There are two types of nested classes non-static and static nested classes.

The non-static nested classes are also known as inner classes.

96

Page 97: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Types of Nested class

1. non-static nested class(inner class)

a) Member inner class

b) Annomynous inner class

c) Local inner class

2. static nested class

97

Page 98: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

1) Member inner class

A class that is declared inside a class but outside a method is known as member inner class.

Invocation of Member Inner class

1. From within the class

2. From outside the class

Example of member inner class that is invoked inside a class

In this example, we are invoking the method of member inner class from the display

method of Outer class.

class Outer{

private int data=30;

class Inner{

void msg(){System.out.println("data is "+data);} }

98

Page 99: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

void display(){

Inner in=new Inner();

in.msg();

}

public static void main(String args[]){ Outer obj=new Outer(); obj.display(); } }

Output:data is 30

Internal code generated by the compiler for member inner class:

The java compiler creates a class file named Outer$Inner in this case. The Member

inner class have the reference of Outer class that is why it can access all the data

members of Outer class including private.

99

Page 100: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

import java.io.PrintStream;

class Outer$Inner

{

final Outer this$0;

Outer$Inner()

{ super();

this$0 = Outer.this;

}

void msg()

{

System.out.println((new StringBuilder()).append("data is ")

.append(Outer.access$000(Outer.this)).toString()); } }

100

Page 101: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example of member inner class that is invoked outside a class

In this example, we are invoking the msg() method of Inner class from outside the

outer class i.e. Test class.

//Program of member inner class that is invoked outside a class

class Outer{

private int data=30;

class Inner{

void msg(){System.out.println("data is"+data);}

} }

class Test{

public static void main(String args[]){

Outer obj=new Outer(); Outer.Inner in=obj.new Inner(); in.msg(); } }

Output:data is 30

101

Page 102: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

2) Anonymous inner class

A class that have no name is known as anonymous inner class.

Anonymous class can be created by:

1. Class (may be abstract class also).

2. Interface

Program of anonymous inner class by abstract class

abstract class Person{

abstract void eat();

}

class Emp{

public static void main(String args[]){ Person p=new Person(){

void eat(){System.out.println("nice fruits");} }; p.eat(); } } Output:nice fruits

102

Page 103: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

What happens behind this code?

What happens behind this code?

Person p=new Person(){

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

}; } }

1. A class is created but its name is decided by the compiler which extends

the Person class and provides the implementation of the eat() method.

2. An object of Annonymous class is created that is reffered by p reference

variable of Person type. As you know well that Parent class reference

variable can refer the object of Child class

103

Page 104: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

What happens behind this code?

The internal code generated by the compiler for annonymous inner class

import java.io.PrintStream;

static class Emp$1 extends Person

{

Emp$1(){}

void eat()

{

System.out.println("nice fruits");

}

}

104

Page 105: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of anonymous inner class by interface

interface Eatable{

void eat();

}

class Emp{

public static void main(String args[]){

Eatable e=new Eatable(){

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

};

e.eat(); }

}

Output:nice fruits

105

Page 106: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

What does the compiler for anonymous inner class created by interface

It performs two main tasks behind this code:

Eatable p=new Eatable(){

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

}; }

}

A class is created but its name is decided by the compiler which implements the

Eatable interface and provides the implementation of the eat() method.

An object of Annonymous class is created that is reffered by p reference variable

of Eatable type. As you know well that Parent class reference variable can refer

the object of Child class.

106

Page 107: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Explanation

The internal code generated by the compiler for anonymous inner class

created by interface

import java.io.PrintStream;

static class Emp$1 implements Eatable

{

Emp$1(){}

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

}

107

Page 108: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

3) Local inner class

A class that is created inside a method is known as local inner class. If you want to

invoke the methods of local inner class, you must instantiate this class inside the

method.

Program of local inner class

class Simple{

private int data=30;//instance variable

void display(){

class Local{

void msg(){System.out.println(data);}

} Local l=new Local(); l.msg(); }

public static void main(String args[]){

Simple obj=new Simple(); obj.display(); } } Output:30

108

Page 109: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Internal code generated by the compiler for local inner class

In such case, compiler creates a class named Simple$1 Local that have the

reference of the outer class.

import java.io.PrintStream;

class Simple$1Local

{

final Simple this$0; Simple$1Local()

{

super(); this$0 = Simple.this; }

void msg()

{ System.out.println(Simple.access$000(Simple.this)); }

Rule: Local variable can't be private, public or protected.

109

Page 110: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Rules for Local Inner class

1) Local inner class cannot be invoked from outside the method.

2) Local inner class cannot access non-final local variable.

Program of accessing non-final local variable in local inner class

class Simple{

private int data=30;//instance variable

void display(){

int value=50;//local variable must be final

class Local{

void msg(){System.out.println(value);}//C.T.Error

} Local l=new Local(); l.msg(); }

public static void main(String args[]){ Simple obj=new Simple(); obj.display(); } }

Output:Compile Time Error110

Page 111: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of accessing final local variable in local inner class

class Simple{

private int data=30;//instance variable

void display(){

final int value=50;//local variable must be final

class Local{

void msg(){System.out.println(data+" "+value);}//ok

}

Local l=new Local(); l.msg();

}

public static void main(String args[]){

Simple obj=new Simple(); obj.display(); } } Output:30 50

111

Page 112: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of static nested class that have instance method

4) static nested class

A static class that is created inside a class is known as static nested class. It cannot access the non-

static members.

• It can access static data members of outer class including private.

• static nested class cannot access non-static (instance) data member or method.

class Outer{

static int data=30;

static class Inner{

void msg(){System.out.println("data is "+data);} }

public static void main(String args[]){

Outer.Inner obj=new Outer.Inner(); obj.msg(); } }

Output:data is 30

112

Page 113: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of static nested class that have instance method

In previous example, you need to create the instance of static nested class because it

has instance method msg(). But you don't need to create the object of Outer class

because nested class is static and static properties, methods or classes can be

accessed without object.

Internal code generated by the compiler for static nested class

import java.io.PrintStream;

static class Outer$Inner

{

Outer$Inner(){}

void msg(){

System.out.println((new StringBuilder()).append("data is ")

.append(Outer.data).toString()); } }

113

Page 114: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Program of static nested class that have static method

class Outer{

static int data=30;

static class Inner{

static void msg(){System.out.println("data is "+data);}

}

public static void main(String args[]){

Outer.Inner.msg();//no need to create the instance of static nested class

}

}

Output: data is 30

114

Page 115: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Garbage Collection

In java, garbage means unreferenced objects.

Garbage Collection is process of reclaiming the runtime unused memory

automatically.

Advantage of Garbage Collection

• It makes java memory efficient because garbage collector removes the

unreferenced objects from heap memory.

• It is automatically done by the garbage collector so we don't need to make extra

efforts.

How can an object be unreferenced? There are many ways:

• By nulling the reference

• By assigning a reference to another

• By annonymous object etc.

115

Page 116: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

How can an object be unreferenced

1) By nulling a reference

Employee e=new Employee();

e=null;

2) By assigning a reference to another

Employee e1=new Employee();

Employee e2=new Employee();

e1=e2;//now the first object refered by e1 is available for garbage collection

3) By annonymous object

new Employee();

finalize() method:

The finalize() method is invoked each time before the object is garbage collected.

This method can be used to perform cleanup processing. This method is defined in

System class as: protected void finalize(){} 116

Page 117: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

gc() method

Note: The Garbage collector of JVM collects only those objects that are

created by new keyword. So if you have created any object without new,

you can use finalize method to perform cleanup processing (destroying

remaining objects).

gc() method:

The gc() method is used to invoke the garbage collector to perform cleanup

processing. The gc() is found in System and Runtime classes.

public static void gc(){}

Note: Garbage collection is performed by a daemon thread called Garbage

Collector(GC). This thread calls the finalize() method before object is garbage

collected.

117

Page 118: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Simple Example of garbage collection

class Simple{

public void finalize(){System.out.println("object is garbage collected");}

public static void main(String args[]){

Simple s1=new Simple();

Simple s2=new Simple();

s1=null;

s2=null;

System.gc();

} } Output:object is garbage collected object is garbage collected

Note: Neither finalization nor garbage collection is guaranteed.

118

Page 119: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Java Annotation

Annotation is a tag that represents the metadata. It is attached with class,

interface, methods or fields to indicate some additional information that can be

used by java compiler and JVM.

Built-In Annotations

There are several built-in annoations. Some annotations are applied to java code

and some to other annotations.

Built-In Annotations that are applied to java code

@Override

@SuppressWarnings

@Deprecated

Built-In Annotations that are applied to other annotations

@Target @Retention @Inherited @Documented

119

Page 120: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Built-In Annotations -@Override

Understanding Built-In Annotations that are applied to java code

Let's understand the built-in annotations first.

@Override

@Override annotation assures that the subclass method is overriding the

parent class method. If it is not so, compile time error occurs.

Sometimes, we does the silly mistake such as spelling mistakes etc. So, it

is better to mark @Override annotation that provides assurity that

method is overridden.

120

Page 121: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Example

class Animal{

void eatSomething(){System.out.println("eating something");}

}

class Dog extends Animal{

@Override

void eatsomething(){System.out.println("eating foods");}//should be eatSomething

}

class Test{

public static void main(String args[]){

Animal a=new Dog();

a.eatSomething();

}} Output: Comple Time Error

121

Page 122: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

@SuppressWarnings

@SuppressWarnings annotation: is used to suppress warnings issued by the compiler.

import java.util.*;

class Test{

@SuppressWarnings("unchecked")

public static void main(String args[]){

ArrayList list=new ArrayList();

list.add(“sonam"); list.add("vimal"); list.add("ratan");

for(Object obj:list)

System.out.println(obj); }}

Now no warning at compile time.

If you remove the @SuppressWarnings("unchecked") annotation, it will show

warning at compile time because we are using non-generic collection.

122

Page 123: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

@Deprecated

@Deprecated annoation marks that this method is deprecated so

compiler prints warning. It informs user that it may be removed in the

future versions. So, it is better not to use such methods.

class A{

void m(){System.out.println("hello m");}

@Deprecated

void n(){System.out.println("hello n");}

}

class Test{

public static void main(String args[]){

A a=new A(); a.n(); }}

123

Page 124: Core Java (Part- 1) Jun 24, 2014 By : Ghanshyam Dhomse

Questions ?

Feel Free to Contact: [email protected]

124