黑马程序员技术交流社区

标题: java代码、求详解 [打印本页]

作者: Emperors    时间: 2014-4-13 21:15
标题: java代码、求详解
本帖最后由 Emperors 于 2014-4-14 23:14 编辑

public class Test{
  static int i=0;
  public int aMethod( ){
   i++;
   return i;
  }
  public static void main(String [] args){
  Test test = new Test( );
  test.aMethod( );  
  System.out.println(test.aMethod( ));
  }
}
编译运行后,输出结果是 2 ,为什么呢???
作者: luoyilan222    时间: 2014-4-13 21:39

作者: 歌诗王道    时间: 2014-4-13 21:40
因为你调用了两次aMehtod方法
test.aMethod( );  //i++,i从0变到了1
System.out.println(test.aMethod( ));  //i又加了一次,i从1变到了2
如果楼主想输出1,得这样写
public static void main(String [] args){
  Test test = new Test( );
  int x = test.aMethod( );   
  System.out.println(x);   //或者省去赋值的那一步,直接写System.out.println(test.aMethod( ));
  }
作者: 赵连明    时间: 2014-4-13 21:45
本帖最后由 赵连明 于 2014-4-13 21:46 编辑
  1. <p><p>public class Test
  2. {
  3.         static int i=0;
  4.         public int aMethod( )
  5.         {
  6.                 i++;
  7.                 return i;
  8.                
  9.                
  10.         }
  11.          public static void main(String [] args)
  12.          {
  13.          Test test = new Test( );
  14.          test.aMethod( );  //这里你已经运行一次 所以i的值为1</p><p>         System.out.println(test.aMethod( ));//这里你又运行了一次所以 值为2.
  15.        //System.out.println(test.i); 如果你想输出i值 应该是这样的
  16.   }
  17. }</p></p>
复制代码


作者: 杨殿生    时间: 2014-4-13 22:21

public class Test{
  static int i=0;
  public int aMethod( ){
   i++;
   return i;
  }
  public static void main(String [] args){
  Test test = new Test( ); //因为i是静态的,所以是全局变量,执行到这句的时候i的值就为0  test.aMethod( );  //这句的时候i的值是1
  System.out.println(test.aMethod( )); //这句执行i的值在加1,所以输出结果为2
  }
}

作者: 曹冬明    时间: 2014-4-14 00:41
aMethod( ) 被调用两次
作者: skyfly    时间: 2014-4-14 01:27
本帖最后由 skyfly 于 2014-4-14 01:59 编辑

你这些代码 一定系统报错!  因为你定义了静态变量, 这个方法必须也要是静态的才行。 认真想想,方法不定义成静态怎么直接被所有对象调用,那么你定义的静态变量有什么意义呢
可以修改成
public static class Test{
   int i=0; //此处不需要加static 局部变不能用静态修饰…因为局部变量它定义的局部使用,不能长期存在,而静态变量会一直保存在内存 中,两者本/质上是冲突的.        //变量分成局部变量和成员变量,成员变量又分成类变量(用static修饰)和实例变量,静态方法可以调用所有的成员变量,普通方法只能调用非静态变量,也就是实例变量
  public int aMethod( ){
   i++;
   return i;
  }
  public static void main(String [] args){
  Test test = new Test( );
  test.aMethod( );  
  System.out.println(test.aMethod( ));
  }

至于得出的值为何为2. 是因为 : test.aMethod( );  //调用了函数,i=0+1,但是没有打印出来
         System.out.println(test.aMethod( ));  //再次调用 了test.aMethod( ),i=i+1

静态成员(属性和方法)都是类特有的,是为了各个对象共享数据的。建议在以下条件达成时使用:
1.变量所包含的对象体积较大,占用内存较多。
2.变量所包含的对象生命周期较长。
3.变量所包含的对象数据稳定。
4.该类的对象实例有对该变量所包含的对象的共享需求。








作者: 林梦    时间: 2014-4-14 01:31
打印的时候 你又调用了一次
作者: 々白点潜心ザ    时间: 2014-4-14 08:48
  1. public class Test{
  2.   static int i=0;
  3.   public int aMethod( ){
  4.    i++;
  5.    return i;
  6.   }
  7.   public static void main(String [] args){
  8.   Test test = new Test( );
  9.   test.aMethod( );  //第一次调用aMethod方法i会自增一个i=1;
  10.   System.out.println(test.aMethod( )); //第二次调用aMethod方法i再一次自增一个i=2;
  11.   }
  12.   }
复制代码

作者: 々白点潜心ザ    时间: 2014-4-14 08:50
skyfly 发表于 2014-4-14 01:27
你这些代码 一定系统报错!  因为你定义了静态变量, 这个方法必须也要是静态的才行。 认真想想,方法不定 ...

非静态的方法可以调用静态变量的,只是静态的有限制,必须调用静态吧:)
作者: demown    时间: 2014-4-14 09:02
调用了两次  aMethod方法。


public class Test{
  static int i=0;
  public int aMethod( ){
   i++;
   return i;
  }
  public static void main(String [] args){
  Test test = new Test( );
  test.aMethod( );  
  System.out.println(test.aMethod( ));
  }
  }
你在打印的时候调用一次test.aMethod()方法.
你是在打印的前提下再次运行一次test.aMethod方法。所以你的i++相当于增加了两次。当然 就是2了。
作者: Emperors    时间: 2014-4-15 01:11
歌诗王道 发表于 2014-4-13 21:40
因为你调用了两次aMehtod方法
test.aMethod( );  //i++,i从0变到了1
System.out.println(test.aMethod( )) ...

谢谢  欧了
作者: skyfly    时间: 2014-4-15 22:28
々白点潜心ザ 发表于 2014-4-14 08:50
非静态的方法可以调用静态变量的,只是静态的有限制,必须调用静态吧

恩这样理解也对, 但是基本不会有在非静态函数里定义一个静态变量,既然静态意味着共享,直接在类中定义而不是在函数里, 当你使用eclipse时如果按照上面的写系统会报错哦
作者: 彭飞    时间: 2014-4-15 23:16
main方法中,执行代码,第一次调用了test.aMethod( )方法,也就是i++ 了,就是0++=1了。
然后执行到下一行的时候,又打印了一次test.aMethod( );  
                 这个时候,该方法又被调用了一次,也就是i++了,自然就是1++=2了。

简单来说,你定义的方法aMethod( )实现的功能就是对i进行++,而主函数中,调用了2次aMethod( )方法,
初始值是0,++两次,就是2咯。

作者: ggflxb    时间: 2014-4-15 23:32
结果为2很好理解,因为test.aMethod被调用两次,但是不明白变量为什么要定义成静态的,求指导
作者: 天山    时间: 2014-4-16 08:02
package com.itheima;

public class debuge_14 {

        static int i = 0;

        public int run( )
        {       
                i++;
                return i;
        }
       
       
       
                public static void main(String [] args)
                {
                debuge_14 test = new debuge_14( );
                System.out.println(test.run());  //运行了一次  ,run();
                System.out.println(test.run());        //运行了第二次
}
}
作者: lzhuas    时间: 2014-4-16 18:51
本帖最后由 lzhuas 于 2014-4-16 18:52 编辑

public int aMethod( ){   
        i++;  
       return i;   
}
这个方法你在程序里运行了两次,肯定是输出2啦,在输出语句那也会运算的





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