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=0v1.c=27  v2.c=27v1.c=15  v2.c=15ct.c=10v1.c=10  v2.c=10v1.c=11  v2.c=11ct.c=11

  这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。

转载于:https://www.cnblogs.com/yigerendehaibian/archive/2012/11/19/2777413.html

java中static的用法相关推荐

  1. java中static的用法_Java类中static的用法

    关于Java中static的使用有以下四种情况: 1.静态成员变量        被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是: 静态 ...

  2. Java中static final用法小结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  3. Java中static的含义和用法

    Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...

  4. Java中static的作用

    Java中static的作用 请先看下面这段程序: public class Hello{ public static void main(String[] args){ //(1) System.o ...

  5. java中substring的用法

    2019独角兽企业重金招聘Python工程师标准>>> java中substring的用法 str=str.substring(int beginIndex);截取掉str从首字母起 ...

  6. php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于Java中SimpleDateFormat的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么要使用SimpleDateFo ...

  7. java中native的用法

    java中native的用法前言:在查看 Thread.java 文件时,发现有一个 方法比较特殊 private native void start0();概念:native关键字说明其修饰的方法是 ...

  8. day9:JAVA中while的用法

    一.while循环 while循环是先判断条件是否为真,如果条件为真,则执行循环体. 语句形式: while( 循环条件 ){ 一条语句 / 多条语句 ( 循环体 ) } 二.do-while循环 d ...

  9. Java 中 switch 的用法

    Java 中 switch 的用法 1.switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2 ...

最新文章

  1. union 和 union all 有什么不同?
  2. RAML用户应遵循的C#与Web API代码生成模式
  3. MySQL timediff()函数
  4. oracle:触发器,自治事务,instead of trigger,trigger
  5. 如何使用电脑将png转ico格式?赶快跟着小编学起来
  6. 开启和关闭android移动网络
  7. [转]window xp IIS的配置(1)
  8. C++统计代码执行耗时
  9. 一名3年工作经验的程序员应该具备的技能 !
  10. 动态规划算法学习(一)爬楼梯和凑金额
  11. 简要介绍下tensorflow的计算图
  12. asp.net大学生学科竞赛报名及管理系统
  13. 【Vue项目笔记心得】Swiper插件用于轮播图
  14. sEMG项目总结(1)灵巧手控制系统
  15. 机器视觉检测由2D向3D迈进
  16. Robust face recognition via sparse representation[J]. Pattern Analysis and Machine Intelligence 论文翻译
  17. 解决uc数据互通问题
  18. 天河二号编译openfoam2006+petsc
  19. 华为任正非:从两万到千亿的创业故事
  20. 短视频平台搭建,移动端商品下单、购买过程的实现

热门文章

  1. mongoose 笔记
  2. spring-beans模块分析
  3. jquery--- 属性和样式的操作 设置和获取HTML、文本和值、焦点事件
  4. 导出数据生成excel
  5. jQuery Validate 验证,校验规则写在控件中的具体例子
  6. mybatis中的#{value}和${value}的区别
  7. 微软2008系列 (Orcas + Longhorn Server+SQL2008)将于2008年2月27日发布
  8. kernel mtd 分区与UBOOT 分区的理解
  9. C++利用SOCKET传送文件
  10. CMOS图像传感器——图像传感器噪声