Java supports the use of various types of literals, such as integers (5, 2), floating point numbers (2.5, 6.022e+23), characters ('a', '\n'), booleans ('true', 'false'), and strings ("Hello\n"). Extensive use of literals within a program can lead to two problems: first, the meaning of the literal is often obscured or unclear from the context (from which they derive the name "magic numbers"), and second, changing a frequently-used literal requires the entire program source code to be searched for occurances of that literal, creating possible error sources if some of the occurances of the literal are overlooked.
A solution to this problem is to declare meaningfully-named constants at the start of the program whose values are set equal to the desired literals, and to refrence these constants rather than the literals themselves throughout the program. The advantages to this approach are that the constant's name can indicate the meaning or intended use of the constant, and should the constant need to be changed, this can be accomplished simply by editing the constant declaration without having to search the code for all uses of it.
final
The final
keyword in Java is used to declare constants. Its effect is to render the affected variable immutable. Attempting to change the value of a final
-qualified variable results in a compile-time error.
The following code fragment demonstrates its use:
final int SIZE=25;
This code declares the value SIZE to be of type int and to have the immutable value 25. This constant can subsequently be used whenever the value 25 would be needed.
Noncompliant Code Example
LDAP *ld = ldap_init("localhost", 1234);
Compliant Solution
In this compliant solution, the host name and port number are both defined as object-like macros, so that may be passed as compile-time arguments.
#ifndef PORTNUMBER /* might be passed on compile line */ }