Java allows variables to be declared within any block. Scope and Lifetime of variable is determined how and where those variable is defined.
· In Java, the two major scopes are those defined by a class and those defined by a method.
· a block is begun with an opening curly brace and ended by a closing curly brace. A block defines a scope. Thus, each time you start a new block, you are creating a new scope. As cope determines what objects are visible to other parts of your program, it also determines the lifetime of those objects.
· variables defined inside scope can't be accessed outside the scope of that variable
· Thus, when you declare a variable within a scope, you are localizing that variable and protecting it from unauthorized access and/or modification.
· Indeed, the scope rules provide the foundation for encapsulation.
To understand the effect of nested scopes, consider the following program:
// Demonstrate block scope. class Scope { public static void main(String args[]) { int x; // known to all code within //main x = 10; if(x == 10) { // start new scope int y = 20; // known only to this // block // x and y both known here. System.out.println("x and y: " + x + " " + y); x = y * 2; } // y = 100; // Error! y not known here // x is still known here. System.out.println("x is " + x); } }
The output is
x and y: 10 20 x is 40
· Here is another important point to remember: variables are created when their scope is entered, and destroyed when their scope is left. This means that a variable will not hold its value once it has gone out of scope.
· Also, a variable declared within a block will lose its value when the block is left. Thus, the lifetime of a variable is confined to its scope.
· If a variable declaration includes an initializer, then that variable will be reinitialized each time the block in which it is declared is entered.
For example, consider the next program.
// Demonstrate lifetime of a variable. class LifeTime { public static void main(String args[]) { int x; for(x = 0; x < 3; x++) { int y = -1; // y is initialized //each time block is entered System.out.println("y is: " + y); // this always prints -1 y = 100; System.out.println("y is now: " + y); } } }
The output generated by this program is shown here:
y is: -1 y is now: 100 y is: -1 y is now: 100 y is: -1 y is now: 100