List of Java keywords



In the Java programming language, a keyword is any one of 68 reserved words that have a predefined meaning in the language. Because of this, programmers cannot use keywords in some contexts, such as names for variables, methods, classes, or as any other identifier. Of these 68 keywords, 17 of them are only contextually reserved, and can sometimes be used as an identifier, unlike standard reserved words. Due to their special functions in the language, most integrated development environments for Java use syntax highlighting to display keywords in a different colour for easy identification.

List of Java keywords

 * Added in Java 9, the underscore has become a keyword and cannot be used as a variable name anymore.
 * Added in Java 9, the underscore has become a keyword and cannot be used as a variable name anymore.


 * A method with no definition must be declared as abstract and the class containing it must be declared as abstract. Abstract classes cannot be instantiated. Abstract methods must be implemented in the sub classes. The abstract keyword cannot be used with variables or constructors. Note that an abstract class isn't required to have an abstract method at all.
 * A method with no definition must be declared as abstract and the class containing it must be declared as abstract. Abstract classes cannot be instantiated. Abstract methods must be implemented in the sub classes. The abstract keyword cannot be used with variables or constructors. Note that an abstract class isn't required to have an abstract method at all.


 * (added in J2SE 1.4)
 * Assert describes a predicate (a true–false statement) placed in a Java program to indicate that the developer thinks that the predicate is always true at that place. If an assertion evaluates to false at run-time, an assertion failure results, which typically causes execution to abort. Assertions are disabled at runtime by default, but can be enabled through a command-line option or programmatically through a method on the class loader.
 * Defines a boolean variable for the values "true" or "false" only. By default, the value of boolean primitive type is false. This keyword is also used to declare that a method returns a value of the primitive type.
 * Defines a boolean variable for the values "true" or "false" only. By default, the value of boolean primitive type is false. This keyword is also used to declare that a method returns a value of the primitive type.
 * Defines a boolean variable for the values "true" or "false" only. By default, the value of boolean primitive type is false. This keyword is also used to declare that a method returns a value of the primitive type.


 * Used to end the execution in the current loop body.
 * Used to break out of a  block.
 * Used to break out of a  block.


 * The  keyword is used to declare a field that can hold an 8-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a field that can hold an 8-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.


 * A statement in the  block can be labeled with one or more   or   labels. The   statement evaluates its expression, then executes all statements that follow the matching   label; see.
 * A statement in the  block can be labeled with one or more   or   labels. The   statement evaluates its expression, then executes all statements that follow the matching   label; see.


 * Used in conjunction with a  block and an optional   block. The statements in the   block specify what to do if a specific type of exception is thrown by the   block.
 * Used in conjunction with a  block and an optional   block. The statements in the   block specify what to do if a specific type of exception is thrown by the   block.


 * Defines a character variable capable of holding any character of the java source file's character set.
 * Defines a character variable capable of holding any character of the java source file's character set.


 * A type that defines the implementation of a particular kind of object. A class definition defines instance and class fields, methods, and inner classes as well as specifying the interfaces the class implements and the immediate superclass of the class. If the superclass is not explicitly specified, the superclass is implicitly . The class keyword can also be used in the form Class.class to get a Class object without needing an instance of that class. For example, String.class can be used instead of doing new String.getClass.
 * A type that defines the implementation of a particular kind of object. A class definition defines instance and class fields, methods, and inner classes as well as specifying the interfaces the class implements and the immediate superclass of the class. If the superclass is not explicitly specified, the superclass is implicitly . The class keyword can also be used in the form Class.class to get a Class object without needing an instance of that class. For example, String.class can be used instead of doing new String.getClass.


 * Used to resume program execution at the end of the current loop body. If followed by a label,  resumes execution at the end of the enclosing labeled loop body.
 * Used to resume program execution at the end of the current loop body. If followed by a label,  resumes execution at the end of the enclosing labeled loop body.


 * The  keyword can optionally be used in a switch statement to label a block of statements to be executed if no   matches the specified value; see  .  Alternatively, the   keyword can also be used to declare default values in a Java annotation. From Java 8 onwards, the   keyword can be used to allow an interface to provide an implementation of a method.
 * The  keyword can optionally be used in a switch statement to label a block of statements to be executed if no   matches the specified value; see  .  Alternatively, the   keyword can also be used to declare default values in a Java annotation. From Java 8 onwards, the   keyword can be used to allow an interface to provide an implementation of a method.


 * The  keyword is used in conjunction with   to create a do-while loop, which executes a block of statements associated with the loop and then tests a boolean expression associated with the  . If the expression evaluates to , the block is executed again; this continues until the expression evaluates to.
 * The  keyword is used in conjunction with   to create a do-while loop, which executes a block of statements associated with the loop and then tests a boolean expression associated with the  . If the expression evaluates to , the block is executed again; this continues until the expression evaluates to.


 * The  keyword is used to declare a variable that can hold a 64-bit double precision IEEE 754 floating-point number.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a variable that can hold a 64-bit double precision IEEE 754 floating-point number.  This keyword is also used to declare that a method returns a value of the primitive type.


 * The  keyword is used in conjunction with   to create an if-else statement, which tests a boolean expression; if the expression evaluates to , the block of statements associated with the   are evaluated; if it evaluates to  , the block of statements associated with the   are evaluated.
 * The  keyword is used in conjunction with   to create an if-else statement, which tests a boolean expression; if the expression evaluates to , the block of statements associated with the   are evaluated; if it evaluates to  , the block of statements associated with the   are evaluated.


 * (added in J2SE 5.0)
 * A Java keyword used to declare an enumerated type. Enumerations extend the base class.


 * Used in a class declaration to specify the superclass; used in an interface declaration to specify one or more superinterfaces. Class X extends class Y to add functionality, either by adding fields or methods to class Y, or by overriding methods of class Y. An interface Z extends one or more interfaces by adding methods. Class X is said to be a subclass of class Y; Interface Z is said to be a subinterface of the interfaces it extends.
 * Also used to specify an upper bound on a type parameter in Generics.
 * Also used to specify an upper bound on a type parameter in Generics.


 * Define an entity once that cannot be changed nor derived from later. More specifically: a final class cannot be subclassed, a final method cannot be overridden, and a final variable can occur at most once as a left-hand expression on an executed command. All methods in a final class are implicitly.
 * Define an entity once that cannot be changed nor derived from later. More specifically: a final class cannot be subclassed, a final method cannot be overridden, and a final variable can occur at most once as a left-hand expression on an executed command. All methods in a final class are implicitly.


 * Used to define a block of statements for a block defined previously by the  keyword. The   block is executed after execution exits the   block and any associated   clauses regardless of whether an exception was thrown or caught, or execution left method in the middle of the   or   blocks using the   keyword.
 * Used to define a block of statements for a block defined previously by the  keyword. The   block is executed after execution exits the   block and any associated   clauses regardless of whether an exception was thrown or caught, or execution left method in the middle of the   or   blocks using the   keyword.


 * The  keyword is used to declare a variable that can hold a 32-bit single precision IEEE 754 floating-point number.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a variable that can hold a 32-bit single precision IEEE 754 floating-point number.  This keyword is also used to declare that a method returns a value of the primitive type.


 * The  keyword is used to create a for loop, which specifies a variable initialization, a boolean expression, and an incrementation. The variable initialization is performed first, and then the boolean expression is evaluated. If the expression evaluates to , the block of statements associated with the loop are executed, and then the incrementation is performed. The boolean expression is then evaluated again; this continues until the expression evaluates to.
 * The  keyword is used to create a for loop, which specifies a variable initialization, a boolean expression, and an incrementation. The variable initialization is performed first, and then the boolean expression is evaluated. If the expression evaluates to , the block of statements associated with the loop are executed, and then the incrementation is performed. The boolean expression is then evaluated again; this continues until the expression evaluates to.


 * As of J2SE 5.0, the  keyword can also be used to create a so-called "enhanced for loop", which specifies an array or  object; each iteration of the loop executes the associated block of statements using a different element in the array or.


 * The  keyword is used to create an if statement, which tests a boolean expression; if the expression evaluates to , the block of statements associated with the if statement is executed. This keyword can also be used to create an if-else statement; see  .
 * The  keyword is used to create an if statement, which tests a boolean expression; if the expression evaluates to , the block of statements associated with the if statement is executed. This keyword can also be used to create an if-else statement; see  .


 * Included in a class declaration to specify one or more interfaces that are implemented by the current class. A class inherits the types and abstract methods declared by the interfaces.
 * Included in a class declaration to specify one or more interfaces that are implemented by the current class. A class inherits the types and abstract methods declared by the interfaces.


 * Used at the beginning of a source file to specify classes or entire Java packages to be referred to later without including their package names in the reference. Since J2SE 5.0,  statements can import   members of a class.
 * Used at the beginning of a source file to specify classes or entire Java packages to be referred to later without including their package names in the reference. Since J2SE 5.0,  statements can import   members of a class.


 * A binary operator that takes an object reference as its first operand and a class or interface as its second operand and produces a boolean result. The  operator evaluates to true if and only if the runtime type of the object is assignment compatible with the class or interface.
 * A binary operator that takes an object reference as its first operand and a class or interface as its second operand and produces a boolean result. The  operator evaluates to true if and only if the runtime type of the object is assignment compatible with the class or interface.


 * The  keyword is used to declare a variable that can hold a 32-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a variable that can hold a 32-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.


 * Used to declare a special type of class that only contains abstract or default methods, constant fields and   interfaces. It can later be implemented by classes that declare the interface with the   keyword. As multiple inheritance is not allowed in Java, interfaces are used to circumvent it. An interface can be defined within another interface.
 * Used to declare a special type of class that only contains abstract or default methods, constant fields and   interfaces. It can later be implemented by classes that declare the interface with the   keyword. As multiple inheritance is not allowed in Java, interfaces are used to circumvent it. An interface can be defined within another interface.


 * The  keyword is used to declare a variable that can hold a 64-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a variable that can hold a 64-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.


 * Used in method declarations to specify that the method is not implemented in the same Java source file, but rather in another language.
 * Used in method declarations to specify that the method is not implemented in the same Java source file, but rather in another language.


 * Used to create an instance of a class or array object. Using keyword for this end is not completely necessary (as exemplified by Scala), though it serves two purposes: it enables the existence of different namespace for methods and class names, it defines statically and locally that a fresh object is indeed created, and of what runtime type it is (arguably introducing dependency into the code).
 * Used to create an instance of a class or array object. Using keyword for this end is not completely necessary (as exemplified by Scala), though it serves two purposes: it enables the existence of different namespace for methods and class names, it defines statically and locally that a fresh object is indeed created, and of what runtime type it is (arguably introducing dependency into the code).


 * Java package is a group of similar classes and interfaces. Packages are declared with the  keyword.
 * Java package is a group of similar classes and interfaces. Packages are declared with the  keyword.


 * The  keyword is used in the declaration of a method, field, or inner class; private members can only be accessed by other members of their own class.
 * The  keyword is used in the declaration of a method, field, or inner class; private members can only be accessed by other members of their own class.


 * The  keyword is used in the declaration of a method, field, or inner class; protected members can only be accessed by members of their own class, that class's subclasses or classes from the same package.
 * The  keyword is used in the declaration of a method, field, or inner class; protected members can only be accessed by members of their own class, that class's subclasses or classes from the same package.


 * The  keyword is used in the declaration of a class, method, or field; public classes, methods, and fields can be accessed by the members of any class.
 * The  keyword is used in the declaration of a class, method, or field; public classes, methods, and fields can be accessed by the members of any class.


 * Used to finish the execution of a method. It can be followed by a value required by the method definition that is returned to the caller
 * Used to finish the execution of a method. It can be followed by a value required by the method definition that is returned to the caller


 * The  keyword is used to declare a field that can hold a 16-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.
 * The  keyword is used to declare a field that can hold a 16-bit signed two's complement integer.  This keyword is also used to declare that a method returns a value of the primitive type.


 * Used to declare a field, method, or inner class as a class field. Classes maintain one copy of class fields regardless of how many instances exist of that class.  also is used to define a method as a class method. Class methods are bound to the class instead of to a specific instance, and can only operate on class fields. Classes and interfaces declared as   members of another class or interface are actually top-level classes and are not inner classes.
 * Used to declare a field, method, or inner class as a class field. Classes maintain one copy of class fields regardless of how many instances exist of that class.  also is used to define a method as a class method. Class methods are bound to the class instead of to a specific instance, and can only operate on class fields. Classes and interfaces declared as   members of another class or interface are actually top-level classes and are not inner classes.


 * Inheritance basically used to achieve dynamic binding or run-time polymorphism in java. Used to access members of a class inherited by the class in which it appears. Allows a subclass to access overridden methods and hidden members of its superclass. The  keyword is also used to forward a call from a constructor to a constructor in the superclass.
 * Also used to specify a lower bound on a type parameter in Generics.
 * Also used to specify a lower bound on a type parameter in Generics.


 * The  keyword is used in conjunction with   and   to create a switch statement, which evaluates a variable, matches its value to a specific , and executes the block of statements associated with that  . If no   matches the value, the optional block labelled by   is executed, if included.
 * The  keyword is used in conjunction with   and   to create a switch statement, which evaluates a variable, matches its value to a specific , and executes the block of statements associated with that  . If no   matches the value, the optional block labelled by   is executed, if included.


 * Used in the declaration of a method or code block to acquire the mutex lock for an object while the current thread executes the code. For static methods, the object locked is the class's . Guarantees that at most one thread at a time operating on the same object executes that code. The mutex lock is automatically released when execution exits the synchronized code. Fields, classes and interfaces cannot be declared as synchronized.
 * Used in the declaration of a method or code block to acquire the mutex lock for an object while the current thread executes the code. For static methods, the object locked is the class's . Guarantees that at most one thread at a time operating on the same object executes that code. The mutex lock is automatically released when execution exits the synchronized code. Fields, classes and interfaces cannot be declared as synchronized.


 * Used to represent an instance of the class in which it appears.  can be used to access class members and as a reference to the current instance. The   keyword is also used to forward a call from one constructor in a class to another constructor in the same class.
 * Used to represent an instance of the class in which it appears.  can be used to access class members and as a reference to the current instance. The   keyword is also used to forward a call from one constructor in a class to another constructor in the same class.


 * Causes the declared exception instance to be thrown. This causes execution to continue with the first enclosing exception handler declared by the  keyword to handle an assignment compatible exception type. If no such exception handler is found in the current method, then the method returns and the process is repeated in the calling method. If no exception handler is found in any method call on the stack, then the exception is passed to the thread's uncaught exception handler.
 * Causes the declared exception instance to be thrown. This causes execution to continue with the first enclosing exception handler declared by the  keyword to handle an assignment compatible exception type. If no such exception handler is found in the current method, then the method returns and the process is repeated in the calling method. If no exception handler is found in any method call on the stack, then the exception is passed to the thread's uncaught exception handler.


 * Used in method declarations to specify which exceptions are not handled within the method but rather passed to the next higher level of the program. All uncaught exceptions in a method that are not instances of  must be declared using the   keyword.
 * Used in method declarations to specify which exceptions are not handled within the method but rather passed to the next higher level of the program. All uncaught exceptions in a method that are not instances of  must be declared using the   keyword.


 * Declares that an instance field is not part of the default serialized form of an object. When an object is serialized, only the values of its non-transient instance fields are included in the default serial representation. When an object is deserialized, transient fields are initialized only to their default value. If the default form is not used, e.g. when a serialPersistentFields table is declared in the class hierarchy, all  keywords are ignored.
 * Declares that an instance field is not part of the default serialized form of an object. When an object is serialized, only the values of its non-transient instance fields are included in the default serial representation. When an object is deserialized, transient fields are initialized only to their default value. If the default form is not used, e.g. when a serialPersistentFields table is declared in the class hierarchy, all  keywords are ignored.


 * Defines a block of statements that have exception handling. If an exception is thrown inside the  block, an optional   block can handle declared exception types. Also, an optional   block can be declared that will be executed when execution exits the   block and   clauses, regardless of whether an exception is thrown or not. A   block must have at least one   clause or a   block.
 * Defines a block of statements that have exception handling. If an exception is thrown inside the  block, an optional   block can handle declared exception types. Also, an optional   block can be declared that will be executed when execution exits the   block and   clauses, regardless of whether an exception is thrown or not. A   block must have at least one   clause or a   block.


 * The  keyword is used to declare that a method does not return any value.
 * The  keyword is used to declare that a method does not return any value.


 * Used in field declarations to guarantee visibility of changes to variables across threads. Every read of a volatile variable will be read from main memory, and not from the CPU cache, and that every write to a volatile variable will be written to main memory, and not just to the CPU cache. Methods, classes and interfaces thus cannot be declared volatile, nor can local variables or parameters.
 * Used in field declarations to guarantee visibility of changes to variables across threads. Every read of a volatile variable will be read from main memory, and not from the CPU cache, and that every write to a volatile variable will be written to main memory, and not just to the CPU cache. Methods, classes and interfaces thus cannot be declared volatile, nor can local variables or parameters.


 * The  keyword is used to create a while loop, which tests a boolean expression and executes the block of statements associated with the loop if the expression evaluates to  ; this continues until the expression evaluates to  . This keyword can also be used to create a do-while loop; see  .
 * The  keyword is used to create a while loop, which tests a boolean expression and executes the block of statements associated with the loop if the expression evaluates to  ; this continues until the expression evaluates to  . This keyword can also be used to create a do-while loop; see  .

