静态变量是有顺序的!

有人问过我,下面这个打印结果为什么是0
public class MyClass
{
 private static int x = getValue();
 private static int y = 5;
 private static int getValue()
 { 
  return y;
 } 
 public static void main(String args[])
 {
  System.out.println(x);
 } 

在执行x初始化的时候,这个时候y并没有初始化 。

开始的时候x和y不都是静态变量吗?那不是一开始就要加载进静态代码区的吗?

         如果你对JVM很了解,你会知道当JVM执行class类的时候,会先初始化成员变量,执行顺序为从上向下执行,所以会先初始化X,当初始化X的时候,发现调用了getValue()方法,而这个时候y其实是没有初始化的,所以这个时候会返回一个0
所以证明:静态变量也有顺序的!

时间: 2024-10-08 21:42:19

静态变量是有顺序的!的相关文章

C++成员变量的初始化顺序问题

问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下,   [cpp] view plaincopyprint?   class A   {   private:       int n1;       int n2;          public:       A():n2(0),n1(n2+2){}          void Print(){           cout << "n1:" << n1 << ", n

static-多个包含静态变量类的加载顺序???

问题描述 多个包含静态变量类的加载顺序??? 有三个类,SingletonCounter.Test.Singleton,里面都包含了静态变量,SingletonCounter.Test结构差不多,Singleton包含了静态构造函数,静态属性等,将三个类的行都打上断点(需要断点的行有注释--加断点调试),当调试的时候,为什么总是最后执行到SingletonCounter的静态变量instance上??? 测试了很多,和Singleton类的静态构造函数有关,望指点一二,谢谢!!! using S

java-JAVA中类的实例变量和静态变量的赋值

问题描述 JAVA中类的实例变量和静态变量的赋值 学完了面向对象,回头看项目的时候在这个地方有些不太透,对于类的实例变量和静态变量如何赋值和访问及修改(所描述的赋值访问及修改可能用词不准确,恳请指正)谢谢!!! 解决方案 楼主亲,你可以通过这样的方式去理解静态变量和实例变量:(1)静态变量也称为类变量,语法上面用static修饰,这样的变量在JVM(Java虚拟机)将类加载进去的时候就和类一起被分配了内存,这个时候就已经可以使用了,而不需要等到创建类的实例后才能使用.这类变量可以直接通过"类名.

浅谈Java变量的初始化顺序详解_java

规则1(无继承情况下):对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器证明代码: 复制代码 代码如下: public class InitialOrderTest {    // 静态变量    public static String staticField = "静态变量";    // 变量    public String field = "变量";    // 静

java-关于静态变量的一段代码

问题描述 关于静态变量的一段代码 package test; public class Circle2 { double radius; static int number0 = 0; Circle2(){ radius = 1.0; number0++; } Circle2(double newRad){ radius = newRad; number0++; } static int getN(){ return number0; } double getArea(){ return rad

javaee-java中构造块和成员变量的执行顺序是依据什么机制?

问题描述 java中构造块和成员变量的执行顺序是依据什么机制? 代码的执行不是应该和写的顺序无关吗 但是为什么构造块和成员变量的顺序不一样,执行的结果也不一样呢??? 求大神解答 解决方案 你的理解是有误的,成员变量的初始化值跟代码顺序有一定关系的.java创建对象时,对实例变量即类的非静态成员的初始化,主要在三个地方 1 成员变量定义时指定初始值 2 非静态代码块中指定初始值 3 构造函数中对成员变量指定初值值 这三种方式1,2执行先于构造函数3的执行,但是1,2方式的执行顺序与源程序中的排列

如何控制各种类的静态成员对象的创建顺序?

问题描述 如何控制各种类的静态成员对象的创建顺序? 想用C++实现类似Java的反射机制,参考网上的设计方案形成了如下代码: 基类声明和实现: protocolui.h: #ifndef PROTOCOLUI_H #define PROTOCOLUI_H #include<map> #include <string> class UIProtocolDev; struct UIProtocolDevInfo; typedef UIProtocolDev* (*_tfnCreateU

java中静态变量的生存周期或范围

问题描述 java中静态变量的生存周期或范围 在一个类里main方法中实现多个实例,会共享静态变量并可修改静态变量,但是在另一个类里main方法中再实现前面那个类的实例,静态变量又回到初始值了- 解决方案 变量就是变量的,它不可能保存起来共两个main共享的:其实两个main的话,你一个一个的执行,程序也是从上执行到下的,你顺着这个顺序看看你的程序你就 明白了,这个和静态变量是没有什么关系的:你在两个main里实现的实例是两个不同的对象这点你记清楚: 如果回答对你有帮助,请采纳 解决方案二: 这

Java中static静态变量的初始化完全解析_java

静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: public class Test { public static Test1 t = new Test1(); public static int a = 0; public static int b; public static void main(String[] arg) { System.out.println(Test.a); System.out.println(Test.b); } } class Test1