Understanding
static
There
will be times when you will want to define a class member that will be used
independently of any object of that class. Normally, a class member must be
accessed only in conjunction with an object of its class. However, it is possible
to create a member that can be used by itself, without reference to a specific
instance. To create such a member, precede its declaration with the keyword static. When a member is declared static, it can be accessed
before any objects of its
class are created, and without reference to any object. You can declare both
methods and variables to be static.
The most common example of a static
member is main( ). main( ) is declared as static because it must be called
before any objects exist.
Instance
variables declared as static are,
essentially, global variables. When objects of its class are declared, no copy
of a static variable is made.
Instead, all instances of the class share the same static variable.
Methods declared as static have several restrictions:
They can only directly call other static methods.
They can only directly access static
data.
They cannot refer to this
or super in any way. (The keyword super relates to inheritance and is
described in the next chapter.)
If you need to do computation
in order to initialize your static
variables, you can declare a static
block that gets executed exactly once, when the class is first loaded. The
following example shows a class that has a static
method, some static variables, and a
static initialization block:
// Demonstrate static variables, methods, and blocks.
class UseStatic {
static int a = 3; static int
b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void
main(String args[]) { meth(42);
}
}
As soon as the UseStatic class is loaded, all of the static statements are run. First, a is set to 3, then the static block
executes, which prints a message and then initializes b to a*4 or 12. Then main( ) is called, which calls meth(
), passing 42 to x. The three println( ) statements refer to the two static variables a and b, as well as to the local variable x.
Here is the output of the program:
Static block initialized. x =
42
a = 3 b = 12
Outside
of the class in which they are defined, static
methods and variables can be used independently of any object. To do so, you
need only specify the name of their class followed by the dot operator. For
example, if you wish to call a static
method from outside its class, you can do so using the following general form:
classname.method( )
Here, classname is the name of the class in
which the static method is declared.
As you can see, this format is similar to that used to call non-static methods through object-reference
variables. A static variable can be
accessed in the same way—by use of the dot operator on the name of the class.
This is how Java implements a controlled version of global methods and global
variables.
Here is an example. Inside main( ), the static method callme( )
and the static variable b are accessed through their class name
StaticDemo.
class StaticDemo {
static int
a = 42; static int b = 99;
static void callme() {
System.out.println("a = " + a);
}
}
class StaticByName {
public static void
main(String args[]) { StaticDemo.callme();
System.out.println("b = " +
StaticDemo.b);
}
}
Here is the output of this
program:
a = 42
b = 99
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.