`
冇心人
  • 浏览: 55306 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java常见笔试面试题目解析(三): Java中的静态变量的执行顺序

阅读更多
public class StaticVariableTest {  
    private static StaticVariableTest svt = new StaticVariableTest();//语句(1)  
    private static int count1;//语句(2)  
    private static int count2 = 0;//语句(3)  
      
    private StaticVariableTest(){//语句(4)  
        count1++;  
        count2++;  
    }  
    public static StaticVariableTest getInstance(){//语句(5)  
        return svt;  
    }  
    public static int getCount1() {  
        return count1;  
    }  
    public static void setCount1(int count1) {  
        StaticVariableTest.count1 = count1;  
    }  
    public static int getCount2() {  
        return count2;  
    }  
    public static void setCount2(int count2) {  
        StaticVariableTest.count2 = count2;  
    }  
    public static void main(String[] args) {  
        StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)  
        System.out.println("count1:" + svt.getCount1());//语句(7)  
        System.out.println("count1:" + svt.getCount2());//语句(8)  
    }  
}  
public class StaticVariableTest {
 private static StaticVariableTest svt = new StaticVariableTest();//语句(1)
 private static int count1;//语句(2)
 private static int count2 = 0;//语句(3)
 
 private StaticVariableTest(){//语句(4)
  count1++;
  count2++;
 }
 public static StaticVariableTest getInstance(){//语句(5)
  return svt;
 }
 public static int getCount1() {
  return count1;
 }
 public static void setCount1(int count1) {
  StaticVariableTest.count1 = count1;
 }
 public static int getCount2() {
  return count2;
 }
 public static void setCount2(int count2) {
  StaticVariableTest.count2 = count2;
 }
 public static void main(String[] args) {
  StaticVariableTest svt = StaticVariableTest.getInstance();//语句(6)
  System.out.println("count1:" + svt.getCount1());//语句(7)
  System.out.println("count1:" + svt.getCount2());//语句(8)
 }
}

问题:当执行完语句(7)(8)时,打印结果分别是什么?为什么?
解答:当执行完语句(7)时,打印结果是1,当执行完语句(8)时,打印结果是0。分析:程序执行从main方法开始,首先执行语句(6),调用 getInstance方法,然而当它去调用这个方法的时候,它是一个静态的方法,在这个类里面定义了多个静态的成员变量。根据java初始化的顺序我们知道,对于静态的内容肯定是先执行的,也就是说在执行getInstance方法之前,肯定先执行private static StaticVariableTest svt = new StaticVariableTest();而且它是从上到下分别执行静态的内容。换句话说,这个程序首先执行private static StaticVariableTest svt = new StaticVariableTest();而这里面又要调用一个构造方法StaticVariableTest(),则去执行这个构造方法 private StaticVariableTest(),执行这个构造方法时发现它里面的功能是将count1加1,将count2加1,而这个count1和 count2是我们定义的int类型的静态变量。根据java对成员变量的默认值,count1和count2初始化的时候都被设置为0,当执行完构造方法后count1和 count2都等于1,这时StaticVariableTest这个对象就生成了,已经在内存里面存在了。接着赋给svt这个引用。那么svt这个引用指向的StaticVariableTest类型的对象,它里面的count1是1,count2也是1。接着发现下面一行private static int count1;它是一个静态的,那么它要执行这行代码,这行代码只是一个声明,但是没有赋值,接着它就跳过这行不再赋值了(究其原因是因为count1已经被赋值了,已经被加1了,也就是count1为1)。当我执行private static int count2 = 0;时发现count2也是一个静态变量,而且有一个显示的去赋值的这样一个动作。我们知道count2已经被赋值1了,但是这儿有一个显示的赋值的动作,就把count2的值由1改变成了0。这个就是调用getInstance方法时程序的执行流程:语句(6)、语句(5)、语句(1)、语句(4)、语句(2)、语句(3)

思考:如果将语句(2)和语句(3)放在语句(1)前面,当执行完语句(7)时,打印结果是1,当执行完语句(8)时,打印结果是1,想想是为什么?  

总结:静态变量的执行顺序是按照它们定义在类里面的先后顺序,按照从上到下来执行的。
分享到:
评论

相关推荐

    java程序员经典笔试面试题汇总

    ### Java程序员经典笔试面试题汇总知识点解析 #### 一、程序执行顺序与静态变量初始化 **题目背景**:本题目旨在考察Java程序中类的加载过程以及不同成员(如静态变量、非静态变量等)的初始化顺序。 **题目示例*...

    Java笔试面试题及答案解析(一)

    ### Java笔试面试题及答案解析知识点 #### 1. 整型溢出与浮点数特殊值 **问题1:** 存在使`i+1 的数吗? **答案:** 存在。 **解析:** 如果变量`i`为`int`类型,那么当`i`取`int`所能表示的最大整数值时(即`...

    Java面试笔试机试题大汇总

    文档提到了Java中类初始化的顺序问题,这是面试中常见的考察点之一。在Java中,类的初始化顺序涉及到静态变量、非静态变量、构造函数等多个方面。例如: - 类中的静态变量和静态代码块会首先被加载和执行。 - ...

    125条常见的java面试笔试题大汇总(5)

    ### 125条常见的Java面试笔试题大汇总(5)知识点详解 #### 101、Java中是否存在内存泄漏? - **知识点说明**:在Java中确实可能存在内存泄漏的情况,尽管这种现象不像C/C++那样普遍。内存泄漏通常发生在不再使用的...

    java笔试题集(java基础,JAVAEE,JAVASE,21种设计模式)

    ### Java笔试题集知识点解析 #### 一、Java标识符规则 **题目**: 选择下列选项中的有效标识符(选择三项)。 - A. IDoLikeTheLongNameClass - B. $byte - C. const - D. _ok - E. 3_case **答案**: ABD **解析**:...

    java面试笔试题整合

    Java面试和笔试题是评估求职者技能的重要工具,下面是对几个关键知识点的详细解析: 1. **final, finally, finalize的区别** - **final**:final关键字用于声明类、方法或变量不可变。对于类,它禁止继承;对于...

    Java面试题以及答案整理.pdf

    为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...

    我面试时做过的JAVA笔试题目

    Java编程语言中的关键字和特性是面试中常见...以上就是Java面试中常见的知识点解析,它们涵盖了语言基础、异常处理、集合框架、多线程、内存管理等多个方面。了解并掌握这些概念对于成为一名优秀的Java程序员至关重要。

    径点笔试面试

    本资源摘要信息将对径点笔试面试 JAVA 部分笔试题进行详细解析,并对每道题目进行逐一解释。 1. 覆盖与重载: 覆盖和重载是面向对象编程中两个重要的概念。覆盖是指子类提供一个与父类同名、同参、同返回值类型的...

    应聘Java笔试时可能出现问题及其答案.doc

    Java笔试是求职过程中常见的一环,对于Java程序员来说,掌握扎实的基础知识至关重要。本文将针对题目中提及的一些Java基础知识进行详细解析。 1. **访问修饰符的区别** - `public`:任何地方都能访问。 - `...

    java面试笔试题大汇总

    Java面试和笔试题涵盖了许多核心概念,以下是针对这些题目中涉及的Java知识点的详细解析: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明不可变对象、变量或方法,确保其值在初始化后无法...

    笔试型_J2EE初级技术面试题目

    ### 笔试型_J2EE初级技术面试题目详解 #### 1. Classpath与path的使用 Classpath和path是Java开发中常见的环境变量,它们分别用于指定Java编译器和运行时查找类库和可执行文件的路径。Classpath主要用于指向.class...

    100家大公司java笔试题汇总

    Java静态变量与非静态方法的理解 - **知识点概述**: - 静态变量与非静态方法的区别及使用场景。 - 编译错误的原因分析。 - **详细解析**: - **代码分析**: - **变量定义**:`static int i = 0;` 定义了一...

    java经典笔试题--IT公司招聘时经常出的题目

    这些知识点涵盖了Java编程的基础概念,如访问修饰符、内部类、运算符、集合框架、异常处理、方法重载和重写等,是Java笔试和面试中常见的问题。理解和掌握这些内容对于成为一名合格的Java开发者至关重要。

    JAVA笔试题精华版3.0

    ### JAVA笔试题精华版知识点解析 #### 一、Float 类型的 SIZE 属性 - **题目背景**: 在给出的示例代码中,通过创建 `Float` 对象并尝试访问其 `SIZE` 属性来理解 `Float` 类的一些基本概念。 - **核心知识点**: - ...

    长春径点科技笔试,一面,二面题

    11. **Java基础知识**:静态变量的访问权限、接口与抽象类的对比,Java的一些基本概念,如数组、集合框架等。 12. **面试问题**:面试官可能会根据你的回答深入提问,例如List的区别、Hibernate的数据库连接原理、...

    北京高阳捷迅信息技术有限公司Java笔试题

    同时,排序算法(如冒泡排序、插入排序、快速排序、归并排序等)和查找算法(如顺序查找、二分查找等)也是笔试中常见的题目。 4. **多线程**:Java提供了强大的多线程支持,包括Thread类和Runnable接口。面试中...

    01-JAVA岗位笔试题(A卷)附答案

    ### Java岗位笔试题知识点解析 #### 一、线程池(ThreadPoolExecutor)的7个核心参数 线程池是Java并发编程中一个重要的工具类,它可以帮助开发者更好地管理线程资源,提高系统的响应速度和吞吐量。`...

    java笔试题

    在执行`main`方法时,静态变量`x`先被初始化为5,然后在`myMethod`中,`x--`和`x++`的顺序会影响结果。由于预增量操作符`++`优先级高于后增量操作符,所以`x++`先执行,`y`被赋值为6,然后`++x`使得`x`变为7。最终...

    大量计算机专业笔试面试题

    【计算机专业笔试面试题】是计算机领域中求职者在应聘时常常遇到的一种考核形式,涵盖了C、Java等编程语言的基础知识、数据结构、算法、操作系统、网络等多个方面。以下是根据提供的部分内容,对相关知识点的详细...

Global site tag (gtag.js) - Google Analytics