Reserved Identifiers
The following identifiers are contextual keywords, and are only restricted in some contexts:


 * Used to declare that a class or interface which extends a sealed class can be extended by unknown classes.
 * Used to declare that a class or interface which extends a sealed class can be extended by unknown classes.


 * The permits clause specifies the classes that are permitted to extend a sealed class.
 * The permits clause specifies the classes that are permitted to extend a sealed class.
 * The permits clause specifies the classes that are permitted to extend a sealed class.
 * The permits clause specifies the classes that are permitted to extend a sealed class.


 * A sealed class or interface can only be extended or implemented by classes and interfaces permitted to do so.
 * A sealed class or interface can only be extended or implemented by classes and interfaces permitted to do so.


 * A special identifier that cannot be used as a type name (since Java 10).
 * A special identifier that cannot be used as a type name (since Java 10).
 * A special identifier that cannot be used as a type name (since Java 10).
 * A special identifier that cannot be used as a type name (since Java 10).
 * A special identifier that cannot be used as a type name (since Java 10).


 * used as an additional check for a  statement.
 * used as an additional check for a  statement.


 * Used to set a value for a switch expression, when using labelled statement groups (for example, ).
 * Used to set a value for a switch expression, when using labelled statement groups (for example, ).
 * Used to set a value for a switch expression, when using labelled statement groups (for example, ).

Reserved words for literal values

 * A boolean literal value.
 * A boolean literal value.


 * A boolean literal value.
 * A boolean literal value.


 * A reference literal value.
 * A reference literal value.

Unused

 * Although reserved as a keyword in Java,  is not used and has no function.  For defining constants in Java, see the   keyword.
 * Although reserved as a keyword in Java,  is not used and has no function.  For defining constants in Java, see the   keyword.


 * Although reserved as a keyword in Java,  is not used and has no function.
 * Although reserved as a keyword in Java,  is not used and has no function.


 * (added in J2SE 1.2)
 * Although reserved as a keyword in Java,  is obsolete, and no longer has any function. Previously this keyword was used to restrict the precision and rounding of floating point calculations to ensure portability.