At this point, we are assuming that you successfully installed the Java SDK and were able to run the sample programs that we showed you in Chapter 2. It's time to start programming. This chapter shows you how the basic programming concepts such as data types, branches,
and loops are implemented in Java.

Unfortunately, in Java you can't easily write a program that uses a graphical user interface—you need to learn a fair amount
of machinery to put up windows, add text boxes and buttons that respond to them, and so on. Since introducing the techniques
needed to write GUI-based Java programs would take us too far away from our goal of introducing the basic programming concepts, the sample programs
in this chapter will be “toy” programs, designed to illustrate a concept. All these examples will simply send output to a
console window. When it comes to getting user input, we will stick to reading the information from a pop-up window. In particular,
we will be writing applications rather than applets in this chapter.

Finally, if you are an experienced C++ programmer, you can get away with just skimming this chapter: concentrate on the C/C++
notes that are interspersed throughout the text. Programmers coming from another background, such as Visual Basic, will find
most of the concepts familiar and all of the syntax very different—you will want to read this chapter very carefully.

A Simple Java Program

Let's look more closely at about the simplest Java program you can have—one that simply prints a message to the console window:

It is worth spending all the time that you need in order to become comfortable with the framework of this sample; the pieces
will recur in all applications. First and foremost, Java is case sensitive. If you made any mistakes in capitalization (such as typing Main instead of main), the program will not run.

Now let's look at this source code line by line. The keyword public is called an access modifier; these modifiers control what other parts of a program can use this code. We will have more to say about access modifiers
in Chapter 5. The keyword class is there to remind you that everything in a Java program lives inside a class. Although we will spend a lot more time on
classes in the next chapter, for now think of a class as a container for the program logic that defines the behavior of an
application. As mentioned in Chapter 1, classes are the building blocks with which all Java applications and applets are built. Everything in a Java program must be inside a class.

Following the keyword class is the name of the class. The rules for class names in Java are quite generous. Names must begin with a letter, and after
that, they can have any combination of letters and digits. The length is essentially unlimited. You cannot use a Java reserved
word (such as public or class) for a class name. (See Appendix I for a list of reserved words.)

As you can see in the name FirstSample, the convention is that class names are nouns that start with an uppercase letter. If a name consists of multiple words,
use an initial uppercase letter in each of the words.

