- Java syntax
The
syntax of the Java programming language is a set of rules that defines how a Java program is written and interpreted.Data structures
Although the language has special syntax for them,
array s and strings are notprimitive types : they are reference types that can be assigned to Javadoc:SE|package=java. _ja. Object.Primitive data types
Assignment
Bitwise operation sExample:
Labels
*Consists of an identifier followed by a colon
*Used to identify the statement or block of code that the jump statements refer to
*If the label is omitted, the jump statements refer to the innermost enclosing loopExamples LABEL1: statement;
Note about the "goto" statement
Although the "
" statement is a reserved keyword in Java it does not, however, have any function in the Java Programming Language.goto Objects
Classes
Java has "nested" classes that are declared within the body of another class or interface. A class that is not a nested class is called a "top level" class. An "
inner class " is a non-static nested class.Classes can be declared with the following modifiers:
*abstract
– cannot be instantiated. Only interfaces andabstract
classes may containabstract
methods. A concrete (non-abstract
) subclass that extends anabstract
class must override any inheritedabstract
methods with non-abstract
methods. Cannot befinal
.
*final
– cannot be subclassed. All methods in a final class are implicitlyfinal
. Cannot beabstract
.
*strictfp
– all floating-point operations within the class and any enclosed nested classes use strict floating-point semantics. Strict floating-point semantics guarantee that floating-point operations produce the same results on all platforms.Note that Java classes do not need to be terminated by a semicolon (";"), which is required in C++ syntax.
Inheritance
// ChildClass inherits from ParentClass class ChildClass extends ParentClass { ... }
* The default parent of a class is the
Object
class.
* A class can only extend a single parent class (no multiple inheritance of implementation).cope
*
this
– Reference to the current subclass (assumed by default) (i.e.this.someMethod()
).
*super
– Reference to the parent class (i.e.super.someMethod()
). Can be used in a subclass to access inherited methods that the subclass has overridden or inherited fields that the subclass has hidden.Interfaces
An interface is an abstract class with no implementation details. Its purpose is to define how a set of classes will be used. Classes that implement a common interface can be used interchangeably within the context of the interface type. Interfaces also help to enforce the concept of abstraction—hiding the details of how a class is implemented.
An interface can only contain abstract methods and static final fields. Interface methods are
public
andabstract
by default (unimplemented), and interface fields arepublic
,static
andfinal
by default.Java does not support full orthogonal
multiple inheritance . Multiple inheritance inC++ has complicated rules to disambiguate fields and methods inherited from multiple superclasses and types inherited multiple times. By separating interface from implementation, interfaces offer much of the benefit of multiple inheritance with less complexity and ambiguity. The price of no multiple inheritance is some code redundancy; since interfaces only define the signature of a class but cannot contain any implementation, every class inheriting an interface must provide the implementation of the defined methods, unlike in pure multiple inheritance, where the implementation is also inherited.Java interfaces behave much like the concept of the
Objective-C protocol.Implementing interfaces
A class can implement one or more interfaces using the
implements
keyword, in addition to extending another class.In the following example,any non-abstract
class that implements theDeleteable
interface must define a non-abstract method nameddelete
that has no parameters and avoid
return type. The implementation and function of the method are determined by each class. There are many uses for this concept, for example:Because any objects in the above array are guaranteed to have thedelete()
method, thedeleteAll()
method needn't differentiate between theFred
objects or any otherDeleteable
objects.Extending interfaces
An interface can extend one or more interfaces using the
extends
keyword.A class that implements the resulting interface must define the combined set of methods.Access modifiers
Access modifiers determine which code may access classes and class members.
Top level class access
By default, Java classes are accessible only within their own
Java package . This enables a package of classes to provide an API which performs functions behind the scenes. Hidden classes support the work of publicly accessible classes.
* default – accessible only within the package in which it's defined.
*public
– extends access to classes outside the packageClass member access
"Class members" are fields, methods, constructors and nested classes declared within the body of a class. In order of increasing scope of access, the access modifiers for class members are:
#private
– accessible only within the class
# package-private (no modifier) – accessible to other classes in the same package
#protected
– extends access to subclasses outside the package
#public
– accessible by any class.When overriding a method, the method access modifier can't be made "more restrictive"—to do so would break the interface contract of the parent class. Thus when overridden, a
public
method must be declaredpublic
and aprotected
method cannot be given default access. However, it is permissible to override a method to make it "more accessible". Thus when overriding, a default (package) access method can be declared asprotected
orpublic
and aprotected
method can be declared aspublic
.Fields
In addition to the access modifiers, data fields may be declared with the following modifiers:
*final
– the value cannot be changed. Must be initialized exactly once. A final field declared without an initializer is a "blank final" field—astatic
blank final field must be definitively initialized by a static initializer; a non-static
blank final field must be initialized during the execution of each and every constructor. Cannot bevolatile
.
*static
– belongs to the class, rather than to an instance of the class.
*transient
– not a part of the persistent state of an object. The value should not be saved and later restored.
*volatile
– informs the compiler that it may be accessed by separate threads asynchronously. Cannot befinal
.Constants
Fields that are declared as both
static
andfinal
are effectively constants;static
means there is one occurrence of the field associated with the class, andfinal
means that the field is assigned a value exactly once.Initializers
"Initializers" are blocks of code that are executed at the same time as initializers for fields.
tatic initializers
"Static initializers" are blocks of code that are executed at the same time as initializers for static fields. Static field initializers and static initializers are executed in the order declared. The static initialization is executed after the class is loaded.
Instance initializers
"Instance initializers" are blocks of code that are executed at the same time as initializers for instance (non-
static
) fields. Instance field initializers and instance initializers are executed in the order declared.Both instance initializers and instance field initializers are executed during the invocation of a constructor. The initializers are executed immediately after the superclass constructor and before the body of the constructor.
Methods
In addition to the access modifiers, methods may be declared with the following modifiers:
*abstract
– the method is undefined in the class, and must be defined by any concrete (non-abstract
) subclass. Cannot bestatic
,final
ornative
.
*final
– the method cannot be redefined in a subclass. For instance (non-static
) methods, this allows the compiler to expand the method (similar to an inline function) if the method is small enough. Cannot beabstract
.
*native
– the method links to native machine-dependent code. Declared without a body. Cannot beabstract
.
*static
– belongs to the class, rather than to an instance of the class. Cannot beabstract
.
*strictfp
– all floating-point operations in the method and enclosed inner classes use strict floating-point semantics. Strict floating-point semantics guarantee that floating-point operations produce the same results on all platforms.
*synchronized
– causes the current thread to acquire the lock for the associated object before executing the body of the method. If the lock is currently held by another thread, the current thread will block until the lock is released and the thread is able to obtain the lock. The associated object is the Javadoc:SE|java/lang|Class object forstatic
methods and the object instance for non-static
methods. While it is allowed to declare anabstract
method assynchronized
, it is meaningless to do so since synchronization is an aspect of the implementation, not the declaration, and abstract methods do not have an implementation.Note that a
private
method can't beabstract
and is implicitlyfinal
.Varargs
Java SE 5.0 added syntactic support for methods with a variable number of arguments (
varargs ) [http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html] , which simplifies thetypesafe usage of methods requiring a variable number of arguments. The last parameter can be followed with ..., and Java will box all the arguments into an array:public void drawPolygon (Javadoc:SE|java/awt|Point... points) {…}
When calling the method, a programmer can simply separate the points by commas, without having to explicitly create an
array ofPoint
objects. Within the method, the points can be referenced as points [0] , points [1] , etc. If no points are passed, the array has a length of zero. To require the programmer to use a minimum number of parameters, those parameters can be specified before the variable argument:// A polygon needs at least 3 points. public void drawPolygon (Point p1, Point p2, Point p3, Point... otherPoints) {…}
Constructors
A constructor is called to initialize an object immediately after the object has been allocated. Typically, a constructor is invoked using the
new
keyword, although constructors can also be invoked using reflection provided by the java.lang.reflect package.* The access modifiers are the only modifiers that may be used for declaring constructors.
* When possible, the object should be a valid, meaningful object once it is constructed, as opposed to relying on a separate initialization method.
* By convention, a "copy constructor" is a constructor that accepts an object of its own type as a parameter and copies the data members.
* If no explicit constructor is defined, then the compiler provides an implicit empty default constructor that takes no parameters.
* Constructors can be overloaded.
* The first statement in a constructor may invoke a superclass constructor:super(...);
or another constructor in the same class:this(...);
* If there is no explicit call tosuper(...)
orthis(...)
, then the default superclass constructorsuper();
is called before the body of the constructor is executed.Methods in the
Object
classMethods in the Javadoc:SE|java/lang|Object class are inherited, and thus shared in common by all classes.
The
clone
methodThe Javadoc:SE|java/lang|Object|clone() method returns a new object that is a copy of the current object. Classes must implement the
marker interface Javadoc:SE|java/lang|Cloneable to indicate that they can be cloned.The
equals
methodThe Javadoc:SE|name=Object.equals(Object)|java/lang|Object|equals(java.lang.Object) method compares the object to another object and returns a
boolean
result indicating if the two objects are equal. Semantically, this method compares the contents of the objects whereas the equality comparison operator "=
" compares the object references. Theequals
method is used by many of the data structure classes in the Javadoc:SE|java/util|package=java.util package. Some of these data structure classes also rely on theObject.hashCode
method—see thehashCode
method for details on the contract betweenequals
andhashCode
. Implementing equals() isn't always as easy as it seems, see ' [http://www.angelikalanger.com/Articles/JavaSolutions/SecretsOfEquals/Equals.html Secrets of equals()] ' for more information.The
finalize
methodThe Javadoc:SE|java/lang|Object|finalize() method is called exactly once before the garbage collector frees the memory for object. A class overrides
finalize
to perform any clean up that must be performed before an object is reclaimed. Most objects do not need to overridefinalize
.There is no guarantee when the
finalize
method will be called, or the order in which thefinalize
method will be called for multiple objects. If the JVM exits without performing garbage collection, the OS may free the objects, in which case thefinalize
method doesn't get called.The
finalize
method should always be declaredprotected
to prevent other classes from calling thefinalize
method.protected void finalize() throws Throwable { ... }
The
getClass
methodThe Javadoc:SE|java/lang|Object|getClass() method returns the Javadoc:SE|java/lang|Class object for the class that was used to instantiate the object. The class object is the base class of reflection in Java. Additional reflection support is provided in the
java.lang.reflect
package.The
hashCode
methodThe Javadoc:SE|java/lang|Object|hashCode() method returns an integer (
int
) that is used as a "hash code" for storing the object in anassociative array . Classes that implement the Javadoc:SE|java/util|package=java.util|Map interface provide associative arrays and rely on thehashCode
method. A goodhashCode
implementation will return a hash code that is stable (does not change) and evenly distributed (the hash codes of unequal objects tend to be unequal and the hash codes are evenly distributed across integer values).Because associative arrays depend on both the
equals
andhashCode
methods, there is an important contract between these two methods that must be maintained if the objects are to be inserted into aMap
:: For two objects "a" and "b":*
a.equals(b) = b.equals(a)
:* ifa.equals(b)
thena.hashCode() = b.hashCode()
In order to maintain this contract, a class that overrides the
equals
method must also override thehashCode
method, and vice versa, so thathashCode
is based on the same properties (or a subset of the properties) asequals
.A further contract that the map has with the object is that the results of the
hashCode
andequals
methods will not change once the object has been inserted into the map. For this reason, it is generally a good practice to base the hash function onimmutable properties of the object.Two equal objects must have the same hashcode. However, 2 different objects are NOT required to have different hashcodes.
The
toString
methodThe Javadoc:SE|java/lang|Object|toString() method returns a Javadoc:SE|java/lang|String that contains a text representation of the object. The
"toString"
method is implicitly called by the compiler when an object operand is used with the string concatenation operators (+
and+=
).The wait and notify thread signaling methods
Every object has two wait lists for threads associated with it. One wait list is used by the
synchronized
keyword to acquire themutex lock associated with the object. If the mutex lock is currently held by another thread, the current thread is added to the list of blocked threads waiting on the mutex lock. The other wait list is used for signaling between threads accomplished through thewait
andnotify
andnotifyAll
methods.Use of wait/notify allows efficient coordination of tasks between threads. When one thread needs to wait for another thread to complete an operation, or needs to wait until an event occurs, the thread can suspend its execution and wait to be notified when the event occurs. This is in contrast to polling, where the thread repeatedly sleeps for a short period of time and then checks a flag or other condition indicator. Polling is both more computationally expensive, as the thread has to continue checking, and less responsive since the thread won't notice the condition has changed until the next time to check.
The
wait
methodsThere are three overloaded versions of the
wait
method to support different ways to specify the timeout value: Javadoc:SE|name=wait()|java/lang|Object|wait(), Javadoc:SE|name=wait(long timeout)|java/lang|Object|wait(long) and Javadoc:SE|name=wait(long timeout, int nanos)|java/lang|Object|wait(long,%20int). The first method uses a timeout value of zero (0), which means that the wait does not timeout; the second method takes the number ofmillisecond s as a timeout; the third method takes the number ofnanosecond s as a timeout, calculated as1000000 * timeout + nanos
.The thread calling
wait
is blocked (removed from the set of executable threads) and added to the object's wait list. The thread remains in the object's wait list until one of three events occurs:
# another thread calls the object'snotify
ornotifyAll
method (see the notify methods below for details);
# another thread calls the thread's Javadoc:SE|name=interrupt()|java/lang|Thread|interrupt method; or
# a non-zero timeout that was specified in the call towait
expires.The
wait
method must be called inside of a block or method synchronized on the object. This insures that there are no race conditions betweenwait
andnotify
. When the thread is placed in the wait list, the thread releases the object's mutex lock. After the thread is removed from the wait list and added to the set of executable threads, it must acquire the object's mutex lock before continuing execution.The
notify
andnotifyAll
methodsThe Javadoc:SE|java/lang|Object|notify() and Javadoc:SE|java/lang|Object|notifyAll() methods remove one or more threads from an object's wait list and add them to the set of executable threads.
notify
removes a single thread from the wait list, whilenotifyAll
removes all threads from the wait list. Which thread is removed bynotify
is unspecified and dependent on the JVM implementation.The notify methods must be called inside of a block or method synchronized on the object. This insures that there are no race conditions between
wait
andnotify
.Input / Output
:"See also:
Java Platform, Standard Edition#java.io andNew I/O "Versions of Java prior to J2SE 1.4 only supported stream-based
blocking I/O . This required a thread per stream being handled, as no other processing could take place while the active thread blocked waiting for input or output. This was a major scalability and performance issue for anyone needing to implement any Java network service. Since the introduction of NIO (New I/O ) in J2SE 1.4, this scalability problem has been rectified by the introduction of anon-blocking I/O framework (though there are a number of open issues in the NIO API as implemented by Sun).The non-blocking IO framework, though considerably more complex than the original blocking IO framework, allows any number of "channels" to be handled by a single thread. The framework is based on the
Reactor Pattern .Running code
Apps
*Java code that runs in a stand-alone virtual machine (not in a
Web browser )
*Amain
method must be defined as follows:It could also be declared using
varargs :Applets
*Java code that runs in a
web browser , in a designated display area
*init
anddestroy
are only called once, butstart
andstop
are called as many times as the user visits theweb page .Embedding the applet tag
*The
HTML applet tag can be embedded in the applet source code.
*Inclusion of the applet tag allows the applet to be run directly by a simple applet viewer, without the need for an .html file.
*Typically, the applet tag immediately follows the import statements.
*It must be enclosed by /* */ comments.ervlets
*Java code that runs on a
Web server , with the output (generallyHTML orXML ) typically sent to aWeb browser .
*Servlets are the Java equivalent to CGI applications.JSP (JavaServer Pages)
*Java code that's embedded in a
Web page
*JSP tags are processed on a Web server; the resulting output (generally HTML or XML) is sent to the client.
*JSP code is compiled into aJava Servlet before it's run.
*JSP is an extension of Java Servlets.
*The usage of JSP tags is comparable to the usage ofPHP or ASP tags.JSP tags
Miscellaneous
Case sensitivity
Java is case sensitive.
Comments
// Single-line comment
/* Multiple-line comment */
/** * These lines are used before the declaration of a class, interface, method, * or data member. This type of comment can be extracted by a utility * to automatically create the documentation for a class. */
Java keywords and reserved terms
ee also
* Java programming language
*Java keywords
*Java Platform, Standard Edition References
*James Gosling ,Bill Joy , Guy Steele, andGilad Bracha , "The Java language specification", third edition. Addison-Wesley, 2005. ISBN 0-321-24678-0.
*Patrick Naughton ,Herbert Schildt . "Java 2: The Complete Reference", third edition. The McGraw-Hill Companies, 1999. ISBN 0-07-211976-4
* Vermeulen, Ambler, Bumgardner, Metz, Misfeldt, Shur, Thompson. "The Elements of Java Style". Cambridge University Press, 2000. ISBN 0-521-77768-2External links
un
* [http://java.sun.com/ Official Java home site]
* [http://java.sun.com/docs/books/jls/ The Java Language Specification, Third edition] Authoritative description of the Java language
*
* [http://java.sun.com/docs/books/tutorial/index.html The Java Tutorial]
* [http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html New features in J2SE 1.5.0]
Wikimedia Foundation. 2010.