黑马程序员技术交流社区

标题: 求大神解答这个关于static方法的问题 [打印本页]

作者: lvshen9    时间: 2017-2-23 11:24
标题: 求大神解答这个关于static方法的问题
[AppleScript] 纯文本查看 复制代码
public class Test3 {
        static int i=1;
        static{
                ++i;
        }
        public static void main(String[] args) {
                System.out.println(increment(i,5));//这里是i=i+5吗,为什么输出是 5?
               
                display(i);                  //这里的i的初始值跟increment(i,5)有关系吗?
        }
        private static  void display(int n) {
                System.out.println(n);
        }
        private static int increment(int n, int m) {
                return n=+m;
        }
        static{
                ++i;
        }

}


作者: Mr_Maty    时间: 2017-2-23 11:52
针对你的注释部分来解答
作者: Mr_Maty    时间: 2017-2-23 11:54
首先提示你一下:15行的代码是return n=+m,而不是你注释中理解的return n += m,翻译过来就是retun i = +5了,所以display(i)的结果就是5
作者: Mr_Maty    时间: 2017-2-23 11:57
本帖最后由 Mr_Maty 于 2017-2-23 12:09 编辑

class Test3
{
        static int i = 1;
    static
        {
        ++i;
    }
    public static void main(String[] args)
        {
                System.out.println("Test3在进入main函数的时候i的值为:"+i);   //注意这里,i在经历了两次静态代码块的作用之后i值得已经变成了3
        System.out.println(increment(i,5));//这里是i=i+5吗,为什么输出是 5?  这里你强行将i = 3改变成了i = 5,输出结果当然是5了         
        display(i);                  //这里的i是Test3中的i,当然是么有改变了,increment(i,5)中的i只是复制了Test3中i的值
    }
    private static void display(int n)
        {
        System.out.println(n);
    }
    private static int increment(int n, int m) {
        return n=+m;
    }
    static{
        ++i;
    }

}

作者: Mr_Maty    时间: 2017-2-23 12:15
本帖最后由 Mr_Maty 于 2017-2-23 12:17 编辑

具体知识点请参考java编程思想(第四版)中的相关解释

QQ截图20170223121419.png (214.42 KB, 下载次数: 14)

QQ截图20170223121419.png

作者: 烟雨清寒时    时间: 2017-2-23 12:32
楼上厉害,膜拜中

作者: lvshen9    时间: 2017-2-23 12:46
Mr_Maty 发表于 2017-2-23 12:15
具体知识点请参考java编程思想(第四版)中的相关解释

谢谢,学习了
作者: 笑对明天    时间: 2017-2-23 14:52
程序加载时静态代码块首先执行,所以i=1后被++两次变成了3,increment(i,5)只是将i的值传递了,并没有改变i本身,n=+m只是将m的值赋值给n




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