黑马程序员技术交流社区

标题: 问个API的问题 [打印本页]

作者: -律-    时间: 2014-12-20 00:09
标题: 问个API的问题
本帖最后由 -律- 于 2014-12-20 00:18 编辑

下面程序的运行结果是(     )
public static void main(String[] args){
StringBuffer sb = new StringBuffer();//实例化一个叫sb的对象;
sb.append("qq").append("ww");//添加元素"qq"以及"ww"
show(sb,"ss");//调用show方法
System.out.println(sb.length());//打印sb长度
        }
static void show(StringBuffer sb,String str){
          sb.append(str);//show中封装一个给sb添加元素的方法
        }
a) 4
b) 2
c) 6
d) 0
我知道运行结果是6,但是比如show方法的写法和调用,弄的我思维混乱了,大家能把自己第一眼看到的思维,写个备注出来么

我只是知其然,不知其所以然,大神勿喷!


作者: -律-    时间: 2014-12-20 00:13
我个人最大的疑问就是:

show(sb,"ss");为什么可以这样写

因为

static void show(StringBuffer sb,String str){
          sb.append(str);
那么show( );括号中不是应该只填写一个字符串么,还要写sb(sb,"ss")
作者: -律-    时间: 2014-12-20 00:18
好吧,我想明白了,我有点死脑筋
作者: 奋斗的蜗牛ksd    时间: 2014-12-20 00:19
show函数 是你自己定义的,括号里面表示自定义的参数列表,你如果在show方法的参数列表里面写了
StringBuffer sb  表示这个函数可以接收一个容器
参数列表写String str  表示这个函数可以接收字符串
两个一起写,表示两个都接收

在这个show方法中,可以操作 这个容器 和字符串,但是操作的变量是固定的,即容器 就是sb,字符串就str
作者: -律-    时间: 2014-12-20 00:25
奋斗的蜗牛ksd 发表于 2014-12-20 00:19
show函数 是你自己定义的,括号里面表示自定义的参数列表,你如果在show方法的参数列表里面写了
StringBuff ...

原来StringBuffer sb是一个容器,sb的值不能像str一样改变么,受教了,我上去试一试
作者: 奋斗的蜗牛ksd    时间: 2014-12-20 00:30
对函数的理解,得靠自己抽象去对比的学,

数学中的函数, 你给它一些变量,它会对变量按照函数的规则操作,比如圆的方程之类

java中的函数,函数列表规定了这个函数可以操作什么类型的数据,以及该类型数据的名称

返回值类型其实没什么用,你可以忘记它

其他的需要你自己思考咯,今天我也刚捉摸过这个问题。
作者: -律-    时间: 2014-12-20 00:31
4楼说的很简单明了,3Q
作者: 奋斗的蜗牛ksd    时间: 2014-12-20 00:35
你对下面两个show可能有点小误会
show(sb,"ss");//我叫第一个show

static void show(StringBuffer sb,String str){ //我叫第二个show

          sb.append(str);//show中封装一个给sb添加元素的方法

        }

第一个show 的作用是传递,传递在main方法中定义的容器 和字符串
第二show的作用 是进行接收和操作,接收的参数列表类型,在第一个show定义的时候就已经确定即必须是
(StringBuffer 变量名,String 变量名),这两个变量名是可以随便起的,用来接收第一个show传递过来的数据内容
在第二个show方法中,所有操作的变量,都是在第二个show参数列表中你自己定义的变量名。

我觉得我说的够详细了,其他自己测试测试就可以得出结果了,该一该代码,就可以验证自己的想法!加油!
作者: 奋斗的蜗牛ksd    时间: 2014-12-20 00:37

  1. public class Test222 {

  2.         public static void main(String[] args){

  3.                 StringBuffer sb = new StringBuffer();//实例化一个叫sb的对象;

  4.                 System.out.println(sb.length());;
  5.                
  6.                 sb.append("qq").append("ww");//添加元素"qq"以及"ww"
  7.                 System.out.println(sb.length());
  8.                
  9.                 show(sb,"ss");//调用show方法,执行show方法,完成show方法中的功能

  10.                 System.out.println(sb.length());//打印sb长度

  11.                         }

  12.                 static void show(StringBuffer sb,String str){

  13.                           sb.append(str);//show中封装一个给sb添加元素的方法

  14.                         }

  15. }
复制代码


上面是验证一下执行顺序,结果一次是0 4 6,即,数组确长度实是在执行show之后变成6的
作者: -律-    时间: 2014-12-20 01:03
奋斗的蜗牛ksd 发表于 2014-12-20 00:37
上面是验证一下执行顺序,结果一次是0 4 6,即,数组确长度实是在执行show之后变成6的 ...

show1 填入变量名 ;
show2 ( 执行方式 ) ;
1,2是一个整体,完整走下来,结果出现了

你这种二分法式的理解方式,我喜欢
作者: 郭文飞    时间: 2014-12-20 01:19
我第一眼 还以为是 GUI里的show ,,呵呵  傻了
作者: -律-    时间: 2014-12-20 01:34
郭文飞 发表于 2014-12-20 01:19
我第一眼 还以为是 GUI里的show ,,呵呵  傻了

GUI图像界面编程啊,咱还没学到那呢,得过几天
作者: 郭文飞    时间: 2014-12-20 01:48
-律- 发表于 2014-12-20 01:34
GUI图像界面编程啊,咱还没学到那呢,得过几天

不过你学不到了 哈哈  因为那个方法已经过时了  上面会有一个删除线的
作者: huoxy    时间: 2014-12-20 14:33
建议楼主起函数名时能体现一下功能。别人一看show以为是要打印或显示功能,你定义的却是添加功能,有点混乱。
作者: 奋斗的蜗牛ksd    时间: 2014-12-20 18:26
-律- 发表于 2014-12-20 01:03
show1 填入变量名 ;
show2 ( 执行方式 ) ;
1,2是一个整体,完整走下来,结果出现了

别激动,都是男人。
作者: -律-    时间: 2014-12-22 21:39
奋斗的蜗牛ksd 发表于 2014-12-20 18:26
别激动,都是男人。

黑马币难混,虽然论坛这种互动方式挺好的
作者: lgc黑马    时间: 2014-12-22 22:44
问吧,问吧 ,赶紧问




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