Java Tutorial
Java Tutorial
Java Tutorial
Java runs on a variety of platforms, such as Windows, Mac OS, and the various
versions of UNIX.
Java Overview
Java programming language was originally developed by Sun Microsystems, which was
initiated by James Gosling and released in 1995 as core component of Sun
Microsystems.s Java platform (Java 1.0 [J2SE]).
As of December 08 the latest release of the Java Standard Edition is 6 (J2SE). With the
advancement of Java and its wide spread popularity, multiple configurations were built to
suite various types of platforms. Ex: J2EE for Enterprise Applications, J2ME for Mobile
Applications.
Sun Microsystems has renamed the new J2 versions as Java SE, Java EE and Java ME
respectively. Java is guaranteed to be Write Once, Run Anywhere
Java is:
History of Java:
James Gosling initiated the Java language project in June 1991 for use in one of his many
set-top box projects. The language, initially called Oak after an oak tree that stood outside
Gosling's office, also went by the name Green and ended up later renamed as Java, from a
list of random words.
Sun released the first public implementation as Java 1.0 in 1995. It promised Write
Once, Run Anywhere (WORA), providing no-cost run-times on popular platforms.
On 13 November 2006, Sun released much of Java as free and open source software
under the terms of the GNU General Public License (GPL).
On 8 May 2007 Sun finished the process, making all of Java's core code free and open-
source, aside from a small portion of code to which Sun did not hold the copyright.
This tutorial will provide the necessary skills to create GUI, networking, and Web
applications using Java.
What is Next ?
Next chapter will guide you to where you can obtain Java and its documentation. Finally,
it instructs you on how to install Java and prepare an environment to develop Java
applications.
Java SE is freely available from the link Download Java. So you download a version
based on your operating system.
Follow the instructions to download java and run the .exe to install Java on your machine.
Once you installed Java on your machine, you would need to set environment variables to
point to correct installation directories:
• Edit the 'C:\autoexec.bat' file and add the following line at the end:
'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'
Setting up the path for Linux, UNIX, Solaris, FreeBSD:
Environment variable PATH should be set to point to where the java binaries have been
installed. Refer to your shell documentation if you have trouble doing this.
Example, if you use bash as your shell, then you would add the following line to the end
of your '.bashrc: export PATH=/path/to/java:$PATH'
• Notepad : On Windows machine you can use any simple text editor like Notepad
(Recommended for this tutorial), TextPad.
• Netbeans :is a Java IDE that is open source and free which can be downloaded
from http://www.netbeans.org/index.html.
• Eclipse : is also a java IDE developed by the eclipse open source community and
can be downloaded from http://www.eclipse.org/.
What is Next ?
Next chapter will teach you how to write and run your first java program and some of the
important basic syntaxes in java needed for developing applications.
• Object - Objects have states and behaviors. Example: A dog has states-color,
name, breed as well as behaviors -wagging, barking, eating. An object is an
instance of a class.
• Class - A class can be defined as a template/ blue print that describe the
behaviors/states that object of its type support.
• Methods - A method is basically a behavior. A class can contain many methods.
It is in methods where the logics are written, data is manipulated and all the
actions are executed.
• Instant Variables - Each object has its unique set of instant variables. An object.s
state is created by the values assigned to these instant variables.
First Java Program:
Let us look at a simple code that would print the words Hello World.
Lets look at how to save the file, compile and run the program. Please follow the steps
given below:
Basic Syntax:
About Java programs, it is very important to keep in mind the following points.
• Case Sensitivity - Java is case sensitive which means identifier Hello and hello
would have different meaning in Java.
• Class Names - For all class names the first letter should be in Upper Case.
If several words are used to form a name of the class each inner words first letter
should be in Upper Case.
When saving the file you should save it using the class name (Remember java is
case sensitive) and append '.java' to the end of the name. (if the file name and the
class name do not match your program will not compile).
Example : Assume 'MyFirstJavaProgram' is the class name. Then the file should
be saved as 'MyFirstJavaProgram.java'
• public static void main(String args[]) - java program processing starts from the
main() method which is a mandatory part of every java program..
Java Identifiers:
All java components require names. Names used for classes, variables and methods are
called identifiers.
In java there are several points to remember about identifiers. They are as follows:
Java Modifiers:
Like other languages it is possible to modify classes, methods etc by using modifiers.
There are two categories of modifiers.
We will be looking into more details about modifiers in the next section.
Java Variables:
We would see following type of variables in Java:
• Local Variables
• Class Variables (Static Variables)
• Instance Variables (Non static variables)
Java Arrays:
Arrays are objects that store multiple variables of the same type. However an Array itself
is an object on the heap. We will look into how to declare, construct and initialize in the
upcoming chapters.
Java Enums:
Enums were introduced in java 5.0. Enums restrict a variable to have one of only a few
predefined values. The values in this enumerated list are called enums.
With the use of enums it is possible to reduce the number of bugs in your code.
For example if we consider an application for a fresh juice shop it would be possible to
restrict the glass size to small, medium and Large. This would make sure that it would not
allow anyone to order any size other than the small, medium or large.
Example:
class FreshJuice{
enum FreshJuiceSize{ SIZE, MEDUIM, LARGE }
FreshJuiceSize size;
}
Note: enums can be declared as their own or inside a class. Methods, variables,
constructors can be defined inside enums as well.
Java Keywords:
The following list shows the reserved words in Java. These reserved words may not be
used as constant or variable or any other identifier names.
abstract assert boolean break
byte case catch char
class const continue default
do double else enum
extends final finally float
for goto if implements
import instanceof int interface
long native new package
private protected public return
short static strictfp super
switch synchronized this throw
throws transient try void
volatile while
Comments in Java
Java supports single line and multi-line comments very similar to c and c++. All
characters available inside any comment are ignored by Java compiler.
Inheritance:
In java classes can be derived from classes. Basically if you need to create a new class
and here is already a class that has some of the code you require, then it is possible to
derive your new class from the already existing code.
This concept allows you to reuse the fields and methods of the existing class with out
having to rewrite the code in a new class. In this scenario the existing class is called the
super class and the derived class is called the subclass.
Interfaces:
In Java language an interface can be defined as a contract between objects on how to
communicate with each other. Interfaces play a vital role when it comes to the concept of
inheritance.
An interface defines the methods, a deriving class(subclass) should use. But the
implementation of the methods is totally up to the subclass.
What is Next ?
The next section explains about Objects and classes in Java programming. At the end of
the session you will be able to get a clear picture as to what are objects and what are
classes in java.
• Polymorphism
• Inheritance
• Encapsulation
• Abstraction
• Classes
• Objects
• Instance
• Method
• Message Parsing
In this chapter we will look into the concepts Classes and Objects.
• Object - Objects have states and behaviors. Example: A dog has states-color,
name, breed as well as behaviors -wagging, barking, eating. An object is an
instance of a class.
• Class - A class can be defined as a template/ blue print that describe the
behaviors/states that object of its type support.
Objects in Java:
Let us now look deep into what are objects. If we consider the real-world we can find
many objects around us, Cars, Dogs, Humans etc. All these objects have a state and
behavior.
If we consider a dog then its state is . name, breed, color, and the behavior is . barking,
wagging, running
If you compare the software object with a real world object, they have very similar
characteristics.
Software objects also have a state and behavior. A software object's state is stored in
fields and behavior is shown via methods.
So in software development methods operate on the internal state of an object and the
object-to-object communication is done via methods.
Classes in Java:
A class is a blue print from which individual objects are created.
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
A class can contain any of the following variable types.
A class can have any number of methods to access the value of various kind of methods.
In the above example, barking(), hungry() and sleeping() are variables.
Below mentioned are some of the important topics that need to be discussed when
looking into classes of the Java Language.
Constructors:
When discussing about classes one of the most important sub topic would be
constructors. Every class has a constructor. If we do not explicitly write a constructor for
a class the java compiler builds a default constructor for that class.
Each time a new object is created at least one constructor will be invoked. The main rule
of constructors is that they should have the same name as the class. A class can have
more than one constructor.
class Puppy{
public puppy(){
}
Java also supports Singleton Classes where you would be able to create only one instance
of a class.
Creating an Object:
As mentioned previously a class provides the blueprints for objects. So basically an
object is created from a class. In java the new key word is used to create new objects.
class Puppy{
public Puppy(String name){
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
public static void main(String []args){
// Following statement would create an object myPuppy
Puppy myPuppy = new Puppy( "tommy" );
}
}
If we compile and run the above program then it would produce following result:
Example:
This example explains how to access instance variables and methods of a class:
class Puppy{
int puppyAge;
public getAge( ){
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args){
/* Object creation */
Puppy myPuppy = new Puppy( "tommy" );
If we compile and run the above program then it would produce following result:
Classes have several access levels and there are different types of classes; abstract
classes, final classes etc. I will be explaining about all these in the access modifiers
chapter.
Apart from the above mentioned types of classes, Java also has some special classes
called Inner classes and Anonymous classes.
Java Package:
Import statements:
In java if a fully qualified name, which includes the package and the class name, is given
then the compiler can easily locate the source code or classes. Import statement is a way
of giving the proper location for the compiler to find that particular class.
For example following line would ask compiler to load all the classes available in
directory java_installation/java/io :
import java.io.*;
First open notepad and add the following code. Remember this is the Employee class and
the class is a public class. Now save this source file with the name Employee.java.
The Employee class has four class variables name, age, designation and salary. The class
has one explicitly defined constructor which takes a parameter.
import java.io.*;
public class Employee{
String name;
int age;
String designation;
double salary;
As mentioned previously in this tutorial processing starts from the main method.
Therefore in-order for us to run this Employee class there should be main method and
objects should be created. We will be creating a separate class for these tasks.
Given below is the EmployeeTest class which creates two instances of the class
Employee and invokes the methods for each object to assign values for each variable.
import java.io.*;
public class EmployeeTest{
public static void main(String args[]){
/* Create two objects using constructor */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
Now compile both the classes and then run EmployeeTest to see the result as follows:
What is Next ?
Next session will discuss basic data types in java and how they can be used when
developing java applications.
Based on the data type of a variable, the operating system allocates memory and decides
what can be stored in the reserved memory. Therefore, by assigning different data types
to variables, you can store integers, decimals, or characters in these variables.
short:
int:
long:
float:
double:
boolean:
char:
Java Literals:
A literal is a source code representation of a fixed value. They are represented directly in
the code without any computation.
byte, int, long, and short can be expressed in decimal(base 10),hexadecimal(base 16) or
octal(base 8) number systems as well.
Prefix 0 is used to indicates octal and prefix 0x indicates hexadecimal when using these
number systems for literals. For example:
String literals in Java are specified like they are in most other languages by enclosing a
sequence of characters between a pair of double quotes. Examples of string literals are:
"Hello World"
"two\nlines"
"\"This is in quotes\""
String and char types of literals can contain any Unicode characters. For example:
char a = '\u0001';
String a = "\u0001";
Java language supports few special escape sequences for String and char literals as well.
They are:
What is Next ?
This chapter explained you various data types, Next topic explains different variable
types and their usage. This will give you a good understanding about how they can be
used in the java classes, interfaces etc.
The type is one of Java's datatypes. The identifier is the name of the variable. To declare
more than one variable of the specified type, use a comma-separated list.
Here are several examples of variable declarations of various types. Note that some
include an initialization.
This chapter will explain varioys variable types available in Java Language. There are
three kinds of variables in Java:
1. Local variables
2. Instance variables
3. Class/static variables
Local variables :
• Local variables are declared in methods, constructors, or blocks.
• Local variables are created when the method, constructor or block is entered and
the variable will be destroyed once it exits the method, constructor or block.
• Access modifiers cannot be used for local variables.
• Local variables are visible only within the declared method, constructor or block.
• Local variables are implemented at stack level internally.
• There is no default value for local variables so local variables should be declared
and an initial value should be assigned before the first use.
Example:
Here age is a local variable. This is defined inside pupAge() method and its scope is
limited to this method only.
Example:
Following example uses age without initializing it, so it would give an error at the time of
compilation.
Instance variables :
• Instance variables are declared in a class, but outside a method, constructor or any
block.
• When a space is allocated for an object in the heap a slot for each instance
variable value is created.
• Instance variables are created when an object is created with the use of the key
word 'new' and destroyed when the object is destroyed.
• Instance variables hold values that must be referenced by more than one method,
constructor or block, or essential parts of an object.s state that must be present
through out the class.
• Instance variables can be declared in class level before or after use.
• Access modifiers can be given for instance variables.
• The instance variables are visible for all methods, constructors and block in the
class. Normally it is recommended to make these variables private (access
level).However visibility for subclasses can be given for these variables with the
use of access modifiers.
• Instance variables have default values. For numbers the default value is 0, for
Booleans it is false and for object references it is null. Values can be assigned
during the declaration or within the constructor.
• Instance variables can be accessed directly by calling the variable name inside the
class. However within static methods and different class ( when instance variables
are given accessibility) the should be called using the fully qualified name .
ObjectReference.VariableName.
Example:
import java.io.*;
class Employee{
// this instance variable is visible for any child class.
public String name;
name : Ransika
salary :1000.0
Class/static variables :
• Class variables also known as static variables are declared with the static keyword
in a class, but outside a method, constructor or a block.
• There would only be one copy of each class variable per class, regardless of how
many objects are created from it.
• Static variables are rarely used other than being declared as constants. Constants
are variables that are declared as public/private, final and static. Constant
variables never change from their initial value.
• Static variables are stored in static memory. It is rare to use static variables other
than declared final and used as either public or private constants.
• Static variables are created when the program starts and destroyed when the
program stops.
• Visibility is similar to instance variables. However, most static variables are
declared public since they must be available for users of the class.
• Default values are same as instance variables. For numbers the default value is 0,
for Booleans it is false and for object references it is null. Values can be assigned
during the declaration or within the constructor. Additionally values can be
assigned in special static initializer blocks.
• Static variables can be accessed by calling with the class name .
ClassName.VariableName.
• When declaring class variables as public static final, then variables names
(constants) are all in upper case. If the static variables are not public and final the
naming syntax is the same as instance and local variables.
Example:
import java.io.*;
class Employee{
// salary variable is a private static variable
private static double salary;
// DEPARTMENT is a constant
public static final String DEPARTMENT = "Development";
Note: If the variables are access from an outside class the constant should be accessed as
Employee.DEPARTMENT
What is Next ?
You already have used access modifiers ( public & private ) in this chapter. The next
chapter will explain you Access Modifiers and Non Access Modifiers in detail.
To use a modifier, you include its keyword in the definition of a class, method, or
variable. The modifier precedes the rest of the statement, as in the following examples
(Italic ones):
What is Next ?
In the next section I will be discussing about Basic Operators used in the Java Language.
The chapter will give you an overview of how these operators can be used during
application development.
• Arithmetic Operators
• Relational Operators
• Bitwise Operators
• Logical Operators
• Assignment Operators
• Misc Operators
Show Examples
Show Examples
Bitwise operator works on bits and perform bit by bit operation. Assume if a = 60; and b
= 13; Now in binary format they will be as follows:
a = 0011 1100
b = 0000 1101
-----------------
~a = 1100 0011
Assume boolean variables A holds true and variable B holds false then:
Show Examples
Show Examples
Misc Operators
There are few other operators supported by Java Language.
Conditional Operator ( ? : ):
Conditional operator is also known as the ternary operator. This operator consists of three
operands and is used to evaluate boolean expressions. The goal of the operator is to
decide which value should be assigned to the variable. The operator is written as :
instanceOf Operator:
This operator is used only for object reference variables. The operator checks whether the
object is of a particular type(class type or interface type). instanceOf operator is wriiten
as:
If the object referred by the variable on the left side of the operator passes the IS-A check
for the class/interface type on the right side then the result will be true. Following is the
example:
This operator will still return true if the object being compared is the assignment
compatible with the type on the right. Following is one more example:
class Vehicle {}
true
For example x = 7 + 3 * 2; Here x is assigned 13, not 20 because operator * has higher
precedenace than + so it first get multiplied with 3*2 and then adds into 7.
Here operators with the highest precedence appear at the top of the table, those with the
lowest appear at the bottom. Within an expression, higher precedenace operators will be
evaluated first.
What is Next ?
Next chapter would explain about loop control in Java programming. The chapter will
describe various types of loops and how these loops can be used in Java program
development and for what purposes they are being used.
• while Loop
• do...while Loop
• for Loop
As of java 5 the enhanced for loop was introduced. This is mainly used for Arrays.
Syntax:
while(Boolean_expression)
{
//Statements
}
When executing, if the boolean_expression result is true then the actions inside the loop
will be executed. This will continue as long as the expression result is true.
Here key point of the while loop is that the loop might not ever run. When the expression
is tested and the result is false, the loop body will be skipped and the first statement after
the while loop will be executed.
Example:
public class Test {
public static void main(String args[]){
int x= 10;
while( x < 20 ){
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}
}
}
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19
Syntax:
do
{
//Statements
}while(Boolean_expression);
Notice that the Boolean expression appears at the end of the loop, so the statements in the
loop execute once before the Boolean is tested.
If the Boolean expression is true, the flow of control jumps back up to do, and the
statements in the loop execute again. This process repeats until the Boolean expression is
false.
Example:
public class Test {
public static void main(String args[]){
int x= 10;
do{
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19
A for loop is useful when you know how many times a task is to be repeated.
Syntax:
1. The initialization step is executed first, and only once. This step allows you to
declare and initialize any loop control variables. You are not required to put a
statement here, as long as a semicolon appears.
2. Next, the Boolean expression is evaluated. If it is true, the body of the loop is
executed. If it is false, the body of the loop does not execute and flow of control
jumps to the next statement past the for loop.
3. After the body of the for loop executes, the flow of control jumps back up to the
update statement. This statement allows you to update any loop control variables.
This statement can be left blank, as long as a semicolon appears after the Boolean
expression.
4. The Boolean expression is now evaluated again. If it is true, the loop executes and
the process repeats itself (body of loop, then update step,then Boolean
expression). After the Boolean expression is false, the for loop terminates.
Example:
public class Test {
public static void main(String args[]){
for(int x = 10; x < 20; x = x+1){
System.out.print("value of x : " + x );
System.out.print("\n");
}
}
}
value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19
Syntax:
for(declaration : expression)
{
//Statements
}
Example:
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}
10,20,30,40,50,
James,Larry,Tom,Lacy,
The break keyword will stop the execution of the innermost loop and start executing the
next line of code after the block.
Syntax:
break;
Example:
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
if( x == 30 ){
break;
}
System.out.print( x );
System.out.print("\n");
}
}
}
10
20
The continue Keyword:
The continue keyword can be used in any of the loop control structures. It causes the loop
to immediately jump to the next iteration of the loop.
• In a for loop, the continue keyword causes flow of control to immediately jump to
the update statement.
• In a while loop or do/while loop, flow of control immediately jumps to the
Boolean expression.
Syntax:
continue;
Example:
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
if( x == 30 ){
continue;
}
System.out.print( x );
System.out.print("\n");
}
}
}
10
20
40
50
What is Next ?
In the following chapter we will be learning about decision making statements in Java
programming.
• if statements
• switch statements
The if Statement:
An if statement consists of a Boolean expression followed by one or more statements.
Syntax:
if(Boolean_expression)
{
//Statements will execute if the Boolean expression is true
}
If the boolean expression evaluates to true then the block of code inside the if statement
will be executed. If not the first set of code after the end of the if statement(after the
closing curly brace) will be executed.
Example:
public class Test {
public static void main(String args[]){
int x = 10;
if( x < 20 ){
System.out.print("This is if statement");
}
}
}
This is if statement
if(Boolean_expression){
//Executes when the Boolean expression is true
}else{
//Executes when the Boolean expression is false
}
Example:
public class Test {
public static void main(String args[]){
int x = 30;
if( x < 20 ){
System.out.print("This is if statement");
}else{
System.out.print("This is else statement");
}
}
}
Syntax:
if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
}else if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}else if(Boolean_expression 3){
//Executes when the Boolean expression 3 is true
}else {
//Executes when the none of the above condition is true.
}
Example:
public class Test {
public static void main(String args[]){
int x = 30;
if( x == 10 ){
System.out.print("Value of X is 10");
}else if( x == 20 ){
System.out.print("Value of X is 20");
}else if( x == 30 ){
System.out.print("Value of X is 30");
}else{
System.out.print("This is else statement");
}
}
}
Value of X is 30
• An if can have zero or one else's and it must come after any else if's.
• An if can have zero to many else if's and they must come before the else.
• Once an else if succeeds, none of he remaining else if's or else's will be tested.
Syntax:
if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}
}
You can nest else if...else in the similar way as we have nested if statement.
Example:
public class Test {
public static void main(String args[]){
int x = 30;
int y = 10;
if( x == 30 ){
if( y == 10 ){
System.out.print("X = 30 and Y = 10");
}
}
}
X = 30 and Y = 10
Syntax:
switch(expression){
case value :
//Statements
break; //optional
case value :
//Statements
break; //optional
//You can have any number of case statements.
default : //Optional
//Statements
}
• The variable used in a switch statement can only be a byte, short, int, or char.
• You can have any number of case statements within a switch. Each case is
followed by the value to be compared to and a colon.
• The value for a case must be the same data type as the variable in the switch, and
it must be a constant or a literal.
• When the variable being switched on is equal to a case, the statements following
that case will execute until a break statement is reached.
• When a break statement is reached, the switch terminates, and the flow of control
jumps to the next line following the switch statement.
• Not every case needs to contain a break. If no break appears, the flow of control
will fall through to subsequent cases until a break is reached.
• A switch statement can have an optional default case, which must appear at the
end of the switch. The default case can be used for performing a task when none
of the cases is true. No break is needed in the default case.
Example:
public class Test {
public static void main(String args[]){
char grade = args[0].charAt(0);
switch(grade)
{
case 'A' :
System.out.println("Excellent!");
break;
case 'B' :
case 'C' :
System.out.println("Well done");
break;
case 'D' :
System.out.println("You passed");
case 'F' :
System.out.println("Better try again");
break;
default :
System.out.println("Invalid grade");
}
System.out.println("Your grade is " + grade);
}
}
Compile and run above program using various command line arguments. This would
produce following result:
$ java Test a
Invalid grade
Your grade is a a
$ java Test A
Excellent!
Your grade is a A
$ java Test C
Well done
Your grade is a C
$
What is Next ?
Next chapter discuses about the Number class (in the java.lang package) and its
subclasses in Java Language.
We will be looking into some of the situations where you would use instantiations of
these classes rather than the primitive data types, as well as classes such as formatting,
mathematical functions that you need to know about when working with Numbers.
Example:
int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;
However in development we come across situations were we need to use objects instead
of primitive data types. In-order to achieve this Java provides wrapper classes for each
primitive data type.
All the wrapper classes ( Integer, Long, Byte, Double, Float, Short) are subclasses of the
abstract class Number.
This wrapping is taken care of by the compiler The process is called boxing. So when a
primitive is used when an object is required the compiler boxes the primitive type in its
wrapper class. Similarly the compiler unboxes the object to a primitive as well. The
Number is part of the java.lang package.
When x is assigned integer values, the compiler boxes the integer because x is integer
objects. Later, x is unboxed so that they can be added as integers.
Number Methods:
Here is the list of the instance methods that all the subclasses of the Number class
implement:
In the next section we will be going through the Character class in Java. You will be
learning how to use object Characters and primitive data type char in Java.
Example:
char ch = 'a';
// an array of chars
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
However in development we come across situations were we need to use objects instead
of primitive data types. In-order to achieve this Java provides wrapper classe Character
for primitive data type char.
The Character class offers a number of useful class (i.e., static) methods for manipulating
characters. You can create a Character object with the Character constructor:
The Java compiler will also create a Character object for you under some circumstances.
For example, if you pass a primitive char into a method that expects an object, the
compiler automatically converts the char to a Character for you. This feature is called
autoboxing or unboxing, if the conversion goes the other way.
Example:
// Here following primitive char 'a'
// is boxed into the Character object ch
Character ch = 'a';
Escape Sequences:
A character preceded by a backslash (\) is an escape sequence and has special meaning to
the compiler.
The newline character (\n) has been used frequently in this tutorial in System.out.println()
statements to advance to the next line after the string is printed.
Example:
If you want to put quotes within quotes you must use the escape sequence, \", on the
interior quotes:
Character Methods:
Here is the list of the important instance methods that all the subclasses of the Character
class implement:
For a complete list of methods, please refer to the java.lang.Character API specification.
What is Next ?
In the next section we will be going through the String class in Java. You will be learning
how to declare and use Strings efficiently as well as some of the important methods in the
String class.
The Java platform provides the String class to create and manipulate strings.
Creating Strings:
The most direct way to create a string is to write:
Whenever it encounters a string literal in your code, the compiler creates a String object
with its valuein this case, "Hello world!'.
As with any other object, you can create String objects by using the new keyword and a
constructor. The String class has eleven constructors that allow you to provide the initial
value of the string using different sources, such as an array of characters:
hello
Note: The String class is immutable, so that once it is created a String object cannot be
changed. If there is a necessity to make alot of modifications to Strings of characters then
you should use String Buffer & String Builder Classes.
String Length:
Methods used to obtain information about an object are known as accessor methods. One
accessor method that you can use with strings is the length() method, which returns the
number of characters contained in the string object.
After the following two lines of code have been executed, len equals 17:
String Length is : 17
Concatenating Strings:
The String class includes a method for concatenating two strings:
string1.concat(string2);
This returns a new string that is string1 with string2 added to it at the end. You can also
use the concat() method with string literals, as in:
"Hello, world!"
String fs;
fs = String.format("The value of the float variable is " +
"%f, while the value of the integer " +
"variable is %d, and the string " +
"is %s", floatVar, intVar, stringVar);
System.out.println(fs);
String Methods:
Here is the list methods supported by String class:
Java - Arrays
Java provides a data structure, the array, which stores a fixed-size sequential collection
of elements of the same type. An array is used to store a collection of data, but it is often
more useful to think of an array as a collection of variables of the same type.
Instead of declaring individual variables, such as number0, number1, ..., and number99,
you declare one array variable such as numbers and use numbers[0], numbers[1], and ...,
numbers[99] to represent individual variables.
This tutorial introduces how to declare array variables, create arrays, and process arrays
using indexed variables.
or
Example:
or
Creating Arrays:
You can create an array by using the new operator with the following syntax:
Declaring an array variable, creating an array, and assigning the reference of the array to
the variable can be combined in one statement, as shown below:
Example:
Following picture represents array myList. Here myList holds ten double values and the
indices are from 0 to 9.
Processing Arrays:
When processing array elements, we often use either for loop or foreach loop because all
of the elements in an array are of the same type and the size of the array is known.
Example:
Here is a complete example of showing how to create, initialize and process arrays:
1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
Example:
The following code displays all the elements in the array myList:
1.9
2.9
3.4
3.5
Passing Arrays to Methods:
Just as you can pass primitive type values to methods, you can also pass arrays to
methods. For example, the following method displays the elements in an int array:
You can invoke it by passing an array. For example, the following statement invokes the
printArray method to display 3, 1, 2, 6, 4, and 2:
The Date class supports two constructors. The first constructor initializes the object with
the current date and time.
Date( )
The following constructor accepts one argument that equals the number of milliseconds
that have elapsed since midnight, January 1, 1970
Date(long millisec)
Once you have a Date object available, you can call any of the following support methods
to play with dates:
import java.util.Date;
class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
Date Comparison:
There are following three ways to compare two dates:
• You can use getTime( ) to obtain the number of milliseconds that have elapsed
since midnight, January 1, 1970, for both objects and then compare these two
values.
• You can use the methods before( ), after( ), and equals( ). Because the 12th of the
month comes before the 18th, for example, new Date(99, 2, 12).before(new Date
(99, 2, 18)) returns true.
• You can use the compareTo( ) method, which is defined by the Comparable
interface and implemented by Date.
import java.util.*;
import java.text.*;
class DateDemo {
public static void main(String args[]) {
To specify the time format use a time pattern string. In this pattern, all ASCII letters are
reserved as pattern letters, which are defined as the following:
Character Description Example
G Era designator AD
y Year in four digits 2001
M Month in year July or 07
d Day in month 10
h Hour in A.M./P.M. (1~12) 12
H Hour in day (0~23) 22
m Minute in hour 30
s Second in minute 55
S Millisecond 234
E Day in week Tuesday
D Day in year 360
F Day of week in month 2 (second Wed. in July)
w Week in year 40
W Week in month 1
a A.M./P.M. marker PM
k Hour in day (1~24) 24
K Hour in A.M./P.M. (0~11) 10
z Time zone Eastern Standard Time
' Escape for text Delimiter
" Single quote `
import java.util.Date;
class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
It would be a bit silly if you had to supply the date multiple times to format each part. For
that reason, a format string can indicate the index of the argument to be formatted.
The index must immediately follow the %, and it must be terminated by a $. For
example:
import java.util.Date;
class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
Alternatively, you can use the < flag. It indicates that the same argument as in the
preceding format specification should be used again. For example:
import java.util.Date;
class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
There are other useful classes related to Date and time. For more detail you can refer to
Java Standard documentation.
class DateDemo {
public static void main(String args[]) {
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + formatter);
}
}
}
$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
import java.util.*;
class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
import java.util.*;
class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Difference is : 5993
GregorianCalendar Class:
GregorianCalendar is a concrete implementation of a Calendar class that implements the
normal Gregorian calendar with which you are familiar. I did not discuss Calender class
in this tutorial, you can look standard Java documentation for this.
Here is the list of few useful support methods provided by GregorianCalendar class:
Example:
import java.util.*;
class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"};
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
GregorianCalendar gcalendar = new GregorianCalendar();
// Display current time and date information.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
For a complete list of constant available in Calender class, you can refer to standard Java
documentation.
A regular expression is a special sequence of characters that helps you match or find
other strings or sets of strings, using a specialized syntax held in a pattern. They can be
used to search, edit, or manipulate text and data.
Capturing Groups:
Capturing groups are a way to treat multiple characters as a single unit. They are created
by placing the characters to be grouped inside a set of parentheses. For example, the
regular expression (dog) creates a single group containing the letters "d", "o", and "g".
Capturing groups are numbered by counting their opening parentheses from left to right.
In the expression ((A)(B(C))), for example, there are four such groups:
1. ((A)(B(C)))
2. (A)
3. (B(C))
4. (C)
To find out how many groups are present in the expression, call the groupCount method
on a matcher object. The groupCount method returns an int showing the number of
capturing groups present in the matcher's pattern.
There is also a special group, group 0, which always represents the entire expression.
This group is not included in the total reported by groupCount.
Example:
Following example illustrate how to find a digit string from the given alphanumeric
string:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Subexpression Matches
^ Matches beginning of line.
$ Matches end of line.
Matches any single character except newline. Using m option
.
allows it to match newline as well.
[...] Matches any single character in brackets.
[^...] Matches any single character not in brackets
\A Beginning of entire string
\z End of entire string
\Z End of entire string except allowable final line terminator.
re* Matches 0 or more occurrences of preceding expression.
re+ Matches 1 or more of the previous thing
re? Matches 0 or 1 occurrence of preceding expression.
re{ n} Matches exactly n number of occurrences of preceding expression.
re{ n,} Matches n or more occurrences of preceding expression.
Matches at least n and at most m occurrences of preceding
re{ n, m}
expression.
a| b Matches either a or b.
(re) Groups regular expressions and remembers matched text.
(?: re) Groups regular expressions without remembering matched text.
(?> re) Matches independent pattern without backtracking.
\w Matches word characters.
\W Matches nonword characters.
\s Matches whitespace. Equivalent to [\t\n\r\f].
\S Matches nonwhitespace.
\d Matches digits. Equivalent to [0-9].
\D Matches nondigits.
\A Matches beginning of string.
Matches end of string. If a newline exists, it matches just before
\Z
newline.
\z Matches end of string.
\G Matches point where last match finished.
\n Back-reference to capture group number "n"
Matches word boundaries when outside brackets. Matches
\b
backspace (0x08) when inside brackets.
\B Matches nonword boundaries.
\n, \t, etc. Matches newlines, carriage returns, tabs, etc.
\Q Escape (quote) all characters up to \E
\E Ends quoting begun with \Q
Index Methods:
Index methods provide useful index values that show precisely where the match was
found in the input string:
Study Methods:
Study methods review the input string and return a boolean indicating whether or not the
pattern is found:
Replacement Methods:
Replacement methods are useful methods for replacing text in an input string:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}
}
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
You can see that this example uses word boundaries to ensure that the letters "c" "a" "t"
are not merely a substring in a longer word. It also gives some useful information about
where in the input string the match has occurred.
The start method returns the start index of the subsequence captured by the given group
during the previous match operation, and end returns the index of the last character
matched, plus one.
Both methods always start at the beginning of the input string. Here is the example
explaining the functionality:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
System.out.println("lookingAt(): "+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-foo-foo-foo-
Java - Methods
A Java method is a collection of statements that are grouped together to perform an
operation. When you call the System.out.println method, for example, the system actually
executes several statements in order to display a message on the console.
Now you will learn how to create your own methods with or without return values,
invoke a method with or without parameters, overload methods using the same names,
and apply method abstraction in the program design.
Creating a Method:
In general, a method has the following syntax:
A method definition consists of a method header and a method body. Here are all the
parts of a method:
• Modifiers: The modifier, which is optional, tells the compiler how to call the
method. This defines the access type of the method.
• Return Type: A method may return a value. The returnValueType is the data
type of the value the method returns. Some methods perform the desired
operations without returning a value. In this case, the returnValueType is the
keyword void.
• Method Name: This is the actual name of the method. The method name and the
parameter list together constitute the method signature.
• Parameters: A parameter is like a placeholder. When a method is invoked, you
pass a value to the parameter. This value is referred to as actual parameter or
argument. The parameter list refers to the type, order, and number of the
parameters of a method. Parameters are optional; that is, a method may contain no
parameters.
• Method Body: The method body contains a collection of statements that define
what the method does.
Note: In certain other languages, methods are referred to as procedures and functions. A
method with a nonvoid return value type is called a function; a method with a void return
value type is called a procedure.
Example:
Here is the source code of the above defined method called max(). This method takes two
parameters num1 and num2 and returns the maximum between the two:
return result;
}
Calling a Method:
In creating a method, you give a definition of what the method is to do. To use a method,
you have to call or invoke it. There are two ways to call a method; the choice is based on
whether the method returns a value or not.
When a program calls a method, program control is transferred to the called method. A
called method returns control to the caller when its return statement is executed or when
its method-ending closing brace is reached.
If the method returns a value, a call to the method is usually treated as a value. For
example:
If the method returns void, a call to the method must be a statement. For example, the
method println returns void. The following call is a statement:
System.out.println("Welcome to Java!");
Example:
Following is the example to demonstrate how to define a method and how to call it:
return result;
}
This program contains the main method and the max method. The main method is just
like any other method except that it is invoked by the JVM.
The main method's header is always the same, like the one in this example, with the
modifiers public and static, return value type void, method name main, and a parameter
of the String[] type. String[] indicates that the parameter is an array of String.
Example:
public class TestVoidMethod {
public static void main(String[] args) {
printGrade(78.5);
}
Here the printGrade method is a void method. It does not return any value. A call to a
void method must be a statement. So, it is invoked as a statement in line 3 in the main
method. This statement is like any Java statement terminated with a semicolon.
Here, you can use nPrintln("Hello", 3) to print "Hello" three times. The nPrintln("Hello",
3) statement passes the actual string parameter, "Hello", to the parameter, message;
passes 3 to n; and prints "Hello" three times. However, the statement nPrintln(3, "Hello")
would be wrong.
When you invoke a method with a parameter, the value of the argument is passed to the
parameter. This is referred to as pass-by-value. If the argument is a variable rather than a
literal value, the value of the variable is passed to the parameter. The variable is not
affected, regardless of the changes made to the parameter inside the method.
Example:
Following is a program that demonstrates the effect of passing by value. The program
creates a method for swapping two variables. The swap method is invoked by passing
two arguments. Interestingly, the values of the arguments are not changed after the
method is invoked.
Overloading Methods:
The max method that was used earlier works only with the int data type. But what if you
need to find which of two floating-point numbers has the maximum value? The solution
is to create another method with the same name but different parameters, as shown in the
following code:
If you call max with int parameters, the max method that expects int parameters will be
invoked; if you call max with double parameters, the max method that expects double
parameters will be invoked. This is referred to as method overloading; that is, two
methods have the same name but different parameter lists within one class.
The Java compiler determines which method is used based on the method signature.
Overloading methods can make programs clearer and more readable. Methods that
perform closely related tasks should be given the same name.
Overloaded methods must have different parameter lists. You cannot overload methods
based on different modifiers or return types. Sometimes there are two or more possible
matches for an invocation of a method due to similar method signature, so the compiler
cannot determine the most specific match. This is referred to as ambiguous invocation.
The scope of a local variable starts from its declaration and continues to the end of the
block that contains the variable. A local variable must be declared before it can be used.
A parameter is actually a local variable. The scope of a method parameter covers the
entire method.
A variable declared in the initial action part of a for loop header has its scope in the entire
loop. But a variable declared inside a for loop body has its scope limited in the loop body
from its declaration to the end of the block that contains the variable as shown below:
You can declare a local variable with the same name multiple times in different non-
nesting blocks in a method, but you cannot declare a local variable twice in nested
blocks.
A command-line argument is the information that directly follows the program's name on
the command line when it is executed. To access the command-line arguments inside a
Java program is quite easy.they are stored as strings in the String array passed to main( ).
Example:
The following program displays all of the command-line arguments that it is called with:
class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " +
args[i]);
}
}
}
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
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);
}
}
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
Variable Arguments(var-args):
JDK 1.5 enables you to pass a variable number of arguments of the same type to a
method. The parameter in the method is declared as follows:
typeName... parameterName
In the method declaration, you specify the type followed by an ellipsis (...) Only one
variable-length parameter may be specified in a method, and this parameter must be the
last parameter. Any regular parameters must precede it.
Example:
public class VarargsDemo {
public static void main(String args[]) {
// Call method with variable args
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
For example, you might use finalize( ) to make sure that an open file owned by that
object is closed.
To add a finalizer to a class, you simply define the finalize( ) method. The Java runtime
calls that method whenever it is about to recycle an object of that class.
Inside the finalize( ) method you will specify those actions that must be performed before
an object is destroyed.
Here, the keyword protected is a specifier that prevents access to finalize( ) by code
defined outside its class.
This means that you cannot know when.or even if.finalize( ) will be executed. For
example, if your program ends before garbage collection occurs, finalize( ) will not
execute.
A stream can be defined as a sequence of data. The InputStream is used to read data from
a source and the OutputStream is used for writing data to a destination.
Java does provide strong, flexible support for I/O as it relates to files and networks but
this tutorial covers very basic functionlity related to streams and I/O. We would see most
commonly used example one by one:
Each time that read( ) is called, it reads a character from the input stream and returns it as
an integer value. It returns .1 when the end of the stream is encountered. As you can see,
it can throw an IOException.
The following program demonstrates read( ) by reading characters from the console until
the user types a "q":
import java.io.*;
class BRRead {
public static void main(String args[]) throws IOException
{
char c;
// Create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
To read a string from the keyboard, use the version of readLine( ) that is a member of the
BufferedReader class. Its general form is shown here:
The following program demonstrates BufferedReader and the readLine( ) method. The
program reads and displays lines of text until you enter the word "end":
This method writes to the stream the byte specified by byteval. Although byteval is
declared as an integer, only the low-order eight bits are written.
Example:
Here is a short example that uses write( ) to output the character "A" followed by a
newline to the screen:
import java.io.*;
// Demonstrate System.out.write().
class WriteDemo {
public static void main(String args[]) {
int b;
b = 'A';
System.out.write(b);
System.out.write('\n');
}
}
Note: You will not often use write( ) to perform console output because print( ) and
println( ) are substantially easier to use.
Reading and Writing Files:
As described earlier, A stream can be defined as a sequence of data. The InputStream is
used to read data from a source and the OutputStream is used for writing data to a
destination.
The two important streams are FileInputStream and FileOutputStream which would be
discussed in this tutorial:
FileInputStream:
This stream is used for reading data from the files. Objects can be created using the
keyword new and there are several types of constructors available.
Following constructor takes a file name as a string to create an input stream object to read
the file.:
Following constructor takes a file object to create an input stream object to read the file.
First we create a file object using File() method as follows:
There are other important input streams available, for more detail you can refer to the
following links:
• ByteArrayInputStream
• DataInputStream
FileOutputStream:
FileOutputStream is used to create a file and write data into it.The stream would create a
file, if it doesn't already exist, before opening it for output.
Here are two constructors which can be used to create a FileOutputStream object.
Following constructor takes a file name as a string to create an input stream object to
write the file.:
Following constructor takes a file object to create an output stream object to write the
file. First we create a file object using File() method as follows:
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
Once you have OutputStream object in hand then there is a list of helper methods which
can be used to write to stream or to do other operations on the stream.
There are other important output streams available, for more detail you can refer to the
following links:
• ByteArrayOutputStream
• DataOutputStream
Example:
import java.io.*;
try{
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("C:/test.txt");
for(int x=0; x < bWrite.length ; x++){
os.write( bWrite[x] ); // writes the bytes
}
os.close();
The above code would create file test.txt and would write given numbers in binary
format. Same would be output on the stdout screen.
• File Class
• FileReader Class
• FileWriter Class
Directories in Java:
Creating Directories:
There are two useful File utility methods which can be used to create directories:
• The mkdir( ) method creates a directory, returning true on success and false on
failure. Failure indicates that the path specified in the File object already exists, or
that the directory cannot be created because the entire path does not exist yet.
• The mkdirs() method creates both a directory and all the parents of the directory.
import java.io.File;
class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
// Create directory now.
d.mkdirs();
}
}
Compile and execute above code to create "/tmp/user/java/bin".
Note: Java automatically takes care of path separators on UNIX and Windows as per
conventions. If you use a forward slash (/) on a Windows version of Java, the path will
still resolve correctly.
Reading Directories:
A directory is a File that contains a list of other files and directories. When you create a
File object and it is a directory, the isDirectory( ) method will return true.
You can call list( ) on that object to extract the list of other files and directories inside.
The program shown here illustrates how to use list( ) to examine the contents of a
directory:
import java.io.File;
class DirList {
public static void main(String args[]) {
String dirname = "/java";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println( "Directory of " + dirname);
String s[] = f1.list();
for (int i=0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " is a directory");
} else {
System.out.println(s[i] + " is a file");
}
}
} else {
System.out.println(dirname + " is not a directory");
}
}
}
Directory of /mysql
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.html is a file
include is a directory
Java - Exceptions Handling
An exception is a problem that arises during the execution of a program. An exception
can occur for many different reasons, including the following:
Some of these exceptions are caused by user error, others by programmer error, and
others by physical resources that have failed in some manner.
To understand how exception handling works in Java, you need to understand the three
categories of exceptions:
Exception Hierarchy:
All exception classes are subtypes of the java.lang.Exception class. The exception class is
a subclass of the Throwable class. Other than the exception class there is another subclass
called Error which is derived from the Throwable class.
Errors are not normally trapped form the Java programs. These conditions normally
happen in case of severe failures, which are not handled by the java programs. Errors are
generated to indicate errors generated by the runtime environment. Example : JVM is out
of Memory. Normally programs cannot recover from errors.
The Exception class has two main subclasses : IOException class and RuntimeException
Class.
Here is a list of most common checked and unchecked Java's Built-in Exceptions.
Exceptions Methods:
Following is the list of important medthods available in the Throwable class.
try
{
//Protected code
}catch(ExceptionName e1)
{
//Catch block
}
A catch statement involves declaring the type of exception you are trying to catch. If an
exception occurs in protected code, the catch block (or blocks) that follows the try is
checked. If the type of exception that occurred is listed in a catch block, the exception is
passed to the catch block much as an argument is passed into a method parameter.
Example:
The following is an array is declared with 2 elements. Then the code tries to access the
3rd element of the array which throws an exception.
try
{
//Protected 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. If an exception occurs in the protected code, the exception is
thrown to the first catch block in the list. If the data type of the exception thrown matches
ExceptionType1, it gets caught there. If not, the exception passes down to the second
catch statement. This continues until the exception either is caught or falls through all
catches, in which case the current method stops execution and the exception is thrown
down to the previous method on the call stack.
Example:
try
{
file = new FileInputStream(fileName);
x = (byte) file.read();
}catch(IOException i)
{
i.printStackTrace();
return -1;
}catch(FileNotFoundException f) //Not valid!
{
f.printStackTrace();
return -1;
}
import java.io.*;
public class className
{
public void deposit(double amount) throws RemoteException
{
// Method implementation
throw new RemoteException();
}
//Remainder of class definition
}
Amethod can declare that it throws more than one exception, in which case the
exceptions are declared in a list separated by commas. For example, the following
method declares that it throws a RemoteException and an InsufficientFundsException:
import java.io.*;
public class className
{
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException
{
// Method implementation
}
//Remainder of class definition
}
Using a finally block allows you to run any cleanup-type statements that you want to
execute, no matter what happens in the protected code.
A finally block appears at the end of the catch blocks and has the following syntax:
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}finally
{
//The finally block always executes.
}
Example:
public class ExcepTest{
You just need to extend the Exception class to create your own Exception class. These
are considered to be checked exceptions. The following InsufficientFundsException class
is a user-defined exception that extends the Exception class, making it a checked
exception. An exception class is like any other class, containing useful fields and
methods.
Example:
// File Name InsufficientFundsException.java
import java.io.*;
The following BankDemo program demonstrates invoking the deposit() and withdraw()
methods of CheckingAccount.
Compile all the above three files and run BankDemo, this would produce following
result:
Depositing $500...
Withdrawing $100...
Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
at CheckingAccount.withdraw(CheckingAccount.java:25)
at BankDemo.main(BankDemo.java:13)
Common Exceptions:
In java it is possible to define two catergories of Exceptions and Errors.
Java - Inheritance
Inheritance can be defined as the process where one object acquires the properties of
another. With the use of inheritance the information is made manageable in a hierarchical
order.
When we talk about inheritance the most commonly used key words would be extends
and implements. These words would determine whether one object IS-A type of another.
By using these keywords we can make one object acquire the properties of another
object.
IS-A Relationship:
IS-A is a way of saying : This object is a type of that object. Let us see how the extends
keyword is used to achieve inheritance.
Now based on the above example, In Object Oriented terms following are true:
With use of the extends keyword the subclasses will be able to inherit all the properties of
the superclass except for the private properties of the superclass.
We can assure that Mammal is actually an Animal with the use of the instance operator.
Example:
public class Dog extends Mammal{
public static void main(String args[]){
true
true
true
Since we have a good understanding of the extends keyword let us look into how the
implements keyword is used to get the IS-A relationship.
The implements keyword is used by classes by inherit from interfaces. Interfaces can
never be extended.
Example:
public interface Animal {}
Let us use the instanceof operator to check determine whether Mammal is actually an
Animal, and dog is actually an Animal
interface Animal{}
true
true
true
HAS-A relationship:
These relationships are mainly based on the usage. This determines whether a certain
class HAS-A certain thing. This relationship helps to reduce duplication of code as well
as bugs.
This shows that class Van HAS-A Speed. By having a separate class for Speed we do not
have to put the entire code that belongs to speed inside the Van class., which makes it
possible to reuse the Speed class in multiple applications.
In Object Oriented feature the users do not need to bother about which object is doing the
real work. To achieve this, the Van class hides the implementation details from the users
of the Van class. SO basically what happens is the users would ask the Van class to do a
certain action and the Vann class will either do the work by itself or ask another class to
perform the action.
A very important fact to remember is that Java only supports only single inheritance. This
means that a class cannot extend more than one class. Therefore following is illegal:
However a class can implement one or more interfaces. This has made Java get rid of the
impossibility of multiple inheritance
Java - Overriding
In the previous chapter we talked about super classes and sub classes. If a class inherits a
method from its super class, then there is a chance to override the method provided that it
is not marked final.
The benefit of overriding is: ability to define a behavior that's specific to the sub class
type. Which means a subclass can implement a parent calss method based on its
requirement.
In object oriented terms, overriding means to override the functionality of any existing
method.
Example:
class Animal{
In the above example you can see that the even though b is a type of Animal it runs the
move method in the Dog class. The reason for this is : In compile time the check is made
on the reference type. However in the runtime JVM figures out the object type and would
run the method that belongs to that particular object.
Therefore in the above example, the program will compile properly since Animal class
has the method move. Then at the runtime it runs the method specific for that object.
class Animal{
This program will throw a compile time error since b's reference type Animal doesn't
have a method by the name of bark.
• The argument list should be exactly the same as that of the overridden method.
• The return type should be the same or a subtype of the return type declared in the
original overridden method in the super class.
• The access level cannot be more restrictive than the overridden method's access
level. For example: if the super class method is declared public then the
overridding method in the sub class cannot be either private or public. However
the access level can be less restrictive than the overridden method's access level.
• Instance methods can be overridden only if they are inherited by the subclass.
• A method declared final cannot be overridden.
• A method declared static cannot be overridden but can be re-declared.
• If a method cannot be inherited then it cannot be overridden.
• A subclass within the same package as the instance's superclass can override any
superclass method that is not declared private or final.
• A subclass in a different package can only override the non-final methods
declared public or protected.
• An overriding method can throw any uncheck exceptions, regardless of whether
the overridden method throws exceptions or not. However the overridden method
should not throw checked exceptions that are new or broader than the ones
declared by the overridden method. The overriding method can throw narrower or
fewer exceptions than the overridden method.
• Constructors cannot be overridden.
Using the super keyword:
When invoking a superclass version of an overridden method the super keyword is used.
class Animal{
}
}
Java - Polymorphism
Polymorphism is the ability of an object to take on many forms. The most common use of
polymorphism in OOP occurs when a parent class reference is used to refer to a child
class object.
Any java object that can pass more than on IS-A test is considered to be polymorphic. In
Java, all java objects are polymorphic since any object will pass the IS-A test for their
own type and for the class Object.
It is important to know that the only possible way to access an object is through a
reference variable. A reference variable can be of only one type. Once declared the type
of a reference variable cannot be changed.
The reference variable can be reassigned to other objects provided that it is not declared
final. The type of the reference variable would determine the methods that it can invoke
on the object.
A reference variable can refer to any object of its declared type or any subtype of its
declared type. A reference variable can be declared as a class or interface type.
Example:
Now the Deer class is considered to be polymorphic since this has multiple inheritance.
Following are true for the above example:
When we apply the reference variable facts to a Deer object reference, the following
declarations are legal:
All the reference variables d,a,v,o refer to the same Deer object in the heap.
Virtual Methods:
In this section, I will show you how the behavior of overridden methods in Java allows
you to take advantage of polymorphism when designing your classes.
We already have discussed method overriding, where a child class can override a method
in its parent. An overridden method is essentially hidden in the parent class, and is not
invoked unless the child class uses the super keyword within the overriding method.
Now you study the following program carefully and try to determine its output:
Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0
Here we instantiate two Salary objects . one using a Salary reference s, and the other
using an Employee reference e.
While invoking s.mailCheck() the compiler sees mailCheck() in the Salary class at
compile time, and the JVM invokes mailCheck() in the Salary class at run time.
Here, at compile time, the compiler used mailCheck() in Employee to validate this
statement. At run time, however, the JVM invokes mailCheck() in the Salary class.
This behavior is referred to as virtual method invocation, and the methods are referred to
as virtual methods. All methods in Java behave in this manner, whereby an overridden
method is invoked at run time, no matter what data type the reference is that was used in
the source code at compile time.
Java - Abstraction
Abstraction refers to the ability to make a class abstract in OOP. An abstract class is one
that cannot be instantiated. All other functionality of the class still exists, and its fields,
methods, and constructors are all accessed in the same manner. You just cannot create an
instance of the abstract class.
If a class is abstract and cannot be instantiated, the class does not have much use unless it
is subclassed. This is typically how abstract classes come about during the design phase.
A parent class contains the common functionality of a collection of child classes, but the
parent class itself is too abstract to be used on its own.
Abstract Class:
Use the abstract keyword to declare a class abstract. The keyword appears in the class
declaration somewhere before the class keyword.
Notice that nothing is different in this Employee class. The class is now abstract, but it
still has three fields, seven methods, and one constructor.
When you would compile above class then you would get following error:
Employee.java:46: Employee is abstract; cannot be instantiated
Employee e = new Employee("George W.", "Houston, TX", 43);
^
1 error1
Here we cannot instantiate a new Employee, but if we instantiate a new Salary object, the
Salary object will inherit the three fields and seven methods from Employee.
Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0
Abstract Methods:
If you want a class to contain a particular method but you want the actual implementation
of that method to be determined by child classes, you can declare the method in the
parent class as abstract.
The abstract keyword is also used to declare a method as abstract.An abstract methods
consist of a method signature, but no method body.
Abstract method would have no definition, and its signature is followed by a semicolon,
not curly braces as follows:
A child class that inherits an abstract method must override it. If they do not, they must
be abstract,and any of their children must override it.
Eventually, a descendant class has to implement the abstract method; otherwise, you
would have a hierarchy of abstract classes that cannot be instantiated.
Java - Encapsulation
Encapsulation is one of the four fundamental OOP concepts. The other three are
inheritance, polymorphism, and abstraction.
Encapsulation is the technique of making the fields in a class private and providing
access to the fields via public methods. If a field is declared private, it cannot be accessed
by anyone outside the class, thereby hiding the fields within the class. For this reason,
encapsulation is also referred to as data hiding.
Encapsulation can be described as a protective barrier that prevents the code and data
being randomly accessed by other code defined outside the class. Access to the data and
code is tightly controlled by an interface.
The main benefit of encapsulation is the ability to modify our implemented code without
breaking the code of others who use our code. With this feature Encapsulation gives
maintainability, flexibility and extensibility to our code.
Example:
The public methods are the access points to this class.s fields from the outside java world.
Normally these methods are referred as getters and setters. Therefore any class that wants
to access the variables should access them through these getters and setters.
Benefits of Encapsulation:
Java - Interfaces
An interface is a collection of abstract methods. Aclass implements an interface, thereby
inheriting the abstract methods of the interface.
An interface is not a class. Writing an interface is similar to writing a class, but they are
two different concepts. A class describes the attributes and behaviors of an object. An
interface contains behaviors that a class implements.
Unless the class that implements the interface is abstract, all the methods of the interface
need to be defined in the class.
Encapsulation can be described as a protective barrier that prevents the code and data
being randomly accessed by other code defined outside the class. Access to the data and
code is tightly controlled by an interface.
The main benefit of encapsulation is the ability to modify our implemented code without
breaking the code of others who use our code. With this feature Encapsulation gives
maintainability, flexibility and extensibility to our code.
Example:
• An interface is implicitly abstract. You do not need to use the abstract keyword
when declaring an interface.
• Each method in an interface is also implicitly abstract, so the abstract keyword is
not needed.
• Methods in an interface are implicitly public.
Example:
/* File name : Animal.java */
interface Animal {
When a class implements an interface, you can think of the class as signing a contract,
agreeing to perform the specific behaviors of the interface. If a class does not perform all
the behaviors of the interface, the class must declare itself as abstract.
Mammal eats
Mammal travels
When overriding methods defined in interfaces there are several rules to be followed:
Extending Interfaces:
An interface can extend another interface, similarly to the way that a class can extend
another class. The extends keyword is used to extend an interface, and the child interface
inherits the methods of the parent interface.
//Filename: Sports.java
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
//Filename: Football.java
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
//Filename: Hockey.java
public interface Hockey extends Sports
{
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
The Hockey interface has four methods, but it inherits two from Sports; thus, a class that
implements Hockey needs to implement all six methods. Similarly, a class that
implements Football needs to define the three methods from Football and the two
methods from Sports.
A Java class can only extend one parent class. Multiple inheritance is not allowed.
Interfaces are not classes, however, and an interface can extend more than one parent
interface.
The extends keyword is used once, and the parent interfaces are declared in a comma-
separated list.
For example, if the Hockey interface extended both Sports and Event, it would be
declared as:
Tagging Interfaces:
The most common use of extending interfaces occurs when the parent interface does not
contain any methods. For example, the MouseListener interface in the java.awt.event
package extended java.util.EventListener, which is defined as:
package java.util;
public interface EventListener
{}
Adds a data type to a class: This situation is where the term tagging comes from. A
class that implements a tagging interface does not need to define any methods (since the
interface does not have any), but the class becomes an interface type through
polymorphism.
Java - Packages
Packages are used in Java in-order to prevent naming conflicts, to control access, to make
searching/locating and usage of classes, interfaces, enumerations and annotations easier
etc.
Since the package creates a new namespace there won't be any name conflicts with names
in other packages. Using packages, it is easier to provide access control and it is also
easier to locate the related classed.
Creating a package:
When creating a package, you should choose a name for the package and put a package
statement with that name at the top of every source file that contains the classes,
interfaces, enumerations, and annotation types that you want to include in the package.
The package statement should be the first line in the source file. There can be only one
package statement in each source file, and it applies to all types in the file.
If a package statement is not used then the class, interfaces, enumerations, and annotation
types will be put into an unnamed package.
Example:
Let us look at an example that creates a package called animals. It is common practice to
use lowercased names of packages to avoid any conflicts with the names of classes,
interfaces.
interface Animal {
public void eat();
public void travel();
}
package animals;
Now you compile these two files and put them in a sub-directory called animals and try
to run as follows:
$ mkdir animals
$ cp Animal.class MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travels
Example:
Here a class named Boss is added to the payroll package that already contains Employee.
The Boss can then refer to the Employee class without using the payroll prefix, as
demonstrated by the following Boss class.
package payroll;
What happens if Boss is not in the payroll package? The Boss class must then use one of
the following techniques for referring to a class in a different package.
• The fully qualified name of the class can be used. For example:
payroll.Employee
• The package can be imported using the import keyword and the wild card (*). For
example:
import payroll.*;
• The class itself can be imported using the import keyword. For example:
import payroll.Employee;
Note: A class file can contain any number of import statements. The import statements
must appear after the package statement and before the class declaration.
• The name of the package becomes a part of the name of the class, as we just
discussed in the previous section.
• The name of the package must match the directory structure where the
corresponding bytecode resides.
Put the source code for a class, interface, enumeration, or annotation type in a text file
whose name is the simple name of the type and whose extension is .java. For example:
package vehicle;
Now put the source file in a directory whose name reflects the name of the package to
which the class belongs:
....\vehicle\Car.java
....\com\apple\computers\Dell.java
At the time of compilation, the compiler creates a different output file for each class,
interface and enumeration defined in it. The base name of the output file is the name of
the type, and its extension is .class
For example:
package com.apple.computers;
public class Dell{
}
class Ups{
$javac -d . Dell.java
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
You can import all the classes or interfaces defined in \com\apple\computers\ as follows:
import com.apple.computers.*;
Like the .java source files, the compiled .class files should be in a series of directories
that reflect the package name. However, the path to the .class files does not have to be the
same as the path to the .java source files. You can arrange your source and class
directories separately, as:
<path-one>\sources\com\apple\computers\Dell.java
<path-two>\classes\com\apple\computers\Dell.class
By doing this, it is possible to give the classes directory to other programmers without
revealing your sources. You also need to manage source and class files in this manner so
that the compiler and the Java Virtual Machine (JVM) can find all the types your
program uses.
The full path to the classes directory, <path-two>\classes, is called the class path, and is
set with the CLASSPATH system variable. Both the compiler and the JVM construct the
path to your .class files by adding the package name to the class path.
Say <path-two>\classes is the class path, and the package name is com.apple.computers,
then the compiler and JVM will look for .class files in <path-
two>\classes\com\apple\comptuers.
A class path may include several paths. Multiple paths should be separated by a
semicolon (Windows) or colon (Unix). By default, the compiler and the JVM search the
current directory and the JAR file containing the Java platform classes so that these
directories are automatically in the class path.
Java Advanced
• Enumeration
• BitSet
• Vector
• Stack
• Dictionary
• Hashtable
• Properties
All these classes are now legacy and Java-2 has introcuded a new framework called
Collections Framework which is discussed in next tutorial:
The Enumeration:
The Enumeration interface isn't itself a data structure, but it is very important within the
context of other data structures. The Enumeration interface defines a means to retrieve
successive elements from a data structure.
For example, Enumeration defines a method called nextElement that is used to get the
next element in a data structure that contains multiple elements.
The BitSet
The BitSet class implements a group of bits, or flags, that can be set and cleared
individually.
This class is very useful in cases where you need to keep up with a set of boolean values;
you just assign a bit to each value and set or clear it as appropriate.
The Vector
The Vector class is similar to a traditional Java array, except that it can grow as necessary
to accommodate new elements.
Like an array, elements of a Vector object can be accessed via an index into the vector.
The nice thing about using the Vector class is that you don't have to worry about setting it
to a specific size upon creation; it shrinks and grows automatically when necessary.
The Stack
The Stack class implements a last-in-first-out (LIFO) stack of elements.
You can think of a stack literally as a vertical stack of objects; when you add a new
element, it gets stacked on top of the others.
When you pull an element off the stack, it comes off the top. In other words, the last
element you added to the stack is the first one to come back off.
The Dictionary
The Dictionary class is an abstract class that defines a data structure for mapping keys to
values.
This is useful in cases where you want to be able to access data via a particular key rather
than an integer index.
Since the Dictionary class is abstract, it provides only the framework for a key-mapped
data structure rather than a specific implementation.
The Hashtable
The Hashtable class provides a means of organizing data based on some user-defined key
structure.
For example, in an address list hash table you could store and sort data based on a key
such as ZIP code rather than on a person's name.
The specific meaning of keys in regard to hash tables is totally dependent on the usage of
the hash table and the data it contains.
The Properties class is used by many other Java classes. For example, it is the type of
object returned by System.getProperties( ) when obtaining environmental values.
Toward this end, the entire collections framework is designed around a set of standard
interfaces. Several standard implementations such as LinkedList, HashSet, and TreeSet,
of these interfaces are provided that you may use as-is and you may also implement your
own collection, if you choose.
1. Interfaces: These are abstract data types that represent collections. Interfaces
allow collections to be manipulated independently of the details of their
representation. In object-oriented languages, interfaces generally form a
hierarchy.
2. Implementations i.e. Classes: These are the concrete implementations of the
collection interfaces. In essence, they are reusable data structures.
3. Algorithms: These are the methods that perform useful computations, such as
searching and sorting, on objects that implement collection interfaces. The
algorithms are said to be polymorphic: that is, the same method can be used on
many different implementations of the appropriate collection interface.
In addition to collections, the framework defines several map interfaces and classes.
Maps store key/value pairs. Although maps are not collections in the proper use of the
term, but they are fully integrated with collections.
The following legacy classes defined by java.util has been discussed in previous tutorial:
Several of the methods can throw a ClassCastException, which occurs when an attempt
is made to compare incompatible types, or an UnsupportedOperationException, which
occurs when an attempt is made to modify an unmodifiable collection.
The easiest way to do this is to employ an iterator, which is an object that implements
either the Iterator or the ListIterator interface.
This interface lets us sort a given collection any number of different ways. Also this
interface can be used to sort any instances of any class.(even classes we cannot modify).
Summary:
The Java collections framework gives the programmer access to prepackaged data
structures as well as to algorithms for manipulating them.
A collection is an object that can hold references to other objects. The collection
interfaces declare the operations that can be performed on each type of collection.
The classes and interfaces of the collections framework are in package java.util.
Java - Generics
It would be nice if we could write a single sort method that could sort the elements in an
Integer array, a String array or an array of any type that supports ordering.
Java Generic methods and generic classes enable programmers to specify, with a single
method declaration, a set of related methods or, with a single class declaration, a set of
related types, respectively.
Generics also provide compile-time type safety that allows programmers to catch invalid
types at compile time.
Using Java Generic concept we might write a generic method for sorting an array of
objects, then invoke the generic method with Integer arrays, Double arrays, String arrays
and so on, to sort the array elements.
Generic Methods:
You can write a single generic method declaration that can be called with arguments of
different types. Based on the types of the arguments passed to the generic method, the
compiler handles each method call appropriately. Following are the rules to define
Generic Methods:
• All generic method declarations have a type parameter section delimited by angle
brackets (< and >) that precedes the method's return type ( < E > in the next
example).
• Each type parameter section contains one or more type parameters separated by
commas. A type parameter, also known as a type variable, is an identifier that
specifies a generic type name.
• The type parameters can be used to declare the return type and act as placeholders
for the types of the arguments passed to the generic method, which are known as
actual type arguments.
• A generic method's body is declared like that of any other method. Note that type
parameters can represent only reference types not primitive types (like int, double
and char).
Example:
Following example illustrate how we can print array of different type using a single
Generic method:
To declare a bounded type parameter, list the type parameter's name, followed by the
extends keyword, followed by its upper bound.
Example:
Following example illustrate how extends is used in a general sense to mean either
"extends" (as in classes) or "implements" (as in interfaces). This example is Generic
method to return the largest of three Comparable objects:
Maximum of 3, 4 and 5 is 5
Generic Classes:
A generic class declaration looks like a non-generic class declaration, except that the
class name is followed by a type parameter section.
As with generic methods, the type parameter section of a generic class can have one or
more type parameters separated by commas. These classes are known as parameterized
classes or parameterized types because they accept one or more parameters.
Example:
private T t;
public T get() {
return t;
}
integerBox.add(new Integer(10));
stringBox.add(new String("Hello World"));
Java - Serialization
Java provides a mechanism, called object serialization where an object can be represented
as a sequence of bytes that includes the object's data as well as information about the
object's type and the types of data stored in the object.
After a serialized object has been written into a file, it can be read from the file and
deserialized that is, the type information and bytes that represent the object and its data
can be used to recreate the object in memory.
Most impressive is that the entire process is JVM independent, meaning an object can be
serialized on one platform and deserialized on an entirely different platform.
Classes ObjectInputStream and ObjectOutputStream are high-level streams that
contain the methods for serializing and deserializing an object.
The ObjectOutputStream class contains many write methods for writing various data
types, but one method in particular stands out:
The above method serializes an Object and sends it to the output stream. Similarly, the
ObjectInputStream class contains the following method for deserializing an object:
This method retrieves the next Object out of the stream and deserializes it. The return
value is Object, so you will need to cast it to its appropriate data type.
To demonstrate how serialization works in Java, I am going to use the Employee class
that we discussed early on in the book. Suppose that we have the following Employee
class, which implements the Serializable interface:
Notice that for a class to be serialized successfully, two conditions must be met:
If you are curious to know if a Java Satandard Class is serializable or not, check the
documentation for the class. The test is simple: If the class implements
java.io.Serializable, then it is serializable; otherwise, it's not.
Serializing an Object:
The ObjectOutputStream class is used to serialize an Object. The following
SerializeDemo program instantiates an Employee object and serializes it to a file.
When the program is done executing, a file named employee.ser is created. The program
does not generate any output, but study the code and try to determine what the program is
doing.
Note: When serializing an object to a file, the standard convention in Java is to give the
file a .ser extension.
import java.io.*;
Deserializing an Object:
The following DeserializeDemo program deserializes the Employee object created in the
SerializeDemo program. Study the program and try to determine its output:
import java.io.*;
public class DeserializeDemo
{
public static void main(String [] args)
{
Employee e = null;
try
{
FileInputStream fileIn =
new FileInputStream("employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
}catch(IOException i)
{
i.printStackTrace();
return;
}catch(ClassNotFoundException c)
{
System.out.println(.Employee class not found.);
c.printStackTrace();
return;
}
System.out.println("Deserialized Employee...");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
}
}
Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101
The java.net package provides support for the two common network protocols:
• TCP: TCP stands for Transmission Control Protocol, which allows for reliable
communication between two applications. TCP is typically used over the Internet
Protocol, which is referred to as TCP/IP.
• UDP: UDP stands for User Datagram Protocol, a connection-less protocol that
allows for packets of data to be transmitted between applications.
Socket Programming:
Sockets provide the communication mechanism between two computers using TCP. A
client program creates a socket on its end of the communication and attempts to connect
that socket to a server.
When the connection is made, the server creates a socket object on its end of the
communication. The client and server can now communicate by writing to and reading
from the socket.
The following steps occur when establishing a TCP connection between two computers
using sockets:
After the connections are established, communication can occur using I/O streams. Each
socket has both an OutputStream and an InputStream. The client's OutputStream is
connected to the server's InputStream, and the client's InputStream is connected to the
server's OutputStream.
TCP is a twoway communication protocol, so data can be sent across both streams at the
same time. There are following usefull classes providing complete set of methods to
implement sockets.
The java.net.ServerSocket class is used by server applications to obtain a port and listen
for client requests
If the ServerSocket constructor does not throw an exception, it means that your
application has successfully bound to the specified port and is ready for client requests.
When the ServerSocket invokes accept(), the method does not return until a client
connects. After a client does connect, the ServerSocket creates a new Socket on an
unspecified port and returns a reference to this new Socket. A TCP connection now exists
between the client and server, and communication can begin.
The java.net.Socket class represents the socket that both the client and server use to
communicate with each other. The client obtains a Socket object by instantiating one,
whereas the server obtains a Socket object from the return value of the accept() method.
The Socket class has five constructors that a client uses to connect to a server:
When the Socket constructor returns, it does not simply instantiate a Socket object but it
actually attempts to connect to the specified server and port.
Some methods of interest in the Socket class are listed here. Notice that both the client
and server have a Socket object, so these methods can be invoked by both the client and
server.
This class represents an Internet Protocol (IP) address. Here are following usefull
methods which you would need while doing socket programming:
import java.net.*;
import java.io.*;
import java.net.*;
import java.io.*;
• You can download latest version of JavaMail (Version 1.2) from Java's standard
website.
• You can download latest version of JAF (Version 1.1.1) from Java's standard
website.
Download and unzip these files, in the newly created top level directories you will find a
number of jar files for both the applications. You need to add mail.jar and activation.jar
files in your CLASSPATH.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
$ java SendEmail
Sent message successfully....
If you want to send an email to multiple recipients then following methods would be used
to specify multiple email IDs:
• type: This would be set to TO, CC or BCC. Here CC represents Carbon Copy and
BCC represents Black Carbon Copy. Example Message.RecipientType.TO
• addresses: This is the array of email ID. You would need to use
InternetAddress() method while specifying email IDs
Using this example, you can send as big as HTML content you like.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
$ java SendHTMLEmail
Sent message successfully....
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
$ java SendFileEmail
Sent message successfully....
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
Java - Multithreading
Java provides built-in support for multithreaded programming. A multithreaded program
contains two or more parts that can run concurrently. Each part of such a program is
called a thread, and each thread defines a separate path of execution.
I need to define another term related to threads: process: A process consists of the
memory space allocated by the operating system that can contain one or more threads. A
thread cannot exist on its own; it must be a part of a process. A process remains running
until all of the non-daemon threads are done executing.
Multithreading enables you to write very efficient programs that make maximum use of
the CPU, because idle time can be kept to a minimum.
• New: A new thread begins its life cycle in the new state. It remains in this state
until the program starts the thread. It is also referred to as a born thread.
• Runnable: After a newly born thread is started, the thread becomes runnable. A
thread in this state is considered to be executing its task.
• Waiting: Sometimes a thread transitions to the waiting state while the thread
waits for another thread to perform a task.A thread transitions back to the
runnable state only when another thread signals the waiting thread to continue
executing.
• Timed waiting: A runnable thread can enter the timed waiting state for a
specified interval of time. A thread in this state transitions back to the runnable
state when that time interval expires or when the event it is waiting for occurs.
• Terminated: A runnable thread enters the terminated state when it completes its
task or otherwise terminates.
Thread Priorities:
Every Java thread has a priority that helps the operating system determine the order in
which threads are scheduled.
Creating a Thread:
Java defines two ways in which this can be accomplished:
The easiest way to create a thread is to create a class that implements the Runnable
interface.
To implement Runnable, a class need only implement a single method called run( ),
which is declared like this:
You will define the code that constitutes the new thread inside run() method. It is
important to understand that run() can call other methods, use other classes, and declare
variables, just like the main thread can.
After you create a class that implements Runnable, you will instantiate an object of type
Thread from within that class. Thread defines several constructors. The one that we will
use is shown here:
Here threadOb is an instance of a class that implements the Runnable interface and the
name of the new thread is specified by threadName.
After the new thread is created, it will not start running until you call its start( ) method,
which is declared within Thread. The start( ) method is shown here:
void start( );
Example:
class ThreadDemo {
public static void main(String args[]) {
new NewThread(); // create a new thread
try {
for(int i = 5; i > 0; i--) {
System.out.println("Main Thread: " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Main thread interrupted.");
}
System.out.println("Main thread exiting.");
}
}
The second way to create a thread is to create a new class that extends Thread, and then
to create an instance of that class.
The extending class must override the run( ) method, which is the entry point for the new
thread. It must also call start( ) to begin execution of the new thread.
Example:
class ExtendThread {
public static void main(String args[]) {
new NewThread(); // create a new thread
try {
for(int i = 5; i > 0; i--) {
System.out.println("Main Thread: " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Main thread interrupted.");
}
System.out.println("Main thread exiting.");
}
}
Thread Methods:
Following is the list of important medthods available in the Thread class.
The previous methods are invoked on a particular Thread object. The following methods
in the Thread class are static. Invoking one of the static methods performs the operation
on the currently running thread
Example:
System.out.println("Starting thread3...");
Thread thread3 = new GuessANumber(27);
thread3.start();
try
{
thread3.join();
}catch(InterruptedException e)
{
System.out.println("Thread interrupted.");
}
System.out.println("Starting thread4...");
Thread thread4 = new GuessANumber(75);
thread4.start();
System.out.println("main() is ending...");
}
}
This would produce following result. You can try this example again and again and you
would get different result every time.
• Thread Synchronization
• Interthread Communication
• Thread Deadlock
• Thread Control: Suspend, Stop and Resume
Using Multithreading:
The key to utilizing multithreading support effectively is to think concurrently rather than
serially. For example, when you have two subsystems within a program that can execute
concurrently, make them individual threads.
With the careful use of multithreading, you can create very efficient programs. A word of
caution is in order, however: If you create too many threads, you can actually degrade the
performance of your program rather than enhance it.
Remember, some overhead is associated with context switching. If you create too many
threads, more CPU time will be spent changing contexts than executing your program!
There are some important differences between an applet and a standalone Java
application, including the following:
• init: This method is intended for whatever initialization is needed for your applet.
It is called after the param tags inside the applet tag have been processed.
• start: This method is automatically called after the browser calls the init method.
It is also called whenever the user returns to the page containing the applet after
having gone off to other pages.
• stop: This method is automatically called when the user moves off the page on
which the applet sits. It can, therefore, be called repeatedly in the same applet.
• destroy: This method is only called when the browser shuts down normally.
Because applets are meant to live on an HTML page, you should not normally
leave resources behind after a user leaves the page that contains the applet.
• paint: Invoked immediately after the start() method, and also any time the applet
needs to repaint itself in the browser. The paint() method is actually inherited
from the java.awt.
import java.applet.*;
import java.awt.*;
These import statements bring the classes into the scope of our applet class:
• java.applet.Applet.
• java.awt.Graphics.
Without those import statements, the Java compiler would not recognize the classes
Applet and Graphics, which the applet class refers to.
• request information about the author, version and copyright of the applet
• request a description of the parameters the applet recognizes
• initialize the applet
• destroy the applet
• start the applet's execution
• stop the applet's execution
The Applet class provides default implementations of each of these methods. Those
implementations may be overridden as necessary.
The "Hello, World" applet is complete as it stands. The only method overridden is the
paint method.
Invoking an Applet:
An applet may be invoked by embedding directives in an HTML file and viewing the file
through an applet viewer or Java-enabled browser.
The <applet> tag is the basis for embedding an applet in an HTML file. Below is an
example that invokes the "Hello, World" applet:
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="HelloWorldApplet.class" width="320" height="120">
If your browser was Java-enabled, a "Hello, World"
message would appear here.
</applet>
<hr>
</html>
Based on the above examples, here is the live applet example: Applet Example.
Note: You can refer to HTML Applet Tag to understand more about calling applet from
HTML.
The code attribute of the <applet> tag is required. It specifies the Applet class to run.
Width and height are also required to specify the initial size of the panel in which an
applet runs. The applet directive must be closed with a </applet> tag.
If an applet takes parameters, values may be passed for the parameters by adding
<param> tags between <applet> and </applet>. The browser ignores text and other tags
between the applet tags.
Non-Java-enabled browsers do not process <applet> and </applet>. Therefore, anything
that appears between the tags, not related to the applet, is visible in non-Java-enabled
browsers.
The viewer or browser looks for the compiled Java code at the location of the document.
To specify otherwise, use the codebase attribute of the <applet> tag as shown:
<applet codebase="http://amrood.com/applets"
code="HelloWorldApplet.class" width="320" height="120">
If an applet resides in a package other than the default, the holding package must be
specified in the code attribute using the period character (.) to separate package/class
components. For example:
<applet code="mypackage.subpackage.TestApplet.class"
width="320" height="120">
The second color and the size of each square may be specified as parameters to the applet
within the document.
CheckerApplet gets its parameters in the init() method. It may also get its parameters in
the paint() method. However, getting the values and saving the settings once at the start
of the applet, instead of at every refresh, is convenient and efficient.
The applet viewer or browser calls the init() method of each applet it runs. The viewer
calls init() once, immediately after loading the applet. (Applet.init() is implemented to do
nothing.) Override the default implementation to insert custom initialization code.
The Applet.getParameter() method fetches a parameter given the parameter's name (the
value of a parameter is always a string). If the value is numeric or other non-character
data, the string must be parsed.
import java.applet.*;
import java.awt.*;
public class CheckerApplet extends Applet
{
int squareSize = 50;// initialized to default size
public void init () {}
private void parseSquareSize (String param) {}
private Color parseColor (String param) {}
public void paint (Graphics g) {}
}
Therefore, parseSquareSize() catches exceptions, rather than allowing the applet to fail
on bad input.
The applet calls parseColor() to parse the color parameter into a Color value.
parseColor() does a series of string comparisons to match the parameter value to the
name of a predefined color. You need to implement these methods to make this applet
works.
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue">
<param name="squaresize" value="30">
</applet>
<hr>
</html>
1. Make an HTML page with the appropriate tag to load the applet code.
2. Supply a subclass of the JApplet class. Make this class public. Otherwise, the
applet cannot be loaded.
3. Eliminate the main method in the application. Do not construct a frame window
for the application. Your application will be displayed inside the browser.
4. Move any initialization code from the frame window constructor to the init
method of the applet. You don't need to explicitly construct the applet object.the
browser instantiates it for you and calls the init method.
5. Remove the call to setSize; for applets, sizing is done with the width and height
parameters in the HTML file.
6. Remove the call to setDefaultCloseOperation. An applet cannot be closed; it
terminates when the browser exits.
7. If the application calls setTitle, eliminate the call to the method. Applets cannot
have title bars. (You can, of course, title the web page itself, using the HTML title
tag.)
8. Don't call setVisible(true). The applet is displayed automatically.
Event Handling:
Applets inherit a group of event-handling methods from the Container class. The
Container class defines several methods, such as processKeyEvent and
processMouseEvent, for handling particular types of events, and then one catch-all
method called processEvent.
Inorder to react an event, an applet must override the appropriate event-specific method.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;
StringBuffer strBuffer;
<html>
<title>Event Handling</title>
<hr>
<applet code="ExampleEventHandling.class"
width="300" height="300">
</applet>
<hr>
</html>
Initially the applet will display "initializing the applet. Starting the applet." Then once
you click inside the rectangle "mouse clicked" will be displayed as well.
Based on the above examples, here is the live applet example: Applet Example.
Displaying Images:
An applet can display images of the format GIF, JPEG, BMP, and others. To display an
image within the applet, you use the drawImage() method found in the java.awt.Graphics
class.
import java.applet.*;
import java.awt.*;
import java.net.*;
public class ImageDemo extends Applet
{
private Image image;
private AppletContext context;
public void init()
{
context = this.getAppletContext();
String imageURL = this.getParameter("image");
if(imageURL == null)
{
imageURL = "java.jpg";
}
try
{
URL url = new URL(this.getDocumentBase(), imageURL);
image = context.getImage(url);
}catch(MalformedURLException e)
{
e.printStackTrace();
// Display in browser status bar
context.showStatus("Could not load image!");
}
}
public void paint(Graphics g)
{
context.showStatus("Displaying image");
g.drawImage(image, 0, 0, 200, 84, null);
g.drawString("www.javalicense.com", 35, 100);
}
}
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="300" height="200">
<param name="image" value="java.jpg">
</applet>
<hr>
</html>
Based on the above examples, here is the live applet example: Applet Example.
Playing Audio:
An applet can play an audio file represented by the AudioClip interface in the java.applet
package. The AudioClip interface has three methods, including:
• public void play(): Plays the audio clip one time, from the beginning.
• public void loop(): Causes the audio clip to replay continually.
• public void stop(): Stops playing the audio clip.
To obtain an AudioClip object, you must invoke the getAudioClip() method of the Applet
class. The getAudioClip() method returns immediately, whether or not the URL resolves
to an actual audio file. The audio file is not downloaded until an attempt is made to play
the audio clip.
import java.applet.*;
import java.awt.*;
import java.net.*;
public class AudioDemo extends Applet
{
private AudioClip clip;
private AppletContext context;
public void init()
{
context = this.getAppletContext();
String audioURL = this.getParameter("audio");
if(audioURL == null)
{
audioURL = "default.au";
}
try
{
URL url = new URL(this.getDocumentBase(), audioURL);
clip = context.getAudioClip(url);
}catch(MalformedURLException e)
{
e.printStackTrace();
context.showStatus("Could not load audio file!");
}
}
public void start()
{
if(clip != null)
{
clip.loop();
}
}
public void stop()
{
if(clip != null)
{
clip.stop();
}
}
}
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="0" height="0">
<param name="audio" value="test.wav">
</applet>
<hr>
</html>
You can use your test.wav at your PC to test the above example.
Documentation Comment:
After the beginning /**, the first line or lines become the main description of your class,
variable, or method.
After that, you can include one or more of the various @ tags. Each @ tag must start at
the beginning of a new line or follow an asterisk (*) that is at the start of a line.
Multiple tags of the same type should be grouped together. For example, if you have
three @see tags, put them one after the other.
/**
* This class draws a bar chart.
* @author Zara Ali
* @version 1.2
*/
Information about each class will be in its own HTML file. Java utility javadoc will also
output an index and a hierarchy tree. Other HTML files can be generated.
Since different implementations of javadoc may work differently, you will need to check
the instructions that accompany your Java development system for details specific to your
version.
Example:
Following is a sample program that uses documentation comments. Notice the way each
comment immediately precedes the item that it describes.
After being processed by javadoc, the documentation about the SquareNum class will be
found in SquareNum.html.
import java.io.*;
/**
* This class demonstrates documentation comments.
* @author Ayan Amhed
* @version 1.2
*/
public class SquareNum {
/**
* This method returns the square of num.
* This is a multiline description. You can use
* as many lines as you like.
* @param num The value to be squared.
* @return num squared.
*/
public double square(double num) {
return num * num;
}
/**
* This method inputs a number from the user.
* @return The value input as a double.
* @exception IOException On input error.
* @see IOException
*/
public double getNumber() throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader inData = new BufferedReader(isr);
String str;
str = inData.readLine();
return (new Double(str)).doubleValue();
}
/**
* This method demonstrates square().
* @param args Unused.
* @return Nothing.
* @exception IOException On input error.
* @see IOException
*/
public static void main(String args[]) throws IOException
{
SquareNum ob = new SquareNum();
double val;
System.out.println("Enter value to be squared: ");
val = ob.getNumber();
val = ob.square(val);
System.out.println("Squared value is " + val);
}
}
$ javadoc SquareNum.java
Loading source file SquareNum.java...
Constructing Javadoc information...
Standard Doclet version 1.5.0_13
Building tree for all the packages and classes...
Generating SquareNum.html...
SquareNum.java:39: warning - @return tag cannot be used\
in method with void return type.
Generating package-frame.html...
Generating package-summary.html...
Generating package-tree.html...
Generating constant-values.html...
Building index for all the packages and classes...
Generating overview-tree.html...
Generating index-all.html...
Generating deprecated-list.html...
Building index for all classes...
Generating allclasses-frame.html...
Generating allclasses-noframe.html...
Generating index.html...
Generating help-doc.html...
Generating stylesheet.css...
1 warning
$
• Object Oriented
• Platform independent:
• Simple
• Secure
• Architectural- neutral
• Portable
• Robust
• Multi-threaded
• Interpreted
• High Performance
• Distributed
• Dynamic
About Java programs, it is very important to keep in mind the following points.
• Case Sensitivity - Java is case sensitive which means identifier Hello and hello
would have different meaning in Java.
• Class Names - For all class names the first letter should be in Upper Case.
If several words are used to form a name of the class each inner words first letter
should be in Upper Case.
If several words are used to form the name of the method, then each inner word's
first letter should be in Upper Case.
When saving the file you should save it using the class name (Remember java is
case sensitive) and append '.java' to the end of the name. (if the file name and the
class name do not match your program will not compile).
Example : Assume 'MyFirstJavaProgram' is the class name. Then the file should
be saved as 'MyFirstJavaProgram.java'
• public static void main(String args[]) - java program processing starts from the
main() method which is a mandatory part of every java program..
Java Identifiers:
All java components require names. Names used for classes, variables and methods are
called identifiers.
In java there are several points to remember about identifiers. They are as follows:
Java Modifiers:
Like other languages it is possible to modify classes, methods etc by using modifiers.
There are two categories of modifiers.
Java Variables:
We would see following type of variables in Java:
• Local Variables
• Class Variables (Static Variables)
• Instance Variables (Non static variables)
Java Arrays:
Arrays are objects that store multiple variables of the same type. However an Array itself
is an object on the heap. We will look into how to declare, construct and initialize in the
upcoming chapters.
Java Enums:
Enums were introduced in java 5.0. Enums restrict a variable to have one of only a few
predefined values. The values in this enumerated list are called enums.
With the use of enums it is possible to reduce the number of bugs in your code.
For example if we consider an application for a fresh juice shop it would be possible to
restrict the glass size to small, medium and Large. This would make sure that it would not
allow anyone to order any size other than the small, medium or large.
Example:
class FreshJuice{
enum FreshJuiceSize{ SIZE, MEDUIM, LARGE }
FreshJuiceSize size;
}
Note: enums can be declared as their own or inside a class. Methods, variables,
constructors can be defined inside enums as well.
Java Keywords:
The following list shows the reserved words in Java. These reserved words may not be
used as constant or variable or any other identifier names.
Comments in Java
Java supports single line and multi-line comments very similar to c and c++. All
characters available inside any comment are ignored by Java compiler.
• byte
• short
• int
• long
• float
• double
• boolean
• char
Java Literals:
A literal is a source code representation of a fixed value. They are represented directly in
the code without any computation.
String literals in Java are specified like they are in most other languages by enclosing a
sequence of characters between a pair of double quotes. Examples of string literals are:
"Hello World"
"two\nlines"
"\"This is in quotes\""
Java language supports few special escape sequences for String and char literals as well.
They are:
Misc Operators
There are few other operators supported by Java Language.
Conditional Operator ( ? : ):
Conditional operator is also known as the ternary operator. This operator consists of three
operands and is used to evaluate boolean expressions. The goal of the operator is to
decide which value should be assigned to the variable. The operator is written as :
instanceOf Operator:
This operator is used only for object reference variables. The operator checks whether the
object is of a particular type(class type or interface type). instanceOf operator is wriiten
as:
( Object reference variable ) instanceOf (class/interface type)
Syntax:
while(Boolean_expression)
{
//Statements
}
Syntax:
do
{
//Statements
}while(Boolean_expression);
A for loop is useful when you know how many times a task is to be repeated.
Syntax:
Syntax:
for(declaration : expression)
{
//Statements
}
The break keyword will stop the execution of the innermost loop and start executing the
next line of code after the block.
• In a for loop, the continue keyword causes flow of control to immediately jump to
the update statement.
• In a while loop or do/while loop, flow of control immediately jumps to the
Boolean expression.
Syntax:
continue;
The if Statement:
An if statement consists of a Boolean expression followed by one or more statements.
Syntax:
if(Boolean_expression)
{
//Statements will execute if the Boolean expression is true
}
Syntax:
if(Boolean_expression){
//Executes when the Boolean expression is true
}else{
//Executes when the Boolean expression is false
}
Syntax:
if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
}else if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}else if(Boolean_expression 3){
//Executes when the Boolean expression 3 is true
}else {
//Executes when the one of the above condition is true.
}
• An if can have zero or one else's and it must come after any else if's.
• An if can have zero to many else if's and they must come before the else.
• Once an else if succeeds, none of he remaining else if's or else's will be tested.
Syntax:
Syntax:
switch(expression){
case value :
//Statements
break; //optional
case value :
//Statements
break; //optional
//You can have any number of case statements.
default : //Optional
//Statements
}
Java Methods:
A Java method is a collection of statements that are grouped together to perform an
operation. When you call the System.out.println method, for example, the system actually
executes several statements in order to display a message on the console.
A method definition consists of a method header and a method body. Here are all the
parts of a method:
• Modifiers: The modifier, which is optional, tells the compiler how to call the
method. This defines the access type of the method.
• Return Type: A method may return a value. The returnValueType is the data
type of the value the method returns. Some methods perform the desired
operations without returning a value. In this case, the returnValueType is the
keyword void.
• Method Name: This is the actual name of the method. The method name and the
parameter list together constitute the method signature.
• Parameters: A parameter is like a placeholder. When a method is invoked, you
pass a value to the parameter. This value is referred to as actual parameter or
argument. The parameter list refers to the type, order, and number of the
parameters of a method. Parameters are optional; that is, a method may contain no
parameters.
• Method Body: The method body contains a collection of statements that define
what the method does.
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
Exceptions Handling:
A method catches an exception using a combination of the try and catch keywords. A
try/catch block is placed around the code that might generate an exception. Code within a
try/catch block is referred to as protected code, and the syntax for using try/catch looks
like the following:
try
{
//Protected code
}catch(ExceptionName e1)
{
//Catch block
}
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}
Using a finally block allows you to run any cleanup-type statements that you want to
execute, no matter what happens in the protected code.
A finally block appears at the end of the catch blocks and has the following syntax:
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}finally
{
//The finally block always executes.
}