You are on page 1of 59

Java I--Copyright © 2000-2004 Tom Hunter

Chapter 2
Introduction to Java
Applications

Java I--Copyright © 2000-2004 Tom Hunter


Java Applications Are
A Series of Classes
• A Java Application must have the method
main.
• A Java Application begins executing at
main.
• Let’s look at details of an Application:

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• This is a basic Application.


• Notice the comments. These are required in this course.
Java is free form, but you’ll be happy if you get in the habit
of documenting like this.
• Also, whenever you type an opening curly bracket, type
the closing one right away.
• Your curly brackets must always--in this class--line up as
shown. Java I--Copyright © 2000-2004 Tom Hunter
public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• The line above in blue is the class definition for


Welcome1.
• Every class name must be Capitalized.
• Notice, every scrap of code is within this class.
• Since it is named Welcome1, this Application is saved in
a file called Welcome1.java, spelled exactly the same.
• The compiler will make a file called Welcome1.class.
Java I--Copyright © 2000-2004 Tom Hunter
public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• The word Welcome1 is an identifier.


• An identifier is a user-defined word, which consists of:
letters
digits
_ (underscore)
$ (a dollar sign)
• An identifier cannot begin with a digit.
Java I--Copyright © 2000-2004 Tom Hunter
public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• Notice that we put the word public before the word


class.
• This means the class can be called by anything.
• The alternatives to public are discussed in Chapter 8.

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• The method main is also declared public.


• This should just be copied until Chapter 6, when we
know methods better.

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• void means nothing is returned to the operating system


when the program finishes.
• The ( String args[] ) works with “arguments”
that were passed when the program was executed.
• Although you cannot omit it ( String args[] ),
we don’t discuss this topic just yet, so please copy it.

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• The System.out.println puts the message in


quotes on the command console.
• If we used System.out.print, then the cursor would
This
not do a carriage return is called
/ line the
feed after it prints the text.
Standard output
• Notice the opening and closing blue curly brackets. The
object.
unit of code enclosed in them is called a “block.”
• It is also called the “body” of the method.
Java I--Copyright © 2000-2004 Tom Hunter
public class Welcome1
{
public static void main( String args[] )
{
System.out.println( “Welcome to Java!” );

} // end of main()
} // end of class Welcome1

• You will find that you very rarely use this


Standard output object.
• Instead, you will use the GUI objects.

• Notice in red the semicolon. ; All executable


statements in Java ends in a semicolon.

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.print( “Welcome ” );
System.out.println( “to Java!” );

} // end of main()
} // end of class Welcome1

• This will still produce the same text as the


previous version.

Java I--Copyright © 2000-2004 Tom Hunter


public class Welcome1
{
public static void main( String args[] )
{
System.out.print( “Welcome\nto\nJava! ” );
} // end of main()
} // end of class Welcome1

• Notice the “ \n ”. The slash is an escape


character. It tells the System object that whatever
follows the slash is special:
\n new line
\t tab
\r carriage return Welcome
\\ backslash to
Java!
\” quote
Java I--Copyright © 2000-2004 Tom Hunter
First GUI: JOptionPane
import javax.swing.JOptionPane

public class Welcome4


{
public static void main( String args[] )
{
JOptionPane.showMessageDialog( null, “Hi Java!” );

System.exit( 0 )
} // end of main()
} // end of class Welcome1

• This adds an import statement, which tells the


compiler you want to use somebody else’s class.
• The “ javax.swing ” is like a DOS path.

Java I--Copyright © 2000-2004 Tom Hunter


First GUI: JOptionPane

import javax.swing.JOptionPane

• You must know these classes, and how to use them.


• This path helps the compiler find the class you wish to
use.
• The javax.swing portion of this name is called the
“package.”
• Classes in the same package have a connection we will
explore later.
• Suffice it to say that they are very chummy.

Java I--Copyright © 2000-2004 Tom Hunter


First GUI: JOptionPane
import javax.swing.JOptionPane

public class Welcome4


{
public static void main( String args[] )
{
JOptionPane.showMessageDialog( null, “Hi Java!” );

System.exit( 0 )
} // end of main()
} // end of class Welcome1

• The Statement JOptionPane.showMessageDialog means:

“I want object JOptionPane to perform its method


showMessageDialog(). Also, I’m passing the data:
“null” and “Hi Java!” In Java, we call that data
“arguments.”
Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;

public class Welcome4


{
public static void main( String args[] )
{
JOptionPane.showMessageDialog( null,
“Hi Java!” );
System.exit( 0 );
} // end of main()
} // end of class Welcome4

• System.exit( 0 ); This statement uses the


method “exit” of class System to end the application.
GUI Applications always require this statement to
terminate correctly.
• Class System is imported automatically, in package
java.lang
Java I--Copyright © 2000-2004 Tom Hunter
Build An Application

