Learning Objectives: (Java basics: History of Java, Java

Learning Objectives: (Java basics: History of Java, Java
Unit – II
Learning Objectives:
(Java basics: History of Java, Java buzzwords, data types, variables, scope and life time of variables,
arrays, operators, expressions, control statements, type conversion and costing, simple java program,
classes and objects – concepts of classes, objects, constructors, methods, access control, this keyword,
garbage collection, overloading methods and constructors, parameter passing, recursion, nested and
inner classes, exploring string class.)
Brief History of Java
Java, having been developed in 1991, is a relatively new programming language. At that time, James
Gosling from Sun Microsystems and his team began designing the first version of Java aimed at
programming home appliances which are controlled by a wide variety of computer processors.
Gosling's new language needed to be accessible by a variety of computer processors. In 1994, he
realized that such a language would be ideal for use with web browsers and Java's connection to the
internet began. In 1995, Netscape Incorporated released its latest version of the Netscape browser
which was capable of running Java programs.
Why is it called Java? It is customary for the creator of a programming language to name the
language anything he/she chooses. The original name of this language was Oak, until it was discovered
that a programming language already existed that was named Oak. As the story goes, after many hours
of trying to come up with a new name, the development team went out for coffee and the name Java
was born.
While Java is viewed as a programming language to design applications for the Internet, it is in
reality a general all purpose language which can be used independent of the Internet.
Some Java Details
Java syntax is (purposely) similar to C/C++ syntax. Java supports the object-oriented programming
paradigm (OOP). Because of OOP, some simple programs tend to be overly complex in Java. Java was
not designed with beginners in mind, but it is arguably easier to learn than C/C++. Java uses a garbage
collector to help manage memory. For some applications Java is a little slower than C/C++ but tends to
be much faster than (say) Python.
Platform Independence
Because the Java VM is available on many different operating systems, the same .class files can run on
different computers without recompiling.
The Java HotSpot virtual machine, perform additional steps at runtime to give your application a performance
boost, including recompiling some frequently used code to native machine code.
Java Buzz words:
Java brings together a bunch of excellent computer language ideas, and as a result it is fantastically
popular. From the original Sun Java whitepaper: “Java is a simple, object-oriented, distributed,
interpreted, robust, secure, architecture-neutral, portable, high performance, multi-threaded, and
dynamic language.”
Simple
Simpler than C++ – no operator overloading Mimics C/C++ syntax, operators, etc. where possible
To the programmer, Java's garbage collector (GC) memory model is much simpler than C/C++. On the
other hand, the libraries that accompany Java are not simple – they are enormous. But you can ignore
them when you don't want to use them.
Object-Oriented
Java is fundamentally based on the OOP notions of classes and objects Java uses a formal OOP type
system that must be obeyed at compile-time and run-time.
This is helpful for larger projects, where the structure helps keep the various parts consistent. Contrast
to Perl, which has more of a quick-n-dirty feel.
Distributed / Network Oriented
Java is network friendly – both in its portable, threaded nature, and because common networking
operations are built-in to the Java libraries. This will make our home works much simpler (than if we
had decided to use C++).
Robust / Secure / Safe
Java is very robust – both vs. unintentional memory errors and vs. malicious code such as viruses. Java
makes a tradeoff of robustness vs. performance.
1. The JVM uses a verifier on each class at runtime to verify that it has the correct structure
2. The JVM checks certain runtime operations, such as pointer and array access, to make sure they are
touching only the memory they should. Memory is managed
Automatically by the garbage collector (GC). This prevents the common “buffer overflow” security
problems suffered by C++ code. This also makes it easy to find many common bugs, since they are
caught by the runtime checker.
3. The Security Manager can check which operations a particular piece of code is allowed to do at
runtime.
Architecture Neutral / Portable
Java is designed to “Write Once Run Anywhere”, and for the most part this works. Not even a
recompile is required – a Java executable can work, without change, on any Java enabled platform.
High-performance
Java performance has gotten a lot better with aggressive just-in-time-compiler (JIT) techniques (the
HotSpot project). Java performance is often similar to the speed of C , and is faster than C in some
cases. However memory use and startup time are both significantly worse than C.
Multi-Threaded
Java has a notion of concurrency (running multiple programs or threads of execution at the same time)
wired right in to the language itself. This works out more cleanly than languages where concurrency is
bolted on after the fact.
Dynamic
Class and type information is kept around at runtime. This enables runtime loading and inspection of
code in a very flexible way.
Data Types:
Java programming language is a language in which all the variables must be declared first and then to
be used. That means to specify the name and the type of the variable. This specifies that Java is a
strongly-typed programming language. Like
Integer
Java defines four integer types :byte, short, int and long. All of these are signed, positive and negative
values.
The width and ranges of these integer type vary widely, as shown in this table:
Name
Width
Range
long
64
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
int
32
-2,147,483,648 to 2,147,483,647
short
16
-32,768 to 32,767
byte
8
-128 to 127
Declaration of Integer types
long price;
int num;
short qty;
byte bt;
Floating - Point Types
Floating-point numbers, also known as real numbers, are used when evaluating expressions that require
fractional precision. Their width and range shown here:
Name
Width
Range
double
64
1.7e-308 to 1.7e+308
float
32
3.4e-038 to 3.4+038
Declaration of floating-point types
double price;
float salary;
Character
In Java, the data type used to store character is char. In Java, char is a 16-bit type. The range of char is
0 to 65536.
Declaration of character types
char ch;
Boolean
Java has a simple type, called boolean, for logical value. It can have only two possible
values, true or false.
Declaration of boolean types
boolean b;
A sample code using different data types:
When we declare a field it is not always essential that we initialize it too. The compiler sets a default
value to the fields which are not initialized which might be zero or null. However this is not
recommended.
Variables:
A variable refers to the memory location that holds values like: numbers, texts etc. in the computer
memory. A variable is a name of location where the data is stored when a program executes.
The Java contains the following types of variables:
1. Instance Variables (Non-static fields): In object oriented programming, objects store their
individual states in the "non-static fields" that is declared without the static keyword. Each
object of the class has its own set of values for these non-static variables so we can say that
these are related to objects (instances of the class).Hence these variables are also known
as instance variables. These variables take default values if not initialized.
2. Class Variables (Static fields): These are collectively related to a class and none of the object
can claim them its sole-proprietor . The variables defined with static keyword are shared by all
objects. Here Objects do not store an individual value but they are forced to share it among
themselves. These variables are declared as "static fields" using the static keyword. Always
the same set of values is shared among different objects of the same class. So these variables are
like global variables which are same for all objects of the class. These variables take default
values if not initialized.
3. Local Variables: The variables defined in a method or block of code is called local variables.
These variables can be accessed within a method or block of code only. These variables don't
take default values if not initialized. These values are required to be initialized before using
them.
4. Parameters: Parameters or arguments are variables used in method declarations.
Declaring and defining variables
Before using variables you must declare the variables name and type. See the following example for
variables declaration:
int num; //represents that num is a variable that can store value of int type.
String name; //represents that name is a variable that can store string value.
boolean bol; //represents that bol is a variable that can take boolean value (true/false);
You can assign a value to a variable at the declaration time by using an assignment operator ( = ).
int num = 1000; // This line declares num as an int variable which holds value "1000".
boolean bol = true; // This line declares bol as boolean variable which is set to the value "true".
Literals
By literal we mean any number, text, or other information that represents a value. This means what you
type is what you get. We will use literals in addition to variables in Java statement. While writing a
source code as a character sequence, we can specify any value as a literal such as an integer. This
character sequence will specify the syntax based on the value's type. This will give a literal as a result.
For instance
int month = 10;
In the above statement the literal is an integer value i.e 10. The literal is 10 because it directly
represents the integer value.
In Java programming language there are some special type of literals that represent numbers,
characters, strings and boolean values. Lets have a closer look on each of the following.
Number Literals
Number literals is a sequence of digits and a suffix as L. To represent the type as long integer we use L
as a suffix. We can specify the integers either in decimal, hexadecimal or octal format. To indicate
a decimal format put the left most digit as nonzero. Similarly put the characters as ox to the left of at
least one hexadecimal digit to indicatehexadecimal format. Also we can indicate the octal format by
a zero digit followed by the digits 0 to 7. Lets tweak the table below.
Decimal integer literal of type long
659L
integer
Hexadecimal integer literal of type
0x4a
integer
Octal integer literal of type long
057L
integer
Character Literals
We can specify a character literal as a single printable character in a pair of single quote characters such
as 'a', '#', and '3'. You must be knowing about the ASCII character set. The ASCII character set includes
128 characters including letters, numerals, punctuations etc. There are few character literals which are
not readily printable through a keyboard. The table below shows the codes that can represent these
special characters. The letter d such as in the octal, hex etc represents a number.
Escap
Meaning
e
\n
New line
\t
Tab
\b
Backspace
\r
Carriage return
\f
Formfeed
\\
Backslash
\'
Single quotation mark
\"
Double quotation mark
\d
Octal
\xd
Hexadecimal
\ud
Unicode character
It is very interesting to know that if we want to specify a single quote, a backslash, or a nonprintable
character as a character literal use an escape sequence. An escape sequence uses a special syntax to
represents a character. The syntax begins with a single backslash character.
Lets see the table below in which the character literals use Unicode escape sequence to represent
printable and nonprintable characters both.
'u0041' Capital letter A
'\u0030' Digit 0
'\u0022' Double quote "
'\u003b' Punctuation ;
'\u0020' Space
'\u0009' Horizontal Tab
Boolean Literals
The values true and false are also treated as literals in Java programming. When we assign a value to a
boolean variable, we can only use these two values. Unlike C, we can't presume that the value of 1 is
equivalent to true and 0 is equivalent to false in Java. We have to use the values true and false to
represent a Boolean value. Like
boolean chosen = true;
Remember that the literal true is not represented by the quotation marks around it. The Java compiler
will take it as a string of characters, if its in quotation marks.
Floating-point literals
Floating-point numbers are like real numbers in mathematics, for example, 4.13179, -0.000001. Java
has two kinds of floating-point numbers: float and double. The default type when you write a floatingpoint literal is double.
Type
Size
Range
Precision
name bytes bits approximate in decimal digits
float 4
32 +/- 3.4 * 1038
6-7
doubl
8
64 +/- 1.8 * 10308
15
e
A floating-point literal can be denoted as a decimal point, a fraction part, an exponent (represented by E
or e) and as an integer. We also add a suffix to the floating point literal as D, d, F or f. The type of a
floating-point literal defaults to double-precision floating-point.
The following floating-point literals represent double-precision floating-point and floating-point values.
6.5E+32 (or
Double-precision floating6.5E32)
point literal
Double-precision floating7D
point literal
.01f
Floating-point literal
String Literals
The string of characters is represented as String literals in Java. In Java a string is not a basic data type,
rather it is an object. These strings are not stored in arrays as in C language. There are few methods
provided in Java to combine strings, modify strings and to know whether to strings have the same
value.
We represent string literals as
String myString = "How are you?";
The above example shows how to represent a string. It consists of a series of characters inside double
quotation marks.
Lets see some more examples of string literals:
""
// the empty string
"\"" // a string containing "
"This is a string" // a string containing 16 characters
"This is a " + // actually a string-valued constant expression,
"two-line string" // formed from two string literals
Strings can include the character escape codes as well, as shown here:
String example = "Your Name, \"Sumit\"";
System.out.println("Thankingyou,\nRichards\n");
Null Literals
The final literal that we can use in Java programming is a Null literal. We specify the Null literal in the
source code as 'null'. To reduce the number of references to an object, use null literal. The type of the
null literal is always null. We typically assign null literals to object reference variables. For instance
s = null;
An this example an object is referenced by s. We reduce the number of references to an object by
assigning null to s. Now, as in this example the object is no longer referenced so it will be available for
the garbage collection i.e. the compiler will destroy it and the free memory will be allocated to the
other object. Well, we will later learn about garbage collection.
Arrays:
An array is a structure that holds multiple values of the same type. The length of an array is established when the
array is created (at runtime). After creation, an array is a fixed-length structure.
Arrays are defined and used with the square-brackets indexing operator [ ]. To define an array you simply follow
your type name with empty square brackets:
int[ ] a1;
You can also put the square brackets after the identifier to produce exactly the same meaning:
int a1[ ];
For arrays, initialization can appear anywhere in your code, but you can also use a special kind of initialization
expression that must occur at the point where the array is created. This special initialization is a set of values
surrounded by curly braces. The storage allocation (the equivalent of using new) is taken care of by the compiler
in this case. For example:
int[] a1 = { 1, 2, 3, 4, 5 };
So why would you ever define an array handle without an array?
int[] a2;
Well, it's possible to assign one array to another in Java, so you can say:
a2 = a1;
Example:
Following statement declares an array variable, myList, creates an array of 10 elements of double type, and
assigns its reference to myList.:
double[] myList = new double[10];
Following picture represents array myList. Here myList holds ten double values and the indices are from 0 to 9.
Java Basic Operators:
Java provides a rich set of operators to manipulate variables. We can divide all the Java operators into the
following groups:
 Arithmetic Operators
 Relational Operators
 Bitwise Operators
 Logical Operators
 Assignment Operators
 Misc Operators
The Arithmetic Operators:
Arithmetic operators are used in mathematical expressions in the same way that they are used in algebra. The
following table lists the arithmetic operators:
Assume integer variable A holds 10 and variable B holds 20 then:
Operator
Description
Example
+
Addition - Adds values on either side of the
operator
A + B will give 30
-
Subtraction - Subtracts right hand operand from A - B will give -10
left hand operand
*
Multiplication - Multiplies values on either side A * B will give 200
of the operator
/
Division - Divides left hand operand by right
hand operand
B / A will give 2
%
Modulus - Divides left hand operand by right
hand operand and returns remainder
B % A will give 0
++
Increment - Increase the value of operand by 1
B++ gives 21
--
Decrement - Decrease the value of operand by
1
B-- gives 19
The Relational Operators:
There are following relational operators supported by Java language
Assume variable A holds 10 and variable B holds 20 then:
Operator
Description
Example
==
Checks if the value of two operands is equal or
not, if yes then condition becomes true.
(A == B) is not true.
!=
Checks if the value of two operands is equal or
not, if values are not equal then condition
becomes true.
(A! = B) is true.
>
Checks if the value of left operand is greater
than the value of right operand, if yes then
condition becomes true.
(A > B) is not true.
<
Checks if the value of left operand is less than (A < B) is true.
the value of right operand, if yes then condition
becomes true.
>=
Checks if the value of left operand is greater
than or equal to the value of right operand, if
yes then condition becomes true.
(A >= B) is not true.
<=
Checks if the value of left operand is less than
or equal to the value of right operand, if yes
then condition becomes true.
(A <= B) is true.
The Bitwise Operators:
Java defines several bitwise operators which can be applied to the integer types, long, int, short, char, and byte.
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&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
The following table lists the bitwise operators:
Assume integer variable A holds 60 and variable B holds 13 then:
Operator
Description
Example
&
Binary AND Operator copies a bit to the result
if it exists in both operands.
(A & B) will give 12 which is 0000 1100
|
Binary OR Operator copies a bit if it exists in
eather operand.
(A | B) will give 61 which is 0011 1101
^
Binary XOR Operator copies the bit if it is set
in one operand but not both.
(A ^ B) will give 49 which is 0011 0001
~
Binary Ones Complement Operator is unary
and has the efect of 'flipping' bits.
(~A ) will give -60 which is 1100 0011
<<
Binary Left Shift Operator. The left operands
value is moved left by the number of bits
specified by the right operand.
A << 2 will give 240 which is 1111 0000
>>
Binary Right Shift Operator. The left operands
value is moved right by the number of bits
specified by the right operand.
A >> 2 will give 15 which is 1111
>>>
Shift right zero fill operator. The left operands
value is moved right by the number of bits
specified by the right operand and shifted
values are filled up with zeros.
A >>>2 will give 15 which is 0000 1111
The Logical Operators:
The following table lists the logical operators:
Assume boolean variables A holds true and variable B holds false then:
Operator
&&
Description
Called Logical AND operator. If both the
Example
(A && B) is false.
operands are non zero then then condition
becomes true.
||
Called Logical OR Operator. If any of the two
operands are non zero then then condition
becomes true.
(A || B) is true.
!
Called Logical NOT Operator. Use to reverses !(A && B) is true.
the logical state of its operand. If a condition is
true then Logical NOT operator will make
false.
The Assignment Operators:
There are following assignment operators supported by Java language:
Operator
Description
Example
=
Simple assignment operator, Assigns
values from right side operands to left
side operand
C = A + B will assigne value of A + B into C
+=
Add AND assignment operator, It adds
right operand to the left operand and
assign the result to left operand
C += A is equivalent to C = C + A
-=
Subtract AND assignment operator, It
subtracts right operand from the left
operand and assign the result to left
operand
C -= A is equivalent to C = C - A
*=
Multiply AND assignment operator, It
multiplies right operand with the left
operand and assign the result to left
operand
C *= A is equivalent to C = C * A
/=
Divide AND assignment operator, It
divides left operand with the right
operand and assign the result to left
operand
C /= A is equivalent to C = C / A
%=
Modulus AND assignment operator, It
takes modulus using two operands and
assign the result to left operand
C %= A is equivalent to C = C % A
<<=
Left shift AND assignment operator
C <<= 2 is same as C = C << 2
>>=
Right shift AND assignment operator
C >>= 2 is same as C = C >> 2
&=
Bitwise AND assignment operator
C &= 2 is same as C = C & 2
^=
bitwise exclusive OR and assignment
operator
C ^= 2 is same as C = C ^ 2
|=
bitwise inclusive OR and assignment
operator
C |= 2 is same as C = C | 2
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 :
variable x = (expression) ? value if true : value if false
Following is the example:
public class Test {
public static void main(String args[]){
int a , b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
This would produce following result:
Value of b is : 30
Value of b is : 20
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)
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:
String name = = 'James';
boolean result = s instanceOf String;
// This will return true since name is type of String
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 {}
public class Car extends Vehicle {
public static void main(String args[]){
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result);
}
}
This would produce following result:
true
Precedence of Java Operators:
Operator precedence determines the grouping of terms in an expression. This affects how an expression is
evaluated. Certain operators have higher precedence than others; for example, the multiplication operator has
higher precedence than the addition operator:
For example x = 7 + 3 * 2; Here x is assigned 13, not 20 because operator * has higher precedence 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.
Category
Operator
Associativity
Postfix
() [] . (dot operator)
Left to right
Unary
++ - - ! ~
Right to left
Multiplicative
*/%
Left to right
Additive
+-
Left to right
Shift
>> >>> <<
Left to right
Relational
> >= < <=
Left to right
Equality
== !=
Left to right
Bitwise AND
&
Left to right
Bitwise XOR
^
Left to right
Bitwise OR
|
Left to right
Logical AND
&&
Left to right
Logical OR
||
Left to right
Conditional
?:
Right to left
Assignment
= += -= *= /= %= >>= <<= &= ^= |=
Right to left
Comma
,
Left to right
Control Statements
The control statement are used to controll the flow of execution of the program . This execution order
depends on the supplied data values and the conditional logic. Java contains the following types of
control statements:
1- Selection Statements
2- Repetition Statements
3- Branching Statements
Selection statements:
1. If Statement:
This is a control statement to execute a single statement or a block of code, when the given
condition is true and if it is false then it skips if block and rest code of program is executed .
Syntax:
if(conditional_expression){
<statements>;
...;
...;
}
Example: If n%2 evaluates to 0 then the "if" block is executed. Here it evaluates to 0 so if
block is executed. Hence "This is even number" is printed on the screen.
int n = 10;
if(n%2 = = 0){
System.out.println("This is
even number");
}
2. If-else Statement:
The "if-else" statement is an extension of if statement that provides another option when 'if'
statement evaluates to "false" i.e. else block is executed if "if" statement is false.
Syntax:
if(conditional_expression){
<statements>;
...;
...;
}
else{
<statements>;
....;
....;
}
Example: If n%2 doesn't evaluate to 0 then else block is executed. Here n%2 evaluates to 1 that
is not equal to 0 so else block is executed. So "This is not even number" is printed on the
screen.
int n = 11;
if(n%2 = = 0){
System.out.println("This is even
number");
}
else{
System.out.println("This is not
even number");
}
3. Switch Statement:
This is an easier implementation to the if-else statements. The keyword "switch" is followed
by an expression that should evaluates to byte, short, char or int primitive data types ,only. In a
switch block there can be one or more labeled cases. The expression that creates labels for the
case must be unique. The switch expression is matched with each case label. Only the matched
case is executed ,if no case matches then the default statement (if present) is executed.
Syntax:
switch(control_expression){
case expression 1:
<statement>;
case expression 2:
<statement>;
...
...
case expression n:
<statement>;
default:
<statement>;
}//end switch
Example: Here expression "day" in switch statement evaluates to 5 which matches with a case
labeled "5" so code in case 5 is executed that results to output "Friday" on the screen.
int day = 5;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesda
y");
break;
case 4:
System.out.println("Thrusday")
;
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday")
;
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Invalid
entry");
break;
}
Repetition Statements:
1.
while loop statements:
This is a looping or repeating statement. It executes a block of code or statements till the given condition is true. The expression
must be evaluated to a boolean value. It continues testing the condition and executes the block of code. When the expression
results to false control comes out of loop.
Syntax:
while(expression){
<statement>;
...;
...;
}
Example: Here expression i<=10 is the condition which is checked before entering into the loop statements. When i is greater
than value 10 control comes out of loop and next statement is executed. So here i contains value "1" which is less than number
"10" so control goes inside of the loop and prints current value of i and increments value of i. Now again control comes back to the
loop and condition is checked. This procedure continues until i becomes greater than value "10". So this loop prints values 1 to 10
on the screen.
int i = 1;
//print 1 to 10
while (i <= 10){
System.out.println("Num
" + i);
i++;
}
2.
3.
do-while loop statements:
This is another looping statement that tests the given condition past so you can say that the do-while looping statement is a pasttest loop statement. First the do block statements are executed then the condition given in while statement is checked. So in this
case, even the condition is false in the first attempt, do block of code is executed at least once.
Syntax:
do{
<statement>;
...;
...;
}while (expression);
Example: Here first do block of code is executed and current value "1" is printed then the condition i<=10 is checked. Here "1" is
less than number "10" so the control comes back to do block. This process continues till value of i becomes greater than 10.
int i = 1;
do{
System.out.println("Num
: " + i);
i++;
}while(i <= 10);
4.
5.
for loop statements:
This is also a loop statement that provides a compact way to iterate over a range of values. From a user point of view, this is
reliable because it executes the statements within this block repeatedly till the specified conditions is true .
Syntax:
for (initialization; condition; increment or decrement){
<statement>;
...;
...;
}
initialization: The loop is started with the value specified.
condition: It evaluates to either 'true' or 'false'. If it is false then the loop is terminated.
increment or decrement: After each iteration, value increments or decrements.
Example: Here num is initialized to value "1", condition is checked whether num<=10. If it is so then control goes into the loop and
current value of num is printed. Now num is incremented and checked again whether num<=10.If it is so then again it enters into
the loop. This process continues till num>10. It prints values 1 to10 on the screen.
for (int num = 1; num <=
10; num++){
System.out.println("Num:
" + num);
}
Branching (or) Jump Statements:
1.
Break statements:
The break statement is a branching statement that contains two forms: labeled and unlabeled. The break statement is used for
breaking the execution of a loop (while, do-while and for) . It also terminates the switch statements.
Syntax:
break; // breaks the innermost loop or switch statement.
break label; // breaks the outermost loop in a series of nested loops.
Example: When if statement evaluates to true it prints "data is found" and comes out of the loop and executes the statements just
following the loop.
2.
Continue statements:
This is a branching statement that are used in the looping statements (while, do-while and for) to skip the current iteration of the
loop and resume the next iteration .
Syntax:
continue;
3.
Example:
4.
Return statements:
It is a special branching statement that transfers the control to the caller of the method. This statement is used to return a value to
the caller method and terminates execution of method. This has two forms: one that returns a value and the other that can not
return. the returned value type must match the return type of method.
Syntax:
return;
return values;
return; //This returns nothing. So this can be used when method is declared with void return type.
return expression; //It returns the value evaluated from the expression.
Example: Here Welcome() function is called within println() function which returns a String value "Welcome to roseIndia.net". This
is printed to the screen.
Type Conversion (or) Casting:
Type Casting refers to changing an entity of one datatype into another. This is important for the type conversion in developing any
application. If you will store a int value into a byte variable directly, this will be illegal operation. For storing your calculated int value in
a byte variable you will have to change the type of resultant data which has to be stored. This type of operation has illustrated below :
In this example we will see that how to convert the data type by using type casting. In the given line of the code c
1:0); illustrates that if t which is boolean type variable is true then value of c
= (char)(t?
which is
the char type variable will be 1 but 1 is a numeric value. So, 1 is changed into
character according to the Unicode value. But in this line c = (char)(t?'1':'0');
is already given as a character which will be stored as it is in the char type variable c.
Code of the program :
public class conversion{
public static void main(String[] args){
boolean t = true;
byte b = 2;
short s = 100;
char c = 'C';
int i = 200;
long l = 24000;
float f = 3.14f;
double d = 0.000000000000053;
String g = "string";
System.out.println("Value of all the variables like");
System.out.println("t = " + t );
System.out.println("b = " + b );
System.out.println("s = " + s );
System.out.println("c = " + c );
System.out.println("i = " + i );
System.out.println("l = " + l );
System.out.println("f = " + f );
System.out.println("d = " + d );
System.out.println("g = " + g );
System.out.println();
//Convert from boolean to byte.
b = (byte)(t?1:0);
System.out.println("Value of b after conversion : " + b);
//Convert from boolean to short.
s = (short)(t?1:0);
System.out.println("Value of s after conversion : " + s);
//Convert from boolean to int.
i = (int)(t?1:0);
System.out.println("Value of i after conversion : " + i);
//Convert from boolean to char.
c = (char)(t?'1':'0');
System.out.println("Value of c after conversion : " + c);
c = (char)(t?1:0);
System.out.println("Value of c after conversion in unicode : " + c);
//Convert from boolean to long.
l = (long)(t?1:0);
System.out.println("Value of l after conversion : " + l);
//Convert from boolean to float.
f = (float)(t?1:0);
System.out.println("Value of f after conversion : " + f);
//Convert from boolean to double.
d = (double)(t?1:0);
System.out.println("Value of d after conversion : " + d);
//Convert from boolean to String.
g = String.valueOf(t);
System.out.println("Value of g after conversion : " + g);
g = (String)(t?"1":"0");
System.out.println("Value of g after conversion : " + g);
int sum = (int)(b + i + l + d + f);
System.out.println("Value of sum after conversion : " + sum);
1
Sample Java Program:
Compiling and Running Java Program
First create a text file and type “Hello World Program “ like below
But your class name should be same as file name
class MyProgram{
public static void main(String[] args)
{
System.out.println(“Hello World”);
}
}
Save as the file with the name MyProgram.java
To compile MyProgram.java from the command line, type
C:\Program Files\java> javac MyProgram.java
to produce a MyProgram.class file.
To run MyProgram.class, from the the command line, type
C:\ Program Files\java > java MyProgram
which will call the JVM and runs MyProgram.class.
All source code is first written in plain text files ending with the .java extension. Source files are then
compiled to produce .class files. A .class file does not contain code that is native to your processor.
Rather, it contains bytecode, the machine language of the Java Virtual Machine (Java VM). The java
launcher tool then runs your application with an instance of the Java VM.
Figure 1: MyProgram.java is compiled to produce MyProgram.class, which is then interpreted by the Java
VM before My Program runs on a computer.
Object:
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.
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.
A sample of a class is given below:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
A class can contain any of the following variable types.
 Local variables . variables defined inside methods, constructors or blocks are called local
variables. The variable will be declared and initialized within the method and the variable will
be destroyed when the method has completed.
 Instance variables . Instance variables are variables within a class but outside any method.
These variables are instantiated when the class is loaded. Instance variables can be accessed
from inside any method, constructor or blocks of that particular class.
 Class variables . Class variables are variables declared with in a class, outside any method,
with the static keyword.
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.
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.
There are three steps when creating an object from a class:
 Declaration . A variable declaration with a variable name with an object type.
 Instantiation . The 'new' key word is used to create the object.
 Initialization . The 'new' keyword is followed by a call o a constructor. This call initializes the
new object.
Example of creating an object is given below:
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:
Passed Name is :tommy
Accessing Instance Variables and Methods:
Instance variables and methods are accessed via created objects. To access an instance variable the fully
qualified path should be as follows:
/* First create an object */
ObjectReference = new Constructor();
/* Now call a variable as follows */
ObjectReference.variableName;
/* Now you can call a class method as follows */
ObjectReference.MethodName();
Example:
This example explains how to access instance variables and methods of a class:
class Puppy{
int puppyAge;
public Puppy(String name){
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
public setAge( int age ){
puppyAge = age;
}
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" );
/* Call class method to set puppy's age */
myPuppy.setAge( 2 );
/* Call another class method to get puppy's age */
myPuppy.getAge( );
/* You can access instance variable as follows as well */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
If we compile and run the above program then it would produce following result:
Passed Name is :tommy
Puppy's age is :2
Variable Value :2
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.
Example of a constructor is given below:
class Puppy{
public puppy(){
}
public puppy(String name){
// This constructor has one parameter, name.
}
}
Java also supports Singleton Classes where you would be able to create only one instance of a class.
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:
modifier returnValueType methodName(list of parameters) {
// Method body;
}
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 the max between two numbers */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
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:
int larger = max(30, 40);
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:
public class TestMax {
/** Main method */
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println("The maximum between " + i +
" and " + j + " is " + k);
}
/** Return the max between two numbers */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
This would produce following result:
The maximum between 5 and 2 is 5
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.
The void Keyword:
This section shows how to declare and invoke a void method. Following example gives a program that declares a
method named printGrade and invokes it to print the grade for a given score.
Example:
public class TestVoidMethod {
public static void main(String[] args) {
printGrade(78.5);
}
public static void printGrade(double score) {
if (score >= 90.0) {
System.out.println('A');
}
else if (score >= 80.0) {
System.out.println('B');
}
else if (score >= 70.0) {
System.out.println('C');
}
else if (score >= 60.0) {
System.out.println('D');
}
else {
System.out.println('F');
}
}
}
This would produce following result:
C
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.
Passing Parameters by Values:
When calling a method, you need to provide arguments, which must be given in the same order as their
respective parameters in the method specification. This is known as parameter order association.
For example, the following method prints a message n times:
public static void nPrintln(String message, int n) {
for (int i = 0; i < n; i++)
System.out.println(message);
}
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.
For simplicity, Java programmers often say passing an argument x to a parameter y, which actually means
passing the value of x to y.
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.
public class TestPassByValue {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
System.out.println("Before swap method, num1 is " +
num1 + " and num2 is " + num2);
// Invoke the swap method
swap(num1, num2);
System.out.println("After swap method, num1 is " +
num1 + " and num2 is " + num2);
}
/** Method to swap two variables */
public static void swap(int n1, int n2) {
System.out.println("\tInside the swap method");
System.out.println("\t\tBefore swapping n1 is " + n1
+ " n2 is " + n2);
// Swap n1 with n2
int temp = n1;
n1 = n2;
n2 = temp;
System.out.println("\t\tAfter swapping n1 is " + n1
+ " n2 is " + n2);
}
}
This would produce following result:
Before swap method, num1 is 1 and num2 is 2
Inside the swap method
Before swapping n1 is 1 n2 is 2
After swapping n1 is 2 n2 is 1
After swap method, num1 is 1 and num2 is 2
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:
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
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 Variables:
 The scope of a variable is the part of the program where the variable can be referenced. A variable
defined inside a method is referred to as a local variable.
 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.
Using Command-Line Arguments:
 Sometimes you will want to pass information into a program when you run it. This is accomplished by
passing command-line arguments to main( ).
 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]);
}
}
}
Try executing this program, as shown here:
java CommandLine this is a command line 200 -100
This would produce following result:
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:
Here is a simple example that uses a constructor:
// A simple constructor.
class MyClass {
int x;
// Following is the constructor
MyClass() {
x = 10;
}
}
You would call constructor to initialize objects as follows:
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:
Here is a simple example that uses a constructor:
// A simple constructor.
class MyClass {
int x;
// Following is the constructor
MyClass(int i ) {
x = i;
}
}
You would call constructor to initialize objects as follows:
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);
}
}
This would produce following result:
10 20
The finalize( ) Method:
It is possible to define a method that will be called just before an object's final destruction by the
garbage collector. This method is called finalize( ), and it can be used to ensure that an object
terminates cleanly.
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.
The finalize( ) method has this general form:
protected void finalize( )
{
// finalization code here
}
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.
Important Questions:
1. (a) What is an array? Why arrays are easier to use compared to a bunch of related variables?
(b) Write a program for transposition of a matrix using arraycopy command.
2. (a) What is a constructor? What are its special properties?
(b) How do we invoke a constructor?
(c) What are objects? How are they created from a class?
3. (a) What is class? How does it accomplish data hiding?
(b) How do classes help us to organize our programs?
(c) Compare and contrast overloading and overriding methods.
4.(a) How does String class differ from the StringBuffer class?
(b) Write program to do the following:
i. To output the question “who is the inventor of java”?
ii. To accept an answer
iii. To print out “Good” and then stop, if the answer is correct.
iv. To output the message “try again”, if the answer is wrong
v. To display the correct answer when the answer is wrong even at the third attempt.
5.Briefly explain following:
(a) final & this keywords
(b) garbage collection
(c) passing parameter-call by value
(d) Overloading methods & Constructors.
6.(a) What is the difference between equality of objects and equality of objects and equality of
references that refer to them?
(b) What is the difference between a public member and a private member of a class?
(c) write an application that computes the value of ex by using the formula:
ex = 1 + x/1! + x2/2! + x3/3! + ..........
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement