zoukankan      html  css  js  c++  java
  • java中static的用法

    static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。拿以下程序为例

    class Value{
    static int c=0;
    Value(){
    c=15;
    }
    Value(int i){
    c=i;
    }
    static void inc(){
    c++;
    }
    }
    class Count{
    public static void prt(String s){
    System.out.println(s);
    }
    Value v=new Value(10);
    static Value v1,v2;
    static{
    prt("v1.c="+v1.c+" v2.c="+v2.c);
    v1=new Value(27);
    prt("v1.c="+v1.c+" v2.c="+v2.c);
    v2=new Value(15);
    prt("v1.c="+v1.c+" v2.c="+v2.c);
    }

    public static void main(String[] args){
    Count ct=new Count();
    prt("ct.c="+ct.v.c);
    prt("v1.c="+v1.c+" v2.c="+v2.c);
    v1.inc();
    prt("v1.c="+v1.c+" v2.c="+v2.c);
    prt("ct.c="+ct.v.c);
    }
    }

    运行结果如下:

    v1.c=0 v2.c=0
    v1.c=27 v2.c=27
    v1.c=15 v2.c=15
    ct.c=10
    v1.c=10 v2.c=10
    v1.c=11 v2.c=11
    ct.c=11

    这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。
  • 相关阅读:
    C++ 类
    百练3383:Cell Phone Network
    百练4092:牛仔裤
    百练4091:最近餐馆
    百练4090:超级备忘录
    百练2868:牛顿迭代
    百练2812:恼人的青蛙
    百练2805:正方形
    bzoj1856 [Scoi2010]字符串
    bzoj2096 [Poi2010]Pilots
  • 原文地址:https://www.cnblogs.com/yigerendehaibian/p/2777413.html
Copyright © 2011-2022 走看看