Addition

• When you are building an Application, there is a set


template for design that you automatically follow.

• Get in the habit of doing exactly as will be done on the


next few slides.

Java I--Copyright © 2000-2004 Tom Hunter


import javax.swing.JOptionPane;

1.) You tell the compiler to import any of the extra


classes you will be using in your Application.

Java I--Copyright © 2000-2004 Tom Hunter


import javax.swing.JOptionPane;

public class Addition


{

} // end of class Addition

2.) Define your class name, and right away place the
opening and closing brackets--with the comment.

Java I--Copyright © 2000-2004 Tom Hunter


import javax.swing.JOptionPane;

public class Addition


{
public static void main( String args[] )
{

System.exit( 0 );
} // end of main()
} // end of class Addition

3.) Add the main method, and the System.exit( 0 )


that you know it will require--include the comment.

Java I--Copyright © 2000-2004 Tom Hunter


import javax.swing.JOptionPane;
f
public class Addition
{
public static void main( String args[] )
{
String firstNumber,
secondNumber;

System.exit( 0 );
} // end of main()
These two are “String” references. That means they
} // end of class Addition
have the potential to point to objects of type String.
However, at this point, they point to nothing.
4.) Include any local variables you will need in this
They are A
method. empty
localreferences.
variable is visible and accessible only
within the method.
Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;

public class Addition


{
public static void main( String args[] )
{
String firstNumber,
secondNumber;
int number1, Notice,
number2,
sum;
‘int’ does not
start with a
System.exit( 0 ); capital
} // end of main() letter.
} // end of class Addition

5.) Now we have added three integer variables. They are


