You are on page 1of 60

Java Technology

An Introduction

Agenda
Fundamentals Operators Flow Controls

Confidential Mr. Anuj

Outline
Java Source File Structure Java Keywords Identifiers Literals Variables and Data Types Variable Declaration and Initialization Operators Primitive Casting Flow Controls

Confidential Mr. Anuj

Objectives
At the end of this section, you should be able to: Recognize and create correctly constructed source code Recognize and create correctly constructed declarations Distinguish between legal and illegal identifiers Describe all the primitive data types and the ranges of the integral data types Recognize correctly formatted data types Learn to properly declare and initialize variables Understand the contents of the argument list of an applications main() method

Confidential Mr. Anuj

Objectives (continued)
Operators:
Learn to use:
Unary operators Arithmetic operators String operators Relational operators Conditional operators Logical operators Assignment operators

Be familiar with object, shift and bitwise operators Identify the order of evaluation and change its precedence Learn how to cast primitive data types
Confidential Mr. Anuj
5

Objectives (continued)
Flow Controls:
Learn syntax and correct use of:
if-else() statement switch() statement while() statement do-while() statement for() statement break, continue and label statements

Introduce the concept of return statement

Confidential Mr. Anuj

Java Source File Structure


declaration order
1. Package declaration
Used to organize a collection of related classes.

2. Import statement
Used to reference classes and declared in other packages.

/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } } class Extra { /* * class body */ }

3. Class declaration
A Java source file can have several classes but only one public class is allowed.

Confidential Mr. Anuj

Java Source File Structure


Comments
1. Single Line Comment
// insert comments here

2. Block Comment
/* * insert comments here */

/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } }

3. Documentation Comment
/**
* insert documentation */

Whitespaces
Tabs and spaces are ignored by the compiler. Used to improve readability of code.

class Extra { /* * class body */ }

Confidential Mr. Anuj

Java Source File Structure


/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } } class Extra { /* * class body */ }

Class
Every java program includes at least one class definition. The class is the fundamental component of all Java programs.

A class definition contains all the variables and methods that make the program work. This is contained in the class body indicated by the opening and closing braces.

Confidential Mr. Anuj

Java Source File Structure


Braces
Braces are used for grouping statements or block of codes. The left brace ( { ) indicates the beginning of a class body, which contains any variables and methods the class needs. The left brace also indicates the beginning of a method body. For every left brace that opens a class or method you need a corresponding right brace ( } ) to close the class or method. A right brace always closes its nearest left brace.
/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } } class Extra { /* * class body */ }

Confidential Mr. Anuj

10

Java Source File Structure


/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } } class Extra { /* * class body */ }

main() method
This line begins the main() method. This is the line at which the program will begin executing.

String args[]
Declares a parameter named args, which is an array of String. It represents command-line arguments.

Confidential Mr. Anuj

11

Java Source File Structure


