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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 波涛 中级黑马   /  2014-4-13 17:02  /  1539 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看集合视频的时候老师敲了以下代码:
  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对象是在什么时候实例化出来的呢?谢谢各位。

9 个回复

倒序浏览
楼主的问题:
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. }
复制代码
楼主要的答案已经在代码中注释出来了。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
sop是静态方法,可以不用对象来调用
回复 使用道具 举报
wangkerui 发表于 2014-4-13 17:21
楼主的问题:
1.main方法执行时又是哪个对象调用了sop这个方法呢?楼主要的答案已经在代码中注释出来了。
...


  sop("集合大小为"+al.size());      // main 方法执行到此处调用 sop 方法,并将值传入下面 sop(Object o) 中
上面这句话什么意思,main方法调用sop方法? 方法调用方法?
回复 使用道具 举报
sop()方法是静态方法,main方法也属于静态方法,所以可以直接调用sop()。
回复 使用道具 举报
本帖最后由 波涛 于 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:13
7#
楼主的sop方法定义在CollectionTest类中,且为静态。
main也是CollectionTest类中的静态方法,同一个类的静态方法调用静态方法,不需要实体化。
当然你喜欢也可以将sop定义为非静态,那么就需要用new CollectionTest().sop(al)来调用。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
波涛 中级黑马 2014-4-13 17:54:33
8#
本帖最后由 波涛 于 2014-4-13 18:16 编辑

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

其他类中的需要类名,同一个类中的不需要
回复 使用道具 举报
sop方法是main方法调用的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马