黑马程序员技术交流社区

标题: 弱弱的问下这个语句啥意思 [打印本页]

作者: 波涛    时间: 2014-4-13 17:02
标题: 弱弱的问下这个语句啥意思
看集合视频的时候老师敲了以下代码:
  1. import java.util.*;
  2. public class CollectionTest{
  3.    public static void main(String []args){
  4.      ArrayList al = new ArrayList();
  5.      al.add("Demo1");
  6.      al.add("Demo2");
  7.      al.add("Demo3");
  8.      al.add("Demoooo44");
  9.      
  10.      //打印集合大小
  11.       sop("集合大小为"+al.size());

  12.      //输出集合内容
  13.       sop(al);
  14.   }
  15.    public static void sop(Object o){
  16.      System.out.println(o);
  17.   }
  18. }
复制代码


我的理解是那个sop方法就是纯粹实现了System.out.println的功能,使用方法名从而省略了输入这么一长串字符的时间,那main方法执行时又是哪个对象调用了sop这个方法呢?CollectionTest? 如是,那匿名的CollectionTest对象是在什么时候实例化出来的呢?谢谢各位。
作者: wangkerui    时间: 2014-4-13 17:21
楼主的问题:
1.main方法执行时又是哪个对象调用了sop这个方法呢?
  1. import java.util.*;
  2. public class CollectionTest{
  3.         public static void main(String []args){       // main 方法由此出开始往下执行
  4.                   ArrayList al = new ArrayList();          // 定义了一个 ArrayList 的容器,用来装下面添加的元素
  5.                   al.add("Demo1");
  6.                   al.add("Demo2");
  7.                   al.add("Demo3");
  8.                   al.add("Demoooo44");             // 将这些元素添加到集合中
  9.      
  10.                  //打印集合大小
  11.                   sop("集合大小为"+al.size());      // main 方法执行到此处调用 sop 方法,并将值传入下面 sop(Object o) 中

  12.                 //输出集合内容
  13.                sop(al);
  14.                 }
  15.         public static void sop(Object o){            
  16.                      System.out.println(o);
  17.   }
  18. }
复制代码
楼主要的答案已经在代码中注释出来了。

作者: leon_hm    时间: 2014-4-13 17:42
sop是静态方法,可以不用对象来调用
作者: 波涛    时间: 2014-4-13 17:43
wangkerui 发表于 2014-4-13 17:21
楼主的问题:
1.main方法执行时又是哪个对象调用了sop这个方法呢?楼主要的答案已经在代码中注释出来了。
...


  sop("集合大小为"+al.size());      // main 方法执行到此处调用 sop 方法,并将值传入下面 sop(Object o) 中
上面这句话什么意思,main方法调用sop方法? 方法调用方法?

作者: 你为谁归来    时间: 2014-4-13 17:46
sop()方法是静态方法,main方法也属于静态方法,所以可以直接调用sop()。
作者: 波涛    时间: 2014-4-13 17:50
本帖最后由 波涛 于 2014-4-13 17:51 编辑
leon_hm 发表于 2014-4-13 17:42
sop是静态方法,可以不用对象来调用
  1. public class A{
  2. public static void main(String []args){
  3.      speak() ;  // 这句话错误,找不到符号speak
  4.   B.speak(); //正确,静态方法也需要用类名来引用啊
  5. }
  6. }
  7. class B{
  8.   public static void speak(){
  9.    System.out.println("Hello world");
  10. }
  11. }
复制代码

作者: Royvan    时间: 2014-4-13 17:50
楼主的sop方法定义在CollectionTest类中,且为静态。
main也是CollectionTest类中的静态方法,同一个类的静态方法调用静态方法,不需要实体化。
当然你喜欢也可以将sop定义为非静态,那么就需要用new CollectionTest().sop(al)来调用。
作者: 波涛    时间: 2014-4-13 17:54
本帖最后由 波涛 于 2014-4-13 18:16 编辑

额,貌似明白点了,默认省略了main方法所在的类名字;如我原文写的 sop("集合大小为"+al.size()); 这句话,也可写成 CollectionTest.sop(".......");  谢谢各位的热心解答。。另外感慨一下,这个技术分怎么不涨啊? 不好赚啊!

作者: leon_hm    时间: 2014-4-13 21:49
波涛 发表于 2014-4-13 17:50

其他类中的需要类名,同一个类中的不需要
作者: 雨落千木的时节    时间: 2014-4-14 09:58
sop方法是main方法调用的




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