java types float, double long, int, short byte char boolean objects objects are created by :...

30
Java Types float, double long, int, short byte char boolean Objects s are created by : laring a reference and calling a constructor. types are created by: aring a variable. Short Summary Short Summary

Post on 21-Dec-2015

253 views

Category:

Documents


0 download

TRANSCRIPT

Java Types

float, doublelong, int, shortbytecharboolean

Objects

Objects are created by : Declaring a reference and calling a constructor.Basic types are created by: Declaring a variable.

Short SummaryShort Summary

Tirgul no. 5Tirgul no. 5

Topics covered:Topics covered:• Memory – sharing, aliasingMemory – sharing, aliasing• Complex class exampleComplex class example• Arrays in javaArrays in java• Command line arguments in javaCommand line arguments in java

Summary (cont.)Summary (cont.)A java program

•A java program is a set of objects, where at least one of the objects has a method called ‘main’.

•Running a program means executing the commands which appear in the ‘main’ method.

•The ‘main’ method is usually comprised of calls to constructors, creating a set of objects and then sending them messages.

Object1

ObjectN

Object0 : has a ‘main’ method

Basic Type1

Basic TypeN

Keyword Summary (cont.)Keyword Summary (cont.)

public - method : any method/object has access to this method. field: DO NOT CREATE FIELDS WITH PUBLIC ACCESS , the only place where this is acceptable is if the field is final .private - method : only other methods inside this class may use this method . field: this is the common access specifier for fields and is most likely to be acomponied with public methods that allow supervised access to it.

Keyword Summary (cont.)Keyword Summary (cont.)

final - method : --- field, local variable: this specifier means that once this field/variable is given a value there is no way to change it (this is why fields that have this specifier may sometimes be declared as public).return - method : if the keyword return is followed by a variable/value this value is returned as a result . Return without any following variable means to exit the method.

Memory (to share or not to share)Memory (to share or not to share)

Date d1,d2;

d1= new Date(1,1,1999);d2 = new Date(1,1,1999);

d1 1,1,1999

d2 1,1,1999

Date d1,d2;

d1= new Date(1,1,1999);d2 = d1;

d1 1,1,1999

d2

Memory (cont.)Memory (cont.)

Date d1,d2;

d1= new Date(1,1,1999);d2 = new Date(1,1,1999);if(d1 == d2) System.out.println(“same date”);

Date d1,d2;

d1= new Date(1,1,1999);d2 = d1;if(d1 == d2) System.out.println(“same date”);

Which program prints “same date” ?

Why?

Is this what we really want?