/* * Created on Jul 14, 2005 * * First Java Program */ package com.jds.sample; import java.util.*; /** * @author JDS */ public class JavaMain { public static void main(String[] args) { // print a message System.out.println("Welcome to Java!"); } } class Extra { /* * class bodyTerminating character */ } Semicolon (;) is the terminating

Java statement
A complete unit of work in a Java program. A statement is always terminated with a semicolon and may span multiple lines in your source code.

System.out.println()
This line outputs the string Welcome to Java! followed by a new line on the screen.

character for any java statement. Confidential Mr. Anuj


12

Java Keywords
abstract assert boolean break byte case catch char class continue default do double else extends false final finally float for const if implements import instanceof int interface long native new null goto
13

package private protected public return short static strictfp super switch

synchronized this throw throws transient true try void volatile while

Confidential Mr. Anuj

Identifiers
An identifier is the name given by a programmer to a variable, statement label, method, class, and interface An identifier must begin with a letter, $ or _ Subsequent characters must be letters, numbers, $ or _ An identifier must not be a Java keyword Identifiers are case-sensitive

Incorrect 3strikes Write&Print switch

Correct strikes3 Write_Print Switch

printMe is not the same as PrintMe

Confidential Mr. Anuj

14

Literals
A literal is a representation of a value of a particular type
Type Examples & Values true false a \uFFFF' \777

boolean
character integer floating-point object

123 123L O123 Ox123


123.5 123.5D 123.5F 123.5e+6 test null

escape sequences \n \t \b \f \r \ \ \\

Confidential Mr. Anuj

15

Variable and Data Types


A variable is a named storage location used to represent data that can be changed while the program is running A data type determines the values that a variable can contain and the operations that can be performed on it Categories of data types: 1. Primitive data types 2. Reference data types

Confidential Mr. Anuj

16

What is strongly typed means?


Java is what is known as a strongly typed language. That means that Java is a language that will only accept specific values within specific variables or parameters. Some languages, such as JavaScript, are weakly typed languages. This means that you can readily store whatever you want into a variable.

Confidential Mr. Anuj

17

17

Here is an example of the difference between strongly typed and weakly typed languages:
1: 2: 3: 4: JavaScript (weakly typed) var x; // Declare a variable x = 1; // Legal x = "Test"; // Legal x = true; // Legal Java (strongly typed)

1: int x; // Declare a variable of type int 2: x = 1; // Legal 3: x = "Test" // Compiler Error 4: x = true; // Compiler Error

Confidential Mr. Anuj

18

18

Primitive Data Types


Primitive data types represent atomic values and are built-in to Java Java has 8 primitive data types
Type boolean char byte Bits (n/a) 16 8 16 32 64 32 64 false '\u0000' [0] -128 [-27] -32,768 [-215] -2,147,483,648 [-231] -9,223,372,036,854,775,808 [-263] 1.40129846432481707e-45 4.94065645841246544e-324 Lowest Value true '\uffff' [216-1] +127 [27-1] +32,767 [215-1] +2,147,483,647 [231-1] +9,223,372,036,854,775,807 [263-1] 3.40282346638528860e+38 1.79769313486231570e+308 Highest Value

short
int long

float
double

Confidential Mr. Anuj

19

Reference Data Types


Reference data types represent objects

A reference serves as a handle to the object, it is a way to get to the object


Java has 2 reference data types

1. Class
2. Interface

Confidential Mr. Anuj

20

Variable Declaration & Initialization


Declaring a variable with primitive data type
int age = 21; initial value

primitive identifier type name

Declaring a variable with reference data type Date String now = new Date(); name = Jason;

reference type

identifier initial name value


Confidential Mr. Anuj
21

Primitive Type Declaration


declaration
allot space to memory

MEMORY

int age;
type Identifier name

age

17 0

initialization/assignment age = 17;


Identifier value name
stack

Confidential Mr. Anuj

22

Reference Type Declaration


allot space to memory

Car myCar;
type Identifier name

myCar

memory address location

reference
The heap

myCar = new Car(Bumble Bee);


Values

Bumble Bee

Identifier name

Car object

Confidential Mr. Anuj

23

0x 0fed02e
Account obj1 Class Account

num = 101; type = S balance = $1000.00 ; Memory

int num;
char type; double balance; Account obj2 0x 0fc024b

num = 241;
type = C balance = $4890.00 ;

Confidential Mr. Anuj

24

24

Scope of Variable
Member Variables Declared inside the class but outside of all methods. Accessible by all methods of the class.
Local Variables Available only within the method where they were declared. Method parameters have local scope.
public class HelloWorld { //accessible throughout the class String name; public void otherMethod(){ float salary = 15000.00f; //cant access age variable from here } public static void main(String args[ ]) { //cant access salary variable from here int age=17; //cant access ctr variable from here for (int ctr=0 ; ctr<5 ; ctr++) { //age variable accessible here } } }
Confidential Mr. Anuj
25

Agenda
Fundamentals Operators Flow Controls

Confidential Mr. Anuj

26

Operators and Assignments


Unary operators Arithmetic operators String operator Relational operators Conditional operator Logical operator Assignment operators Object operators Shift operators Bitwise operators Evaluation order Primitive Casting
Confidential Mr. Anuj
27

Unary Operators
Unary operators use only one operand
++ -+ Increment by 1, can be prefix or postfix Decrement by 1, can be prefix or postfix Positive sign Negative sign

Sample code:
int num=10; System.out.println("incrementing/decrementing..."); System.out.println(++num); System.out.println(--num); System.out.println(num++); System.out.println(num--); System.out.println("setting signs..."); System.out.println(+num); System.out.println(-num);

Sample output:
incrementing/decrementing... 11 10 10 11 setting signs... 10 -10

Confidential Mr. Anuj

28

Arithmetic Operators
Arithmetic operators are used for basic mathematical operations
+ Add Subtract Multiply Divide

* / %

Modulo, remainder

Sample code:
int num1=15, num2=10; System.out.println("calculating..."); System.out.println(num1 + num2); System.out.println(num1 - num2); System.out.println(num1 * num2); System.out.println(num1 / num2); System.out.println(num1 % num2);

Sample output:
calculating... 25 5 150 1 5

Confidential Mr. Anuj

29

String Operator
String operator (+) is used to concatenate operands If one operand is String, the other operands are converted to String
Sample code:
String fname = "Josephine", lname = Luv", mi = "T"; String fullName = lname + ", " + fname + " " + mi + "."; String nickName = "Jessy"; int age=21; System.out.println("My full name is: " + fullName); System.out.println("You can call me " + nickName + "!"); System.out.println("I'm " + age + " years old.");

Sample output:
My full name is: Luv, Josephine T. You can call me Jessy! I'm 21 years old.

Confidential Mr. Anuj

30

Relational Operators
Relational operators are used to compare values boolean values cannot be compared with non-boolean values Only object references are checked for equality, and not their states Objects cannot be compared with null null is not the same as
< <= > >= == !=

Less than Less than or equal to

Greater than
Greater than or equal to Equals

Not equals

Confidential Mr. Anuj

31

Relational Operators
Sample code:
String name1 = "Marlon"; int weight1=140, height1=74; String name2 = "Katie"; int weight2=124, height2=78; boolean isLight = weight1 < weight2, isLightEq = weight1 <= weight2; System.out.println("Is " + name1 + " lighter than " + name2 + "? " + isLight); System.out.println("Is " + name1 + " lighter or same weight as " + name2 + "? " + isLightEq); boolean isTall = height1 > height2, isTallEq = height1 >= height2; System.out.println("Is " + name1 + " taller than " + name2 + "? " + isTall); System.out.println("Is " + name1 + " taller or same height as " + name2 + "? " + isTallEq); boolean isWeighEq = weight1 == weight2, isTallNotEq = height1 != height2; System.out.println("Is " + name1 + " same weight as " + name2 + "? " + isWeighEq); System.out.println("Is " + name1 + " not as tall as " + name2 + "? " + isTallNotEq); System.out.println("So who is heavier?"); System.out.println("And who is taller?");

Sample output:

Is Marlon lighter than Katie? false Is Marlon lighter or same weight as Katie? false Is Marlon taller than Katie? false Is Marlon taller or same height as Katie? false Is Marlon same weight as Katie? false Is Marlon not as tall as Katie? true So who is heavier? And who is taller?

Confidential Mr. Anuj

32

Conditional operator

The ternary operator (?:) provides a handy way to code simple if-else() statements in a single expression, it is also known as the conditional operator
If condition is true, then exp1 is returned as the result of operation If condition is false, then exp2 is returned as the result of operation

Can be nested to accommodate chain of conditions

Syntax:
condition ? exp1 : exp2;

Sample code:
int yyyy=1981, mm=10, dd=22; String mmm = mm==1?"Jan":mm==2?"Feb":mm==3?"Mar":mm==4?"Apr":mm==5?"May":mm==6?"Jun": mm==7?"Jul":mm==8?"Aug":mm==9?"Sep":mm==10?"Oct":mm==11?"Nov":mm==12?"Dec":"Unknown"; System.out.println("I was born on " + mmm + " " + dd + ", " + yyyy);

Sample output:
I was born on Oct 22, 1981

Confidential Mr. Anuj

33

Logical Operators
!

NOT AND OR XOR Short-circuit AND Short-circuit OR


Op1 && Op2 Op1 || Op2

Logical operators are used to compare boolean expressions ! inverts a boolean value & | evaluate both operands && || evaluate operands conditionally

&

| ^
&&

Truth Table
Op1 Op2 !Op1 Op1 & Op2 Op1 | Op2

||
Op1 ^ Op2

false false true true

false true false true

true true false false

false false false true

false true true true

false true true false

false false false true

false true true true

Confidential Mr. Anuj

34

Short-circuit Logical Operators (&&,|| and !)


Similar to the Boolean operators, but with an added ability to short-circuit part of the process, using a couple of mathematical rules:
If the left operand of an && operation is false, the result is boolean a = (5>8) operand automatically false, and thefalse;&& (8>5);is not evaluated right

boolean b = (8>5) || (5>8); true; If the left operand of an || operation is true, the result is automatically true, and the right operand is not evaluated

false; Boolean Complement boolean c = !b; ( ! ): The NOT function inverts the value of boolean
Confidential Mr. Anuj
35

Logical Operators
Sample code: Sample output:
Are you a candidate for promotion? true int yrsService=8; Will you be promoted as a regular employee? false double perfRate=86; Will you be promoted as a supervisor? false double salary=23000; Will you be promoted as a manager? true char position='S'; Will S-supervisor, M-manager, less? false // P-probationary R-regular, you be paid more and work E-executive, T-top executive I hope you won't be demoted, are you? false boolean forRegular, forSupervisor, forManager, forExecutive, forTopExecutive; forRegular = yrsService>1 & perfRate>80 & position=='P' & salary<10000; forSupervisor = yrsService>5 & perfRate>85 & position=='R' & salary<15000; forManager = yrsService>7 & perfRate>85 & position=='S' & salary<25000; forExecutive = yrsService>10 & perfRate>80 & position=='M' & salary<50000; forTopExecutive = yrsService>10 & perfRate>80 & position=='E' & salary<75000; boolean isPromoted = forRegular||forSupervisor||forManager||forExecutive||forTopExecutive; boolean isLuckyGuy = forExecutive ^ forTopExecutive; System.out.println("Are you a candidate for promotion? " + isPromoted); System.out.println("Will you be promoted as a regular employee? " + forRegular); System.out.println("Will you be promoted as a supervisor? " + forSupervisor); System.out.println("Will you be promoted as a manager? " + forManager); System.out.println("Will you be paid more and work less? " + isLuckyGuy); System.out.println("I hope you won't be demoted, are you? " + !isPromoted);

Confidential Mr. Anuj

36

Assignment Operators

Sample code:

Assignment operators are used to set the value of a variable


= += -= *= /= %= &= |= ^=

double unitPrice=120, qty=2, salesAmount; double discRate=15, discAmount, vatRate=10, vatAmount; // compute gross sales salesAmount = unitPrice * qty; System.out.println("Gross Sales: " + salesAmount); // compute tax vatRate /= 100; vatAmount = salesAmount * vatRate; salesAmount += vatAmount; System.out.println("Tax: " + vatAmount); // compute discount discRate /= 100; discAmount = salesAmount * discRate; salesAmount -= discAmount; System.out.println("Discount: " + discAmount); System.out.println("Please pay: " + salesAmount);

Assign
Add and assign Subtract and assign Multiply and assign Divide and assign Modulo and assign

AND and assign


OR and assign XOR and assign

Sample output:
Gross Sales: 240.0 Tax: 24.0 Discount: 39.6 Please pay: 224.4

Confidential Mr. Anuj

37

Casting
Casting is converting from one data type to another Implicit casting is an implied casting operations Explicit casting is a required casting operations Primitive casting is converting a primitive data type to another
Widening conversion is casting a narrower data type to a broader data type Narrowing conversion is casting a broader data type to a narrower data type

Reference casting is converting a reference data type to another


Upcasting is conversion up the inheritance hierarchy Downcasting is conversion down the inheritance hierarchy

Casting between primitive and reference type is not allowed In Java, casting is implemented using () operator

Confidential Mr. Anuj

38

Primitive Casting Flow

widening conversion
char

byte

short

int

long

float

doubl e

narrowing conversion

Confidential Mr. Anuj

39

Primitive Casting Rule

arithmetic relational shift bitwise assignment parameter passing

implicit widening conversion implicit widening conversion implicit widening conversion implicit widening conversion implicit widening conversion (if target is broader ) implicit widening conversion (if formal parameter is broader)

logical
ternary ?: boolean (all others)

none
none none explicit casting (narrowing or widening conversion)

Confidential Mr. Anuj

40

Implementing Primitive Casting


public static void main(String args[]) { short age = 20; char sex = M; byte iq = 80; int height = 64; long distance = 300; float price = 99.99f; double money = 500.00; age = sex; sex = iq; iq = (byte) height; distance = height; price = money; sex = (char) money; } // // // // // // will will will will will will this this this this this this compile? compile? compile? compile? compile? compile?

Confidential Mr. Anuj

41

Summary of Operators
Evaluation order of operators in Java is as follows: Unary (++ -- + - ~ ()) Arithmetic (* / % + -) Shift (<< >> >>>) Comparison (< <= > >= instanceof == !=) Bitwise (& ^ |) Short-circuit (&& || !) Conditional (?:) Assignment (= += -= *= /=)

Confidential Mr. Anuj

42

Agenda
Fundamentals Operators Flow Controls

Confidential Mr. Anuj

43

Flow Controls
if-else() statement switch() statement while() statement do-while() statement for() statement break statement continue statement

Statement label

Confidential Mr. Anuj

44

Types of Flow Control


1. Sequential
Perform statements in the order they are written

1. Selection
Perform statements based on condition

1. Iteration
Perform statements repeatedly based on condition

Confidential Mr. Anuj

45

if-else() Construct
if-else() performs statements based on two conditions Condition should result to a boolean expression If condition is true, the statements following if are executed If condition is false, the statements following else are executed Can be nested to allow more conditions
if (condition) { // statement } else { // // statement } // braces optional required else clause is optional required

Syntax:

Example:

int age=10; if (age < 10) { System.out.println("You're just a kid."); } else if (age < 20){ System.out.println("You're a teenager."); } else { System.out.println("You're probably old..."); }
You're a teenager.

Output:

Confidential Mr. Anuj

46

switch() construct
switch() performs statements based on multiple conditions exp can only be char byte short int, val should be a unique constant of exp case statements falls through the next case unless a break is encountered default is executed if none of the other cases match the exp Syntax:
switch (exp) { case val: // statements here case val: // statements here default: // statements here }

Example:

char sex='M'; switch (sex){ case 'M':


System.out.println("I'm a male."); break; case 'F': System.out.println("I'm a female."); break; default:

System.out.println("I am what I am!");


}

Output:

I'm a male.

Confidential Mr. Anuj

47

while() loop
while() performs statements repeatedly while condition remains true
Syntax:
while (condition) { // braces optional // statements here } int ctr=10; while (ctr > 0) { System.out.println("Timer: " + ctr--); } Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: 10 9 8 7 6 5 4 3 2 1

Example:

Output:

Confidential Mr. Anuj

48

do-while() loop
do-while() performs statements repeatedly (at least once) while condition remains true
Syntax:
do // statements here while (condition); int ctr=0; do System.out.println("Timer: " + ctr++); while (ctr < 10); // next statement Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: Timer: 0 1 2 3 4 5 6 7 8 9

Example:

Output:

Confidential Mr. Anuj

49

for() loop
for() performs statements repeatedly based on a condition Init is a list of either declarations or expressions, evaluated first and only once Condition is evaluated before each iteration Exp is a list of expressions, evaluated after each iteration All entries inside () are optional, for(;;) is an infinite loop
Syntax:
for (init; condition; exp) { // braces optional // statements here } for (int age=18; age<30; age++) { System.out.println("Enjoy life while you're " + age); }

Example:

Output:

Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy Enjoy

life while you're 18 life while you're 19 life while you're 20 life while you're 21 life while you're 22 life while you're 23 life while you're 24 life while you're 25 life while you're 26 life while you're 27 life while you're 28 Confidential Mr. life while you're 29 Anuj

50

break
break exits loops and switch() statements
Syntax:
Example:
break; boolean isEating=true; int moreFood=5; while (isEating) { if (moreFood<1) break; System.out.println("Uhm, yum, yum..."); moreFood--; } System.out.println("Burp!");

Output:

Uhm, yum, Uhm, yum, Uhm, yum, Uhm, yum, Uhm, yum, Burp!

yum... yum... yum... yum... yum...

Confidential Mr. Anuj

51

continue
continue is used inside loops to start a new iteration
Syntax: Example:
continue;

for (int time=7; time<12; time++) { if (time<10) { System.out.println("Don't disturb! I'm studying..."); continue; } System.out.println("zzzZZZ..."); } Don't disturb! I'm studying... Don't disturb! I'm studying... Don't disturb! I'm studying... zzzZZZ... zzzZZZ...

Output:

Confidential Mr. Anuj

52

Statement Label
A label is an identifier placed before a statement, it ends with : break labelName is used to exit any labelled statement continue labelName is used inside loops to start a new iteration of the labeled loop
labelName: break labelName; continue labelName;

Output:

Syntax:

Example:

int[] scores = {3,9,10,0,8,10,7,1,9,8}; outer: for (int i=0; i<10; i++) { if (scores[i] <=0) break outer; if (scores[i] > 5) { inner: for (int j=0; j<3; j++) { if (scores[i] == 10){ System.out.println ("Perfect score! More claps!!!"); continue inner; } System.out.println ("Nice score! One clap!"); continue outer; } } if (scores[i] <= 5) System.out.println("More practice..."); }

More practice... Nice score! One clap! Perfect score! More claps!!! Perfect score! More claps!!! Perfect score! More claps!!!

Confidential Mr. Anuj

53

return
return branching statement is used to exit from the current method. Two forms: return <value>; return;
Example 1: public int sum(int x, int y) { return x + y; } Example 2: public int sum(int x, int y) { x = x + y; if (x < 100){ return x; }else{ return x + 5; } } Example 2: public void getSum(int x) { System.out.println(x); return;

}
Confidential Mr. Anuj
54

Key Points
A Java source file can include package, import and class declarations in that order The main() method is the start of execution of a Java application Each Java statement is terminated by a semicolon ; Identifiers are case-sensitive Java keywords cannot be used as identifiers Each variable must be declared with a data type There are 8 primitive data types: boolean, char, byte, short, int, long, float and double There are 3 reference data types: class, array and interface

Confidential Mr. Anuj

55

Key Points (continued)


Use unary, arithmetic operators for basic mathematical operations Use string operator to concatenate strings Use relational operators to compare objects Use conditional operator as alternative to if-else() statement Use logical operators to compare boolean values Use assignment operators to assign values to variables Get familiar with object, shift and bitwise operators Java evaluates operators in order of precedence Casting is converting one data type to another
Confidential Mr. Anuj
56

Key Points
if() and switch() are used for branching statements
while(), do-while() and for() are used for iterating statements break, continue and label are used to branch inside loops

Confidential Mr. Anuj

57

Java Online Resources


http://www.java.sun.com http://www.java.com http://www.java.net http://javaboutique.internet.com http://javaboutique.webdeveloper.com http://www.javaworld.com http://www.developer.com http://javalobby.org http://freewarejava.com http://onjava.com http://javaranch.com http://www.cafeaulait.org http://www.java.about.com http://www.javacoffeebreak.com
Confidential Mr. Anuj
58

Java Online Resources


Tutorials: http://java.sun.com/docs/books/tutorial http://www.ibiblio.org/javafaq/javatutorial.html http://www.javacoffeebreak.com/tutorials/index.html http://www.cafeaulait.org/course/ http://oopweb.com/Java/Documents/IntroToProgrammingUsingJav a/VolumeFrames.html FAQs: http://java.sun.com/products/jdk/faq.html http://www.ibiblio.org/javafaq/javafaq.html http://www.apl.jhu.edu/~hall/java/Beginners-Corner.html http://www.norvig.com/java-iaq.html http://www.jguru.com/faq/subtopics.jsp?topic=JavaLanguage http://www.javacoffeebreak.com/faq/

Confidential Mr. Anuj

59

Questions and Comments

Confidential Mr. Anuj

You might also like