java types float, double long, int, short byte char boolean objects objects are created by :...
Post on 21-Dec-2015
256 views
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