Java ScreenShot
     

Screenshot Core Java 2: Volume I - Fundamentals

Table of Contents
 3.  Fundamental Programming Structures in Java


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:

public class FirstSample
{
 public static void main(String[] args)
 {
 System.out.println("We will not use 'Hello, World!'");
 }
}


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 apps. 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 . 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 app. As mentioned in , classes are the building blocks with which all Java apps 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.

Java graphics notes_icon.gif

Applets have a different structure—see 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.)

Java graphics notes_icon.gif

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.oracle.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.oracle.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.oracle.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 , you will understand this incantation completely. The point to remember for now is that every Java app must have a main method whose header is identical to the one shown here.
public class ClassName
{
 public static void main(String[] args)
 {
 program instructions
 }
}


Java graphics cplus_icon.gif

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 coding 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 coding 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();


Java graphics caution_icon.gif

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".

Screenshot

Java ScreenShot
     
Top
 

Comments