`

静态变量、静态块与变量自增代码分析

    博客分类:
  • J2SE
阅读更多
java 代码
  1. /***********************************************************************  
  2.  * Module:  Static.java  
  3.  * Author:  danlley  
  4.  * Modified: 2006年7月27日 13:11:21  
  5.  * Purpose: Defines the class Static  
  6.  ***********************************************************************/  
  7.   
  8. public class Static{   
  9.       static{   
  10.           int x = 5;   
  11.       }   
  12.   
  13.       static int x,y;   
  14.   
  15.       public static void main(String args[]){   
  16.             x--;   
  17.             myMethod();   
  18.             System.out.println(x + y + ++x);   
  19.       }   
  20.   
  21.       public static void myMethod(){   
  22.             y = x++ + ++x;   
  23.       }   
  24. }   
==============================================
---------- Java ----------
3

输出完成 (耗时: 0 秒) - 正常终止
==============================================
分析如下:
首先,是静态变量与静态块的执行顺序问题。接下来才是变量作用域与全局变量之间的关系问题。我不知道是否有人会怀疑变量重复定义的问题。毫无疑问,这段程序是完全可以跑通的。静态块中定义的变量只会在他的作用域范围内部有效。而且只要是重新定义的,就不会受全局变量的影响。也就是说,main方法中的x--仅仅是针对全局变量的。由于Java会将该变量初始化,此时,i--=0,但是在你下次用到 i 时,其值已经变为-1。接下来就是给 y 赋值。同理 x++ 的值应该是 -1 。但是在下次使用 i 时,其值已经变为 0 了。而对“0”累加的结果就是“1”,因此,y的值也是“0”。由此推断,最后结果为“3”。

分享到:
评论

相关推荐

    [面试/笔试系列3]局部变量能否和全局变量重名

    ### 静态变量与普通变量的区别 #### 静态全局变量与普通全局变量 - **存储方式:** 两者均为静态存储方式。 - **作用域:** - 普通全局变量在整个源程序中有效。 - 静态全局变量仅在其定义的源文件内有效。 - **...

    Chap3 类型和变量1

    静态变量(如全局变量和用static修饰的局部变量)在程序执行期间保持其值,而自动变量(通常是局部变量)在块结束时丢失其值。静态变量在程序开始时初始化为0,而自动变量默认不初始化,可能含有未知值。 在编程...

    试题 程序类

    2. 静态变量与静态块(Static Variables and Blocks) 静态变量在类加载时初始化为它们的默认值,对于`int`类型是0。静态块在类被加载到内存时执行一次。在给定的代码中,`Static`类有两个静态变量`x`和`y`,它们在...

    java中static用法

    它被广泛应用于多种场景中,包括定义静态变量、静态方法、静态代码块以及静态内部类等。通过使用`static`,开发者能够实现资源的有效管理和复用,提高程序的运行效率及可维护性。 #### 二、静态变量 ##### 2.1 ...

    java语言程序设计(一)第三章补充.pdf

    `static`块则提供了一种在类加载时执行初始化代码的机制,通常用于设置静态变量的初始值或执行其他类级别的初始化操作。在实际编程中,合理地使用这些概念可以优化程序结构,提高代码的可读性和效率。

    PHPCMS常用标签及变量

    **系统常量与全局变量** 1. **CACHE_PATH**: 这个常量定义了缓存文件的存储路径,用于存放系统生成的缓存文件,提高网站性能。 2. **SITE_PROTOCOL**: 表示主机的协议,如 HTTP 或 HTTPS,用于构建完整的URL。 3. *...

    C语言面试题目汇总(基础知识)

    全局变量和静态变量存储在静态区,生命周期贯穿整个程序运行;动态申请的数据存储在堆中,需要程序员手动释放。 7. **结构体与联合体的区别**:结构体内的成员各自占用独立的空间,而联合体内的所有成员共享同一块...

    面试编程题及答案完整版

    - 全局变量和静态变量存储在静态区,程序结束后才释放。 - 动态申请的数据(如`malloc`分配的内存)存储在堆中,需要程序员手动释放。 7. **结构体与联合体**: - `struct`和`union`的区别在于,结构体成员各自...

    2009 最新java面试题

    - 局部变量:在方法或代码块内部定义,只在其所在的作用域内有效。同名的局部变量可以在不同作用域内定义。 - 全局变量:在整个程序范围内都有效。全局变量可以在所有文件中访问,但静态全局变量只在其定义的...

    scjp试题

    从给定的文件信息中,我们可以提取到两个与Java编程语言相关的知识点,分别涉及断言(assert)的使用以及静态变量和表达式的处理。 ### 断言(Assert)的使用 断言是Java中用于调试代码的一种机制,它允许开发者在...

    软通动力C笔试题

    6. **静态变量与非静态变量的区别:** - **概念:** - 非静态变量:默认情况下定义的变量。 - 静态变量:使用`static`关键字定义的变量。 - **区别:** - 非静态变量:每次函数调用时都会重新分配内存空间,且...

    c语言经典面试题

    - 全局变量和静态变量存储在静态区,它们在整个程序运行期间都存在。 - 动态申请的数据(如通过`malloc`或`calloc`)存储在堆中,需要程序员手动释放。 7. **结构体与联合体的区别**: - `struct`中的成员各自...

    《 C语言面试题大汇总》题集.doc

    - 静态局部变量与普通局部变量的区别在于生命周期,静态局部变量在整个函数调用期间保持其值,而普通局部变量每次函数调用都会重新初始化。 - 静态函数与普通函数的区别在于作用域,静态函数只在其定义的源文件内...

    自测试卷5.doc1.简述C#、Java和C++的比较。 2.已知变量x的初值为24,则表达式x+=x--+=x%=17运算的结果值为( )。

    静态变量共享同一内存空间,所有实例共用;静态方法不能访问非静态成员,不改变实例状态。 7. **using和new的区别** using关键字常用于导入命名空间或在代码块内创建临时对象并自动处理其 Dispose 方法。new ...

    《编写高质量代码:改善Java程序的151个建议》笔记

    - 静态变量在类初始化时加载,JVM会按照声明顺序分配内存,并按初始化顺序进行赋值。 3. **实例对象的类型** - 实例对象具有表面类型和实际类型。表面类型指声明类型,实际类型指对象的类。 - 对于非静态方法,...

    C语言笔试题及参考答案-东软集团

    局部变量的作用域仅限于声明它的函数或代码块,而全局变量在整个程序范围内可见。 2. **引用已定义的全局变量** - 使用`extern`关键字可以引用其他文件中定义的全局变量,这使得变量可以在多个文件间共享。这种...

    C语言经典笔试题(大部分题目有答案)

    - **静态变量(static)**:静态全局变量只在定义它的源文件内有效,避免了在其他源文件中的误用。静态局部变量只初始化一次,每次函数调用时保留其上次的值。 2. **循环结构** - **for循环**:如`for(;1;)`等同...

Global site tag (gtag.js) - Google Analytics