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.
| Modifier | Used On | Meaning |
|---|---|---|
| abstract | class | The class contains unimplemented methods and cannot be instantiated. |
| interface | All interfaces are abstract. The modifier is optional in interface declarations.
| |
| method | 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. |
| field | The field may not have its value changed (compiler may precompute expressions). | |
| method | The method may not be overridden (compiler may optimize). | |
| variable | 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
|
| interface | A non-public interface is accessible only in its package
| |
| member | 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. |
| interface | The interface is accessible anywhere its package is. | |
| member | 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.
|
| field | 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.
| |
| initializer | The intializer is run when the class is loaded, rather than when an instance is created. | |
| method | 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.
| 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 |