Java LanguageGetting started with Java Language

Remarks

The Java programming language is...

General-purpose: It is designed to be used for writing software in a wide variety of application domains, and lacks specialized features for any specific domain.

Class-based: Its object structure is defined in classes. Class instances always have those fields and methods specified in their class definitions (see Classes and Objects). This is in contrast to non-class-based languages such as JavaScript.

Statically-typed: the compiler checks at compile time that variable types are respected. For example, if a method expects an argument of type String, that argument must in fact be a string when the method is called.

Object-oriented: most things in a Java program are class instances, i.e. bundles of state (fields) and behavior (methods which operate on data and form the object's interface to the outside world).

Portable: It can be compiled on any platform with javac and the resultant class files can run on any platform that has a JVM.

Java is intended to let application developers "write once, run anywhere" (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.

Java code is compiled to bytecode (the .class files) which in turn get interpreted by the Java Virtual Machine (JVM). In theory, bytecode created by one Java compiler should run the same way on any JVM, even on a different kind of computer. The JVM might (and in real-world programs will) choose to compile into native machine commands the parts of the bytecode that are executed often. This is called "Just-in-time (JIT) compilation".

Java Editions and Versions

There are three "editions" of Java defined by Sun / Oracle:

Java Standard Edition (SE) is the edition that is designed for general use.

1. In Versions section the end-of-life (free) date is when Oracle will stop posting further updates of Java SE to its public download sites. Customers who need continued access to critical bug fixes and security fixes as well as general maintenance for Java SE can get long term support through Oracle Java SE Support.

Note: For Java to recognize this as a public class (and not throw a compile time error), the filename must be the same as the class name (HelloWorld in this example) with a .java extension. There should also be a public access modifier before it.

Naming conventions recommend that Java classes begin with an uppercase character, and be in camel case format (in which the first letter of each word is capitalized). The conventions recommend against underscores (_ ) and dollar signs ($ ).

To compile, open a terminal window and navigate to the directory of HelloWorld.java :

It's fairly common to get the error 'javac' is not recognized as an internal or external command, operable program or batch file. even when you have installed the JDK and are able to run the program from IDE ex. eclipse etc. Since the path is not added to the environment by default.

In case you get this on windows, to resolve, first try browsing to your javac.exe path, it's most probably in your C:\Program Files\Java\jdk(version number)\bin . Then try running it with below.

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java

Previously when we were calling javac it was same as above command. Only in that case your OS knew where javac resided. So let's tell it now, this way you don't have to type the whole path every-time. We would need to add this to our PATH

To edit the PATH environment variable in Windows XP/Vista/7/8/10:

Control Panel ⇒ System ⇒ Advanced system settings

Switch to "Advanced" tab ⇒ Environment Variables

In "System Variables", scroll down to select "PATH" ⇒ Edit

You cannot undo this so be careful. First copy your existing path to notepad. Then to get the exact PATH to your javac browse manually to the folder where javac resides and click on the address bar and then copy it. It should look something like c:\Program Files\Java\jdk1.8.0_xx\bin

In "Variable value" field, paste this IN FRONT of all the existing directories, followed by a semi-colon (;). DO NOT DELETE any existing entries.

The compiler will then generate a bytecode file called HelloWorld.class which can be executed in the Java Virtual Machine (JVM). The Java programming language compiler, javac , reads source files written in the Java programming language and compiles them into bytecode class files. Optionally, the compiler can also process annotations found in source and class files using the Pluggable Annotation Processing API. The compiler is a command line tool but can also be invoked using the Java Compiler API.

To run your program, enter java followed by the name of the class which contains the main method (HelloWorld in our example). Note how the .class is omitted:

You will need to use a compiler (javac ) and an executor (java ) provided by your JVM. To find out which versions you have installed, enter java -version and javac -version on the command line. The version number of your program will be printed in the terminal (e.g. 1.8.0_73 ).

A closer look at the Hello World program

The "Hello World" program contains a single file, which consists of a HelloWorld class definition, a main method, and a statement inside the main method.

public class HelloWorld {

The class keyword begins the class definition for a class named HelloWorld . Every Java application contains at least one class definition (Further information about classes).

public static void main(String[] args) {

This is an entry point method (defined by its name and signature of public static void main(String[]) ) from which the JVM can run your program. Every Java program should have one. It is:

public : meaning that the method can be called from anywhere mean from outside the program as well. See Visibility for more information on this.

static : meaning it exists and can be run by itself (at the class level without creating an object).

void : meaning it returns no value. Note: This is unlike C and C++ where a return code such as int is expected (Java's way is System.exit()).

The name args is a variable name, so it can be called anything you want, although it is typically called args .

Whether its parameter type is an array (String[] args ) or Varargs (String... args ) does not matter because arrays can be passed into varargs.

Note: A single application may have multiple classes containing an entry point (main ) method. The entry point of the application is determined by the class name passed as an argument to the java command.

Inside the main method, we see the following statement:

System.out.println("Hello, World!");

Let's break down this statement element-by-element:

Element

Purpose

System

this denotes that the subsequent expression will call upon the System class, from the java.lang package.

.

this is a "dot operator". Dot operators provide you access to a classes members1; i.e. its fields (variables) and its methods. In this case, this dot operator allows you to reference the out static field within the System class.

out

this is the name of the static field of PrintStream type within the System class containing the standard output functionality.

.

this is another dot operator. This dot operator provides access to the println method within the out variable.

println

this is the name of a method within the PrintStream class. This method in particular prints the contents of the parameters into the console and inserts a newline after.

(

this parenthesis indicates that a method is being accessed (and not a field) and begins the parameters being passed into the println method.

"Hello, World!"

this is the String literal that is passed as a parameter, into the println method. The double quotation marks on each end delimit the text as a String.

)

this parenthesis signifies the closure of the parameters being passed into the println method.

;

this semicolon marks the end of the statement.

Note: Each statement in Java must end with a semicolon (; ).

The method body and class body are then closed.

} // end of main function scope
} // end of class HelloWorld scope

Here's another example demonstrating the OO paradigm. Let's model a football team with one (yes, one!) member. There can be more, but we'll discuss that when we get to arrays.

First, let's define our Team class:

public class Team {
Member member;
public Team(Member member) { // who is in this Team?
this.member = member; // one 'member' is in this Team!
}
}

Why do we use private here? Well, if someone wanted to know your name, they should ask you directly, instead of reaching into your pocket and pulling out your Social Security card. This private does something like that: it prevents outside entities from accessing your variables. You can only return private members through getter functions (shown below).

After putting it all together, and adding the getters and main method as discussed before, we have:

Once again, the main method inside the Test class is the entry point to our program. Without the main method, we cannot tell the Java Virtual Machine (JVM) from where to begin execution of the program.

1 - Because the HelloWorld class has little relation to the System class, it can only access public data.