Java Programming
Evolution of Java Module 1
Agenda
Evolution of Java Java Architecture Language Basics Arrays
Objectives
At the end of this module, you will be able to :
Learn about Evolution of Java and forces that shaped it
Understand Java Architecture along with JVM Concepts
Write the first Java Program with understanding of Language Basics and Keywords Understand Array declaration, definition and access of
array elements
Evolution of Java
Key Founders
Java was the brainchild of: James Gosling Patrick Naughton Chris Warth Ed Frank & Frank Sheridan
The origin of Java can be traced back to the fall of 1992, and was
initially called Oak Oak was renamed as Java in 1995
Design Goal
Java was originally meant to be a platform-neutral language for embedded software in devices The goal was to move away from platform and OS-specific compilers that would compile source for a particular target platform to a language that would be portable, and platform-independent The language could be used to produce platform-neutral code
Java Architecture
Java Architecture
Compile-time Environment step1
Java Source (.java)
step3
Run-time Environment
Java Class Libraries
Class Loader
Bytecode Verifier
step4 step5
Java Virtual machine
step2
Java Compiler
Java Bytecodes move locally or through network
Java Interpreter
Just in Time Compiler
Runtime System Java Bytecode (.class )
Operating System Hardware
Java Architecture (Contd.).
Step1: Create a java source code with .java extension
Step2: Compile the source code using java compiler, which will create bytecode file with .class extension Step3: Class loader reads both the user defined and library classes into the memory for execution
Java Architecture (Contd.).
Step4:
Bytecode verifier validates all the bytecodes are valid and do not violate Javas security restrictions
Step5:
JVM reads bytecodes and translates into machine code for execution. While execution of the program the code will interact to the operating system and hardware
The 5 phases of Java Programs
Java programs can typically be developed in five stages: 1. Edit Use an editor to type Java program (Welcome.java) 2. Compile
Use a compiler to translate Java program into an intermediate language called bytecodes, understood by Java interpreter (javac Welcome.java) Use a compiler to create .class file, containing bytecodes (Welcome.class)
3. Loading Use a class loader to read bytecodes from .class file into memory
The 5 phases of Java Programs (Contd.).
4. Verify Use a Bytecode verifier to make sure bytecodes are valid and do not violate security restrictions 5. Execute
Java Virtual Machine (JVM) uses a combination of interpretation and just-in-time compilation to translate bytecodes into machine language Applications are run on user's machine, i.e. executed by interpreter with java command (java Welcome)
The Java Architecture The JVM
Program Class Files
Class Loader
Java API classes
Execution Engine
The Java Architecture The JVM (Contd.).
Most modern languages are designed to be compiled
Compilation is a one-time exercise and executes faster
Execution of compiled code over the Internet an impossibility Executable code always generated to a CPU-OS combination
Interpreting a Java program into byte code facilitates its execution in a wide variety of environments
The Java Architecture The JVM (Contd.).
Only the Java Virtual Machine (JVM) needs to be implemented for each platform
Once the Java runtime package exists for a given system, any Java program can run on it
The JVM will differ from platform to platform, and is, platform-specific All versions of JVM interpret the same Java byte code
The Java Architecture The JVM (Contd.).
Interpreted code executable code runs much slower compared to
The use of bytecode enables the Java runtime system to execute programs much faster
Java facilitates on-the-fly compilation of bytecode into native code
The Java Architecture The Adaptive optimizer
Another type of execution engine is an adaptive optimizer The virtual machine starts by interpreting bytecodes It also keeps a tab on the code that is running and identifies only the heavily used areas The JVM compiles these heavily used areas of code into native code The rest of the code, which is not heavily used continues to be interpreted and executed
The Java Architecture - The Class Loader
The class loader is that part of the VM that is important from: A security standpoint Network mobility The class loader loads a compiled Java source file (.class files represented as bytecode) into the Java Virtual Machine (JVM) The bootstrap class loader is responsible for loading the classes, programmer defined classes as well as Java's API classes
The Java Architecture - The Java .class file
The Java class file is designed for platform independence network mobility The class file is compiled to a target JVM, but independent of underlying host platforms The Java class file is a binary file that has the capability to run on any platform
Quiz
1. A. B. C. D. E. F. Write the correct order of the Java program execution Class Loader Interpretation Compilation Byte Code Verification Java Source Code Execution
2. A Sample.Java file contains, class A, B and C. How many .class files will be created after compiling Sample.java?
Langugage Basics
A Simple Java Program
A First Java Program:
public class Welcome { public static void main(String args[]) { System.out.println(Welcome to Java Programming); } }
Create source file: Welcome.java Compile : javac Welcome.java Execute : java Welcome
The Java API
An application programming interface(API), in the framework of java, is a collection of prewritten packages, classes, and interfaces with their respective methods, fields and constructors
The Java API, included with the JDK, describes the function of each of its components
In Java programming, many of these components are precreated and commonly used
The Java Buzzwords
Simple Object-Oriented Supports encapsulation, inheritance, abstraction, and polymorphism Distributed Libraries for network programming Remote Method Invocation Architecture neutral Java Bytecodes are interpreted by the JVM
The Java Buzzwords (Contd.).
Secure Difficult to break Java security mechanisms Java Bytecode verification Signed Applets Portable Primitive data type sizes and their arithmetic behavior specified by the language Libraries define portable interfaces Multithreaded Threads are easy to create and use
Language Basics
Keywords Data Types Variables Operators Conditional Statements Loops
Java Keywords
abstract assert boolean break byte case catch continue default do double else enum extends for goto if implements import instanceof int new package private protected public return short switch synchronized this throw throws transient try
char
class const
final
finally float
interface
long native
static
strictfp super
void
volatile while
Primitive Data Types
Data Type
byte short
Size (in bits)
8 16 -128
Minimum Range
Maximum Range
Default Value (for fields)
0 0
+127 +32767
-32768
int
long float double char boolean
32
64 32 64 16 1
-2147483648
-9223372036854775808 1.40E-45 4.94065645841246544e-324d
+2147483647
+9223372036854775807 3.40282346638528860e+38 1.79769313486231570e+308d 0 to 65,535
0
0L 0.0f 0.0d '\u0000' false
NA
NA
Types of Variables
The Java programming language defines the following kinds of Variables: Local Variables Tied to a method Scope of a local variable is within the method Instance Variables (Non-static) Tied to an object Scope of an instance variable is the whole class Static Variables Tied to a class Shared by all instances of a class
Quiz
1. Match the followig table:
DATA TYPES SIZE(bytes)
char byte
int double
4 2
1 8
2. What will be the output for the below code ? public class Sample{ public static void main(String a[]){ int i_val; System.out.println("i_val value: "+i_val); }
}
Operators
Java provides a set of operators operations. Types of operators in java are, Arithmetic Operators Unary Operator Relational Operators Logical Operators Simple Assignment Operator Bitwise Operators to manipulate
Arithmetic Operators
The following table lists the arithmetic operators Operator Description Example
+ * / %
Addition Subtraction
Multiplication Division Modulus
A+B A-B
A*B A/B A%B
Arithmetic Operators - Example
/* Example to understand Arithmetic operator */
Output:
class Sample{ public static void main(String[] args){ int a = 10; int b = 3; System.out.println("a + b = " + (a + b) System.out.println("a - b = " + (a - b) System.out.println("a * b = " + (a * b) System.out.println("a / b = " + (a / b) System.out.println("a % b = " + (a % b) } }
a + b = 13 a-b=7 a * b = 30 a/b=3 a%b=1
); ); ); ); );
Unary Operators
The following table lists the unary operators
Operator + ++ -Description Unary plus operator Unary minus operator Increment operator Decrement operator Example +A -A ++A or A++ --A or A--
Unary Operator - Example
/* Example for Unary Operators*/ Output: class Sample{ public static void main(String args[]) { a++ = 11 int a = 10; b-- = 19 int b = 20; System.out.println("a++ System.out.println("b-} } = " + = " + (++a) ); (--b) );
Relational Operators
The following table lists the relational operators
Operator == != Description Two values are checked, and if equal, then the condition becomes true Two values are checked to determine whether they are equal or not, and if not equal, then the condition becomes true Two values are checked and if the value on the left is greater than the value on the right, then the condition becomes true. Two values are checked and if the value on the left is less than the value on the right, then the condition becomes true Two values are checked and if the value on the left is greater than equal to the value on the right, then the condition becomes true Two values are checked and if the value on the left is less than equal to the value on the right, then the condition becomes true Example (A == B) (A != B)
>
(A > B)
<
(A < B)
>=
(A >= B)
<=
(A <= B)
Relational Operators - Example
/* Example to understand Relational operator */
Output:
class Sample{ a == b = false public static void main(String[] args){ a != b = true int a = 10; a > b = false a < b = true int b = 20; System.out.println("a == b = " + (a == b) ); b >= a = true b <= a = false System.out.println("a != b = " + (a != b) ); System.out.println("a > b = " + (a > b) ); System.out.println("a < b = " + (a < b) ); System.out.println("b >= a = " + (b >= a) ); System.out.println("b <= a = " + (b <= a) ); } }
Logical Operators
The following table lists the logical operators
Operator && Description This is known as Logical AND & it combines two variables or expressions and if and only if both the operands are true, then it will return true Example (A && B) is false
||
This is known as Logical OR & it combines two variables or expressions and if either one is true or both the operands are true, then it will return true
(A || B) is true
Called Logical NOT Operator. It reverses the value of a Boolean expression
!(A && B) is true
Logical Operators - Example
/* Example to understand logical operator */
Output:
class Sample{ public static void main(String[] args){ boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b) System.out.println("a || b = " + (a||b) System.out.println("!(a && b) = " + !(a } }
a && b = false a || b = true !(a && b) = true
); ); && b) );
Simple Assignment Operator
= Simple assignment operator Which assigns right hand side value to left hand side variable Ex: int a; a = 10;
Quiz
What will be the output for the below code ?
public class Sample{ public static void main(){ int i_val = 10, j_val = 20; boolean chk; chk = i_val < j_val; System.out.println("chk value: "+chk); }
}
Arrays
Arrays
An array is a container object that holds a fixed number of values of a single type When an array is created, the length of an array is fixed Array elements are automatically initialized with the default value of their type, When an array is created Array can be created using the new keyword Ex: int[] x = for 5 blocks new int[5]; // defining an integer array
Arrays (Contd.).
Alternatively, we can create and initialize array as below format int[] x = {10, 20, 30}; int[] x = new int[]{10, 20, 30};
Here the length of an array is determined by the number of values provided between { and } The built-in length property determines the size of any array Ex: int[] x = new int[10]; int x_len = x.length;
Array - Example
public class ArrayDemo { public static void main(String[] args) { int[] x; // declares an array of integers x = new int[5]; // allocates memory for 5integers x[0] = 11; X[4] = 22; System.out.println("Element at index 0: " + x[0]); System.out.println("Element at index 1: " + x[1]); System.out.println("Element at index 4: " + x[4]); } }
Output: Element at index 0: 11 Element at index 1: 0 Element at index 4: 22
Array Bounds, Array Resizing
Array subscripts begin with 0 Can't access an array element beyond the range Can't resize an array. Can use the same reference variable to refer
new array
int x[] = new int [5]; x= new int [10];
Array copy
To copy array elements from one array to another array, we can use arraycopy static method from System class Syntax: public static void arraycopy(Object s,int sIndex,Object d,int dIndex,int lngth) Ex:
int source[] = {1, 2, 3, 4, 5, 6}; int dest[] = new int[10];
System.arraycopy(source,0, dest,0,source.length);
Array Copy - Example
public class ArrayLengthDemo { public static void main(String[] args) { // creates and initializes an array of integers int[] source = {100, 200, 300}; // creates an integer array with 3 element int[] dest = new int[3]; // copying an elements from source to dest array System.arrayCopy(source, 0, dest, 0, source.length); for (int i =0; i < dest.length; i++) System.out.println("Element at index " + i + ": " + dest[i]); } }
Output: Element at index 0: 100 Element at index 1: 200 Element at index 3: 300
Two-Dimensional Arrays
Two-dimensional arrays are arrays of arrays Initializing two-dimensional arrays:
int[][] y = new int[3][3];
The 1st dimension represent rows or number of one dimension, the 2nd
dimension represent columns or number of elements in the each one
dimensions The curly braces { } may also be used to initialize two dimensional
arrays Ex:
int[][] y = { {1,2,3}, {4,5,6}, {7,8,9} }; int[][] y = new int[3][] { {1,2,3}, {4,5,6}, {7,8,9} };
Two-Dimensional Arrays (Contd.).
You can initialize the row dimension without initializing the columns
but not vice versa
int[][] x = new int[3][]; int[][] x = new int[][3]; //error
The length of the columns can vary for each row and initialize number of columns in each row Ex1:
int [][]x = new int [2][]; x[0] = new int[5]; x[1] = new int [3];
0 1
0 0
0 0
0 0 0
Two-Dimensional Arrays (Contd.).
Ex2:
int [][]x = new int [3][]; x[0] = new int[]{0,1,2,3}; x[1] = new int []{0,1,2}; x[2] = new int[]{0,1,2,3,4};
Two-Dimensional Array - Example
/* Program to under stand two-dimensional arrays */
class TwoDimDemo { public static void main(String[] args) { int [][] x = new int[3][]; // initialize number of rows /* define number of columns in each row */ x[0] = new int[3]; x[1] = new int[2]; x[2] = new int[5]; /* print array elements */ for(int i=0; i < x.length; i++) { for (int j=0; j < x[i].length; x[i][j] = i; System.out.print(x[i][j]); } System.out.println(); } } }
j++) {
Output:
000 11 22222
Quiz
Select which of the following are valid array definition 1. int[] a; a = new int[5]; 2. int a[] = new int[5] 3. int a[5] = new int[5]; 4. int a[] = {1,2,3}; 5. int[] a = new int[]{1,2,3}; 6. int[] a = new int[5]{1,2,3,4};
Quiz (Contd.).
Predict the output
class Sample{ public static void main(String[] args){ int[] a = new int[5]{1,2,3}; for(int i : a) System.out.println(i); } }
Summary
In this session, you were able to :
Learn about Evolution of Java and forces that shaped it Understand Java Architecture along with JVM Concepts Write the first Java Program with understanding of Language Basics and Keywords Understand Array declaration, definition and access of array elements
References
1. Oracle (2012). Java Tutorials: Primitive Data Types. Retrieved on May 12, 2012, from, http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
2. Oracle (2012). Java Tutorials: Assignment, Arithmetic, and Unary Operators. Retrieved on May 12, 2012, from, http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html
3. Schildt, H. Java: The Complete Reference. J2SETM. Ed 5. New Delhi: McGraw Hill-Osborne, 2005. 4. Tutorialpoint TP (2012). C-Operator Types. Retrieved on May 12, 2012, from, http://www.tutorialspoint.com/ansi_c/c_operator_types.htm
Thank You