Hello World

As long ago as 1978, Brian Kernighan and Dennis Ritchie wrote, in their classic book The C Programming Language, that “the first program to write is the same for all languages.” They were referring, of course, to the “Hello World” program. The Java implementation of Hello World is shown in Example 1-1.

Example 1-1. Hello.java

package je3.basics;                          // A unique class name prefix
public class Hello {                         // Everything in Java is a class
    public static void main(String[  ] args) { // All programs must have main( )
        System.out.println("Hello World!");  // Say hello!
    }                                        // This marks the end of main( )
}                                            // Marks the end of the class

The first line of this program is the package declaration. It specifies the name of the package of which this program is part. The program’s name (as we’ll see in the second line) is Hello. The package name is je3.basics. We can combine these two names to produce a fully qualified name, je3.basics.Hello. Using packages provides a unique namespace for every Java program. By placing this Hello program in a package, I’ve helped to ensure that no naming conflict will arise if someone else defines a program that is also named Hello. Each chapter of this book has its own package that begins with the prefix je3 (for JavaExamples3). In this case, since this is the basics chapter, the package name is je3.basics.[1]

The value of “Hello World” is that it is a template that you can expand on in your later experiments with Java. The second and third lines of Example 1-1 are a required part of the template. Every program—every piece of Java code, really—you write is a class. The second line of the example says that we’re writing a class named Hello. It also says the class is public, which means it can be used by anyone.

Every standalone Java program requires a main( ) method. This is where the Java interpreter begins running a Java program. The third line of the example declares this main( ) method. It says that the method is public, that it has no return value (i.e., its return value is void), and that it is passed an array of strings as its argument. The name of the array is args. The line also says that main( ) is a static method. (In this chapter, we work exclusively with static methods. In Chapter 2, when we start working with objects, you’ll learn what a static method is, and you’ll see that nonstatic methods are actually the norm.)

In any case, you might as well go ahead and memorize this line:

public static void main(String[  ] args)

Every standalone Java program you ever write contains a line that looks exactly like this one. (Actually, you can name the array of strings anything you want, but it is usually called args.)

The fifth and sixth lines of Example 1-1 simply mark the end of the main( ) method and of the Hello class. Like most modern programming languages, Java is a block-structured language. This means that such things as classes and methods have bodies that comprise a “block” of code. In Java, the beginning of a block is marked by a {, and the end is marked by a matching }. Method blocks are always defined within class blocks, and as we’ll see in later examples, method blocks can contain such things as if statements and for loops that form subblocks within the method. Furthermore, these sorts of statement blocks can be nested arbitrarily deep within each other.

The first three lines and the last two lines of Example 1-1 are part of the basic framework of a Java application. It is the fourth line of the example that is of primary interest to us. This is the line that prints the words “Hello World!” The System.out.println( ) method sends a line of output to “standard output,” which is usually the screen. This method is used throughout this chapter and in many other chapters in this book. It isn’t until Chapter 3, however, that you’ll really understand what it is doing. If you are curious before then, look up the java.lang.System and java.io.PrintStream classes in Java in a Nutshell (or some other Java reference manual).

One final point to note about this program is the use of comments. Example 1-1 uses C++-style comments that begin with // and continue until the end of the line. Thus, anything between the // characters and the end of a line is ignored by the Java compiler. You’ll find that the examples in this book are thoroughly commented. The code and the comments are worth studying because the comments often draw your attention to points that are not mentioned in the main text of the book.

Running Hello World

The first step in running our program is to type it in.[2] Using a text editor, type in the Hello program as shown in Example 1-1. For now, however, omit the package declaration on the first line. Save the program in a file named Hello.java.

The second step is to compile the program. If you are using the Java Software Development Kit (SDK) from Sun, you compile code with the javac command.[3] cd to the directory that contains your Hello.java file, and type this command (assuming that javac is in your path):

% javac Hello.java

