标题:Java static关键字(总结)
取消只看楼主
反脑控2016
Rank: 4
等 级:业余侠客
威 望:2
帖 子:108
专家分:212
注 册:2016-9-2
结帖率:100%
 问题点数:0 回复次数:0 
Java static关键字(总结)
类的成员可以用static修饰符修饰而成为静态成员。静态成员不是对象范畴,而是类范畴。
只要类被加载,其静态数据成员就会被分配内存并初始化,并且只分配一次。如果生成此类及其子类的对象,所有对象共享这块内存。
静态方法不能被非静态方法覆盖
构造方法不允许声明为 static 的
局部变量不能使用static修饰
静态数据成员的访问
public class Demo {
    public static void main(String[] args) {
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
        A a=new A();a.show();A.static_show();a.print(99);A.static_print(99);
        B b=new B();b.show();B.static_show();b.print(99);B.static_print(99);
        C c=new C();c.show();C.static_show();c.print(99);C.static_print(99);
    }
}
class A{
    static int i;//这是所要访问的静态数据成员
    void show(){
        System.out.println("i="+i);
        System.out.println("i="+this.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_show(){
        System.out.println("i="+i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    void print(int i){
        System.out.println("i="+this.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_print(int i){
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
}
class B extends A{
    void show(){
        System.out.println("i="+i);
        System.out.println("i="+this.i);System.out.println("i="+super.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_show(){
        System.out.println("i="+i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    void print(int i){
        System.out.println("i="+this.i);System.out.println("i="+super.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_print(int i){
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
}
class C extends A{
    static int i=9;
    void show(){
        System.out.println("i="+super.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_show(){
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    void print(int i){
        System.out.println("i="+super.i);
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
    static void static_print(int i){
        System.out.println("i="+A.i);System.out.println("i="+B.i);
        System.out.println("i="+new A().i);System.out.println("i="+new B().i);
    }
}
静态函数成员的访问
public class Demo {
    public static void main(String[] args) {
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();
        A a=new A();a.method();a.static_method();
        B b=new B();b.method();b.static_method();
        C c=new C();c.method();c.static_method();
    }
}
class A{
    static void callMe(){System.out.println("callMe is called!");}//这是所要访问的静态方法
    void method(){
        callMe();
        this.callMe();
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();
    }
    static void static_method(){
        callMe();
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();
    }
}
class B extends A{
    void method(){
        callMe();
        this.callMe();super.callMe();
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();
    }
    static void static_method(){
        callMe();
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();     
    }
}
class C extends A{
    static void callMe(){System.out.println("这个函数被调用!");}
    void method(){
        super.callMe();
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();
    }
    static void static_method(){
        A.callMe();B.callMe();
        new A().callMe();new B().callMe();     
    }
}
静态块
块是由大括号包围的一段代码,用static修饰的块称静态块,也称静态初始器(Static Initializer)。它存在于类中并且方法外面。
程序中的类只有在第一次被使用的时候才会被加载,并且只会被加载一次。静态块是类的一部分,它会随类的加载而执行,由于类只加载一次,所以它也会只执行一次。
静态块的执行往往用来初始化静态变量。
public class Demo {
    public static int i;
    static{
        i = 10;
        System.out.println("Now in static block.");
    }
    public void test() {
        System.out.println("test method: i=" + i);
    }
    public static void main(String[] args) {
        System.out.println("Demo.i=" + Demo.i);
        new Demo().test();
    }
}
程序输出:
Now in static block.
Demo.i=10
test method: i=10
静态导入
这是Java 5的新增特性,用来导入类的静态变量和静态方法。
一般我们导入类可以写:
import packageName.className;  // 导入包中特定的类
import packageName.*;  // 导入包中所有类
而静态导入可以这样写:
import static packageName.className.methodName;  // 导入特定的静态方法
import static packageName.className.*;  // 导入类中所有静态成员
导入后,可以在当前类中直接用方法名调用静态方法,不必再用 className.methodName 来访问。
对于频繁使用的静态变量和静态方法,可以将其静态导入。静态导入的好处是可以简化书写,例如输出语句 System.out.println(); 中的 out 就是 System 类的静态变量,可以通过 import static java.lang.System.*; 将其导入,下次直接调用 out.println() 就可以了。
import static java.lang.System.*;
import static java.lang.Math.random;
public class Demo {
    public static void main(String[] args) {
        out.println("产生的一个随机数:" + random());
    }
}
搜索更多相关主题的帖子: Java 关键字 public 
2016-09-30 14:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-469355-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083371 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved