黑马程序员技术交流社区

标题: 关于 结果的问题 [打印本页]

作者: awkflf11    时间: 2014-3-26 11:44
标题: 关于 结果的问题
class Demo
{
        public static void main(String[] args)
        {
                int x = 6;
                show(x);
                System.out.println(x)
        }

        public static void show(int x)
        {
                x = 5;
        }
}

class Demo
{
        int x = 6;
        public static void main(String[] args)
        {
                Demo d = new Demo();
                d.x = 8;
                show(d);   
                System.out.println(d.x);
        }
        public static void show(Demo d)
        {
                d.x = 5;
        }
}


请问上面的两个结果是什么、、、???
我写的第一个结果是5,,怎么不对了

第二结果那???


作者: Up↑Lee↗    时间: 2014-3-26 11:56
本帖最后由 Up↑Lee↗ 于 2014-3-26 11:58 编辑
  1. //class Demo
  2. //{
  3.         //public static void main(String[] args)
  4.         //{
  5.                 //int x = 6;
  6.                 //show(x);
  7.                 //System.out.println(x);
  8.         //}

  9.         //public static void show(int x)
  10.         //{
  11.                 //x = 5;
  12.         //}
  13. //}

  14. class Demo
  15. {
  16.         int x = 6;
  17.         public static void main(String[] args)
  18.         {
  19.                 Demo d = new Demo();
  20.                 d.x = 8;
  21.                 show(d);   
  22.                 System.out.println(d.x);
  23.         }
  24.         public static void show(Demo d)
  25.         {
  26.                 d.x = 5;
  27.         }
  28. }
复制代码
第一个结果为6
第二个函数结果为5
另外第七行忘记;

作者: H-Deka    时间: 2014-3-26 11:56
第一个6 第二个5
值传递和址传递的区别
作者: 李东梁    时间: 2014-3-26 11:56
本帖最后由 李东梁 于 2014-3-26 12:01 编辑

代码分析应该一步一步进行,主函数是程序的入口,也就是说主函数成程序的开始。
第一个是6,没有疑问;

第二个如下:
  1. public static void main(String[] args)
  2.         {
  3.                 Demo d = new Demo();
  4.                 d.x = 8;
  5.                 show(d);   
  6.                 System.out.println(d.x);
  7.         }
复制代码

从这里面一步一步分析:
1.创建了一个对象;函数属性内初始化,d.x=8;
2.调用方法,传入的是对象,引用类型值,结果也是5!
作者: 海世山盟    时间: 2014-3-26 12:05
首先程序输出行缺少分号,再次。。因为show方法为静态,所以在程序加载的时候就运行了 并且只运行一次。也就是程序的初始化顺序是先初始化了静态方法show (此时将x初始化为5),然后再初始化 x=6.接着程序来到了静态方法show(x),因为静态方法只加载一次,所以这一次就不会执行了。然后就执行了打印功能。输出6.
  而第二个show方法操作的事实例对象的x值,那么你就需要等到实例化了才能执行show方法吧。
    不知道回答的对不对。各位讨论讨论啊。
作者: 海世山盟    时间: 2014-3-26 12:09
对于第一个程序,  Demo里面有两个方法,一个是main(),另一个是show(),因为show是静态的,所以show先执行,然后才是 main()执行,所以结果是6.




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