If the Java SDK has been properly installed, javac runs for a short while and then produces a file named Hello.class. This file contains the compiled version of the program. As I said earlier, everything you write in Java is a class, as the .class extension on this file indicates. One important rule about compiling Java programs is that the name of the file minus the .java extension must match the name of the class defined in the file. Thus, if you typed in Example 1-1 and saved it in a file named HelloWorld.java, you would not be able to compile it.

To run the program (again using the Java SDK) type:

% java Hello

This command should produce the output:

Hello World!

The java command is the Java interpreter; it runs the Java Virtual Machine. You pass java the name of the class that you want to run. Note that you are specifying the class name, Hello, not the name of the file, Hello.class, that contains the compiled class.

The previous steps have shown you how to compile and run Java programs that don’t have package declarations. If you omitted the package declaration when you typed in Hello.java, these instructions should have worked for you (if they didn’t, check that you typed the program in correctly). In practice, however, all nontrivial Java programs (including the examples in this book) do have package declarations. Using packages makes compiling and running Java programs a bit more complicated. As I just noted, a Java program must be saved in a file that has a name that matches the class name. When a class is in a package, there is a further requirement that the class be saved in a directory that matches the name of the package.

Go ahead and reinsert the package declaration into Hello.java:

package je3.basics;

Now make yourself a new directory (or folder) in which you’ll do all your work with the examples from this book. For example, on a Windows system, you might create a folder named c:\Examples. On a Linux system, you might use ~/Examples. Within this directory, create a subdirectory named je3. Then create a subdirectory of je3 named basics. Now copy your Hello.java program (with the package declaration) into this directory. On a Windows system, the resulting file might be:

c:\Examples\je3\basics\Hello.java

After you’ve created the directory structure and put your Java program in it, the next step is to tell the Java compiler and interpreter where to find it. The compiler and interpreter simply need to know the base directory you’ve chosen; they will look for the Hello.class file in subdirectories of this base directory, based on the package name. To tell Java where to look, you have to set the CLASSPATH environment variable in the manner appropriate for your operating system. If you used the suggested name for your base directory on a Windows system (c:\Examples), you can use a command like the following:

C:\> set CLASSPATH=.;c:\Examples

This tells Java to look first for classes in the current directory (.), followed by the c:\Examples directory.

On a Unix system using the csh shell, you can use the following command:

% setenv CLASSPATH .:/home/david/Examples

With the sh or bash shell, the command is:

$ CLASSPATH=.:/home/david/Examples; export CLASSPATH

You may want to automate this process by setting CLASSPATH in a startup file, such as autoexec.bat on Windows systems or .cshrc on Unix systems (under csh).

With your CLASSPATH set, you can now go ahead and compile and run the Hello program. To compile, change directories to the examples/basics directory that holds Hello.java. Compile the program as before:

% javac Hello.java

This creates the Hello.class file.

To run the program, you invoke the Java interpreter as before, but now you must specify the fully qualified name of the program, so that the interpreter knows exactly which program you want to run:

% java je3.basics.Hello

Because you’ve set the CLASSPATH, you can run the Java interpreter from any directory on your system, and it will always find the correct program. If you get tired of typing such long class names, you may want to write yourself a batch file or shell script that automates the process for you.

Note that all Java programs are compiled and run in this way, so we won’t go through these individual steps again. Of course, one step you don’t have to repeat is typing in all the examples. You can download the example source code from http://www.davidflanagan.com/javaexamples3.



[1] In the second edition of this book, I was more rigorous about preventing naming conflicts: I created the package name by reversing my Internet domain name, a procedure that should guarantee that there will be no naming conflicts. The resulting package name for this chapter was com.davidflanagan.examples.basics. For this edition, I’ve settled on a less rigorous but much easier to type alternative.

[2] Although this example is included in the online example archive, I’m suggesting that you type it in so that you start imprinting basic Java idioms in your brain. I’m also going to have you modify the example, in order to explain certain aspects of running the program.

[3] If you are using some other Java programming environment, read and follow the vendor’s instructions for compiling and running programs.

Get Java Examples in a Nutshell, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.