关于JAVA语法的一个无聊问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 20:39:17
关于JAVA语法的一个无聊问题。
当然,有些考试就爱考。

代码如下:
class class1{public static int f=class2.f+1;}
class class2{public static int f=class1.f+1;}
class Main
{
public static main(String[] s)
{
System.out.println(class1.f);
System.out.println(class2.f);
}
}
输出是什么?
我可以告诉你,我编译运行过,结果是
2
2
我的问题是,为什么是这个结果?
类似的这种自相矛盾的代码,比如第一个加法改减法,1改2等等,java虚拟机究竟是怎样走的?
关于JAVA语法的一个无聊问题。
当然,有些考试就爱考。

代码如下:
class class1{public static int f=class2.f+1;}
class class2{public static int f=class1.f+1;}
class Main
{
public static main(String[] s)
{
System.out.println(class1.f);
System.out.println(class2.f);

在类中,类静态成员变量是可以通过类名直接调用的。这就是为什么会出现class1.f的写法。而这个问题还有个顺序的问题。而且静态的成员变量都是自动初始化的,比如f在类中定义的时候就会初始化为零。本题在初始话class2之前由于用到class1中的f。而此时他还是0的。所以class2.f被初始化为1。当class1.f用到时,被初始化为2了就。当然,如果你能把他改为2,那么他们的差也还是不会变的

就奇了怪了 我跑了一遍,结果不是2,2。我的结果是2,1。并且如果把System.out.println(class1.f);
System.out.println(class2.f);两句颠倒,结果照样是2,1。我觉得象这样的问题,没准跟java版本有关了。我的是1.4.2的版本,你运行的结果是2,2不知道是什么版本。

真是好无聊,没有一个人会写这样逻辑的代码,呵呵,玩是好玩。

似乎像个死循环

我运行的结果也是2,1啊!!!!!