Chapter 5, " Methods ," discussed local variables and their scope rules. Local variables are declared and used inside a method locally. This section discusses the scope rules of all the variables in the context of a class.
Instance and static variables in a class are referred to as the class's variables or data fields . A variable defined inside a method is referred to as a local variable. The scope of a class's variables is the entire class, regardless of where the variables are declared. A class's variables and methods can be declared in any order in the class, as shown in Figure 7.18(a). The exception is when a data field is initialized based on a reference to another data field. In such cases, the other data field must be declared first, as shown in Figure 7.18(b).
You can declare a class's variable only once, but you can declare the same variable name in a method many times in different non-nesting blocks.
If a local variable has the same name as a class's variable, the local variable takes precedence and the class's variable with the same name is hidden. For example, in the following program, x is defined as an instance variable and as a local variable in the method.
class Foo { int x = ; // instance variable int y = ; Foo() { } void p() { int x = 1 ; // local variable System.out.println( "x = " + x); System.out.println( "y = " + y); } }
What is the printout for f.p() , where f is an instance of Foo ? The printout for f.p() is 1 for x and for y . Here is why:
x is declared as a data field with the initial value of in the class, but is also defined in the method p() with an initial value of 1 . The latter x is referenced in the System.out.println statement.
y is declared outside the method p() , but is accessible inside it.
Tip
As demonstrated in the example, it is easy to make mistakes. To avoid confusion, do not declare the same variable name twice in a class, except for method parameters. |