A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-8-2 10:37  /  2794 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 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?
谁能帮忙分析下这个程序的执行流程啊。

6 个回复

倒序浏览
静态就是随着类的加载而加载,所以先初始化静态变量x=10;接着执行静态代码块x+=5,x值变为15,在执行静态代码块x/=3;x值变为5,所以最终打印时x的值就是5了。静态的变量和静态代码块优先于main方法的执行。
回复 使用道具 举报
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;
回复 使用道具 举报
静态只所以能直接使用类命使用其原理就是,静态是随着类加载而加载的,然后默认初始化,显示初始化。
类加载,X默认初始化是0,然后从上往下执行静态显示初始化,先遇 x=10;
所以显示初始化第一次为10,然后接着往下执行 x+=5 运算完成 x=15
接着往下执行x/=3 运输完成 x=5。显示初始化全部执行完成 x=5
所以后面打印出来 x=5
回复 使用道具 举报
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





回复 使用道具 举报
我该你把执行过程写了下,你看看,希望对你有帮助

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

执行过程

执行过程
回复 使用道具 举报

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马