not objects. They hold three integers--without any
methods or classes. number1, number2 and
number3 are called primitive variables. Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;
String argument
public class Addition
{ is received.
public static void main( String args[] )
{
String firstNumber,
secondNumber;
String is int number1,
number2,
returned sum;

firstNumber = JOptionPane.showInputDialog( “First Num” );


by the
secondNumber = JOptionPane.showInputDialog( “Second Num” );
method.

• Look at the Java Documentation for the


JOptionPane object. You will first see the hierarchy
of this object within the Java object hierarchy:

d
Java I--Copyright © 2000-2004 Tom Hunter
• This is the hierarchy for
the JOptionPane.
• We will cover “inheritance”
starting in Chapter 8, but you
need to begin learning these API class libraries.
• The Class JOptionPane has several methods.
A class’s methods are its capabilities.
• For now, you should know that method
showInputDialog()
receives a String argument, and
returns a String result.
Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;

public class Addition


{
public static void main( String args[] )
{
String firstNumber,
secondNumber;
int number1,
number2,
sum;

firstNumber = JOptionPane.showInputDialog( “First Num” );

secondNumber = JOptionPane.showInputDialog( “Second Num” );

• These InputDialog boxes are created by this code.


• But, since they are Strings, we can’t add them.
Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;

public class Addition


{
public static void main( String args[] )
{
String firstNumber,
secondNumber;
int number1,
number2,
sum;

firstNumber = JOptionPane.showInputDialog( “First Num” );

secondNumber = JOptionPane.showInputDialog( “Second Num” );

• So, how do we get String “numbers” converted into


actual integers that we can do addition on?
• We need some Object that has a method capable of
taking a String argument and returning an integer.

Java I--Copyright © 2000-2004 Tom Hunter


import javax.swing.JOptionPane;

public class Addition


{
public static void main( String args[] )
{
String firstNumber,
secondNumber;
int number1,
number2,
sum;

firstNumber = JOptionPane.showInputDialog( “First Num” );

secondNumber = JOptionPane.showInputDialog( “Second Num” );

number1 = Integer.parseInt( firstNumber );

number2 = Integer.parseInt( secondNumber );

sum = number1 + number2;

• Integer is a class. Its method parseInt()


takes a String argument and returns an int.
Java I--Copyright © 2000-2004 Tom Hunter
import javax.swing.JOptionPane;

public class Addition


{ The
For the icons,showMessageDialog
method of class to choose
you have five alternate constants from:
public static void main( String args[] )
JOptionPane
{ takes four arguments:
JOptionPane.PLAIN_MESSAGE
String firstNumber,
• null -- this will besecondNumber;
explained in a later chapter
JOptionPane.ERROR_MESSAGE
int number1,
• “The Sum is:” + sum number2,
--this converts the int sum into a
JOptionPane.INFORMATION_MESSAGE
sum;
String and concatenates it with the String “The Sum is:”
JOptionPane.WARNING_MESSAGE
firstNumber = JOptionPane.showInputDialog( “First Num” );
• “Results” is the message= displayed
secondNumber in the title bar.
JOptionPane.showInputDialog( “Second Num” );
number1 = Integer.parseInt( firstNumber );
JOptionPane.QUESTION_MESSAGE
• JOptionPane.PLAIN_MESSAGE
number2 = Integer.parseInt( defines
secondNumber);
the icon.
sum = number1 + number2;
In Java, Constants are always all upper case, with words separated
by underscores.
JOptionPane.showMessageDialog( null, “The Sum is: ” + sum,
“Results”, JOPtionPane.PLAIN_MESSAGE );

System.exit( 0 );

} // end of main()
} // end of class Addition

Java I--Copyright © 2000-2004 Tom Hunter


A Caution About String Concatenation
• On the previous slide, we concatenated a String with
an int: “The Sum is ” + sum.
• Remember the sequence: first, sum was converted
from an int to a String, and then that String was
concatenated with the other String “The Sum is: ”
• So, what would the following code produce?
int number1 = 2;
int number2 = 4;

JOptionPane.showMessageDialog( null,
“The Sum is: ” + number1 + number2,
“Screwy Result”, JOptionPane.WARNING_MESSAGE );

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
• A variable called number1 actually refers to a place in
memory where the value of the variable is stored.
• Every variable in Java has a:
name,
type,
size, and a
value.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
name

Variable names must conform to the rules for identifiers:

• they must begin with a letter,

• after that they can contain digits, dollar signs and


underscores.

• Java uses Unicode for its characters, so any


“letter” that is valid for a word in any world
language is therefore valid for a name in Java.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
type
• The “type” appears before the identifier name.
• The type can be one of the “primitive data types” or it
can be any previously defined class.

int num1;
• You declare a variable and
initialize it on the same line.
num1 = 2;
• This is a declaration. At this point,
the name num1 refers to a location
{a pointer} in the computer’s RAM
int num1=2;
where this variable is stored.
• Because an int is declared, we
know that four bytes are set aside.
• Still, nothing is stored in it yet.
Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
size
• When we assign a type [ int, String] to a
variable, we are not only declaring a memory
location.
• We also decide how big of a number or character
is able to be stored in that variable.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
value
• Finally, the value is what we want the variable
to store.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
• Java is a Strongly-typed language. That means,
every variable must be declared as a type.
In Java, there are 8 primitive types:

• 6 of those refer to numbers


--4 for integers types,
--2 for floating-point types,

• 1 is the character type char, used for characters


in Unicode encoding, and

• 1 is a boolean type for true or false values.


Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
int
• In contrast to C/C++, an int will always--no
matter which operating system--take 4 bytes
of storage space.
• Because those 4 bytes are set in stone, you can be
sure that every JVM that runs your program
will be able to store the same size numbers.
• int is the most commonly used number size.
Range:
-2,147,483,648 to 2,147,483,647 (over two billion)
Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
short
• In Java, a short is defined as 2 bytes, no matter
which operating system is used.
• You would only use this for special situations,
such as when speed is really crucial.
{ For VB programmers, a short is what
you’ve come to think of as an int . }
Range:
-32,768 to 32,767

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
long
• A long is defined as 8 bytes, no matter
which operating system is used.
Range:
-9,223,372,036,854,775,808L to
9,223,372,036,854,775,807L
• Please notice the upper-case L suffix is appended to any
long. This is required.
• Hexadecimal numbers have a prefix: 0x
0x1CFE.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
byte
• A byte is defined as 1 byte, no matter
which operating system is used.
Range:
-128 to 127

• Again, like a short, a byte is only used under


rare circumstances.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
float
• A float is defined as 4 bytes, no matter
which operating system is used.
Range:
approximately 3.40282347E+38F
( 6-7 significant decimal digits )

• Because there are so few decimal places available,


float is not used all that often.

Java I--Copyright © 2000-2004 Tom Hunter


Primitive Data Types
double
• A double is defined as 8 bytes, no matter
which operating system is used.
Range:
approximately 1.79769313486231570E+308
( 15 significant decimal digits )
• “double is the one to have when you’re having
more than one--decimal place, that is.”
• This is the most common choice for any decimal.
• double is the default, not float, therefore, no
special character is appended. (See red arrow.)
Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
char
• A char is defined as 2 bytes, no matter which
operating system is used. A char type always refers
to a character in the Unicode encoding scheme.
[\uFFFF \u is the escape character syntax]
About 65,536 different characters can be represented.
• Single quotes denote a char constant

‘H’ is a char constant


“H” is a string that happens to only contain a
single character.
Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
char
• A char is defined as 2 bytes. A char type is a
single Unicode character.
[\uFFFF \u is the escape character syntax--65,536
different characters can be represented.]
• Single quotes denote a single-letter char constant
‘H’ is a char constant.
“H” is a String that happens to only contain a
single character--it is not a char.
This is a syntax error! The compiler will
complain. Java I--Copyright © 2000-2004 Tom Hunter
Primitive Data Types
boolean
• A boolean type has only two values.
• In contrast to C/C++, in Java 0 and 1 cannot
stand in for true or false.
• A boolean type must be assigned the value of the
constants true or false.
[Meaning, these exact lowercase words.]

Java I--Copyright © 2000-2004 Tom Hunter


Java Math Operators
• Addition +
• Subtraction -
• Multiplication *
• Division /
• Modulus %
All are binary operators, i.e., they work with two
numbers. They are executed according to the rules for
operator precedence. [page 1240]
(There is no operator for exponentiation in Java)
Java I--Copyright © 2000-2004 Tom Hunter
Java Math Operators

• Multiplication *
• What happens if you multiply variables of different types?
int x = 2;
double y = 3.889, sum = 0.000;
sum = y * x;

• The integer will be temporarily converted to a


double and two doubles will be multiplied.
• Afterwards, the original integer is unchanged.
Java I--Copyright © 2000-2004 Tom Hunter
Java Math Operators
• Rules for Temporary Conversions
1st Priority: If either of the operands is of type double, then the other
one is converted to double for the calculation.
2nd Priority: Otherwise, if either of the operands is of type float,
then the other one is converted to float for the calculation.
3rd Priority: Otherwise, if any of the operands is of type long, then
the other one is converted to long for the calculation.

Note: these conversions are automatic because none of them result in a


loss of accuracy.

Java I--Copyright © 2000-2004 Tom Hunter


Java Math Operators
• Static Casts
So, what happens when you desire to convert a double to a
float? Information will inevitably be lost.
• You accomplish this using a cast.
int x = 2, sum = 0;
double y = 3.889;
sum = (int)y * x;
{ sum is now equal to 6 }
• Here, a value of just 3 will be used for y.
• If you want to round y, you a method from class
Math:
sum = (int)Math.round(y) * x;
Java I--Copyright © 2000-2004 Tom Hunter
Java Math Operators

• Division /
• Division can lead to unexpected results:
If both operands are integers, then the result of the
division is also an integer.
Any fractional part of the division is discarded.

Therefore: 17/3 = 5

Java I--Copyright © 2000-2004 Tom Hunter


Java Math Operators

• Modulus %
• The modulus operator is confusing at first, but
eventually it becomes your good friend.
In contrast to the division operator, it returns the
remainder of any division. The modulus operator can
only be used when both operands are integers.

17 % 3 = 2
You say this “17 modulus 3 equals 2”

Java I--Copyright © 2000-2004 Tom Hunter


Comparison Operators
• These are used for selection structures:
equality ==
not equal !=
greater than >
less than <
greater than or equal >=
less than or equal <=

Java I--Copyright © 2000-2004 Tom Hunter


Comparison Operators

• The equality operator is a common source of mistakes:

equality ==
Note that two equal signs are always used.
The single equal sign [ = ] is only used for
assignment, that is, assigning the value on the right to the
variable on the left.
num1 = 33;

Java I--Copyright © 2000-2004 Tom Hunter


Comparison Operators

• When you make a compound symbol using the equal


sign, the equal sign is always on the right:

equality ==
not equal !=
greater than or equal >=
less than or equal <=

Java I--Copyright © 2000-2004 Tom Hunter


“if” Statement Syntax
• Decision Making
• The if exactly mirrors C/C++, and it has three
variants:
1.) if( expression )
statement;

2.) if( expression )


statement;
else
statement;

3.) if( expression )


statement;
else if( expression )
statement;
else
statement; Java I--Copyright © 2000-2004 Tom Hunter
“if” Statement Syntax
• Simple if
• The “expression” must be something that uses the
comparison operators and resolves to either true or false.
if( expression )
{ statement;
statement1;
statement2;
}

• The
Onlystatement
one statementiscan be made
executed conditional
if the without
expression is true.
brackets. If you wish to conditionally execute more than
one statement, you use brackets to create a block.

Java I--Copyright © 2000-2004 Tom Hunter


“if” Statement Syntax
• Simple if/else
• If the “expression” is true, the if branch executes,
if not, the else branch executes.
if( expression )
statement;
else
statement;

Java I--Copyright © 2000-2004 Tom Hunter


“if” Statement Syntax Don’t bother to label the
closing brackets unless
• Simple if/else
you have a really long if.
• If the “expression” isStill
true,you
theshould
if branch executes,
always line
if not, the else branch executes. up your brackets.
if( expression )
{
statement1;
statement2;
} //end of if else
{

statement3;
statement4; } //
end of else

Java I--Copyright © 2000-2004 Tom Hunter


“if” Statement Syntax
• Compact if/else if/ else
• To prevent your nested ‘if’s from marching across
the page, you can use this nested if. You can go on nesting
them as long as you like, and the last one is just an else.

if( expression )
statement;
else if( expression )
statement;
else
statement;

Java I--Copyright © 2000-2004 Tom Hunter

You might also like