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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 来自沙沙的我 于 2014-6-6 23:04 编辑
  1. public void shishi(int i)//问题是当我不采用静态修饰时为什么不可以,是不是系统无法判定接下来的方法属于哪个对象?
  2.         {
  3.                 if(i<2)
  4.                 {
  5.                         System.out.println(i);
  6.                 }else
  7.                 {
  8.                         new IOb_2().shishi(i/2);
  9.                 }
  10.         }
复制代码

13 个回复

倒序浏览
你这也不是递归啊,连返回值都没有,你把参数递进去了,没有返回值怎么归啊?在一个递归都在一个方法中,你new出了多个对象相当与多个方法,怎么归?
回复 使用道具 举报
shishi方法如果是按我这么写的话,不加静态是不行的,因为主函数是静态的,如果不加静态,会报错。
另外,在函数内调用shishi()方法时不用加类名,又不是静态方法,不能直接被类名调用,而且在方法都在一个类中,可以直接调用。
第三,你的i在递归后没有重新赋值,相当于死循环了,没有意义。
可以看下我的代码。

  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 shishi(10);
  6.         }

  7.         public static void shishi(int i)
  8.         {
  9.                 if(i<2)
  10.                 {
  11.                         System.out.println(i);
  12.                 }else
  13.                 {
  14.                         System.out.println(i);
  15.                         i = i/2;
  16.                         shishi(i);
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
楼主应该是像三楼那样写的代码吧,想问为什么shishi方法为什么要用静态修饰才能在主函数直接shishi(10)这样调用吧?因为你主函数是静态的,静态函数在不创建对象的情况下只能调用静态方法,所以这个方法必须用静态修饰才能被主函数静态调用
回复 使用道具 举报
额,我只是打个比方啊。目的只是要找到静态和非静态的不同
回复 使用道具 举报
yuZhe_toString 发表于 2014-6-6 18:22
你这也不是递归啊,连返回值都没有,你把参数递进去了,没有返回值怎么归啊?在一个递归都在一个方法中,你 ...

额,我只是打个比方啊。目的只是要找到静态和非静态的不同
回复 使用道具 举报
☆枫の云 发表于 2014-6-6 19:18
shishi方法如果是按我这么写的话,不加静态是不行的,因为主函数是静态的,如果不加静态,会报错。
另外, ...

恩,我就是搞多了,脑子一下糊涂了,转不过来了、、、、糊涂了
回复 使用道具 举报
crazystraw 发表于 2014-6-6 21:18
楼主应该是像三楼那样写的代码吧,想问为什么shishi方法为什么要用静态修饰才能在主函数直接shishi(10)这 ...

恩。是的。
好久没在公共类中建立方法了,优点糊涂了。
回复 使用道具 举报
crazystraw 发表于 2014-6-6 21:18
楼主应该是像三楼那样写的代码吧,想问为什么shishi方法为什么要用静态修饰才能在主函数直接shishi(10)这 ...

恩。是的。
好久没在公共类中建立方法了,有点糊涂了。
回复 使用道具 举报
☆枫の云 发表于 2014-6-6 19:18
shishi方法如果是按我这么写的话,不加静态是不行的,因为主函数是静态的,如果不加静态,会报错。
另外, ...

对,就是这样
回复 使用道具 举报
引用毕老师的话:静态成员随着类的加载而加载。  举个吃饭的例子:你饭还没开始做,你就要吃饭了,这当然是不行的!   
非静态成员在类文件加载进内存后,存放在方法去,当被调用时才会被加载!
故便有了:静态成员可以直接用类名调用,静态成员不能访问非静态成员!
建议你看看毕老师对static关键字讲解的视频!
回复 使用道具 举报
285619273 发表于 2014-6-7 08:43
引用毕老师的话:静态成员随着类的加载而加载。  举个吃饭的例子:你饭还没开始做,你就要吃饭了,这当然是 ...

恩,以前我不知道毕老师的视频,看得是其它的。现在看来毕老师的视频,一对比,其它的视频讲得太肤浅了。
回复 使用道具 举报
你这样写也可以运行啊,逻辑上没问题
  1. class Test5
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Test5().shishi(10);
  6.         }
  7.         public void shishi(int i)
  8.         {
  9.                 if(i<2)
  10.                 {
  11.                         System.out.println(i);
  12.                 }else
  13.                 {
  14.                         new Test5().shishi(i/2);
  15.                 }
  16.         }
  17. }
复制代码


回复 使用道具 举报
☆枫の云 发表于 2014-6-6 19:18
shishi方法如果是按我这么写的话,不加静态是不行的,因为主函数是静态的,如果不加静态,会报错。
另外, ...

你说的第三点,不用赋值吧,既然是传参数,干嘛要赋值呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马