Download View File

Document related concepts
no text concepts found
Transcript
Java Basics
Elizabeth MacDonald
Some lecture slides obtained from Java Programming: From
Problem Analysis to Program Design by Malik and Nair
Comments
2 kinds
// comment to end of line
/* C-style comments, possibly a multi-line
comment */
Comments do not nest.
/* and */ have no special meaning in
comments that begin with //.
// has no special meaning in comments
that begin with /* or /**.
Keywords












abstract

default

if

private

this

boolean

do

implements 
protected 
throw

extends

null**


*boolean literals
** null literal
break
double
import
public
throws
byte
else
instanceof
return
transient
case
int
false*













short
try
catch
final
interface
static
void
char
finally
long
strictfp
volatile
true*













class
float
native
super
while
const
for
new
switch
continue
goto
package
synchronized
Identifiers




Names of things
Cannot be the same as any keyword
Are case-sensitive
Consist of and must begin with:




Letters
Digits
The underscore character (_)
The dollar sign ($)
Data Types
 Data type: set of values together with a
set of operations
Primitive Data Types
Primitive Data Types
 Floating-Point Data Types
 float: precision = 6 or 7
 double: precision = 15
 Boolean
 boolean
• true
• false
Integral Data Types
Values and Memory Allocation for
Integral Data Types
Literals
 Null literal
 null
 boolean
 true false
 int
 Default for integrals
 2 0372 0xDadaCafe 1996 0x00FF00FF
 long
 Must end with “L” or “l”
 0l 0777L 0x100000000L
0xC0B0L
2147483648L
Floating-Point Literals
float
Must end with “f” or “F”
1e1f 2.f .3f 0f 3.14F
6.022137e+23f
double
Default for floating-point types
1e1 2. .3 0.0 3.14 1e-9d
1e137
Character Literals
char
Must be in single quotes
Escape character is \
• '\t' for tab, '\n' for newline, '\\' for '\', '\' for ''‘, etc.
• If followed by numbers, represents the unicode
ascii value of that character
Examples:
• 'a'
'%'
'\t'
'\\'
'\''
'\u03a9'
'\uFFFF'
Cannot have more than one character
• 'abc‘ is not a valid character
'\177'
Commonly Used Escape
Sequences
String Literals
 Anything in double quotes
 Examples:
 "" // the empty string
 "\"" // a string containing " alone
 "This is a string" // a string containing 16 characters
 "This is a " + // a string-valued constant expression,
"two-line string" // formed from two string literals
 NOT Strings:
 ‘abc’
Strings and the Operator +
 Operator + can be used to concatenate two
strings or a string and a numeric value or
character
 Example:
Additional Notes on String Literals
 Literal Strings:
 Always represent references to the same String
object
• Even if in a different class or package!!
 Computed Strings:
 Strings computed by constant expressions are
computed at compile time and treated like literals.
• “This “ + “whole string will be treated as a “ + “literal” will be
treated the same as “This whole string will be treated as a
literal”
 Strings computed at run time are newly created and
therefore distinct.
• “This “ + arr[0] will not be the same String as “This is not”,
even if arr[0] contains the String “is not”, and neither will be
the same String as new String(“This is not”)
Arithmetic Operators and Operator
Precedence
 Five Arithmetic Operators





+ addition
- subtraction
* multiplication
/ division
% mod (modulus) operator (integer operands only)
 Unary operator: operator that has one operand
 Binary operator: operator that has two
operands
Precedence of Operators
Expressions
 Integral expressions
 Floating-point or decimal expressions
 Mixed expressions
Integral Expressions
 All operands are integers
 Examples:
2+3*5
3 + x – y/7
x + 2 * (y – z) + 18
Floating-point Expressions
 All operands are floating-point numbers
 Examples:
12.8 * 17.5 – 34.50
x * 10.5 + y - 16.2
Mixed Expressions
 Operands of different types
 Examples:
2 + 3.5
6/4 + 3.9
 Integer operands yield an integer result;
floating-point numbers yield floating-point
results
 If both types of operands are present, the result
is a floating-point number
 Precedence rules are followed
Type Conversion (Casting)
 Used to avoid implicit type coercion
 Syntax
(dataTypeName) expression
 Expression evaluated first, then type
converted to dataTypeName
 Examples:
(int)(7.9 + 6.7) = 14
(int)(7.9) + (int)(6.7) = 13
The class String
 Used to manipulate strings
 String




Sequence of zero or more characters
Enclosed in double quotation marks
Null or empty strings have no characters
Numeric strings consist of integers or
decimal numbers
 length() returns the number of characters in
string
Parsing Numeric Strings
 String to int
Integer.parseInt(strExpression)
 String to float
Float.parseFloat(strExpression)
 String to double
Double.parseDouble(strExpression)
*strExpression: expression containing a numeric
string
Constants




Cannot be changed during program execution
Declared by using the reserved word final
Initialized when it is declared
Should be in all uppercase with words separated by _
according to Sun’s naming conventions
final int MIN_VALUE = 0;
final String MY_NAME = “Beth”;
Variables
 Content may change during program execution
 Must be declared before it can be used
 May not be automatically initialized
 Class level – initialized to default value
 If new value is assigned, old one is destroyed
 Value can only be changed by an assignment statement
or an input (read) statement
 Sun’s naming conventions:
 Mixed case with a lowercase first letter. Internal words start with
capital letters.
 Variable names should not start with underscore _ or dollar sign
 Should be short, yet meaningful
 Examples: accountBalance, firstName, menuChoice.
Class Naming Conventions
Nouns
Mixed case with the first letter of each
internal word capitalized.
Try to keep your class names simple and
descriptive.
Use whole words-avoid acronyms and
abbreviations.
Examples:
Calculator, User, BankAccount, ClassRoster
Method Naming Conventions
Verbs
Mixed case with the first letter lowercase,
with the first letter of each internal word
capitalized.
Examples:
readLine(), getFirstName(), setDateOfBirth()
Assignment Statements
 Use “=“
 Operands must be compatible
 String s = “s”;
 char c = “s”;
// ok
// Not ok
 Left hand operand must be large enough of a
type to contain the result of the right hand
operand.
 int x = 5 + 3;
 double d = 5 + 3;
 int n = 8.0 + 5;
 float f = 8.0 + 5;
// ok
// ok
// Not ok
// Not ok… why not?
Increment and Decrement
Operators
 ++
 Increments the value of its operand by 1
 x++ is equivalent to x = x + 1
 - Decrements the value of its operand by 1
 x-- is equivalent to x = x - 1
 Syntax




Pre-increment: ++variable
Post-increment: variable++
Pre-decrement: --variable
Post-decrement: variable--
More on Assignment
Statements
 variable = variable * (expression);
is equivalent to
 variable *= expression;
Similarly,
 variable = variable + (expression);
is equivalent to:
 variable += expression;
The Operator new
 Statement:
Integer num;
num = new Integer(78);
 Result:
Terminology
 Package: collection of related classes
 Class: consists of methods. All Java
code must reside in a class.
 Method: designed to accomplish a
specific task
Packages
 Files with a .class extension are aggregated into
packages, or collections of related classes.
 Packages enforce modularity.
 Any class can belong to only 1 package.
 Packages may contain subpackages to arbitrary
levels.
 The primary package is java and its main
subpackage is lang.
Packages (cont’d)
 All classes in the java.lang package are
automatically imported into every program.
 Programmers typically import classes from
packages to avoid using fully qualified names.
 If a program imports the class java.util.Date, the
programmer then can use Date instead of the fully
qualified name.
 In UML, they look like:
Packages (cont’d)
java and the javax packages are
standard packages.
The javax packages are extensions to the
earlier java packages.
Support string and text processing, numeric
computation, networking, graphics, security,
and so on.
Packages (cont’d)
 Every class belongs to a package.
 The package to which a class belongs can be
explicitly declared with the package statement
in a source file.
 A class belongs to a default unnamed package if
a containing package is not explicitly declared.
 Sun’s naming convention dictates that package
names are in all lowercase letters.
Summary of packages
 Convenient way to group related classes into
software libraries.
 Example: java.math
 For small programs and projects, default
packages are typically sufficient.
 Always use packages if you ever expect to reuse
code again.
 Explicitly named packages are especially useful
for large projects with many programmers.
import Statement
 Used to import the components of a package
into a program
 Reserved word
 import java.io.*;
imports the (components of the) package java.io into
the program
 Primitive data types and the class String
 Part of the Java language
 Don’t need to be imported
Do I have to import ?
 Java programs often include import
statements such as
import java.util.Date;
for convenience.
 If a program requires the standard Date class,
for instance, then the fully qualified name
java.util.Date must be used if the import is
omitted.
 Subpackages must be explicitly imported.
Running the program
As stated before, the entry point of the
program is the main method
If the signature of the main method is not
“public static void main(String [ ] args)”, then it
may compile, but it will not run
To compile
javac Hi.java
To run
java Hi
Using Predefined Classes and
Methods in a Program
To use a method you must know:
 Name of class containing method (Math)
 Name of package containing class
(java.lang)
 Name of method (pow), its parameters (int
a, int b), and function (a^b)
class Math (Package:
java.lang)
class Math (Package:
java.lang)
Using Predefined Classes and
Methods in a Program
Example method call:
Math.pow(2,3); //calls pow method in class Math
(Dot) . Operator: used to access the method
in the class
Using Dialog Boxes for
Input/Output
 Use a graphical user interface (GUI)
 class JOptionPane
 Contained in package javax.swing
 Contains methods: showInputDialog and
showMessageDialog
 Syntax:
str = JOptionPane.showInputDialog(strExpression)
 Program must end with System.exit(0);
Parameters for the Method
showMessageDialog
JOptionPane.showMessageDialog(parentComponent,
messageStringExpression, boxTitleString, messageType);
JOptionPane Options for the
Parameter messageType
JOptionPane Example
Control Structures
Three methods of processing a program
In sequence
Branching or Selection
Looping
Branch: Altering the flow of program
execution by making a selection or choice
Loop: Altering the flow of program
execution by repetition of statement(s)
Flow of Execution
Relational Operators
Relational Operator
Allows you to make comparisons in a program
Binary operator
Condition is represented by a logical
expression in Java
Logical expression: expression that has a
value of either true or false
Relational Operators in Java
Relational Operators and
Primitive Data Types
Can be used with integral and floatingpoint data types
Can be used with the char data type
Unicode Collating Sequence
Relational Operators and the
Unicode Collating Sequence
Logical (Boolean) Operators
The ! (not) Operator
Selection
One-Way Selection
Two-Way Selection
Compound (Block of) Statements
Multiple Selections (Nested if)
Conditional Operator
switch Structures
One-Way Selection
 Syntax:
if(expression)
statement
 Expression referred to as decision maker
 Statement referred to as action statement
Two-Way Selection
Syntax:
if(expression)
statement1
else
statement2
else statement must be paired with an if
Two-Way Selection
Compound (Block of)
Statements
 Syntax
{
statement1
statement2
.
.
.
statementn
}
Multiple Selection: Nested if
 Syntax
if(expression1)
statement1
else
if(expression2)
statement2
else
statement3
 Else associated with
most recent
incomplete if
 Multiple if statements
can be used in place
of if…else statements
 May take longer to
evaluate
Conditional (? :) Operator
Ternary operator
Syntax
expression1 ? expression2 : expression3
If expression1 = true, then the result of the
condition is expression 2
otherwise, the result of the condition is
expression3
switch Structures
switch(expression)
{
case value1: statements1
break;
case value2: statements2
break;
...
case valuen: statementsn
break;
default: statements
}
 Expression also
known as selector
 Expression can be
identifier
 Value can only be
integral
switch Statement
Why Is Repetition Needed?
There are many situations in which the
same statements need to be executed
several times
Example
Formulas used to find average grades for
students in a class
The while Looping (Repetition)
Structure
 Syntax
while(expression)
statement
 Expression is always true
in an infinite loop
 Statements must change
value of expression to
false
Counter-Controlled while Loop
 Used when exact number of data or entry pieces
is known
 Syntax:
int N = //value input by user or specified in
program;
int counter = 0;
while(counter < N){
statement(s);
counter++;
}
Sentinel-Controlled while Loop
 Used when exact number of entry pieces is
unknown but last entry (special/sentinel value) is
known)
 Syntax:
input first data item into variable;
while(variable != sentinel){
statement(s);
input a data item into variable;
}
Flag-Controlled while Loop
 Boolean value used to control loop
 Syntax:
boolean found = false;
while(!found){
statement(s);
if(expression)
found = true;
}
The for Looping (Repetition)
Structure
 Specialized form of while loop
 Simplifies the writing of count-controlled loops
 Syntax
for(initial statement; loop condition; update
statement)
{
statement(s);
}
The for Looping (Repetition)
Structure
 Execution:
 initial statement
executes
 loop condition
evaluated
 If loop condition
evaluates to true,
execute for loop
statement and
execute update
statement
 Repeat until loop
condition is false
The for Looping (Repetition)
Structure
 Does not execute if initial condition is false
 Update expression changes value of loop control
variable, eventually making it false
 If loop condition is always true, result is an infinite
loop
 Infinite loop can be specified by omitting all three
control statements
 If loop condition is omitted, it is assumed to be true
 for statement ending in semicolon is empty; does
not effect program
The do…while Loop (Repetition)
Structure
 Syntax
do{
statement(s);
}
while(expression);
 Statements executed first, then expression
evaluated
 Statement(s) executed at least once then
continued if expression is true
do…while Loop (Post-test Loop)
break Statements
Used to exit early from a loop
Used to skip remainder of switch structure
Can be placed within if statement of a loop
If condition is met, loop exited immediately
continue Statements
 Used in while, for, and do...while structures
 When executed in a loop, the remaining
statements in the loop are skipped; proceeds
with the next iteration of the loop
 When executed in a while/do…while structure,
expression evaluated immediately after continue
statement
 In a for structure, the update statement is
executed after the continue statement; then the
loop condition executes
Nested Control Structures
Provides new power, subtlety, and
complexity
if, if…else, and switch structures can be
placed within while loops
for loops can be found within other for
loops
Nested Control Structures
(Example)
 for(int i = 1; i <= 5; i++){
for(int j = 1; j <= i; j++)
System.out.print(“*”);
System.out.println();
}
 Output:
*
**
***
****
*****
Programming example: do-while
and nested loops
Write a program that will prompt the user
for the number of times to say Hello.
 Read in the user’s input and output “Hello” n
times (where n is the number of time specified
by the user).
At the end of the program, ask the user if
he/she would like to run the program
again…
 If yes, prompt the user again for the number of
times
 If no, exit.
Array
Definition: structured data type with a fixed
number of components
Every component is of the same type
Components are accessed using their
relative positions in the array
One-Dimensional Arrays
 Syntax to instantiate an array:
 dataType[ ] arrayName;
arrayName = new dataType[intExp]
 dataType[ ] arrayName = new dataType[intExp]
 dataType[ ] arrayName1, arrayName2;
 Syntax to access an array component:
 arrayName[indexExp]
• intExp = number of components in array >= 0
• 0 <= indexExp <= intExp
Array num:
int[] num = new int[5];
Array list
Arrays
 Not necessary to know array size at
compile time
 arrayName.length returns the number of
components in array
 Loops used to step through elements in
array and perform operations
 Elements initialized to default value
 0 for integrals
 0.0 for floating point
 null for object references
Arrays
 Some operations on arrays:




Initialize
Input data
Output stored data
Find largest/smallest/sum/average of
elements
How To Specify Array Size During
Program Execution
int arraySize;
System.out.print("Enter the size of the array: ");
arraySize = Integer.parseInt(keyboard.readLine());
System.out.println();
//Line 1
//Line 2
//Line 3
//Line 4
int[] list = new int[arraySize];
//Line 5
Instance Variable length
Contains size of array
public member
Is final
Can be directly accessed in program using
array name and dot operator
Example
If: int[] list = {10, 20, 30, 40, 50, 60};
Then: list.length is 6
Now let’s look at some
examples of how to use Arrays
Code to Initialize Array to
Specific Value (10.00)
for(index = 0; index < sale.length; index++)
sale[index] = 10.00;
Code to Read Data into Array
for(index = 0; index < sale.length; index++)
sale[index] = Integer.parseInt(keyboard.readLine());
Code to Print Array
for(index = 0; index < sale.length; index++)
System.out.print(sale[index] + " ");
Code to Find Sum and Average
of Array
sum = 0;
for(index = 0; index < sale.length; index++)
sum = sum + sale[index];
if(sale.length != 0)
average = sum / sale.length;
else
average = 0.0;
Determining Largest Element in
Array
maxIndex = 0;
for(index = 1; index < sale.length; index++)
if(sale[maxIndex] < sale[index])
maxIndex = index;
largestSale = sale[maxIndex];
Array Index Out of Bounds
Array in bounds if:
0 <= index <= arraySize – 1
If index < 0 or index > arraySize:
ArrayIndexOutOfBoundsException
exception is thrown
Base address: memory location of first
component in array
Copying an Array
Two-Dimensional Arrays
 Data is sometimes in table form (difficult to
represent using one-dimensional array)
 To declare/instantiate two-dimensional array:
dataType[ ][ ] arrayName = new
dataType[intExp1][intExp2];
 To access a component of a 2-dimensional
array:
arrayName[indexExp1][indexExp2];
• intExp1, intExp2 >= 0
• indexExp1 = row position
• indexExp2 = column position
Two-Dimensional Arrays
Can specify different number of columns
for each row (ragged arrays)
Three ways to process 2-D arrays
Entire array
Particular row of array (row processing)
Particular column of array (column
processing)
Processing algorithms similar to
processing algorithms of one-dimensional
arrays
Two-Dimensional Arrays
double[ ][ ]sales = new double[10][5];
Accessing Two-Dimensional
Array Components
Two-Dimensional Arrays:
Special Cases
Multidimensional Arrays
 Can define three-dimensional arrays or ndimensional array (n can be any number)
 Syntax to declare and instantiate array:
dataType[ ][ ]…[ ] arrayName = new
dataType[intExp1][intExp2]…[intExpn];
 Syntax to access component:
arrayName[indexExp1][indexExp2]…[indexExpn]
• intExp1, intExp2, ..., intExpn = positive integers
• indexExp1,indexExp2, ..., indexExpn = nonnegative integers
Loops to Process
Multidimensional Arrays
double[][][] carDealers = new double [10][5][7];
for(i = 0; i < 10; i++)
for(j = 0; j < 5; j++)
for(k = 0; k < 7; k++)
carDealers[i][j][k] = 10.00;