Java Tutorial/Class Definition/static Member
Содержание
- 1 Define the static member
- 2 Demonstrates Static nested Classes
- 3 Demonstrate static variables, methods, and blocks.
- 4 Initializer for final static field
- 5 Inside main( ), the static method callme( ) and the static variable b are accessed outside of their class.
- 6 Reference inner static class
- 7 reference static field after declaration
- 8 Static field, constructor and exception
- 9 Static Members
- 10 static section Initializer and logic
- 11 static section of Initializer
Define the static member
- You can use the keyword static in front of a field or method declaration.
- The static keyword may come before or after the access modifier.
These two are correct:
<source lang="java">
public static int a; static public int b;</source>
- From inside a static method, you cannot call instance methods or instance fields because they only exist after you create an object.
- You can access other static methods or fields from a static method.
- You can only declare a static variable in a class level.
- You cannot declare local static variables even if the method is static.
Demonstrates Static nested Classes
<source lang="java">
/*
* file: StaticNestedClassDemo.java * package: oreilly.hcj.nested * * This software is granted under the terms of the Common Public License, * CPL, which may be found at the following URL: * http://www-124.ibm.ru/developerworks/oss/CPLv1.0.htm * * Copyright(c) 2003-2005 by the authors indicated in the @author tags. * All Rights are Reserved by the various authors. * ########## DO NOT EDIT ABOVE THIS LINE ########## */
/**
* Demonstrates Static nested Classes. * * @author * @version $Revision: 1.5 $ */ private static class SomeOtherClass { /** * a demo method. */ public void someMethod() { System.out.println("Protect me!"); } }
} /* ########## End of File ########## */</source>
Demonstrate static variables, methods, and blocks.
<source lang="java">
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); }
}</source>
Initializer for final static field
<source lang="java">
public class ClassInitializer7 {
final static int classField; static { classField = 29; } public static void main (String [] args) { System.out.println (classField); }
}</source>
Inside main( ), the static method callme( ) and the static variable b are accessed outside of their class.
<source lang="java">
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); }
}</source>
Reference inner static class
<source lang="java">
class MyClassesDemo {
public static void main(String[] args) { MyClass tlc = new MyClass(); MyClass.NestedMyClass ntlc; ntlc = new MyClass.NestedMyClass(); }
} class MyClass {
private int i; private static String name = "MyClass"; { System.out.println("Assigning 1 to i"); i = 1; } static class NestedMyClass { int j; { System.out.println("Assigning 2 to j"); j = 2; System.out.println(name); } }
}</source>
reference static field after declaration
<source lang="java">
public class ClassInitializer3 {
static int classField1 = 1; static int classField2 = 1 + classField1; public static void main(String[] args) { System.out.println(classField1); System.out.println(classField2); }
}</source>
Static field, constructor and exception
<source lang="java">
public class Main {
static Bar bar; static { try { bar = new Bar(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] argv) { System.out.println(bar); }
} class Bar {
public Bar() throws Exception { } public String toString() { return "Bar"; }
}</source>
Static Members
- Static members are not tied to class instances.
- Static members can be called without having an instance.
The out field in java.lang.System is static.
<source lang="java">
public class MainClass {
public static void main() { System.out.println("123"); }
}</source>
the method main(the entry point to a class) is static because it must be called before any object is created.
static section Initializer and logic
<source lang="java">
public class ClassInitializer6 {
static int classField = 3; static { System.out.println(" : " + classField); classField = 1; for (int i = 2; i < 6; i++) classField *= i; } static { System.out.println(" = " + classField); } public static void main(String[] args) { System.out.println(classField); }
}</source>
static section of Initializer
<source lang="java">
public class ClassInitializer5 {
static String tz; static { java.util.Properties p = System.getProperties(); p.list(System.out); tz = p.getProperty("user.timezone"); if (tz.equals("")) tz = "Default"; } public static void main(String[] args) { System.out.println("timezone = " + tz); }
}</source>