黑马程序员技术交流社区

标题: 关于静态代码块和静态变量的加载问题 [打印本页]

作者: 刘源    时间: 2012-8-2 10:37
标题: 关于静态代码块和静态变量的加载问题
本帖最后由 刘源 于 2012-8-2 19:50 编辑


问题已经解决”。

class StaticStuff
{
static int x=10;
static { x+=5;}
public static void main(String args[])
{
System.out.println("x=" + x);
}
static { x/=3;}
}

为何打印出来是5?
谁能帮忙分析下这个程序的执行流程啊。
作者: hello world    时间: 2012-8-2 10:52
静态就是随着类的加载而加载,所以先初始化静态变量x=10;接着执行静态代码块x+=5,x值变为15,在执行静态代码块x/=3;x值变为5,所以最终打印时x的值就是5了。静态的变量和静态代码块优先于main方法的执行。
作者: 周坤    时间: 2012-8-2 11:04
public class StaticStuff
{
        static int x=10;
        static {
                x+=5;
                System.out.println("x=" + x);
        }
        public static void main(String args[])
        {
                System.out.println("x=" + x);
        }
        static {
                x/=3;
                System.out.println("x=" + x);
                }
}
加上输出语句,结果就为
x=15
x=5
x=5
对于加载问题,
静态成员变量(类变量)x=10;而后加载静态代码块,从上倒下加载,所以是先x=15,然后x=5;
作者: 黑马黄宏强    时间: 2012-8-2 15:20
静态只所以能直接使用类命使用其原理就是,静态是随着类加载而加载的,然后默认初始化,显示初始化。
类加载,X默认初始化是0,然后从上往下执行静态显示初始化,先遇 x=10;
所以显示初始化第一次为10,然后接着往下执行 x+=5 运算完成 x=15
接着往下执行x/=3 运输完成 x=5。显示初始化全部执行完成 x=5
所以后面打印出来 x=5
作者: 胡文凡    时间: 2012-8-2 16:06
class StaticStuff
{
static int x=10;
static { x+=5;}
public static void main(String args[])
{
System.out.println("x=" + x);
}
static { x/=3;}
}
static 包含的代码块是静态代码块,静态代码块主方法执行。
再按照自然流程顺序所以先执行static { x+=5;}//当然初始化值是最先执行的。所以此处x的值为10+5=15
再执行static { x/=3}//x的值变为15/3=5
最后执行主方法System.out.println("x=" + x);输出x=5






作者: 王峰    时间: 2012-8-2 17:05
我该你把执行过程写了下,你看看,希望对你有帮助

未命名.jpg (22.06 KB, 下载次数: 289)

执行过程

执行过程

作者: 叶征东    时间: 2012-8-3 15:16






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2