02 - java fundamentals handout
TRANSCRIPT
-
8/13/2019 02 - Java Fundamentals Handout
1/13
10/15/13
1
Object OrientedProgrammingMihai Dasclu
2CB, 2013 - 2014
ProgrammingStyle andDocumentation
Appropriate Comments
Naming Conventions
Proper Indentation and Spacing Lines
Block Styles
ObjectOrrientedProgramming
2
Appropriate Comments /* Include a summary at the beginning of the
program to explain what the program does, its keyfeatures, its supporting data structures, and anyunique techniques it uses */
// Include your name, class section, teaching
//assistant, date, and a brief description at the
//beginning of the program
// strategic (before, overall) vs. tactical (intended forsingle lines of code can make code unreadable)
// include copyright information
// add descriptive information before function ObjectOrrientedProgramm
ing
3
Naming Conventions Choose meaningful and descriptive names
Variables and method names: Use lowercase. If the name consists of several words,
concatenate all in one, use lowercase for the first word,and capitalize the first letter of each subsequent word inthe name. For example, the variables radius and area,and the method computeArea.
Class names: Capitalize the first letter of each word in the name. For
example, the class name ComputeArea.
Constants: Capitalize all letters in constants, and use underscores to
connect words. For example, the constant PI andMAX_VALUE
ObjectOrrientedProgramm
ing
4
Proper Indentation andSpacing Indentation
Indent two spaces (or \t in Eclipse / NetBeans) Spacing
Use blank line to separate segments of the code
ObjectOrrientedProgramming
5
Block StylesNext-line & End-of-line
ObjectOrrientedProgramming
6
public class Test
{
public static void main(String[] args)
{
System.out.println("Block Styles");
}
}
public class Test {
public static void main(String[] args) {
System.out.println("Block Styles");
}
}
-
8/13/2019 02 - Java Fundamentals Handout
2/13
10/15/13
2
Programming Errors Syntax Errors
Detected by the compiler Runtime Errors
Causes the program to abort Logic Errors
Produces incorrect result
ObjectOrrientedProgramming
7
Syntax Errors
ObjectOrrientedProgramming
8
public class ShowSyntaxErrors {
public static void main(String[] args) {
i = 30;
System.out.println(i + 4);
}
}
Runtime Errors
ObjectOrrientedProgramm
ing
9
public class ShowRuntimeErrors {
public static void main(String[] args) {
int i = 1 / 0;
}
}
Logic Errors
ObjectOrrientedProgramm
ing
10
public class ShowLogicErrors {
// Determine if a number is between 1 and 100 inclusively
public static void main(String[] args) {
// Prompt the user to enter a number
String input = JOptionPane.showInputDialog(null,
"Please enter an integer:",
"ShowLogicErrors", JOptionPane.QUESTION_MESSAGE);
int number = Integer.parseInt(input);
// Display the result
System.out.println("The number is between 1 and 100, " +
"inclusively? " + ((1 < number) && (number < 100)));
System.exit(0);
}
}
Debugging Bugs = logic errors are called
Debugging= the process of finding and correctingerrors
Common approach -> use a combination ofmethods to narrow down to the part of theprogram where the bug is located
Hand-trace the program (i.e., catch errors by readingthe program)
Insert print statements in order to show the values ofthe variables or the execution flow of the program
This approach might work for a short, simple program.But for a large, complex program, the most effectiveapproach for debugging is to use a debugger utility. Ob
jectOrrientedProgramming
11
Debugger A program that facilitates debugging & used to:
Execute a single statement at a time
Trace into or stepping over a method
Set breakpoints
Display variables
Display call stack
Modify variables
http://www.vogella.com/articles/EclipseDebugging/article.html
https://netbeans.org/features/java/debugger.html
ObjectOrrientedProgramming
12
-
8/13/2019 02 - Java Fundamentals Handout
3/13
10/15/13
3
Elementaryprogramming
ObjectOrrientedProgramming
13
Trace a Program Executionpublic class ComputeArea {
/** Main method */
public static void main(String[] args) {
double radius;
double area;
// Assign a radius
radius = 20;
// Compute area
area = radius * radius * 3.14159;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
14
no valueradius
allocate memoryfor radius
ObjectOrrientedProgramming
Trace a Program Executionpublic class ComputeArea {
/** Main method */
public static void main(String[] args) {
double radius;
double area;
// Assign a radius
radius = 20;
// Compute area
area = radius * radius * 3.14159;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
15
no valueradius
memory
no valuearea
allocate memoryfor area
ObjectOrrientedProgramm
ing
Trace a Program Executionpublic class ComputeArea {
/** Main method */
public static void main(String[] args) {
double radius;
double area;
// Assign a radius
radius = 20;
// Compute area
area = radius * radius * 3.14159;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
16
20radius
no valuearea
assign 20 to radius
ObjectOrrientedProgramm
ing
Trace a Program Executionpublic class ComputeArea {
/** Main method */
public static void main(String[] args) {
double radius;
double area;
// Assign a radius
radius = 20;
// Compute area
area = radius * radius * 3.14159;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
17
20radius
memory
1256.636area
compute area and assign itto variable area
ObjectOrrientedProgramming
Trace a Program Executionpublic class ComputeArea {
/** Main method */
public static void main(String[] args) {
double radius;
double area;
// Assign a radius
radius = 20;
// Compute area
area = radius * radius * 3.14159;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
18
20radius
memory
1256.636area
print a message to theconsole
ObjectOrrientedProgramming
-
8/13/2019 02 - Java Fundamentals Handout
4/13
10/15/13
4
Reading Input from theConsole
Create a Scanner objectScanner input = new Scanner(System.in);
Use the methods next(), nextByte(),nextShort(), nextInt(), nextLong(), nextFloat(),nextDouble(), or nextBoolean() to obtain to astring, byte, short, int, long, float, double, orboolean value. For example,System.out.print("Enter a double value:");
Scanner input = new Scanner(System.in);double d = input.nextDouble(); Object
OrrientedProgramming
19
Getting Input from InputDialog Boxes String input =
JOptionPane.showInputDialog( "Enter an input");
String string =JOptionPane.showInputDialog(null, PromptingMessage, Dialog Title,JOptionPane.QUESTION_MESSAGE);
ObjectOrrientedProgramming
20
Identifiers
An identifier is a sequence ofcharacters that consist of letters,digits, underscores (_), and dollar signs($).
An identifier must start with a letter,an underscore (_), or a dollar sign ($).It cannot start with a digit.An identifier cannot be a reserved word.An identifier cannot betrue, false,
or null.
An identifier can be of any length. ObjectOrrientedProgramm
ing
21
Declaring Variablesint x; // Declare x to be an
// integer variable;
double radius; // Declare radius to
// be a double variable;
char a; // Declare a to be a
// character variable;
ObjectOrrientedProgramm
ing
22
Assignment Statements x = 1; // Assign 1 to x;
radius = 1.0; // Assign 1.0 to radius;
a = 'A'; // Assign 'A' to a;
ObjectOrrientedProgramming
23
Constantsfinal datatype CONSTANTNAME = VALUE;
final double PI = 3.14159;
final int SIZE = 3;
ObjectOrrientedProgramming
24
-
8/13/2019 02 - Java Fundamentals Handout
5/13
10/15/13
5
Primitive Data Types &Operators byte: 8-bit signed [-128; 127]
short: 16-bit signed [-32,768; 32,767]
int: 32-bit signed [-2,147,483,648; 2,147,483,647] generally the defaultchoice
long: 64-bit signed [-9,223,372,036,854,775,808;9,223,372,036,854,775,807] exceed int
float: single-precision 32-bit IEEE 754 floating point; should never beused for precise values, such as currency (java.math.BigDecimal)
double: double-precision 64-bit IEEE 754 floating point; usually thedefault choice for decimal values
boolean: true and false; its "size" is not precisely defined
char: 16-bit Unicode character ['\u0000' (or 0); '\uffff' (or 65,535]
+, -, *, /, %
Shortcut assignment with =
++, -- (pre and post)
ObjectOrrientedProgramming
25
Default Values
Data Type Default Value (for fields)byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false
ObjectOrrientedProgramming
26
Numeric Type Conversion Consider the following statements:
byte i = 100; long k = i * 3 + 4; double d = i * 3.1 + k / 2;
When performing a binary operation involving twooperands of different types, Java automaticallyconverts the operand based on the following rules:1. If one of the operands is double, the other is
converted into double.
2. Otherwise, if one of the operands isfloat, the otheris converted intofloat.
3. Otherwise, if one of the operands is long, the otheris converted into long.
4. Otherwise, both operands are converted into int.ObjectOrrientedProgramm
ing
27
Type Casting Implicit casting
double d = 3; (type widening) Explicit casting
int i = (int) 3.0; (type narrowing) int i = (int) 3.9; (Fraction part is truncated)
What is wrong? int x = 5 / 2.0;
ObjectOrrientedProgramm
ing
28
range increases
byte, short, int, long, float, double
Character Data Type char letter = 'A'; (ASCII)
char numChar = '4'; (ASCII)
char letter = '\u0041'; (Unicode)
char numChar = '\u0034'; (Unicode)
NOTE: The increment and decrement operators can alsobe used on char variables to get the next or precedingUnicode character. For example, the following statementsdisplay character b.
char ch = 'a'; System.out.println(++ch);
ObjectOrrientedProgramming
29
Four hexadecimal digits
Escape Sequences forSpecial Characters Description Escape Sequence Unicode
Backspace \b \u0008
Tab \t \u0009
Linefeed \n \u000A
Carriage return \r \u000D
Backslash \\ \u005C
Single Quote \' \u0027
Double Quote \" \u0022
ObjectOrrientedProgramming
30
-
8/13/2019 02 - Java Fundamentals Handout
6/13
10/15/13
6
The String Type Char type represents only one character. To represent a
string of characters:
Stringmessage = "Welcome to Java";
A predefined class in the Java library
Not a primitive type, but a reference type
// Three strings are concatenated
String message = "Welcome " + "to " + "Java"; // String Chapter is concatenated with number 2
String s = "Chapter" + 2; // s becomes Chapter2 // String Supplement is concatenated with character B
String s1 = "Supplement" + 'B'; // s1 becomes SupplementB ObjectOrrientedProgramming
31
Converting Strings toIntegers or Doubles To convert a string into an int value, you can use
the static parseInt method in the Integer class asfollows:
int intValue = Integer.parseInt(intString); where intString is a numeric string such as 123.
To convert a string into a double value, you canuse the static parseDouble method in the Doubleclass as follows:
double doubleValue=Double.parseDouble(doubleString);
ObjectOrrientedProgramming
32
ThebooleanType andOperators Often in a program you need to compare two values,
such as whether i is greater than j => Boolean value:true or false.
boolean b = (1 > 2);Operator Name
< less than
greater than
>= greater than or equal to
== equal to
!= not equal to ObjectOrrientedProgramm
ing
33
if Statementsif (boolean-expression) {
statement(s);
}
//else {
// statement(s)-for-the-false-case;
//}
ObjectOrrientedProgramm
ing
34
Multiple Alternative ifStatements The else clause matches the most recent if clause
in the same block.
ObjectOrrientedProgramming
35
if (score >= 90.0)grade = 'A';
elseif (score >= 80.0)
grade = 'B';elseif (score >= 70.0)
grade = 'C';else
if (score >= 60.0)
grade = 'D';else
grade = 'F';
Equivalent
if (score >= 90.0)grade = 'A';
else if (score >= 80.0)grade = 'B';
else if (score >= 70.0)grade = 'C';
else if (score >= 60.0)
grade = 'D';else
grade = 'F';
int i = 1;int j = 2;
int k = 3;
if (i > j)
if(i > k)System.out.println("A");
else
System.out.println("B");
int i = 1;int j = 2;int k = 3;
if (i > j)if(i > k)System.out.println("A");
elseSystem.out.println("B");
Equivalent
Common Errors Adding a semicolon at the end of an if clause is a
common mistake.
if (radius >= 0);
{
area = radius*radius*PI;
System.out.println("The area for the circle of radius " +radius + " is " + area);
}
This mistake is hard to find, because it is not acompilation error or a runtime error, it is a logicerror.
This error often occurs when you use the next-lineblock style. O
bjectOrrientedProgramming
36
Wrong
-
8/13/2019 02 - Java Fundamentals Handout
7/13
10/15/13
7
Efficiency
ObjectOrrientedProgramming
37
Equivalent
Equivalent
if (number % 2 == 0) even = true;
elseeven = false;
boolean even= number % 2 == 0;
if (even == true)System.out.println("It is even.");
if (even)System.out.println("It is even.");
Logical OperatorOperator Name
! not
&& and
|| or
^ exclusive or
& bitwise and
| bitwise or
(1 == x) && ( 2 > x++)? (x=1)ObjectOrrientedProgramming
38
switch Statement Rules (1)
ObjectOrrientedProgramm
ing
39
The switch-expression must yield
a value of char, byte, short, or int
type and must always be enclosed
in parentheses.
The value1, ..., and valueN must
have the same data type as the value
of the switch-expression. The
resulting statements in the case
statement are executed when the
value in the case statement matches
the value of the switch-expression.
Note that value1, ..., and valueN are
constant expressions, meaning that
they cannot contain variables in the
expression, such as 1 + x.
switch (switch-expression) {
case value1: statement(s)1;
break;
case value2: statement(s)2;
break;
case valueN: statement(s)N;
break;
default: statement(s)-for-default;
}
switch Statement Rules (2)
ObjectOrrientedProgramm
ing
40
The keyword break isoptional, but it should be usedat the end of each c ase in orderto terminate the remainder ofthe switch statement. If the
break statement is not present,the next case statement will beexecuted.
switch (switch-expression) {
case value1: statement(s)1;
break;
case value2: statement(s)2;
break;
case valueN: statement(s)N;
break;
default: statement(s)-for-default;
}
The default case, which isoptional, can be used to perform
actions when none of the
specified cases matches the
switch-expression. The case statements are executed in sequential
order, but the order of the cases (including the
default case) does not matter. However, it is good
programming style to follow the logical sequence of
the cases and place the default case at the end.
Trace switch statement (1)
ObjectOrrientedProgramming
41
switch(ch) {
case'a': System.out.println(ch);case'b': System.out.println(ch);case'c': System.out.println(ch);
}
Suppose ch is 'a':
Trace switch statement (2)
ObjectOrrientedProgramming
42
switch(ch) {
case'a': System.out.println(ch);case'b': System.out.println(ch);case'c': System.out.println(ch);
}
This is 'a':
-
8/13/2019 02 - Java Fundamentals Handout
8/13
10/15/13
8
Trace switch statement (3)
ObjectOrrientedProgramming
43
switch(ch) {case'a': System.out.println(ch);case'b': System.out.println(ch);case'c': System.out.println(ch);
}
Execute this line
Trace switch statement (4)
ObjectOrrientedProgramming
44
switch(ch) {case'a': System.out.println(ch);case'b': System.out.println(ch);case'c': System.out.println(ch);
}
Execute this line
Trace switch statement (5)
ObjectOrrientedProgramm
ing
45
switch(ch) {
case'a': System.out.println(ch);case'b': System.out.println(ch);case'c': System.out.println(ch);
}
Execute this line
Trace switch statement (1)
ObjectOrrientedProgramm
ing
46
switch(ch) {
case'a': System.out.println(ch);break;
case'b': System.out.println(ch);
break;
case'c': System.out.println(ch);break;
}
Suppose ch is 'a':
Trace switch statement (2)
ObjectOrrientedProgramming
47
switch(ch) {
case'a': System.out.println(ch);break;
case'b': System.out.println(ch);break;
case'c': System.out.println(ch);break;
}
This is 'a':
Trace switch statement (3)
ObjectOrrientedProgramming
48
switch(ch) {
case'a': System.out.println(ch);break;
case'b': System.out.println(ch);break;
case'c': System.out.println(ch);break;
}
Execute this line
-
8/13/2019 02 - Java Fundamentals Handout
9/13
10/15/13
9
Conditional Operator (boolean-expression) ? exp1 : exp2
if (num % 2 == 0)
System.out.println(num + is even);
else
System.out.println(num + is odd);
System.out.println((num % 2 == 0)? num + iseven :num + is odd);
ObjectOrrientedProgramming
49
Formatting Output Use the printf statement.
System.out.printf(format, items);
Where format is a string that may consist of substrings and formatspecifiers. A format specifier specifies how an item should bedisplayed. An item may be a numeric value, character, boolean value,or a string. Each specifier begins with a percent sign.
Specifier Output Example
%b a boolean value t rue or fal se
%c a character 'a'
% d a dec im al i nt eger 200
%f a floating-point number 45.460000
%e a number in standard scientific notation 4.556000e+01
%s a string "Java is cool"ObjectOrrientedProgramming
50
Formatting Example int count = 5;
double amount = 45.56;
System.out.printf(|count is %d \t| amount is %f\t|", count, amount);
Display: |count is 5 |amount is 45.560000 |
ObjectOrrientedProgramm
ing
51
Operator Precedencevar++, var--
+, - (Unary plus and minus), ++var,--var
(type) Casting
! (Not)
*,/,% (Multiplication, division, and remainder)
+,- (Binary addition and subtraction)
= (Comparison)
==,!=; (Equality)
^ (Exclusive OR)
&& (Conditional AND) Short-circuit AND
|| (Conditional OR) Short-circuit OR
=,+=,-=,*=,/=,%= (Assignment operator) ObjectOrrientedProgramm
ing
52
Operator Precedence andAssociativity
The expression in the parentheses is evaluated first .(Parentheses can be nested, in which case the expression inthe inner parentheses is executed first.) When evaluatingan expression without parentheses, the operators areapplied according to the precedence rule and theassociativity rule.
If operators with the same precedence are next to eachother, their associativity determines the order ofevaluation. All binary operators except assignmentoperators are left-associative.
When two operators with the same precedence areevaluated, the associativityof the operators determines theorder of evaluation. All binary operators except assignmentoperators are left-associative. a b + c d is equivalent to ((a b) + c) d
Assignment operators are right-associative. Therefore, theexpression a = b += c = 5 is equivalent to a = (b += (c = 5))
ObjectOrrientedProgramming
53
Loops
ObjectOrrientedProgramming
54
-
8/13/2019 02 - Java Fundamentals Handout
10/13
10/15/13
10
Loops - MotivationsSuppose you need to print a string (e.g., "Welcome toJava!") a hundred times. It would be tedious to haveto write the following statement a hundred times:
System.out.println("Welcome to Java!");
How do you solve this problem?
55
System.out.println("Welcome to Java!");System.out.println("Welcome to Java!");System.out.println("Welcome to Java!");
System.out.println("Welcome to Java!");
System.out.println("Welcome to Java!");
System.out.println("Welcome to Java!");
100times
ObjectOrrientedProgramming
Introducing while Loopswhile (loop-continuation-condition) {
// loop-body;
Statement(s);
}
Often the number of times a loop is executed is notpredetermined => use an input value to signify theend of the loop (a sentinel value)
56
intcount = 0;while(count < 100) {
System.out.println("Welcome to Java");count++;
}
Trace it!
ObjectOrrientedProgramming
Caution Dont use floating-point values for equality checking in a loop
control
Consider the following code for computing 1 + 0.9 + 0.8 + ... + 0.1:
double item = 1; double sum = 0;
while (item != 0) { // No guarantee item will be 0
sum += item;
item -= 0.1;
}
System.out.println(sum);
This loop seems OK on the surface, but can become an infiniteloop (because the floating-point arithmetic is approximated) Ob
jectOrrientedProgramm
ing
57
do-while & forLoopsdo {
// Loop body;
Statement(s);
} while (loop-continuation-condition);
for (initial-action; loop-continuation-condition; action-after-each-iteration) {
// loop body;
Statement(s);
}
58
int i;
for (i = 0; i < 100; i++ ) {
System.out.println("Welcome to Java!");
}
Trace it!
ObjectOrrientedProgramm
ing
Note The initial-action in a for loop a list of zero
or more comma-separated expressions
The action-after-each-iteration in a for loop a list of zero or more comma-separatedstatementsfor (int i = 1; i < 100; System.out.println(i++));
for (int i = 0, j = 0; (i + j < 10); i++, j++) {
// Do something
}
Therefore, the two for loops are correct Rarely used in practice
59
ObjectOrrientedProgramming
Note If the loop-continuation-condition in a for loop is
omitted, it is implicitly true.
In case of infinite loops, it is better to use theequivalent while loop to avoid confusion
60
Equivalent
for ( ; ; ) {// Do something
}
while (true) {// Do something
}
ObjectOrrientedProgramming
-
8/13/2019 02 - Java Fundamentals Handout
11/13
10/15/13
11
Caution
Adding a semicolon at the end of the forclause before the loop body is a commonmistake:
61
Logic Errors
for (int i=0; i
-
8/13/2019 02 - Java Fundamentals Handout
12/13
10/15/13
12
Usingbreakand continuew1: while (number < 20) {
number++;
sum += number;
if (sum >= 100) break w1;
}
while (number < 20) {
number++;
if (number == 10 || number == 11) continue;
sum += number;
}
67
ObjectOrrientedProgramming Methods
ObjectOrrientedProgramming
68
Problem
69
int sum = 0;for (int i = 1; i
-
8/13/2019 02 - Java Fundamentals Handout
13/13
10/15/13
13
Calling Methods & Callstack
73
ObjectOrrientedProgramming
public static void main(String[] args)
{int i = 5;
int j = 2;
int k = max(i, j);
System.out.println("The maximum between " + i +
" and " + j + " is " + k);
}
public static int max(int num1, int num2) {
int result;if (num1 > num2)
result = num1;
else
result = num2;return result;
}
pass the value of i & jTrace call
(a) The mainmethod is invoked.
Space required forthe main method
k:
j: 2
i: 5
(b)The maxmethod is invoked.
Space required for
the max method
num2: 2
num1: 5
(d) The max method is
finished and the returnvalue is sent to k.
(e) The mainmethod is finished.
Stack is empty
Space required for
the main method
k:
j: 2i: 5
Space required forthe main method
k: 5
j: 2
i: 5
(c)The max methodis being executed.
Space required for
the max methodresult: 5
num2: 2
num1: 5
Space required for
the main method
k:j: 2
i: 5
CAUTION A return statement is required for a value-returning
method
The method shown below in (a) is logically correct,but it has a compilation error because the Javacompiler thinks it possible that this method does notreturn any value
To fix this problem: delete if (n < 0)in (a), so that thecompiler will see a return statement to be reachedregardless of how the if statement is evaluated
ObjectOrrientedProgramming
74
public static intsign(int n) {if(n > 0)
return1;
else if(n == 0)
return0;
elseif(n < 0)return1;
}
(a)
Should be
(b)
public static intsign(int n) {
if(n > 0)
return1;
else if(n == 0)
return0;
else
return1;}
Passing Parameters Suppose you invoke the method using
nPrintln(Welcome to Java, 5);
What is the output?
Suppose you invoke the method using
nPrintln(Computer Science, 15);
What is the output?
ObjectOrrientedProgramm
ing
75
public static void nPrintln(String message, int n) {
for (int i = 0; i < n; i++)
System.out.println(message);
}
Overloading MethodsOverloading the maxMethod
public static double max(doublenum1, double num2) {if (num1 > num2)return num1;
else
return num2;}
76
ObjectOrrientedProgramm
ing