Class Complex ExampleClass Complex Examplepublic class Complex {public class Complex { private double real;private double real; private double imaginary;private double imaginary;

public Complex(double real,double imaginary) {public Complex(double real,double imaginary) { this.real = real;this.real = real; this.imaginary = imaginary;this.imaginary = imaginary; }}

public Complex(Complex other) {public Complex(Complex other) { this.real = other.real;this.real = other.real; this.imaginary = other.imaginary;this.imaginary = other.imaginary; }}

public double getReal() {public double getReal() { return real;return real; }} public double getImaginary() {public double getImaginary() { return imaginary;return imaginary; }}

Class Complex (contd.)Class Complex (contd.)public Complex add(Complex right) {public Complex add(Complex right) { double r,i;double r,i;

r = real + right.getReal();r = real + right.getReal(); i = imaginary + right.getImaginary();i = imaginary + right.getImaginary(); return (new Complex(r,i));return (new Complex(r,i)); }}

public Complex add(double val) {public Complex add(double val) { double r;double r;

r = real + val; r = real + val; return (new Complex(r,imaginary));return (new Complex(r,imaginary)); }}

Class Complex (contd.)Class Complex (contd.)public Complex multiply(Complex right) {public Complex multiply(Complex right) { double r,i;double r,i;

r = (real * right.getReal()) -r = (real * right.getReal()) - (imaginary * right.getImaginary());(imaginary * right.getImaginary()); i = (imaginary * right.getReal()) + i = (imaginary * right.getReal()) + (real * right.getImaginary());(real * right.getImaginary()); return(new Complex(r,i));return(new Complex(r,i)); }}

public Complex multiply(double scale) {public Complex multiply(double scale) { double r,i;double r,i; r = real * scale;r = real * scale; i = imaginary * scale;i = imaginary * scale; return(new Complex(r,i));return(new Complex(r,i)); }}

public String toString() {public String toString() { return new String(real + " + " + imaginary + "*i");return new String(real + " + " + imaginary + "*i"); }}

Class ComplexPairClass ComplexPairpublic class ComplexPair {public class ComplexPair { private Complex first;private Complex first; private Complex second;private Complex second; public ComplexPair(Complex first, public ComplexPair(Complex first, Complex second) {Complex second) { if(first != null)if(first != null) this.first = new Complex(first);this.first = new Complex(first); if(second != null)if(second != null) this.second = new Complex(second);this.second = new Complex(second); }}

public Complex getFirst() {public Complex getFirst() { if(first != null)if(first != null) return (new Complex(first));return (new Complex(first)); return (null);return (null); }}

public Complex getSecond() {public Complex getSecond() { if(second != null)if(second != null) return (new Complex(second));return (new Complex(second)); return (null);return (null); }}} }

public class QuadSolution { private int numberOfSolutions; private Complex solution1; private Complex solution2;

public QuadSolution(int solNum,Complex solution1,Complex solution2) { numberOfSolutions = solNum; this.solution1 = solution1; this.solution2 = solution2; }

public int numSolutions() { return numberOfSolutions; }

public String toString() { String result = new String(solution1.toString()); if(numberOfSolutions == 2) result = result.concat("\n" + solution2.toString() + "\n"); return result; }

public Complex getSolution(int solution) { switch(solution) { case 1: return solution1; case 2: if(numberOfSolutions == 1) {

System.err.println("QuadSolution Error : trying to access non" + "existant solution");

return null; } else return solution2; default: System.err.println("QuadSolution Error : trying to access illegal" +

"solution number (legal values are 1,2)."); return null; } }

A problem here?(Aliasing)

public class MyMath { //Assumption : only one coefficient a or b may be zero . public QuadSolution solveQuadratic(double a,double b,double c) { int solNum; Complex solution1=null; Complex solution2=null; double disc;

if(a==0) { solNum=1; solution1 = new Complex(-c/b,0.0); } else { disc = b*b - 4*a*c; if(disc==0) {

solNum=1;solution1 = new Complex(-b/(2*a),0);

} else if(disc<0) {disc = Math.sqrt(-disc);solution1 = new Complex(-b/(2*a),disc/(2*a));solution2 = new Complex(-b/(2*a),-disc/(2*a));solNum=2;

} else {disc = Math.sqrt(disc);solution1 = new Complex((-b+disc)/(2*a),0);solution2 = new Complex((-b-disc)/(2*a),0);solNum=2;

} } return new QuadSolution(solNum,solution1,solution2); }}

ArraysArrays

An An arrayarray is an ordered list of values is an ordered list of values

0 1 2 3 4 5 6 7 8 9

79 87 94 82 67 98 87 81 74 91

An array of size N is indexed from zero to N-1An array of size N is indexed from zero to N-1

scores

The entire arrayThe entire arrayhas a single namehas a single name

Each value has a numeric Each value has a numeric indexindex

This array holds 10 values that are indexed from 0 to 9This array holds 10 values that are indexed from 0 to 9

ArraysArrays

A particular value in an array is referenced using the array A particular value in an array is referenced using the array name followed by the index in bracketsname followed by the index in brackets

For example, the expressionFor example, the expression

scores[2]scores[2]

refers to the value 94 (which is the 3rd value in the array)refers to the value 94 (which is the 3rd value in the array)

That expression represents a place to store a single integer, That expression represents a place to store a single integer, and can be used wherever an integer variable canand can be used wherever an integer variable can

For example, it can be assigned a value, printed, or used in For example, it can be assigned a value, printed, or used in a calculationa calculation

ArraysArrays

An array stores multiple values of the same typeAn array stores multiple values of the same type

That type can be primitive types or objectsThat type can be primitive types or objects

Therefore, we can create an array of integers, or an array Therefore, we can create an array of integers, or an array of characters, or an array of String objects, etc.of characters, or an array of String objects, etc.

In Java, the array itself is an objectIn Java, the array itself is an object

Therefore the name of the array is a object reference Therefore the name of the array is a object reference variable, and the array itself is instantiated separatelyvariable, and the array itself is instantiated separately

Declaring ArraysDeclaring Arrays

The The scoresscores array could be declared as follows: array could be declared as follows:

int[] scores = new int[10];int[] scores = new int[10];

Note that the type of the array does not specify its size, but Note that the type of the array does not specify its size, but each object of that type has a specific sizeeach object of that type has a specific size

The type of the variable The type of the variable scoresscores is is int[]int[] (an array of (an array of integers)integers)

It is set to a new array object that can hold 10 integersIt is set to a new array object that can hold 10 integers

Declaring ArraysDeclaring Arrays

Some examples of array declarations:Some examples of array declarations:

float[] prices = new float[500];float[] prices = new float[500];

boolean[] flags;boolean[] flags;

flags = new boolean[20];flags = new boolean[20];

char[] codes = new char[1750];char[] codes = new char[1750];

Bounds CheckingBounds Checking

Once an array is created, it has a fixed sizeOnce an array is created, it has a fixed size

An index used in an array reference must specify a valid An index used in an array reference must specify a valid elementelement

That is, the index value must be in bounds (0 to N-1)That is, the index value must be in bounds (0 to N-1)

The Java interpreter will throw an exception if an array The Java interpreter will throw an exception if an array index is out of bounds index is out of bounds

This is called automatic This is called automatic bounds checkingbounds checking

Bounds CheckingBounds Checking

For example, if the array For example, if the array codescodes can hold 100 values, it can can hold 100 values, it can only be indexed using the numbers 0 to 99only be indexed using the numbers 0 to 99

If If countcount has the value 100, then the following reference has the value 100, then the following reference will cause an will cause an ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException::

System.out.println (codes[count]);System.out.println (codes[count]);

It’s common to introduce It’s common to introduce off-by-one errorsoff-by-one errors when using when using arraysarrays

for (int index=0; index <= 100; index++)codes[index] = index*50 + epsilon;

problem

Bounds CheckingBounds Checking

Each array object has a public constant called Each array object has a public constant called lengthlength that that stores the size of the arraystores the size of the array

It is referenced using the array name (just like any other It is referenced using the array name (just like any other object):object):

scores.lengthscores.length

Note that Note that lengthlength holds the number of elements, not the holds the number of elements, not the largest indexlargest index

public class ReverseNumbers{ public static void main (String[] args) { double[] numbers = new double[10];

System.out.println ("The size of the array: " + numbers.length);

for (int index = 0; index < numbers.length; index++){ System.out.print ("Enter number " + (index+1) + ": "); numbers[index] = EasyInput.readDouble(); } System.out.println ("The numbers in reverse:");

for (int index = numbers.length-1; index >= 0; index--) System.out.print (numbers[index] + " "); System.out.println (); }}

First example First example

public class LetterCount { public static void main (String[] args) { final int NUMCHARS = 26; int[] upper = new int[NUMCHARS];

int[] lower = new int[NUMCHARS]; char current; // the current character being processed int other = 0; // counter for non-alphabetics

System.out.println ("Enter a sentence:"); String line = EasyInput.readString(); // Count the number of each letter occurance for (int ch = 0; ch < line.length(); ch++) { current = line.charAt(ch); if (current >= 'A' && current <= 'Z') upper[current-'A']++; else if (current >= 'a' && current <= 'z')

lower[current-'a']++; else

other++; }

Second example Second example

// Print the results System.out.println (); for (int letter=0; letter < upper.length; letter++) { System.out.print ( (char) (letter + 'A') ); System.out.print (": " + upper[letter]); System.out.print ("\t\t" + (char) (letter + 'a') ); System.out.println (": " + lower[letter]); } System.out.println (); System.out.println ("Non-alphabetic characters: " + other); } }

Second example (continued) Second example (continued)

Array Declarations RevisitedArray Declarations Revisited

The brackets of the array type can be associated with the The brackets of the array type can be associated with the element type or with the name of the arrayelement type or with the name of the array

Therefore the following declarations are equivalent:Therefore the following declarations are equivalent:

float[] prices;float[] prices;

float prices[];float prices[];

The first format is generally more readableThe first format is generally more readable

Initializer ListsInitializer Lists

An An initializer listinitializer list can be used to instantiate and initialize an can be used to instantiate and initialize an array in one steparray in one step

The values are delimited by braces and separated by The values are delimited by braces and separated by commascommas

Examples:Examples:

int[] units = {147, 323, 89, 933, 540, int[] units = {147, 323, 89, 933, 540,

269, 97, 114, 298, 476};269, 97, 114, 298, 476};

char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};

Initializer ListsInitializer Lists

Note that when an initializer list is used:Note that when an initializer list is used:• the the newnew operator is not used operator is not used

• no size value is specifiedno size value is specified

The size of the array is determined by the number of items The size of the array is determined by the number of items in the initializer listin the initializer list

An initializer list can only be used in the declaration of an An initializer list can only be used in the declaration of an arrayarray

Arrays of ObjectsArrays of Objects

The elements of an array can be object referencesThe elements of an array can be object references

The following declaration reserves space to store 25 The following declaration reserves space to store 25 references to references to StringString objects objects

String[] words = new String[25];String[] words = new String[25];

It does NOT create the It does NOT create the StringString objects themselves objects themselves

Each object stored in an array must be instantiated Each object stored in an array must be instantiated separatelyseparately

Command-Line ArgumentsCommand-Line Arguments

The signature of the The signature of the mainmain method indicates that it takes an method indicates that it takes an array of array of StringString objects as a parameter objects as a parameter

These values come from command-line arguments that are These values come from command-line arguments that are provided when the interpreter is invokedprovided when the interpreter is invoked

For example, the following invocation of the interpreter For example, the following invocation of the interpreter passes an array of three passes an array of three StringString objects into main: objects into main:

> java DoIt pennsylvania texas california> java DoIt pennsylvania texas california

These strings are stored at indexes 0-2 of the parameterThese strings are stored at indexes 0-2 of the parameter