G.
Pullaiah College of Engineering and Technology
Object Oriented Programming through Java
Department of Computer Science &
Engineering
Unit-1 TOPICS
1. History of Java,
2. Java buzzwords,
3. JVM architecture
4. Data types,
5. variables,
6. scope and life time of
7. variables,
8. arrays,
9. operators,
10. control statements
11. Type conversion and casting,
12. simple java program,
Java History
Computer language innovation and development occurs for
two fundamental reasons:
1) to adapt to changing environments and uses
2) to implement improvements in the art of programming
The development of Java was driven by both in equal
measures.
Many Java features are inherited from the earlier languages:
B C C++ Java
L 1.1
Before Java: C
Designed by Dennis Ritchie in 1970s.
Before C: BASIC, COBOL, FORTRAN, PASCAL
C- structured, efficient, high-level language that could
replace assembly code when creating systems programs.
Designed, implemented and tested by programmers.
L 1.2
Before Java: C++
Designed by Bjarne Stroustrup in 1979.
Response to the increased complexity of programs and
respective improvements in the programming paradigms and
methods:
1) assembler languages
2) high-level languages
3) structured programming
4) object-oriented programming (OOP)
OOP – methodology that helps organize complex programs
through the use of inheritance, encapsulation and
polymorphism.
C++ extends C by adding object-oriented features.
L 1.3
Java: History
In 1990, Sun Microsystems started a project called Green.
Objective: to develop software for consumer electronics.
Project was assigned to James Gosling, a veteran of classic
network software design. Others included Patrick Naughton,
ChrisWarth, Ed Frank, and Mike Sheridan.
The team started writing programs in C++ for embedding into
– toasters
– washing machines
– VCR’s
Aim was to make these appliances more “intelligent”.
L 1.4
Java: History (contd.)
C++ is powerful, but also dangerous. The power and popularity of C
derived from the extensive use of pointers. However, any incorrect use
of pointers can cause memory leaks, leading the program to crash.
In a complex program, such memory leaks are often hard to detect.
Robustness is essential. Users have come to expect that Windows may
crash or that a program running under Windows may crash. (“This
program has performed an illegal operation and will be shut down”)
However, users do not expect toasters to crash, or washing machines
to crash.
A design for consumer electronics has to be robust.
Replacing pointers by references, and automating memory
management was the proposed solution.
L 1.5
Java: History (contd.)
Hence, the team built a new programming language called Oak, which
avoided potentially dangerous constructs in C++, such as pointers,
pointer arithmetic, operator overloading etc.
Introduced automatic memory management, freeing the programmer to
concentrate on other things.
Architecture neutrality (Platform independence)
Many different CPU’s are used as controllers. Hardware chips are
evolving rapidly. As better chips become available, older chips become
obsolete and their production is stopped. Manufacturers of toasters and
washing machines would like to use the chips available off the shelf, and
would not like to reinvest in compiler development every two-three
years.
So, the software and programming language had to be architecture
neutral.
L 1.6
Java: History (contd)
It was soon realized that these design goals of consumer electronics perfectly suited
an ideal programming language for the Internet and WWW, which should be:
object-oriented (& support GUI)
– robust
– architecture neutral
Internet programming presented a BIG business opportunity. Much bigger than
programming for consumer electronics.
Java was “re-targeted” for the Internet
The team was expanded to include Bill Joy (developer of Unix), Arthur van Hoff,
Jonathan Payne, Frank Yellin, Tim Lindholm etc.
In 1994, an early web browser called WebRunner was written in Oak. WebRunner
was later renamed HotJava.
In 1995, Oak was renamed Java.
A common story is that the name Java relates to the place from where the
development team got its coffee. The name Java survived the trade mark search.
L 1.7
Java History
Designed by James Gosling, Patrick Naughton, Chris Warth,
Ed Frank and Mike Sheridan at Sun Microsystems in 1991.
The original motivation is not Internet: platform-independent
software embedded in consumer electronics devices.
With Internet, the urgent need appeared to break the fortified
positions of Intel, Macintosh and Unix programmer
communities.
Java as an “Internet version of C++”? No.
Java was not designed to replace C++, but to solve a different
set of problems.
L 1.8
The Java Buzzwords
The key considerations were summed up by the Java
team in the following list of buzzwords:
Simple
Secure
Portable
Object-oriented
Robust
Multithreaded
Architecture-neutral
Interpreted
High performance
Distributed
Dynamic
L 1.9
simple – Java is designed to be easy for the professional
programmer to learn and use.
object-oriented: a clean, usable, pragmatic approach to
objects, not restricted by the need for compatibility with
other languages.
Robust: restricts the programmer to find the mistakes
early, performs compile-time (strong typing) and run-time
(exception-handling) checks, manages memory
automatically.
Multithreaded: supports multi-threaded programming for
writing program that perform concurrent computations
L 1.10
Architecture-neutral: Java Virtual Machine
provides a platform independent environment for
the execution of Java byte code
Interpreted and high-performance: Java
programs are compiled into an intermediate
representation – byte code:
a) can be later interpreted by any JVM
b) can be also translated into the native machine code for
efficiency.
L 1.11
Distributed: Java handles TCP/IP protocols,
accessing a resource through its URL much like
accessing a local file.
Dynamic: substantial amounts of run-time type
information to verify and resolve access to objects at
run-time.
Secure: programs are confined to the Java execution
environment and cannot access other parts of the
computer.
L 1.12
Portability: Many types of computers and operating
systems are in use throughout the world—and many
are connected to the Internet.
For programs to be dynamically downloaded to all the
various types of platforms connected to the Internet,
some means of generating portable executable code is
needed. The same mechanism that helps ensure
security also helps create portability.
Indeed, Java's solution to these two problems is both
elegant and efficient.
L 1.13
Data Types
Java defines eight simple types:
1)byte – 8-bit integer type
2)short – 16-bit integer type
3)int – 32-bit integer type
4)long – 64-bit integer type
5)float – 32-bit floating-point type
6)double – 64-bit floating-point type
7)char – symbols in a character set
8)boolean – logical values true and false
L 1.14
byte: 8-bit integer type.
Range: -128 to 127.
Example: byte b = -15;
Usage: particularly when working with data streams.
short: 16-bit integer type.
Range: -32768 to 32767.
Example: short c = 1000;
Usage: probably the least used simple type.
L 1.15
int: 32-bit integer type.
Range: -2147483648 to 2147483647.
Example: int b = -50000;
Usage:
1) Most common integer type.
2) Typically used to control loops and to index arrays.
3) Expressions involving the byte, short and int values
are promoted to int before calculation.
L 1.16
long: 64-bit integer type.
Range: -9223372036854775808 to 9223372036854775807.
Example: long l = 10000000000000000;
Usage: 1) useful when int type is not large enough to hold the
desired value
float: 32-bit floating-point number.
Range: 1.4e-045 to 3.4e+038.
Example: float f = 1.5;
Usage:
1) fractional part is needed
2) large degree of precision is not required
L 1.17
double: 64-bit floating-point number.
Range: 4.9e-324 to 1.8e+308.
Example: double pi = 3.1416;
Usage:
1) accuracy over many iterative calculations
2) manipulation of large-valued numbers
L 1.18
char: 16-bit data type used to store characters.
Range: 0 to 65536.
Example: char c = ‘a’;
Usage:
1) Represents both ASCII and Unicode character sets;
Unicode defines a
character set with characters found in (almost) all human
languages.
2) Not the same as in C/C++ where char is 8-bit and
represents ASCII only.
L 1.19
boolean: Two-valued type of logical values.
Range: values true and false.
Example: boolean b = (1<2);
Usage:
1) returned by relational operators, such as 1<2
2) required by branching expressions such as if or
for
L 1.20
Variables
declaration – how to assign a type to a variable
initialization – how to give an initial value to a variable
scope – how the variable is visible to other parts of the
program
lifetime – how the variable is created, used and destroyed
type conversion – how Java handles automatic type
conversion
type casting – how the type of a variable can be narrowed
down
L 2.1
Variables
Java uses variables to store data.
To allocate memory space for a variable JVM requires:
1) to specify the data type of the variable
2) to associate an identifier with the variable
3) optionally, the variable may be assigned an initial
value
All done as part of variable declaration.
L 2.2
Basic Variable Declaration
datatype identifier [=value];
datatype must be
A simple datatype
User defined datatype (class type)
Identifier is a recognizable name confirm to
identifier rules
Value is an optional initial value.
L 2.3
Variable Declaration
We can declare several variables at the same time:
type identifier [=value][, identifier [=value] …];
Examples:
int a, b, c;
int d = 3, e, f = 5;
byte g = 22;
double pi = 3.14159;
char ch = 'x';
L 2.4
Variable Scope
Scope determines the visibility of program elements with respect to
other program elements.
In Java, scope is defined separately for classes and methods:
1) variables defined by a class have a global scope
2) variables defined by a method have a local scope
A scope is defined by a block:
{
…
}
A variable declared inside the scope is not visible outside:
{
int n;
}
n = 1;// this is illegal
L 2.5
Variable Lifetime
Variables are created when their scope is entered by
control flow and destroyed when their scope is left:
A variable declared in a method will not hold its
value between different invocations of this method.
A variable declared in a block looses its value when
the block is left.
Initialized in a block, a variable will be re-initialized
with every re-entry. Variables lifetime is confined to
its scope!
L 2.6
Arrays
An array is a group of liked-typed variables referred
to by a common
name, with individual variables accessed by their
index.
Arrays are:
1) declared
2) created
3) initialized
4) used
Also, arrays can have one or several dimensions.
L 2.7
Array Declaration
Array declaration involves:
1) declaring an array identifier
2) declaring the number of dimensions
3) declaring the data type of the array elements
Two styles of array declaration:
type array-variable[];
or
type [] array-variable;
L 2.8
Array Creation
After declaration, no array actually exists.
In order to create an array, we use the new operator:
type array-variable[];
array-variable = new type[size];
This creates a new array to hold size elements of type
type, which reference will be kept in the variable
array-variable.
L 2.9
Array Indexing
Later we can refer to the elements of this array
through their indexes:
array-variable[index]
The array index always starts with zero!
The Java run-time system makes sure that all array
indexes are in the correct range, otherwise raises a
run-time error.
L 2.10
Array Initialization
Arrays can be initialized when they are declared:
int monthDays[] =
{31,28,31,30,31,30,31,31,30,31,30,31};
Note:
1) there is no need to use the new operator
2) the array is created large enough to hold all specified
elements
L 2.11
Multidimensional Arrays
Multidimensional arrays are arrays of arrays:
1) declaration: int array[][];
2) creation: int array = new int[2][3];
3) initialization
int array[][] = { {1, 2, 3}, {4, 5, 6} };
L 2.12
Type Conversion
• Size Direction of Data Type
– Widening Type Conversion (Casting down)
• Smaller Data Type Larger Data Type
– Narrowing Type Conversion (Casting up)
• Larger Data Type Smaller Data Type
• Conversion done in two ways
– Implicit type conversion
• Carried out by compiler automatically
– Explicit type conversion
• Carried out by programmer using casting
L 3.5
Type Conversion
• Widening Type Converstion
– Implicit conversion by compiler automatically
byte -> short, int, long, float, double
short -> int, long, float, double
char -> int, long, float, double
int -> long, float, double
long -> float, double
float -> double
L 3.6
Type Conversion
• Narrowing Type Conversion
– Programmer should describe the conversion
explicitly
byte -> char
short -> byte, char
char -> byte, short
int -> byte, short, char
long -> byte, short, char, int
float -> byte, short, char, int, long
double -> byte, short, char, int, long, float
L 3.7
Type Conversion
byte and short are always promoted to int
if one operand is long, the whole expression is
promoted to long
if one operand is float, the entire expression is
promoted to float
if any operand is double, the result is double
L 3.8
Type Casting
General form: (targetType) value
Examples:
1) integer value will be reduced module bytes
range:
int i;
byte b = (byte) i;
2) floating-point value will be truncated to integer
value:
float f;
int i = (int) f;
L 3.9
Simple Java Program
A class to display a simple message:
class MyProgram
{
public static void main(String[] args)
{
System.out.println(“First Java program.");
}
}
4.1