© 2010 Marty Hall
Basic Java Syntax
Originals of Slides and Source Code for Examples:
[Link] coreservlets com/Course-Materials/java5 html
[Link]
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
2 Developed and taught by well-known author and developer. At public venues or onsite at your location.
© 2010 Marty Hall
For live Java EE training, please see training courses
at [Link]
Servlets, JSP, Struts, JSF 1.x, JSF 2.0, Ajax (with jQuery, Dojo,
Prototype, Ext-JS, Google Closure, etc.), GWT 2.0 (with GXT),
Java 5, Java 6, SOAP-based and RESTful Web Services, Spring, g
Hibernate/JPA, and customized combinations of topics.
Taught by the author of Core Servlets and JSP, More
Servlets and JSP, JSP and this [Link] Available at public
venues,Customized
or customized versions
Java EE Training: can be held on-site at your
[Link]
organization. Contact hall@[Link] for details.
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
Developed and taught by well-known author and developer. At public venues or onsite at your location.
Topics in This Section
• Basics
– Creating,
C ti compiling,
ili andd executing
ti simple
i l Java
J programs
• Accessing arrays
• Looping
p g
• Indenting Code
• Using if statements
• C
Comparing
i strings
ti
• Building arrays
– One-step process
– Two-step process
– Using multidimensional arrays
• Performing
P f i basic
b i mathematical
th ti l operations
ti
• Reading command-line input
4
© 2010 Marty Hall
Basics
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
5 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Eclipse: Making Projects
• Creating new project
– File New Project
Java Java Project
• Pick any name
• To simplify applets later,
choose Sources/Classes
in same folder
• Creating new class
– R-click New Class
• You can have Eclipse make
“main” when class created,
or use shortcut to insert it later
– You can also copy/paste existing
class, then give it new name
Getting Started: Syntax
• Example
public class HelloWorld {
public static void main(String[] args) {
[Link]("Hello, world.");
}
}
• Details
– Processing starts in main
• Eclipse can create main automatically
– When creatingg class: choose main as option
p
– Eclipse shortcut inside class: type “main” then hit Control-space
• Routines usually called “methods,” not “functions.”
– Printing is done with [Link]
System out print...
• [Link], [Link], [Link]
7
• Eclipse shortcut: type “sysout” then hit Control-space
Getting Started: Execution
• File: [Link]
public
bli class
l H ll W ld {
HelloWorld
public static void main(String[] args) {
[Link]("Hello, world.");
}
}
• Compiling
– Eclipse: just save file
DOS> javac [Link]
• Executing
– Eclipse: R-click, Run As, Java Application
DOS> java HelloWorld
Hello, world.
8
More Basics
• Use + for string concatenation
• Arrays are accessed with [ ]
– Array indices are zero-based
– The argument to main is an array of strings that
correspond to the command line arguments
• args[0] returns first command-line argument
• args[1]
[1] returns
t secondd command-line
d li argument,t etc.
t
• Error if you try to access more args than were supplied
• The length
g field
– Gives the number of elements in any array
• Thus, [Link] gives the number of command-line
arguments
• Unlike in C/C++, the name of the program is not inserted
into the command-line arguments
9
Command-line Arguments
• Are useful for learning and testing
– Command-line args are helpful for practice
– But, programs given to end users should almost never use
command-line arguments
• They should pop up a GUI to collect input.
• Eclipse has poor support
– Entering command-line args via Eclipse is more trouble
than it is worth
– So,
So to test with command-line
command line args:
• Save the file in Eclipse (causing it to be compiled)
• Navigate to folder on desktop (not within Eclipse)
• Open command window (Run cmd)
• Type “java Classname arg1 arg2 …”
Example
• File: [Link] (naïve version)
public class ShowTwoArgs {
public static void main(String[] args) {
[Link]("First arg: " +
args[0]);
S t
[Link]("Second
t i tl ("S d arg: " +
args[1]);
}
}
Oops! Crashes if there are less than two command-line arguments. The code should have checked the length field, like this:
if (([Link]
g g > 1)) {
doThePrintStatements();
} else {
giveAnErrorMessage();
}
11
Example (Continued)
• Compiling (automatic on save in Eclipse)
DOS> javac [Link]
• Executing
DOS> j
java ShowTwoArgs
Sh T A H ll Cl
Hello Class
First args Hello
Second arg: Class
DOS> java ShowTwoArgs
[Error message]
• Eclipse (cumbersome)
– To assign command line args: R-click, Run As,
12
Run Configurations, click on “Arguments” tab
© 2010 Marty Hall
Loops
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
13 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Looping Constructs
• for/each
for(variable: collection) {
body;
}
• for
for(init; continueTest; updateOp) {
body;
}
• while
while (continueTest) {
body;
}
• do
do {
body;
} while (continueTest);
14
For/Each Loops
public static void listEntries(String[] entries) {
for(String entry: entries) {
[Link](entry);
}
}
• Result
String[] test = {"This", "is", "a", "test"};
listEntries(test);
This
is
a
test
15
For Loops
public static void listNums1(int max) {
f (i t i
for(int i=0;
0 ii<max; i++) {
[Link]("Number: " + i);
}
}
• Result
listNums1(4);
Number: 0
Number: 1
Number: 2
Number: 3
16
While Loops
public static void listNums2(int max) {
int i = 0;
while (i < max) {
[Link]("Number: " + i);
i++; // "++" means "add one"
}
}
• Result
listNums2(5);
( );
Number: 0
Number: 1
Number: 2
Number: 3
17
Number: 4
Do Loops
public static void listNums3(int max) {
i t i = 0
int 0;
do {
[Link]("Number:
y p ( " + i);
);
i++;
} while (i < max);
// ^ Don’t
’t f
forget
t semicolon
i l
}
• Result
listNums3(3);
Number: 0
Number: 1
18 Number: 2
© 2010 Marty Hall
Class Structure and
Formattingg
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
19 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Defining Multiple Methods in
Single Class
public class LoopTest {
public
bli static
t ti void
id main(String[]
i (St i [] args) ) {
String[] test =
{ "This", "is", "a", "test"};
listEntries(test);
listNums1(5);
listNums2(6);
listNums3(7);
These methods say “static” because they are called directly from “main”.
} In the next two sections on OOP, we will explain what “static” means and
whyy most
s regular
g methodss do not use
s “static”.
s But for now,, jjust
s note that
methods that are directly called by “main” must say “static”.
public static void listEntries(String[] entries) {…}
public static void listNums1(int max) {…}
public static void listNums2(int max) {…}
public static void listNums3(int max) {…}
20 }
Indentation: blocks that are nested
more should be indented more
• Yes • No
blah; blah;
blah; blah;
for(...) { for(...) {
blah; blah;
blah; blah;
for(...) { for(...) {
bl h
blah; bl h
blah;
blah; blah;
} }
} }
21
Indentation: blocks that are nested the
same should be indented the same
• Yes • No
blah; blah;
blah; blah;
for(...) { for(...) {
blah; blah;
blah; blah;
for(...) { for(...) {
bl h
blah; bl h
blah;
blah; blah;
} }
} }
22
Indentation: Number of spaces and
placement of braces is a matter of taste
• OK • OK • OK
blah; blah; blah;
blah; blah; blah;
for(
for(...)) { for(
for(...)) { for(
for(...))
blah; blah; {
blah; blah; blah;
for(...) { for(...) { blah;
blah; blah; for(...)
bl h
blah; bl h
blah; {
} } blah;
} } blah;
}
23 }
© 2010 Marty Hall
Conditionals and
Strings
g
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
24 Developed and taught by well-known author and developer. At public venues or onsite at your location.
If Statements
• Single Option
if (boolean-expression) {
statement;
}
• Multiple Options
if (boolean-expression) {
statement1;
} else
l {
statement2;
}
25
Boolean Operators
• ==, !=
–E
Equality,
lit inequality.
i lit InI addition
dditi tot comparing
i primitive
i iti
types, == tests if two objects are identical (the same
object), not just if they appear equal (have the same
fields) More details when we introduce objects.
fields). objects
• <, <=, >, >=
– Numeric less than, less than or equal to, greater than,
greater
t than
th or equall to.
t
• &&, ||
– Logical
g AND,, OR. Both use short-circuit evaluation to
more efficiently compute the results of complicated
expressions.
• !
– Logical negation.
26
Example: If Statements
public
bli static
t ti iint
t max(int
(i t n1,
1 iint
t n2)
2) {
if (n1 >= n2) {
return(n1);
} else {
return(n2);
}
}
27
Strings
• Basics
– String is a real class in Java, not an array of characters as
in C and C++.
– Thee String
S g class
c ss hass a sshortcut
o cu method
e od too ccreate
e e a new
ew
object: just use double quotes
• This differs from normal objects, where you use the new
construct to build an object
j
• Use equals to compare strings
– Never use ==
• Many useful builtin methods
– contains, startsWith, endsWith, indexOf,
substring split
substring, split, replace
replace, replaceAll
• Note: can use regular expressions, not just static strings
28
– toUpperCase, toLowerCase, equalsIgnoreCase
Common String Error:
Comparing with ==
public static void main(String[] args) {
St i
String match
t h = "T
"Test";
t"
if ([Link] == 0) {
[Link]("No
y p args");
g
} else if (args[0] == match) {
[Link]("Match");
} else {
[Link]("No match");
}
}
• Prints "No match" for all inputs
– Fix:
i
if (args[0].equals(match))
29
© 2010 Marty Hall
Arrays
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
30 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Building Arrays:
One-Step Process
• Declare and allocate array in one fell swoop
type[] var = { val1, val2, ... , valN };
• Examples:
int[] values = { 10
10, 100
100, 1000 };
String[] names = {"Joe", "Jane", "Juan"};
Point[] points = { new Point(0, 0),
new Point(1, 2),
new Point(3, 4) };
31
Building Arrays:
Two-Step Process
• Step 1: allocate an array of references:
ttype[] var = new type
t [size];
[i ]
– E.g.:
int[] primes = new int[7];
String[] names = new String[[Link]];
• Step 2: populate the array
primes[0] = 2; names[0] = "Joe";
Joe ;
primes[1] = 3; names[1] = "Jane";
primes[2] = 5; names[2] = "Juan";
primes[3] = 7; names[3] = "John";
etc.
• If you fail to populate an entry
– Default value is 0 for numeric arrays
– Default value is null for object arrays
32
Array Performance Problems
• For very large arrays, undue paging can occur
– A
Array off references
f ((pointers)
i ) allocated
ll d first
fi
– Individual objects allocated next
– Thus, for very large arrays of objects, reference and object can be on
different pages, resulting in swapping for each array reference
– Example
String[] names = new String[10000000];
for(int i=0; i<[Link]; i++) {
names[i] = getNameFromSomewhere();
}
• Problem does not occur with arrays of primitives
– I.e., with arrays of int, double, and other types that start with
lowercase letter
– Because system stores values directly in arrays, rather than storing
references (pointers) to the objects
33
Multidimensional Arrays
• Multidimensional arrays
y
– Implemented as arrays of arrays
int[][]
[][] twoD = new int[64][32];
[ ][ ]
String[][] cats = {{ "Caesar", "blue-point" },
{ "Heather", "seal-point" },
{ "Ted"
Ted , "red-point"
red point }};
• Note:
– Number
N b off elements
l t in
i eachh row needd nott be
b equall
int[][] irregular = { { 1 },
{ 2
2, 3
3, 4}
4},
{ 5 },
{ 6, 7 } };
34
TriangleArray: Example
public class TriangleArray {
public static void main(String[] args) {
int[][] triangle = new int[10][];
for(int i=0; i<[Link]; i++) {
triangle[i] = new int[i+1];
}
for (int i=0; i<[Link]; i++) {
for(int j=0; j<triangle[i].length; j++) {
System out print(triangle[i][j]);
[Link](triangle[i][j]);
}
[Link]();
}
}
}
35
TriangleArray: Result
> java TriangleArray
0
00
000
0000
00000
000000
0000000
00000000
000000000
0000000000
36
© 2010 Marty Hall
Math and Input
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
37 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Basic Mathematical Routines
• Very simplest routines use builtin operators
– +
+, -, *,
* /,
/ ^,
^ %
– Be careful with / on int and long variables
• Static methods in the Math class
– So you call [Link](...), [Link](), etc.
• Most operate on double precision floating point numbers
– Simple operations: [Link](), etc.
• pow (xy), sqrt (√x), cbrt, exp (ex), log (loge), log10
– Trig functions: [Link](), etc.
• sin, cos, tan, asin, acos, atan
– Args are in radians, not degrees, (see toDegrees and toRadians)
– Rounding and comparison: [Link](), etc.
• round/rint, floor, ceiling, abs, min, max
– Random
R d numbers:
b M
[Link]()
th d ()
• random ([Link]() returns from 0 inclusive to 1 exclusive).
• See Random class for more control over randomization.
38
More Mathematical Routines
• Special constants
– Double.POSITIVE_INFINITY
– Double.NEGATIVE_INFINITY
– Double NAN
[Link]
– Double.MAX_VALUE
– Double.MIN_VALUE
• Unlimited precision libraries
– BigInteger, BigDecimal
• Contain
C t i ththe b
basic
i operations,
ti plus
l BiBigInteger
I t h
has iisPrime
Pi
39
Reading Simple Input
• For simple testing, use standard input
– If you wantt strings,
ti just
j t use args[0],
[0] args[1],
[1] as before
b f
• To avoid errors, check [Link] first
– Convert if you want numbers. Two main options:
• Use
U S Scanner class
l
– Note that you need import statement. See next slide!
Scanner inputScanner = new Scanner([Link]);
int i = [Link]();
inputScanner nextInt();
double d = [Link]();
• Convert explicitly ([Link], [Link])
String seven = "7";
int i = [Link](seven);
• In real applications, use a GUI
– Collect input
p with textfields,, sliders,, combo boxes,, etc.
• Convert to numeric types with [Link],
[Link], etc.
40
Example: Printing Random
Numbers
import [Link].*;
public class RandomNums {
public static void main(String[] args) {
[Link]("How many random nums? ");
S
Scanner i
inputScanner
tS = new S
Scanner([Link]);
(S t i )
int n = [Link]();
for(int i=0; i<n; i++) {
[Link]("Random
[Link]( Random num " + i +
" is " + [Link]());
}
}
}
How many random nums? 5
Random num 0 is 0.22686369670835704
Random num 1 is 0
0.0783768527137797
0783768527137797
Random num 2 is 0.17918121951887145
Random num 3 is 0.3441924454634313
41 Random num 4 is 0.6131053203170818
© 2010 Marty Hall
Wrap-Up
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
42 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Summary
• Basics
–L
Loops, conditional
di i l statements, andd array access is
i similar
i il
to C and C++
• But new for loop: for(String s: someStrings) { … }
– Indent your code for readability
– String is a real class in Java
• Use equals,
q not ==, to compare
p strings
g
• Allocate arrays in one step or in two steps
– If two steps, loop down array and supply values
• Use
U [Link]()
M th bl h() for
f simple
i l math
th operations
ti
• Simple input from command window
– Use command line for strings supplied at program startup
– Use Scanner to read values after prompts
• Neither is very important for most real-life applications
43
© 2010 Marty Hall
Questions?
Customized Java EE Training: [Link]
Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6.
44 Developed and taught by well-known author and developer. At public venues or onsite at your location.