黑马程序员技术交流社区

标题: 跪求请问这个编译的结果是多少,顺便告诉我为什么,谢... [打印本页]

作者: 赵京    时间: 2014-5-2 20:02
标题: 跪求请问这个编译的结果是多少,顺便告诉我为什么,谢...

public class Test{
          static int i;
          public int aMethod(){
           i++;
           return i;
          }
          public static void main(String[] args){
          Test test = new Test();
          test.aMethod();
          System.out.println(test.aMethod());
          }
}



作者: skill20    时间: 2014-5-2 20:05
  2 。。。
作者: XinWen    时间: 2014-5-2 20:06
2  把, i 是静态的成员变量, 没调用一次 amethod 都会 给 i 加 1 ,然后 返回, 你调用了 两次 amethod
最后那次 返回的 i 是 2 。
作者: 赵京    时间: 2014-5-2 20:08
XinWen 发表于 2014-5-2 20:06
2  把, i 是静态的成员变量, 没调用一次 amethod 都会 给 i 加 1 ,然后 返回, 你调用了 两次 amethod
...

嗯,明白了,谢谢,知道了
作者: 刘晶    时间: 2014-5-2 20:15
运行结果为2;
public class Test{
          static int i;
          public int aMethod(){
           i++;
           return i;
          }
          public static void main(String[] args){
          Test test = new Test();
          test.aMethod();                                   //执行aMethod() 方法i为1
          System.out.println(test.aMethod()); //打印时有调用方法i+1=2;
          }
}
如果是这样

public class Test{
          static int i;
          public int aMethod(){
           i++;
           return i;
          }
          public static void main(String[] args){
          Test test = new Test();
         int  a=test.aMethod();                                 
          System.out.println(a);
          }
}
执行结果为1;不知道这样能不能说清楚,我也是个新手

作者: 法国外籍军团    时间: 2014-5-2 21:52
输出结果应该是2    你调用了两次aMethod()方法
作者: 362688114    时间: 2014-5-2 21:52
我把你的代码增加了两行注释:
因为你的程序里调用了两次 aMethod()方法,可以清楚的看到两次运行过程i值的变化;
第一次调用,i自增前的值0,
第一次调用,i自增后的值1;
......................................................
第二次调用,i自增前的值1,
第二次调用,i自增后的值2;
最终结果为:2。
  1. public class test {
  2.         static int i;

  3.         public int aMethod() {
  4.                 // System.out.println("i自增前的值"+i);
  5.                 i++;
  6.                 // System.out.println("i自增后的值"+i);
  7.                 return i;
  8.         }

  9.         public static void main(String[] args) {
  10.                 test test = new test();
  11.                 test.aMethod();
  12.                 System.out.println(test.aMethod());
  13.         }
  14. }
复制代码

作者: 王春蕾    时间: 2014-5-2 22:32
答案应该是2.
作者: 王春蕾    时间: 2014-5-2 22:35
答案应该是2,i 是Test类的静态成员变量,随着类的加载而加载,且存在于内存中的方法区中的静态区,在test.aMethod()调用时,i从默认初始化值0变为1,然后在sop(test.aMethod())时又调用一次,并执行了i++操作,所以代码运行的结果是2.希望对楼主有所帮助。
作者: 姜蕾蕾    时间: 2014-5-2 22:59
不明白啊,没有初始值,i默认值为零吗?
作者: 姜蕾蕾    时间: 2014-5-2 23:26
虽然不明白有默认值但是你可以用最基础的调试方法来调试程序:稍微加几个输出。
public class Test
{
   static int i;
   public int aMethod()
     {
      i++;
      return i;
       }
public static void main(String[] args)
   {
     System.out.println("开始时:"+i+";");
     Test test = new Test();
     System.out.println("新建Test:"+i+";");
     test.aMethod();
     System.out.println("调用方法:"+i+";");
     System.out.println("最后获取:"+test.aMethod()+";");
      }
}

最后得到的结果是:

D:\>javac Test.java
D:\>java Test
开始时:0;
新建Test:0;
调用方法:1;
最后获取:2;

看这结果,不用多说了吧。






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