Java in a Nutshell

Previous Chapter 13
Java Syntax

13.4 Modifiers

There are quite a few Java keywords that serve as modifiers for Java classes, interfaces, methods, and fields. They are described in Table 13.4.

Table 13.4: Java Modifiers
Modifier Used On Meaning
abstract class

The class contains unimplemented methods and cannot be instantiated.


All interfaces are abstract. The modifier is optional in interface declarations.


No body is provided for the method (it is provided by a subclass). The signature is followed by a semicolon. The enclosing class must also be abstract.

final class

The class may not be subclassed.


The field may not have its value changed (compiler may precompute expressions).


The method may not be overridden (compiler may optimize).


Java 1.1 and later: the local variable or method or exception parameter may not have its value changed.

native method

The method is implemented in C, or in some other platform-dependent way. No body is provided; the signature is followed by a semicolon.

none (package) class

A non-public class is accessible only in its package


A non-public interface is accessible only in its package


A member that is not private, protected, or public has package visiblity and is accessible only within its package.

private member

The member is only accessible within the class that defines it.

protected member

The member is only accessible within the package in which it is defined, and within subclasses.

public class

The class is accessible anywhere its package is.


The interface is accessible anywhere its package is.


The member is accessible anywhere its class is.

static class

In Java 1.1, a class delared static is a toplevel class, not an inner class.


A static field is a "class field." There is only one instance of the field, regardless of the number of class instances created. It may be accessed through the class name.


The intializer is run when the class is loaded, rather than when an instance is created.


A static method is a "class method." It is not passed as an implicit this object reference. It may be invoked through the class name.

synchronized method

The method makes non-atomic modifications to the class or instance, and care must be taken to ensure that two threads cannot modify the class or instance at the same time. For a static method, a lock for the class is acquired before executing the method. For a non-static method, a lock for the specific object instance is acquired.

transient field

The field is not part of the persistent state of the object, and should not be serialized with the object.

volatile field

The field may be accessed by unsynchronized threads, so certain code optimizations must not be performed on it.

Table 13.5 summarizes the visibility modifiers; it shows the circumstances under which class members of the various visibility types are accessible.

Table 13.5: Class Member Accessibility
Accessible to: Member Visibility
public protected package private
Same class yes yes yes yes
Class in same package yes yes yes no
Subclass in different package yes yes no no
Non-subclass, different package yes no no no

Previous Home Next
Operators Book Index Reserved Words

Java in a Nutshell Java Language Reference Java AWT Java Fundamental Classes Exploring Java