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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨芳 中级黑马   /  2013-2-23 13:26  /  1753 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  MainDemo
{
public static void main(String[] args) //new String[]
{
  String []arr={"hah","hhe","heihie","xixi"};
  MainTest.main(arr);
  System.out.println(args.length);//这里为什么会打印0,上面主函数传入了arr;
     for(int x=0;x<args.length;x++)
  {
    System.out.println(args);//这句话打印了一个空值?还是什么都没有打印。
  }

}
}
class MainTest
{
public static void main(String[] args)
{
    for(int x=0;x<args.length;x++)
   System.out.println(args);
}
}
毕老师的讲座中说:jum在调用 主函数时,传入的是new String[0]是什么意思。
在一个java程序中出现了两个主函数,怎么也能通过。
上面的两个主函数之间是什么关系?

5 个回复

倒序浏览
一个java程序中出现了两个主函数,怎么也能通过。在一个类中定义主函数只是为了让类能独立运行.没有其他作用,而一个文件内的public类型的类只能有一个.
main()函数是在虚拟机调用的.在程序编译时,就已经进入内存了.毕老师在往args[]里加入字符串时,是在javac 的后面添加的,不是在程序运行时加的.
我是这样理解的String数组的长度一旦确定,就不能更改了.在编译时,就已经确定了.所以你在运行时添加,没有用了.
回复 使用道具 举报
类跟main()主函数根本就没关系,只是java的最小运行单位是类,所有才把main()函数放在一个java类中,所以MainTest.main(arr);这句是错的!
回复 使用道具 举报
我先把代码帮你简练一下吧,先这么看
  1. pubic static void main(String[] args)
  2. {
  3.    String[] arr={"hah","hhe","heihie","xixi"};
  4.   MainTest.main(arr);
  5. //这里调用另一个类中的main方法。是吧?那么程序就进入到了那个方法中了,
  6. System.out.println(args.length);//这一句呢,打印0是正常的嘛,你这个主函数没有传人参数嘛。
  7. //再下面的for自然就执行不到了。对吧,
  8. }
  9. //好吧,我们在来看看你的另一个main方法。
  10. public static void main(String[] args)
  11. {
  12.     for(int x=0;x<args.length;x++)
  13. //你这里打印的是整个数组。相当于打印的是args.toString().而数组的这个方法都是打印的地址(也就是哈希值)。
  14. //  System.out.println(args);
  15. //值需要改成这样就成了
  16. System.out.println(args[i]);
  17. }
复制代码
回复 使用道具 举报
    你想啊,主函数跟平常的我们定义的函数在某种意义上是没有什么区别的,你自己写一个功能方法,在用到的时候就回去调用它,如果这个功能方法的构造函数有参数的话,是不是你在调用这个功能函数的时候就会为这个功能函数的构造方法传入实际参数呢,只不过现在是虚拟机调用你的主函数,这样就是在调用main方法的时候就应该为其传入参数呢,然而你没有传,所以出现args.length为0的情况。
    至于:
class MainTest
{
public static void main(String[] args)
{
    for(int x=0;x<args.length;x++)
   System.out.println(args);
}
}
    我之前还真没有试过,但我确定是不能有两个主函数的,我想是你的第二个public static void main(String[] args)
方法是定义在了功能方法中,不是同一意义的main方法。

    你打印的是你本身主方法种的args.length所以是0啊。
回复 使用道具 举报
为什么要纠结主函数了,主函数也是静态方法啊
MainTest.main(arr);就是类在调用自己的静态方法,不用想这是主函数,这样看是不是好理解一点了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马