a complete java program

45
CS3180(Prasad) L5Types 1 A Complete Java Program public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”); } } – javac HelloWorld.java – java HelloWorld

Upload: axel-chen

Post on 01-Jan-2016

46 views

Category:

Documents


3 download

DESCRIPTION

A Complete Java Program. public class HelloWorld { public static void main(String[] args) { System.out.println( “ Hello World ” ); } } javac HelloWorld.java java HelloWorld. Whitespace blank tab newline Comment // ... /* ... */ /** ... */ Separators - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A Complete Java Program

CS3180(Prasad) L5Types 1

A Complete Java Program

public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”); }}

– javac HelloWorld.java– java HelloWorld

Page 2: A Complete Java Program

CS3180(Prasad) L5Types 2

(Non-)Tokens

• Whitespace• blank

• tab

• newline

• Comment• // ...

• /* ... */

• /** ... */

• Separators• (, ), [, ], etc

• Keywords (reserved)• Identifiers• Literals

• 25, 2.5 (int/float)– 09 is not an integer.

• true, false (boolean)

• ‘a’, \u0061, \n (char)

• Operators• +, >, &&, etc

Page 3: A Complete Java Program

CS3180(Prasad) L5Types 3

Java : Types

• Primitive Types

• Reference Types

Page 4: A Complete Java Program

CS3180(Prasad) L5Types 4

Primitive Types and Values• Numeric Types

– Integral Types (signed two’s complement)• byte, short (2 bytes), int (4 bytes), long (8 bytes)• char (16-bit Unicode)

– Floating-point Types (IEEE 754 Standard)• float (4 bytes), double (8 bytes)

• Boolean Type• boolean

– true, false

Page 5: A Complete Java Program

CS3180(Prasad) L5Types 5

Numeric Types• Explicit range and behavior.

• Java trades performance for cross-platform portability.

• byte : appropriate when parsing a network protocol or file format, to resolve “endianess”.

– BIG endian : SPARC, Power PC : MSB-LSB– LITTLE endian : Intel X86 : LSB-MSB

• Calculations involving byte/short done by promoting them to int.

• Internally, Java may even store byte/short as int, except in arrays.

Page 6: A Complete Java Program

CS3180(Prasad) L5Types 6

Type Conversions• Coercion (widening or promotion)

- int i = 50; float f = i;• Fractional literals are always double. • Casting (narrowing)

byte b = 128; // Error byte b = (byte) 258; // = 2 b = (b * 0); // Error b = (byte) (b * 2); char four = (char) ( ‘1’ + 3 ); float f = (float) 0.0;

Page 7: A Complete Java Program

CS3180(Prasad) L5Types 7

