OOC Module 3
OOC Module 3
1. CLASSES:
Definition
A class is a template for an object, and defines the data fields and methods of the
object. The class methods provide access to manipulate the data fields. The “data fields”
of an object are often called “instance variables.”
Example Program:
class RectangleArea
{
pUBLic static void main(String args[])
{
Rectangle rect1=new Rectangle(); //object creation
rect1.getdata(10,20); //calling methods USing object with dot(.)
int area1=rect1.rectArea();
System.oUT.Println("Area1="+area1);
}
}
After defining a class, it can be used to create objects by instantiating the class.
Each object occupies some memory to hold its instance variables (i.e. its state).
After an object is created, it can be used to get the desired functionality together
with its class.
The above two statements declares an object rect1 and rect2 is of type
Rectangle class using new operator , this operator dynamically allocates
memory for an object and returns a refernce to it.in java all class objects must be
dynamically allocated.
The Constructors:
A constructor initializes an object when it is created. It has the same name as its
class and is syntactically similar to a method. However, constructors have no
explicit return type.
Typically, you will use a constructor to give initial values to the instance variables
defined by the class, or to perform any other startup procedures required to create
a fully formed object.
All classes have constructors, whether you define one or not, because Java
automatically provides a default constructor that initializes all member variables
to zero. However, once you define your own constructor, the default constructor
is no longer used.
Example:
// A simple constructor.
class MyClass
{
int x;
class ConsDemo
{
public static void main(String args[])
{
MyClass t1 = new MyClass();
MyClass t2 = new MyClass();
System.out.println(t1.x + " " + t2.x);
}
}
Parameterized Constructor:
Most often you will need a constructor that accepts one or more
parameters. Parameters are added to a constructor in the same way that
they are added to a method: just declare them inside the parentheses after
the constructor's name.
Example:
// A simple constructor.
class MyClass
{
int x;
class ConsDemo
{
public static void main(String args[])
{
MyClass t1 = new MyClass( 10 );
MyClass t2 = new MyClass( 20 );
System.out.println(t1.x + " " + t2.x);
}
}
10 20
static keyword
The static keyword is used in java mainly for memory management. We may
apply static keyword with variables, methods, blocks and nested class. The static
keyword belongs to the class than instance of the class.
static variable
class Counter
{
int count=0;//will get memory when instance is created
Counter()
{
count++;
System.out.println(count);
}
}
Class MyPgm
{
public static void main(String args[])
{
Counter c1=new Counter();
As we have mentioned above, static variable will get the memory only once, if
any object changes the value of the static variable, it will retain its value.
class Counter
{
static int count=0;//will get memory only once and retain its value
Counter()
{
count++;
System.out.println(count);
}
}
Class MyPgm
{
public static void main(String args[])
{
Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();
}
}
Output:1
2
3
static method
If you apply static keyword with any method, it is known as static method
class Calculate
{
static int cube(int x)
{
return x*x*x;
}
Class MyPgm
{
public static void main(String args[])
{
//calling a method directly with class (without creation of object) int
result=Calculate.cube(5);
System.out.println(result);
}
}
Output:125
this keyword
Output: 0 null
0 null
In the above example, parameter (formal arguments) and instance variables are same that
is why we are using this keyword to distinguish between local variable and instance
variable.
Inner class
It has access to all variables and methods of Outer class and may refer to them
directly. But the reverse is not true, that is, Outer class cannot directly access
members of Inner class.
One more important thing to notice about an Inner class is that it can be created
only within the scope of Outer class. Java compiler generates an error if any
code outside Outer class attempts to instantiate Inner class.
class Inner
{
public void show()
{
System.out.println("Inside inner");
}
}
}
class Test
{
public static void main(String[] args)
{
Outer ot=new Outer();
} ot.display();
}
Output:
Inside inner
Garbage Collection
In Java destruction of object from memory is done automatically by the JVM. When
there is no reference to an object, then that object is assumed to be no longer needed and
the memories occupied by the object are released. This technique is called Garbage
Collection. This is accomplished by the JVM.
No, the Garbage Collection cannot be forced explicitly. We may request JVM for
garbage collection by calling System.gc() method. But this does not guarantee that JVM
will perform the garbage collection.
3. Increases memory efficiency and decreases the chances for memory leak.
finalize() method
Sometime an object will need to perform some specific task before it is destroyed such as
closing an open connection or releasing any resources held. To handle such situation
finalize() method is used. finalize() method is called by garbage collection thread before
collecting object. It’s the last chance for any object to perform cleanup utility.
gc() Method
gc() method is used to call garbage collector explicitly. However gc() method does not
guarantee that JVM will perform the garbage collection. It only requests the JVM for
garbage collection. This method is present in System and Runtime class.
Output :
Garbage Collected
Inheritance:
Types of Inheritance
When a subclass is derived simply from its parent class then this mechanism is
known as simple inheritance. In case of simple inheritance there is only a sub
class and its parent class. It is also called single inheritance or one level
inheritance.
Example
class A
{
int x;
int y;
int get(int p, int q)
{
x=p;
y=q;
return(0);
}
void Show()
{
System.out.println(x);
}
}
class B extends A
{
public static void main(String args[])
{
A a = new A();
a.get(5,6);
a.Show();
}
void display()
{
System.out.println("y"); //inherited “y” from class A
}
}
The syntax for creating a subclass is simple. At the beginning of your class
declaration, use the extends keyword, followed by the name of the class to inherit
from:
class A
{
Multilevel Inheritance
When a subclass is derived from a derived class then this mechanism is known as
the multilevel inheritance.
The derived class is called the subclass or child class for it's parent class and this
parent class works as the child class for it's just above ( parent ) class.
Multilevel inheritance can go up to any number of level.
class A
{
int x;
int y;
int get(int p, int q)
{
x=p;
y=q;
return(0);
}
void Show()
{
System.out.println(x);
}
}
class B extends A
{
void Showb()
{
System.out.println("B");
}
}
class C extends B
{
void display()
{
System.out.println("C");
}
public static void main(String args[])
{
A a = new A();
a.get(5,6);
a.Show();
}
}
OUTPUT
5
Multiple Inheritance
The mechanism of inheriting the features of more than one base class into a single
class is known as multiple inheritance. Java does not support multiple inheritance
but the multiple inheritance can be achieved by using the interface.
Here you can derive a class from any number of base classes. Deriving a class
from more than one direct base class is called multiple inheritance.
super keyword
The super is java keyword. As the name suggest super is used to access the
members of the super class. It is used for two purposes in java.
The first use of keyword super is to access the hidden data variables of the super
class hidden by the sub class.
Example: Suppose class A is the super class that has two instance variables as int
a and float b. class B is the subclass that also contains its own data members named a and
b. then we can access the super class (class A) variables a and b inside the subclass class
B just by calling the following command.
super.member;
Here member can either be an instance variable or a method. This form of super
most useful to handle situations where the local members of a subclass hides the
members of a super class having the same name. The following example clarifies
all the confusions.
Example:
class A
{
int a;
float b;
void Show()
{
System.out.println("b in super class: " + b);
}
}
class B extends A
{
int a;
float b;
B( int p, float q)
{
a = p;
super.b = q;
}
void Show()
{
super.Show();
System.out.println("b in super class: " + super.b);
System.out.println("a in sub class: " + a);
}
}
class Mypgm
{
public static void main(String[] args)
{
B subobj = new B(1, 5);
subobj.Show();
}
}
OUTPUT
b in super class: 5.0
b in super class: 5.0
a in sub class: 1
Use of super to call super class constructor: The second use of the keyword super in
java is to call super class constructor in the subclass. This functionality can be achieved
just by using the following command.
super(param-list);
Here parameter list is the list of the parameter requires by the constructor in the
super class. super must be the first statement executed inside a super class
constructor. If we want to call the default constructor then we pass the empty
parameter list. The following program illustrates the use of the super keyword to
call a super class constructor.
Example:
class A
{
int a;
int b;
int c;
A(int p, int q, int r)
{
a=p;
b=q;
c=r;
}
}
class B extends A
{
int d;
B(int l, int m, int n, int o)
{
super(l,m,n);
d=o;
}
void Show()
{
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
class Mypgm
{
public static void main(String args[])
{
B b = new B(4,3,8,7);
b.Show();
}
}
OUTPUT
a=4
b=3
c=8
d=7
Method Overriding
Example:
class A
{
int i;
A(int a, int b)
{
i = a+b;
}
void add()
{
System.out.println("Sum of a and b is: " + i);
}
}
class B extends A
{
int j;
B(int a, int b, int c)
{
super(a, b);
j = a+b+c;
}
void add()
{
super.add();
System.out.println("Sum of a, b and c is: " + j);
}
}
class MethodOverriding
{
public static void main(String args[])
{
B b = new B(10, 20, 30);
b.add();
}
}
OUTPUT
Sum of a and b is: 30
Sum of a, b and c is: 60
Method Overloading
Two or more methods have the same names but different argument lists. The
arguments may differ in type or number, or both. However, the return types of
overloaded methods can be the same or different is called method overloading.
An example of the method overloading is given below:
Example:
class MethodOverloading
{
int add( int a,int b)
{
return(a+b);
}
float add(float a,float b)
{
return(a+b);
}
double add( int a, double b,double c)
{
return(a+b+c);
}
}
class MainClass
{
public static void main( String arr[] )
{
MethodOverloading mobj = new MethodOverloading ();
System.out.println(mobj.add(50,60));
System.out.println(mobj.add(3.5f,2.5f));
System.out.println(mobj.add(10,30.5,10.5));
}
}
OUTPUT
110
6.0
51.0
Abstract Class
Example Program:
}
double area()
{
System.out.println("Traingle Area");
return dim1*dim2/2;
}
}
class MyPgm
{
public static void main(String args[])
{
The final keyword in java is used to restrict the user. The final keyword can be used in
many context. Final can be:
1. variable
2. method
3. class
1) final variable: If you make any variable as final, you cannot change the value of final
variable(It will be constant).
Example:There is a final variable speedlimit, we are going to change the value of this
variable, but It can't be changed because final variable once assigned a value can never be
changed.
class Bike
{
final int speedlimit=90;//final variable
void run()
{
speedlimit=400;
}
}
Class MyPgm
{
public static void main(String args[])
{
Bike obj=new Bike();
obj.run();
}
}
Output:Compile Time Error
2) final method: If you make any method as final, you cannot override it.
Example:
class Bike
{
final void run()
{
System.out.println("running");
}
}
class Honda extends Bike
{
void run()
{
System.out.println("running safely with 100kmph");
}
}
Class MyPgm
{
public static void main(String args[])
{
Honda honda= new Honda();
honda.run();
}
}
Output:Compile Time Error
3) final class:If you make any class as final, you cannot extend it.
Example:
Class MyPgm
{
Exception handling:
Introduction
execution and disrupts the normal flow of instructions. The abnormal event can be
programming language.
Concepts of Exceptions
program.
Example: If you divide a number by zero or open a file that does not exist, an
exception is raised.
In java, exceptions can be handled either by the java run-time system or by a user-
The unexpected situations that may occur during program execution are:
1. try:
2. catch.
3. throw.
4. throws.
5. finally.
Exceptions are handled using a try-catch-finally construct, which has the Syntax.
try
{
<code>
}
catch (<exception type1> <parameter1>)
{
// 0 or more<statements>
}
finally
{
// finally block<statements>
}
1. try Block: The java code that you think may produce an exception is placed
within a try block for a suitable catch block to handle the error.
If no exception occurs the execution proceeds with the finally block else it will
look for the matching catch block to handle the error.
Again if the matching catch handler is not found execution proceeds with the
finally block and the default exception handler throws an exception.
2. catch Block: Exceptions thrown during execution of the try block can be caught and
handled in a catch block. On exit from a catch block, normal execution continues and the
finally block is executed (Though the catch block throws an exception).
3. finally Block: A finally block is always executed, regardless of the cause of exit from
the try block, or whether any catch block was executed. Generally finally block is used
for freeing resources, cleaning up, closing connections etc.
Example:
The following is an array is declared with 2 elements. Then the code tries to access the
A try block can be followed by multiple catch blocks. The syntax for multiple catch blocks
looks like the following:
try
{
// code
}
catch(ExceptionType1 e1)
{
//Catch block
}
catch(ExceptionType2 e2)
{
//Catch block
}
catch(ExceptionType3 e3)
{
//Catch block
}
The previous statements demonstrate three catch blocks, but you can have any
number of them after a single try.
class Multi_Catch
{
public static void main (String args [])
{
try
{
int a=args.length;
System.out.println(“a=”+a);
int b=50/a;
int c[]={1}
}
catch (ArithmeticException e)
{
System.out.println ("Division by zero");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println (" array index out of bound");
}
}
}
OUTPUT
Division by zero
array index out of bound
Just like the multiple catch blocks, we can also have multiple try blocks. These try
blocks may be written independently or we can nest the try blocks within each
other, i.e., keep one try-catch block within another try-block. The program
structure for nested try statement is:
Syntax
try
{
// statements
// statements
try
{
// statements
// statements
}
catch (<exception_two> obj)
{
// statements
}
// statements
// statements
}
catch (<exception_two> obj)
{
// statements
}
Consider the following example in which you are accepting two numbers from the
command line. After that, the command line arguments, which are in the string
format, are converted to integers.
If the numbers were not received properly in a number format, then during the
conversion a NumberFormatException is raised otherwise the control goes to the
next try block. Inside this second try-catch block the first number is divided by the
second number, and during the calculation if there is any arithmetic error, it is
caught by the inner catch block.
Example
class Nested_Try
{
public static void main (String args [ ] )
{
try
{
int a = Integer.parseInt (args [0]);
int b = Integer.parseInt (args [1]);
int quot = 0;
try
{
quot = a / b;
System.out.println(quot);
}
catch (ArithmeticException e)
{
System.out.println("divide by zero");
}
}
catch (NumberFormatException e)
{
System.out.println ("Incorrect argument type");
}
}
}
The output of the program is: If the arguments are entered properly in the command
prompt like:
OUTPUT
java Nested_Try 2 4 6
4
OUTPUT
java Nested_Try 2 4 aa
Incorrect argument type
OUTPUT
java Nested_Try 2 4 0
divide by zero
throw Keyword
new NullPointerException("test");
class Test
{
static void avg()
{
try
{
throw new ArithmeticException("demo");
}
catch(ArithmeticException e)
{
System.out.println("Exception caught");
}
}
public static void main(String args[])
{
avg();
}
}
In the above example the avg() method throw an instance of ArithmeticException, which is
successfully handled using the catch statement.
throws Keyword
Any method capable of causing exceptions must list all the exceptions possible
during its execution, so that anyone calling that method gets a prior knowledge
about which exceptions to handle. A method can do so by using the throws
keyword.
Syntax :
NOTE : It is necessary for all exceptions, except the exceptions of type Error and
RuntimeException, or any of their subclass.
Example demonstrating throws Keyword
class Test
{
static void check() throws ArithmeticException
{
System.out.println("Inside check function");
throw new ArithmeticException("demo");
}
finally
The finally clause is written with the try-catch statement. It is guaranteed to be
executed after a catch block or before the method quits.
Syntax
try
{
// statements
}
Take a look at the following example which has a catch and a finally block. The
catch block catches the ArithmeticException which occurs for arithmetic error
like divide-by-zero. After executing the catch block the finally is also executed
and you get the output for both the blocks.
Example:
class Finally_Block
{
static void division ( )
{
try
{
int num = 34, den = 0;
int quot = num / den;
}
catch(ArithmeticException e)
{
System.out.println ("Divide by zero");
}
finally
{
System.out.println ("In the finally block");
}
}
class Mypgm
{
public static void main(String args[])
{
OUTPUT
Divide by zero
In the finally block
Java defines several exception classes inside the standard package java.lang.
The most general of these exceptions are subclasses of the standard type
RuntimeException. Since java.lang is implicitly imported into all Java
programs, most exceptions derived from RuntimeException are automatically
available.
Java defines several other types of exceptions that relate to its various class libraries.
Following is the list of Java Unchecked RuntimeException.
Exception Description
ArithmeticException Arithmetic error, such as divide-by-zero.
ArrayIndexOutOfBoundsException Array index is out-of-bounds.
Assignment to an array element of an
ArrayStoreException
incompatible type.
Exception Description
ClassNotFoundException Class not found.
Attempt to clone an object that does not implement the
CloneNotSupportedException
Cloneable interface.
Here you can also define your own exception classes by extending Exception.
These exception can represents specific runtime condition of course you will have
to throw them yourself, but once thrown they will behave just like ordinary
exceptions.
When you define your own exception classes, choose the ancestor carefully. Most
custom exception will be part of the official design and thus checked, meaning
that they extend Exception but not RuntimeException.
return msg;
}
}
class test
{
public static void main(String args[])
{
test t = new test();
t.dd();
}
public void add()
{
try
{
int i=0;
if( i<40)
throw new MyException();
}
catch(MyException ee1)
{
System.out.println("Result:"+ee1);
}
}
}
OUTPUT
Result: You have Passed
Chained Exception
Chained exceptions are the exceptions which occur one after another i.e. most of
the time to response to an exception are given by an application by throwing
another exception.
Whenever in a program the first exception causes an another exception, that is
termed as Chained Exception. Java provides new functionality for chaining
exceptions.
Exception chaining (also known as "nesting exception") is a technique for
handling the exception, which occur one after another i.e. most of the time
Throwable initCause(Throwable)
Throwable(Throwable)
Throwable(String, Throwable)
Throwable getCause()