Download javaProgLec02

Document related concepts
no text concepts found
Transcript
Some basic concepts of Java
Adding psuedocode to javadocs
•
•
•
•
•
•
•
•
•
•
•
•
•
/**
<pre>
// instantiate a date with today's date called datToday
// create a datCount set at some earlier date
// while datCount.year < some arbitrary end year, loop and increment datCount by one day
//if dayOfMonth == 1
//print out year plus month
//print out the days of the week Sun Mon Tue etc.
//determine the ordinal day of the week 1 through 7 Sun through Sat
//init counter to ordinalDay and for each day greater than 1
//more bogus pseudocode...
</pre>
*/
• Not a great idea; just leave your pseudocode in the source (.java) files.
Adding examples code to javadocs
/**
*
* @param perSoldiers ArrayList<String>
* @return Person object
*
* <pre>
* Example:
* perSenior = getMostSenior(perVets); //will return a reference to Person
* </pre>
*/
Use the <pre> code here </pre> tages in javadocs before the methods Good idea!
Promotion & Casting
• Automatic promotion;
operand is of lesser
other and completing
not reduce precision
this occurs when one
precision than the
the operation will
of result.
double dResult = nNumerator / dDenominator;
In the above case, nNumerator is promoted to
a double.
int nResult = (int)(nNumerator /
dDenominator);
you must CAST because you can't assign the
return value, intially a double (64 bit
flotating precision) to an int (32 bit int
precision)
Cast and Round
• Cast converts a value to a different type:
double balance = total + tax;
int dollars = (int) balance;
• Math.round converts a floating-point number to nearest integer:
long rounded = Math.round(balance);
// if balance is 13.75, then rounded is set to 14
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Syntax 4.2 Cast
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Implicit versus Explicit Parameters
• The implicit parameter is the object reference,
whereas the explicit parameter(s) are/is the
argument(s) to the method.
• strName.indexOf(cSpace);
• Math.pow(2,3); //no implicit param -- static
• Most often, when we refer to parameters, we
mean the explicit parameters.
Eclipse IDE
Some Eclipse Shorcuts
• Quick-fix: left-click error flag in left margin
– will resolve imports
– will suggest fixes, such as surround with try/catch
• Code assist: begin typing then press ctrl-space
– Window > Preferences > Java > Editor > Templates
– surround, main, if, switch, for, while, etc.
• Control-click navigate: jump to the definition
– jump to varialbe/reference definitons
– jump to method definitions
– jump to Class definitions
More Eclipse Shortcuts
• Keyboard shortcuts:
– ctrl-shift-G: searches for references to a
highlighted class, method, field, or variable
– ctrl-shift-F4: closes all open editor windows
ctrl-o: outline popup - quickly jump to a method in
a large class
F4: shows the hierarchy viewer for a class (ctrl-T
shows similar data in a popup version)
ctrl-m: toggle maximize of the current editor or
view
– alt-shift-J: javadocs
More Eclipse Shorcuts
• Quick Open:
– pressing ctrl-shift-T will open java files
– pressing ctrl-shift-R will open other resources
– use wildcards
• Rename: alt-shift-R
• highlight the variable/reference and press alt-shift-R
• renames all variables/references in class
• ctrl-shift-L: shows all keyboard shortcuts available in
that context
More Eclipse Shorcuts
• sysout
• ctrl-shift-F to format. Be careful! windows ||
preferences || Java || code styel || formatter
|| new profile || comments uncheck enable
line comment formatting to preserve indents
in psuedocode.
• clt-shift-forward_slash to surround with /* */
• clt-forward_slash to make // comments
Strings
Useful methods of String
•
•
•
•
•
•
•
char charAt(int index)
int compareTo(String anotherString)
boolean endsWith(String suffix)
int indexOf(multiple)
int length()
String substring(int begin, int end)
String trim()
String is Immutable
• Immutable class: Has no mutator methods (e.g., String):
String name = "John Q. Public";
String uppercased = name.toUpperCase();
// name is not changed
• It is safe to give out references to objects of immutable classes; no
code can modify the object at an unexpected time. The implicit
paramater is immutable!
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
String Pools
• To optimize performance, the JVM may keep a String
in a pool for reuse. Sometimes is does and
sometimes it doesn't. Very unpredictable.
• This means that in some VMs (or even the same VM
at different times), two or more object references
may be pointing to the same String in memory.
• However, since you can not rely upon pooling, you
MUST assume that each string has its own object
reference.
• Besides, since Strings are immutable, you need not
consider the consequences of passing a reference.
The String Class
• A string is a sequence of characters
• Strings are objects of the String class
• A string literal is a sequence of characters enclosed in double
quotation marks:
"Hello, World!"
• String length is the number of characters in the String
• Example: "Harry".length() is 5
• Empty string: ""
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Concatenation
• Use the + operator:
String name = "Dave";
String message = "Hello, " + name;
// message is "Hello, Dave"
• If one of the arguments of the + operator is a string, the other is
converted to a string
String a = "Agent”;
int n = 7;
String bond = a + n; // bond is "Agent7"
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Substrings
• String sub2 = greeting.substring(7, 12); // sub2 is "World"
• Substring length is “past the end” - start
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Escape Sequences
• to include the quotes in a string, use the
escape sequences:
• strOne = "\"Quotation"\";
• to print \\
• strBackSlashes = "\\\\";
Escape Sequences
Escape
Sequenc
e
Character
\n
newline
\t
tab
\b
backspace
\f
form feed
\r
return
\"
" (double quote)
\'
' (single quote)
\\
\ (back slash)
\uDDDD
character from the Unicode
character set (DDDD is four
hex digits)
Arrays
• arrays of prmitivies
• arrays of Objects
• multidimentional arrays
Arrays
• Array: Sequence of values of the same type
• Construct array:
new double[10]
• Store in variable of type double[]:
double[] data = new double[10];
• When array is created, all values are initialized depending on array
type:
• Numbers: 0
• Boolean: false
• Object References: null
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Arrays: declare and init
• Array: Sequence of values of the same type
double[] dValues = {2.5, 8.1, 3.79, 0, 6.0};
The above declares and intializes an array of double[]
String[] strNames = {"Harry", "Lary", "Mary",
"Perry"};
The above declares and intializes an array of String[]
Arrays
Use [] to access an element:
double[] values = new double[10];
values[2] = 29.95;
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Arrays
• Using the value stored:
System.out.println("The value of this data item is "
+ values[2]); //values[2] (a double) is promoted to a
String.
• Get array length as values.length (Not a method!)
• Index values range from 0 to length - 1
• Accessing a nonexistent element results in a bounds error:
double[] values = new double[10];
values[10] = 29.95; // ERROR
• Limitation: Arrays have fixed length
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Declaring Arrays
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Syntax 7.1 Arrays
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Make Parallel Arrays into Arrays of Objects
// Don't do this
int[] accountNumbers;
double[] balances;
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Make Parallel Arrays into Arrays of Objects
Avoid parallel arrays by changing them into arrays of objects:
BankAccount[] accounts;
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
multidimensional arrays
• int[][] nNumbers = new int[3][4];
• boolean[][] bExams = {
new boolean[6],
new boolean[9],
new boolean[3],
new boolean[8]
}; //ragged array
Array Lists
• ArrayList class manages a sequence of objects
• Can grow and shrink as needed
• ArrayList class supplies methods for many common tasks, such
as inserting and removing elements
• ArrayList is a generic class:
ArrayList<T>
collects objects of type parameter T:
ArrayList<String> names = new ArrayList<String>();
names.add("Emily");
names.add("Bob");
names.add("Cindy");
• size method yields number of elements
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Adding Elements
To add an object to the end of the array list, use the add method:
names.add("Emily");
names.add("Bob");
names.add("Cindy");
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Retrieving Array List Elements
• To obtain the value an element at an index, use the get method
• Index starts at 0
• String name = names.get(2);
// gets the third element of the array list
• Bounds error if index is out of range
• Most common bounds error:
int i = names.size();
name = names.get(i); // Error
// legal index values are 0 ... i-1
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Setting Elements
• To set an element to a new value, use the set method:
names.set(2, "Carolyn");
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Removing Elements
• To remove an element at an index, use the remove method:
names.remove(1);
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Adding and Removing Elements
names.add("Emily");
names.add("Bob");
names.add("Cindy");
names.set(2, "Carolyn");
names.add(1, "Ann");
names.remove(1);
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Working with Array Lists
ArrayList<String> names =
new ArrayList<String>();
Constructs an empty array list that can hold
strings.
names.add("Ann");
names.add("Cindy");
Adds elements to the end.
System.out.println(names);
Prints [Ann, Cindy].
names.add(1, "Bob");
Inserts an element at index 1. names is now
[Ann, Bob, Cindy].
names.remove(0);
Removes the element at index 0. names is
now [Bob, Cindy].
names.set(0, "Bill");
Replaces an element with a different value.
names is now [Bill, Cindy].
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Working with Array Lists (cont.)
String name = names.get(i);
Gets an element.
String last =
names.get(names.size() - 1);
Gets the last element.
ArrayList<Integer> squares =
new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
{
squares.add(i * i);
}
Constructs an array list holding the first ten
squares.
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Syntax 7.2 Array Lists
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Type Conversion
•
•
•
•
•
•
Each Wrapper class has some parse functions.
Integer.parseInt(String str);
Double.parseDouble(String str);
Byte.parseByte(String str);
Boolean.parseBoolean(String str);
etc.
Reading Input
• System.in has minimal set of features — it can only read one
byte at a time
• In Java 5.0, Scanner class was added to read keyboard input in
a convenient manner
• Scanner in = new Scanner(System.in);
System.out.print("Enter quantity:");
int quantity = in.nextInt();
• nextDouble reads a double
• nextLine reads a line (until user hits Enter)
• next reads a word (until any white space)
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Keyboard Input
• ParserUtils -- you may use this
• Scanner -- or you can define your own
• Scanner scn = new Scanner(System.in);
• Scanner scn = new Scanner(File filSource);
throws FileNotFoundException
• strInput = scn.nextLine();
Random numbers
• import java.util.Random;
• int n = ran.nextInt();
• double d = ran.nextDouble();
• int n = ran.nextInt(int nNum);
ran.nextInt(20); //0-19
//in this above case 20 is multipled by some real
number between 0 and 1 exclusive; then
converted to int; it will return 0 to 19.
Constructors
• Has the same name and as the class (very
important - otherwise not a constructor)
• The ONLY method that is allowed to be
capitalized; and must be capitalized.
• If you don't define a constructor, a default noarg constructor is implied that will set fields to
zero, or null.
• If you define any constructor, then the default
constructor is not availalbe to you.
Object Composition
•
•
•
•
•
•
•
•
•
Objects are composed of instance fields
Instance fields can be primitives or other objects
//fields of this class
private String strFirstName;
private String strLastName;
private byte yAge; //-128 to 127
private boolean bVeteran;
private String strSocialSecurityNum;
private ArrayList<Person> perDependents;
Using anonymous objects
• Anonymous objects are useful for "hardcoding" objects and passing them into
Constructors.
• The enclosing class will contain a reference to
this object, so we can find it later.
Static
Static Methods
• Example:
public class Financial
{
public static double percentOf(double p, double a)
{
return (p / 100) * a;
}
// More financial methods can be added here.
}
• Call with class name instead of object:
double tax = Financial.percentOf(taxRate, total);
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Static Methods
• If a method manipulates a class that you do not own, you cannot add
it to that class
• A static method solves this problem:
public class Geometry
{
public static double area(Rectangle rect)
{
return rect.getWidth() * rect.getHeight();
}
// More geometry methods can be added here.
}
• main is static — there aren’t any objects yet
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Calling Static Methods
• A static method does not operate on an object
double dY = 4;
double dY = matObject.sqrt(); // Error
double dY = Math.sqrt(9); //correct
• Static methods are declared inside classes
• Naming convention: Classes start with an uppercase letter; objects
start with a lowercase letter:
Math
System.out
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Syntax 4.3 Static Method Call
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Self Check 8.12
Suppose Java had no static methods. How would you use the
Math.sqrt method for computing the square root of a number x?
Answer:
Math mat = new Math();
double dResult = mat.sqrt(x);
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Static Variables
• A static variable belongs to the class, not to any object of the class:
public class BankAccount
{
...
private double balance;
private int accountNumber;
private static int lastAssignedNumber = 1000;
}
• If lastAssignedNumber was not static, each instance of
BankAccount would have its own value of
lastAssignedNumber
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Static Variables
• public BankAccount()
{
// Generates next account number to be assigned
lastAssignedNumber++; // Updates the static variable
accountNumber = lastAssignedNumber;
// Sets the instance variable
} /this no-args constructor create a serial number the
bank account
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
A Static Variable and Instance Variables
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Static Variables
• Exception: Static constants, which may be either private or public:
public class BankAccount
{
...
public static final double OVERDRAFT_FEE = 5;
// Refer to it as BankAccount.OVERDRAFT_FEE
}
//in the above case, OVERDRAFT_FEE is a constant
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Syntax 4.1 Constant Definition
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Constants: final
• A final variable is a constant
• Once its value has been set, it cannot be changed
• Named constants make programs easier to read and maintain
• Convention: Use all-uppercase names for constants
final double QUARTER_VALUE = 0.25;
final double DIME_VALUE = 0.1;
final double NICKEL_VALUE = 0.05;
final double PENNY_VALUE = 0.01;
payment = dollars + quarters * QUARTER_VALUE
+ dimes * DIME_VALUE + nickels * NICKEL_VALUE
+ pennies * PENNY_VALUE;
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Self Check 8.14
Name two static variables of the System class.
Answer: System.in and System.out.
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Self Check 8.15
Harry tells you that he has found a great way to avoid those pesky
objects: Put all code into a single class and declare all methods and
variables static. Then main can call the other static methods, and all
of them can access the static variables. Will Harry’s plan work? Is it a
good idea?
Answer: Yes, it works. Static methods can access static variables of
the same class. But it is a terrible idea. As your programming tasks
get more complex, you will want to use objects and classes to
organize your programs.
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Packages
Packages
•
•
•
•
Packages help organize your code
Packages disambiguate
Packages avoid naming conflicts
Using the fully qualified name of an object,
you need not import it (though it's best to
import).
The API Documentation of the Standard Java Library
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Packages
• Package: a collection of classes with a related purpose
• Import library classes by specifying the package and class name:
import java.awt.Rectangle;
• You don’t need to import classes in the java.lang package such as String and System
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Syntax 2.4 Importing a Class from a
Package
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Packages
• Package: Set of related classes
• Important packages in the Java library:
Package
Purpose
Sample Class
java.lang
Language support
Math
java.util
Utilities
Random
java.io
Input and output
PrintStream
java.awt
Abstract Windowing Toolkit
Color
java.applet
Applets
Applet
java.net
Networking
Socket
java.sql
Database Access
ResultSet
javax.swing
Swing user interface
JButton
omg.w3c.dom
Document Object Model for XML
documents
Document
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Organizing Related Classes into Packages
• To put classes in a package, you must place a line
package packageName;
as the first instruction in the source file containing the classes
• Package name consists of one or more identifiers separated by periods
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Organizing Related Classes into Packages
• For example, to put the Financial class introduced into a
package named com.horstmann.bigjava, the
Financial.java file must start as follows:
package com.horstmann.bigjava;
public class Financial
{
...
}
• Default package has no name, no package statement
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Importing Packages
• Can always use class without importing:
java.util.Scanner in = new java.util.Scanner(System.in);
• Tedious to use fully qualified name
• Import lets you use shorter class name:
import java.util.Scanner;
...
Scanner in = new Scanner(System.in)
• Can import all classes in a package:
import java.util.*;
• Never need to import java.lang
• You don’t need to import other classes in the same package
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Package Names
• Use packages to avoid name clashes
java.util.Timer
vs.
javax.swing.Timer
• Package names should be unambiguous
• Recommendation: start with reversed domain name:
com.horstmann.bigjava
• edu.sjsu.cs.walters: for Britney Walters’ classes
([email protected])
• Path name should match package name:
com/horstmann/bigjava/Financial.java
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Package and Source Files
• Base directory: holds your program's Files
• Path name, relative to base directory, must match package name:
com/horstmann/bigjava/Financial.java
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley &
Sons. All rights reserved.
Self Check 8.18
Which of the following are packages?
a. java
b. java.lang
c. java.util
d. java.lang.Math
Answer:
a.No
b.Yes
c. Yes
d.No
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Self Check 8.19
Is a Java program without import statements limited to using the
default and java.lang packages?
Answer: No — you simply use fully qualified names for all other
classes, such as java.util.Random and
java.awt.Rectangle.
Big Java by Cay Horstmann
Copyright © 2009 by John Wiley & Sons. All rights reserved.
Gregorian Calendar Example
Asciify Example (if we have time)