Casting class PrimCast { public static void main(String[] argv) {

byte b = 0; int i = b;

b = i; // *error* b = (b * 0); // *error* b = (byte) i; b = (byte) 280; // = 24

b = 128; // *error* Java 1.1}}

Page 8: A Complete Java Program

CS3180(Prasad) L5Types 8

C# : Primitive Type Casting class PrimCast { public static void Main(string[] argv) { int i = 50; // *warning* The variable 'i' is assigned but its value is never used byte b = 127; b = (byte) 258; // b = 258;// *error* Constant value '258' cannot be converted to a 'byte' unchecked {b = (byte) 258;} System.Console.WriteLine("byte b = " + b); b = (byte) (b * 0); // b = (b * 0);// *error* Cannot implicitly convert type 'int' to 'byte' }}// Console Output: byte b = 2

Page 9: A Complete Java Program

CS3180(Prasad) L5Types 9

Boolean Type• Distinct from integer type.

– 0 (1) are not false (true). (Cf. C/C++)

• Let boolean b,c and int i.•if (b) {} else {};

•if (b == true) { c = false; } else { c = true; };

equivalent to c = ! b;

•if (i = 0) {};

is a type error (“int used bool expected”).

Page 10: A Complete Java Program

CS3180(Prasad) L5Types 10

Operators• Variety

• unary, binary, ternary

• prefix, infix, postfix

• arithmetic, bitwise, relational, logical• var op= expr; equivalent to var = var op expr;

• Shift operators: • i >> 5 (sign extension) • i >>> 5 (unsigned)• i << 5

– Interaction with promotion (coercion) to int

Page 11: A Complete Java Program

CS3180(Prasad) L5Types 11

Boolean Operators• Boolean logical and/or operator : &, |• Boolean short-circuit and/or operator : &&, ||

• false && B == false• true || B == true

• De Morgan’s laws• ! (a & b ) = !a | !b• ! (a | b ) = !a & !b

• Operator overloading :– & (resp.|): bitwise/logical and (resp. or) – + : numeric add, string concatenation

• No user defined operator overloads.

Page 12: A Complete Java Program

CS3180(Prasad) L5Types 12

Reference Types and Values

• Class Types• String is a class.

• Interface Types

• Array Types

An object (resp. array object) is an instance of a class (resp. an array).

A reference is a pointer to (or the address of) an object or an array object.

Page 13: A Complete Java Program

CS3180(Prasad) L5Types 13

Variables and Values

• A variable of a primitive type always holds a value of that exact primitive type.

• A variable of a reference type can hold either a null reference or a reference to any object whose class is assignment compatible with the type of the variable.

Page 14: A Complete Java Program

Example Class Hierarchy

CS3180(Prasad) L5Types 14

XPoint

Object

ColoredPoint

Page 15: A Complete Java Program

CS3180(Prasad) L5Types 15

class Point { }class ColoredPoint extends Point { }class RefCast { public static void main (String [] args) {

Object oR; Point pR = null; ColoredPoint cpR = null; oR = pR; pR = cpR; cpR = pR; // *error* cpR = (ColoredPoint) pR;

// *run-time exception* X xR = null; cpR = (ColoredPoint) xR; // *error*}}class X {}

Page 16: A Complete Java Program

CS3180(Prasad) L5Types 16

Notes on Type Checking

• Coercion, Widening: pR = cpR; • Casting, Narrowing:

cpR = (ColoredPoint) pR; • Sound because a Point-type variable can potentially

hold a ColoredPoint reference.

• However, to guarantee type safety, Java compiler emits type checking code which can, at runtime, throw ClassCastException if the type constraint is not met.

Page 17: A Complete Java Program

CS3180(Prasad) L5Types 17

(cont’d)

• Casting, Narrowing:

xR = (X) pR; • This is unsound because a Point-type variable can

never hold an X-reference. So, compiler generates a type error.

• Initialization: • Java requires that local variables be explicitly

initialized before their first use. So, assignments of null to pR and cpR, in the example, are mandatory.

Page 18: A Complete Java Program

CS3180(Prasad) L5Types 18

class Point { }class ColoredPoint : Point { }class X { }class RefCast { public static void Main () { System.Object oR; Point pR = null; ColoredPoint cpR = null; oR = pR; pR = cpR; //cpR = pR; // *error* Cannot implicitly convert type 'Point' to 'ColoredPoint' cpR = (ColoredPoint) pR; X xR; // *warning* The variable 'xR' is declared but never used // xR = (X) pR; // *error* Cannot convert type 'Point' to 'X' }}

C# : Reference Type Casting

Page 19: A Complete Java Program

CS3180(Prasad) L5Types 19

Type Compatibility Examples• class variable - subclass instanceimport java.awt.*; import java.applet.*;

Panel p = new Applet();Applet a = (Applet) p;

p = a;import java.io.*;

BufferedReader bin = new BufferedReader

(new InputStreamReader (System.in));

• interface variable - class instanceRunnable p = new Thread();

Page 20: A Complete Java Program

CS3180(Prasad) L5Types 20

Subtle Differences• Assignment (x = y)

• Primitive type : copying a value– Parameter passing: call by value

• Reference type: sharing an object– Parameter passing: copying reference

• final variable modifier• Primitive type : constant value

• Reference type: constant object– Mutable : state of the object changeable

– Immutable : state of the object constant

• E.g., class String

Page 21: A Complete Java Program

CS3180(Prasad) L5Types 21

Meaning of assignment class ToAssign { public static void main(String[] argv) {

int ip = 5; Pair ir = new Pair (15,25); int jp = ip; Pair jr = ir; System.out.println( "jp = " + jp + "\t" + "jr = " + jr); ip = 9; ir.x = 19; System.out.println("ip = " + ip + "\t" + "ir = " + ir); System.out.println("jp = " + jp + "\t" + "jr = " + jr);

}}

Page 22: A Complete Java Program

CS3180(Prasad) L5Types 22

(cont’d) class Pair {

int x,y;Pair(int ix, int iy){

x = ix; y = iy;}public String toString(){

return "["+x+"--"+y+"]";}

}

ip = 5 ir = [15--25]jp = 5 jr = [15--25]ip = 9 ir = [19--25]jp = 5 jr = [19--25]

Page 23: A Complete Java Program

CS3180(Prasad) L5Types 23

• The uniform abstraction of “everything is an object” traded for efficiency.– No composite types such as

structures or unions.

• Every expression has a type deducible at compile-time.

• All assignments of expressions to variables are checked for type compatibility.

Page 24: A Complete Java Program

CS3180(Prasad) L5Types 24

Data Types supported by JVM

Page 25: A Complete Java Program

CS3180(Prasad) L5Types 25

Data Types supported by C#

Page 26: A Complete Java Program

CS3180(Prasad) L5Types 26

Motivation for Strong Typing• Type declarations provide extra information

associated with an identifier. This redundant info. enables mechanical detection of errors.

• In practice, a number of logical and typographical errors manifest themselves as type errors. Thus, strongly typed languages allow construction of reliable programs.

• In OOPLs, the type tags associated with objects aid in the impl. of dynamic binding, polymorphism, and safe conversions.

Page 27: A Complete Java Program

CS3180(Prasad) L5Types 27

variable reference object

(text) (pointer) (memory)

• Static Typing (e.g., Ada)• typetype(variable) = typetype(object)

• compile-time checking : efficient

• Dynamic Typing (e.g., Scheme, Python)• variables type-less; objects carry type tags

• run-time type-checking : flexible

Typing

Page 28: A Complete Java Program

CS3180(Prasad) L5Types 28

• Typing in OOPL (E.g., Java, Eiffel, C#, …)• typetype(object/reference) is-a-subtype-of

typetype(variable).

• In Java, a variable of class Cl, can hold a reference to an instance (object) of a subclass of Cl.

– Type correctness guaranteed at compile-time.• Efficient and secure.

– Dynamic binding dispatches each call to the appropriate code, at run-time.

• Flexible handling of heterogeneous data.

Page 29: A Complete Java Program

CS3180(Prasad) L5Types 29

Arrays

Page 30: A Complete Java Program

CS3180(Prasad) L5Types 30

Arrays• Declaration

– int[] intArray; String[] args;

• Creation– intArray = new int[5];

– intArray = { 0, 2, 4, 3*2, 4+4 };

• Array of arrays (cf. multi-dimensional array)– double [][] iA = { { 1, 0 }, null };

• Java runtime verifies that array indices are in the correct range.

Page 31: A Complete Java Program

CS3180(Prasad) L5Types 31

An Example Program

class EchoArgs { public static void main(String[] args){ for (int i = 0; i < args.length; i++) System.out.print( args[i] ); System.out.println(“”); }; }

– javac EchoArgs.java– java EchoArgs a 23 c abc– java EchoArgs

Page 32: A Complete Java Program

CS3180(Prasad) L5Types 32

Java 5 version class EchoArgs5 { public static void main(String[] args){

System.out.print("Command line arguments: ");

for (String s : args)

System.out.printf( " %s ", s );

System.out.println(".");

}

}

– javac EchoArgs5.java– java EchoArgs5 a 23 c ab

Page 33: A Complete Java Program

CS3180(Prasad) L5Types 33

4 “a”

“c”

“23”

“abc”

args

(local variable on stack)

(array object on heap)

(string objects on heap)

Page 34: A Complete Java Program

Pascal Triangle

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

CS3180(Prasad) L5Types 34

Page 35: A Complete Java Program

Pascal Triangle

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

CS3180(Prasad) L5Types 35

Page 36: A Complete Java Program

CS3180(Prasad) L5Types 36

class PascalTriangle {

public static void main( String[] args ) {

int n = Integer.parseInt( args[0] );

int [] [] pT = new int [n + 1] [];

pT[0] = new int[1]; // first row

pT[0][0] = 1;

for (int i = 1; i <= n; i++) {// rows 2 to n+1

pT[i] = new int [i + 1];

pT[i][0] = 1;

pT[i][i] = 1;

for (int j = 1; j < i ; j++ ) {

pT[i][j] = pT[i-1][j-1] + pT[i-1][j];

}

}

}

}

Page 37: A Complete Java Program

CS3180(Prasad) L5Types 37

31

1

1

1

pT

(local variable on stack)

(array object on heap)

(int array objects on heap)

1

2

3

2

1

Page 38: A Complete Java Program

CS3180(Prasad) L5Types 38

using System;

class PascalTriangleInCSharp {

public static void Main( string[] args ) {

int n = 7;

if (args.Length > 0)

n = int.Parse( args[0] );

int [] [] pT = new int [n + 1] [];

pT[0] = new int[1]; pT[0][0] = 1;

for (int i = 1; i <= n; i++) {

pT[i] = new int [i + 1];

pT[i][0] = 1;

pT[i][i] = 1;

for (int j = 1; j < i ; j++ ) { pT[i][j] = pT[i-1][j-1] + pT[i-1][j];

}

}

}

C# Equivalent

Page 39: A Complete Java Program

CS3180(Prasad) L5Types 39

using System;

class RectArrayInCSharp {

public static void Main( string[] args ) {

const int n = 7;

int [,] pT = new int [n,n];

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

pT[i,j] = i + j;

}

}

System.Console.WriteLine(pT);

}

}

C# Alternative

Page 40: A Complete Java Program

CS3180(Prasad) L5Types 40

Array type : “unconstrained”• Define matrix operations in terms of structure of

the array (dimensionality); size is implicit.• Vector dot-product that works for two equal length

single-dimension array with same type elements.• Matrix multiplication : Dimension compatibility

checked at run-time.• length field of an array object used :

– to control loops.– to allocate storage for local variables.

• Type is unconstrained, but each object/instance has a fixed size. (E.g., String type vs String object )

• Cf. Ada Unconstrained array types.

Page 41: A Complete Java Program

CS3180(Prasad) L5Types 41

Java Generics

Page 42: A Complete Java Program

CS3180(Prasad) L5Types 42

import java.util.*;public class OldList { public static void main(String args[]) { List list = new ArrayList(); // (Potentially heterogeneous collection) list.add("one"); list.add("two"); list.add("three"); list.add("four"); Iterator itr = list.iterator(); while(itr.hasNext()) { // Explicit type cast needed String str = (String) itr.next(); System.out.println(str + " is " +

str.length() + " chars long.");

} }}

Page 43: A Complete Java Program

CS3180(Prasad) L5Types 43

import java.util.*;public class NewList { public static void main(String[] args) { List <String> list =

new LinkedList <String>(); // Instantiating generic type. // (Homogeneous collection) list.add("one"); list.add("two"); list.add("three"); list.add("four"); for (String str : list) { System.out.printf("%s is %d chars long.\n",

str, str.length()); }; }}

Page 44: A Complete Java Program

CS3180(Prasad) L5Types 44

import java.util.*;class MyStr {

String s;MyStr(String s){this.s = s;}

}class InhMyStr extends MyStr {

InhMyStr(String s){super(s);}}public class NewList { public static void main(String[] args) { List <MyStr> list =

new LinkedList <MyStr>(); // Instantiating generic type. // (Homogeneous collection) list.add(new MyStr("one")); list.add(new MyStr("two")); list.add(new InhMyStr("three")); list.add(new InhMyStr("four")); for (MyStr str : list) { System.out.printf("%s is %d chars long.\n",

str.s, str.s.length()); }; }}

Page 45: A Complete Java Program

CS3180(Prasad) L5Types 45

using System;using System.Collections.Generic;

public class NewList { public static void Main(string [] args) { // List class supports method Add LinkedList <String> list =

new LinkedList <String>(); // Instantiating generic type. // (Homogeneous collection) list.AddFirst("one"); list.AddLast("two"); list.AddLast("three"); list.AddLast("four"); foreach (string str in list) { System.Console.WriteLine(str + " is " +

str.Length + " chars long."); }; }}