You need to make the file name for the source code the same as the name of the public class, with the extension .java appended. Thus, you must store this code in a file called FirstSample.java. (Again, case is important—don't use firstsample.java.) If you don't do this, you'll get a pretty obvious error message when you try to run this source code through a Java compiler
(“Public class FirstSample must be defined in a file called 'FirstSample.java'”).

If you have named the file correctly and not made any typos in the source code, then when you compile this source code, you
end up with a file containing the bytecodes for this class. The Java compiler automatically names the bytecode file FirstSample.class and stores it in the same directory as the source file. Finally, run the bytecode file through the Java interpreter by issuing
the command:

java FirstSample

(Remember to leave off the .class extension.) When the program executes, it simply displays the string We will not use 'Hello, World'! on the console.

Applets have a different structure—see Chapter 10 for information on applets.

Applets have a different structure—see Chapter 10 for information on applets.

When you use

java NameOfClass

to run a compiled program, the Java interpreter always starts execution with the code in the main method in the class you indicate. Thus, you must have a main method in the source file for your class in order for your code to execute. You can, of course, add your own methods to a
class and call them from the main method. (We cover writing your own methods in the next chapter.)

According to the Java Language Specification, the main method must be declared public. (The Java Language Specification is the official document that describes the Java language. You can view or download it
from http://java.sun.com/docs/books/jls.) However, several versions of the Java interpreter were willing to launch Java programs even when the main method was not public. A programmer filed a bug report. To see it, visit the site http://developer.java.sun.com/developer/bugParade and enter the bug identification number 4252539. However, that bug was marked as “closed, will not be fixed.” A Sun engineer
added an explanation that the Java Virtual Machine Specification (at http://java.sun.com/docs/books/vmspec) does not mandate that main is public, and that “fixing it will cause potential troubles.” Fortunately, sanity finally prevailed. The Java interpreter in SDK 1.4 enforces that the main method is public.

There are a couple of interesting aspects about this story. On the one hand, it is frustrating to have quality assurance engineers,
who are often overworked and not always experts in the fine points of Java, make questionable decisions about bug reports.
On the other hand, it is remarkable that Sun puts the bug reports and their resolutions onto the web, for anyone to scrutinize.
The “bug parade” is a very useful resource for programmers. You can even “vote” for your favorite bug. Bugs with lots of votes
have a high chance of being fixed in the next SDK release.

According to the Java Language Specification, the main method must be declared public. (The Java Language Specification is the official document that describes the Java language. You can view or download it
from http://java.sun.com/docs/books/jls.) However, several versions of the Java interpreter were willing to launch Java programs even when the main method was not public. A programmer filed a bug report. To see it, visit the site http://developer.java.sun.com/developer/bugParade and enter the bug identification number 4252539. However, that bug was marked as “closed, will not be fixed.” A Sun engineer
added an explanation that the Java Virtual Machine Specification (at http://java.sun.com/docs/books/vmspec) does not mandate that main is public, and that “fixing it will cause potential troubles.” Fortunately, sanity finally prevailed. The Java interpreter in SDK 1.4 enforces that the main method is public.

There are a couple of interesting aspects about this story. On the one hand, it is frustrating to have quality assurance engineers,
who are often overworked and not always experts in the fine points of Java, make questionable decisions about bug reports.
On the other hand, it is remarkable that Sun puts the bug reports and their resolutions onto the web, for anyone to scrutinize.
The “bug parade” is a very useful resource for programmers. You can even “vote” for your favorite bug. Bugs with lots of votes
have a high chance of being fixed in the next SDK release.

Notice the braces { } in the source code. In Java, as in C/C++, braces are used to delineate the parts (usually called blocks) in your program. In Java, the code for any method must be started by an opening brace { and ended by a closing brace }.

Brace styles have inspired an inordinate amount of useless controversy. We use a style that lines up matching braces. Since
white space is irrelevant to the Java compiler, you can use whatever brace style you like. We will have more to say about
the use of braces when we talk about the various kinds of loops.

For now, don't worry about the keywords static void—just think of them as part of what you need to get a Java program to compile. By the end of Chapter 4, you will understand this incantation completely. The point to remember for now is that every Java application must have
a main method whose header is identical to the one shown here.

You know what a class is. Java classes are similar to C++ classes, but there are a few differences that can trap you. For
example, in Java all functions are methods of some class. (The standard terminology refers to them as methods, not member functions.) Thus, in
Java you must have a shell class for the main method. You may also be familiar with the idea of static member functions in C++. These are member functions defined inside a class that do not operate on objects. The main method in Java is always static. Finally, as in C/C++, the void keyword indicates that this method does not return a value. Unlike C/C++, the main method does not return an “exit code” to the operating system. If the main method exits normally, the Java program has the exit code 0, indicating successful completion. To terminate the program with
a different exit code, use the System.exit method.

You know what a class is. Java classes are similar to C++ classes, but there are a few differences that can trap you. For
example, in Java all functions are methods of some class. (The standard terminology refers to them as methods, not member functions.) Thus, in
Java you must have a shell class for the main method. You may also be familiar with the idea of static member functions in C++. These are member functions defined inside a class that do not operate on objects. The main method in Java is always static. Finally, as in C/C++, the void keyword indicates that this method does not return a value. Unlike C/C++, the main method does not return an “exit code” to the operating system. If the main method exits normally, the Java program has the exit code 0, indicating successful completion. To terminate the program with
a different exit code, use the System.exit method.

Next, turn your attention to this fragment.

{
System.out.println("We will not use 'Hello world!'");
}

Braces mark the beginning and end of the body of the method. This method has only one statement in it. As with most programming languages, you can think of Java statements
as being the sentences of the language. In Java, every statement must end with a semicolon. In particular, carriage returns
do not mark the end of a statement, so statements can span multiple lines if need be.

The body of the main method contains a statement that outputs a single line of text to the console.

Here, we are using the System.out object and calling its println method. Notice the periods used to invoke a method. Java uses the general syntax

object.method(parameters)

for its equivalent of function calls.

In this case, we are calling the println method and passing it a string parameter. The method displays the string parameter on the console. It then terminates the
output line so that each call to println displays its output on a new line. Notice that Java, like C/C++, uses double quotes to delimit strings. (You will find more
information about strings later in this chapter.)

Methods in Java, like functions in any programming languages, can use zero, one, or more parameters (some languages call them arguments). Even if a method takes no parameters, you must still use empty parentheses. For example, there is a variant of the println method with no parameters that just prints a blank line. You invoke it with the call

System.out.println();

There also is a print method in System.out that doesn't add a new line character to the output. For example, System.out.print("Hello") prints "Hello" without a new line. The next output appears immediately after the "o".

There also is a print method in System.out that doesn't add a new line character to the output. For example, System.out.print("Hello") prints "Hello" without a new line. The next output appears immediately after the "o".