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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王冬 中级黑马   /  2012-9-6 10:53  /  2847 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王冬 于 2012-9-6 12:09 编辑

今天碰到一个错误“类**是公共的,必须在**.java文件中声明”,一个程序中只能有一个public类吗?另外,如果在两个类中都有main方法,那么函数的入口是哪个?

7 个回复

倒序浏览
1.一个java源文件最多只能有一个public类,而且这个源文件的名字必须和这个public类相同。 但可以没有public类,命名时和此源文件中任何一个类名相同都可以。
2.程序中的每个类都可以有一个main函数,但是程序执行的时候只执行最先出现的main类.
例如:
class   Father   {

public   void   showFather()   {

System.out.println(   "I 'm   father. "   )   ;
}

public   static   void   main(   String   args[]   )   {

Father   F   =   new   Father()   ;
F.showFather()   ;

}
}

class   Son   {

public   void   showSon()   {

System.out.println(   "I 'm   son. "   )   ;
}

public   static   void   main(   String   args[]   )   {

Son   S   =   new   Son()   ;
S.showSon()   ;
}
}
程序执行的结果是: "I 'm   father. ",显然没有执行Son类的主函数,难道编译器认为第一次出现的main函数为程序的入口......
回复 使用道具 举报

一个程序中只能有一个public类吗?
个人理解:可能没有public类。源程序中 ,当有2个以上类时,就必须要有1个public类,并且该类只能为main所在的类。
(没有public 类也能编译运行。。试过了。。)
那么函数的入口是哪个?
个人认为在执行的时候,只执行public的main(); 先执行执行public的main();
回复 使用道具 举报
      你的“一个程序中”是指一个文件中吧,如果这样的话,每个文件(编译单元)都只有一个public   类。因为每个编译单元都只能有一个公共接口,用public类来表现。该接口可以按照要求包含众多的支持包访问权限的类。如果有一个以上的public   类,编译器就会报错。  并且public类的名称必须与文件名相同(严格区分大小写)。  当然一个编译单元内也可以没有public类,这样文件名可以与这个文件中的任何一个相同都 可以。
    当一个文件中有两个类,每个类中都 有一个主函数,则入口以文件名为准,运行对应的类里的main(因为编译时需要指定文件名,接着JVM去找与文件名同名的类,是否是public 不管,然后去运行里面的main方法,如果没有则报错。 )
    最后求分。{:3_53:}
回复 使用道具 举报
本帖最后由 武庆东 于 2012-9-6 11:44 编辑

一个源文件中有一个public类或者没有,如果其中一个类的修饰符为public那么文件的名字和类名一致!
因为一个主类中中只有一个入口,所以只能有一个main()方法!
回复 使用道具 举报
如果一个.java文件中有多个类,那么
1,可以有一个public类,类名与文件名相同。
2,也可以没有public类,但main方法所在类必须和文件名相同。
3,可以有多个main方法,但其中至少一个main方法所在类的类名必须和文件名相同,执行时从该类进入,执行第一个出现的static main方法。
其他类中的main方法及该类中的其他main方法不执行。
回复 使用道具 举报
孙岳 发表于 2012-9-6 11:46
如果一个.java文件中有多个类,那么
1,可以有一个public类,类名与文件名相同。
2,也可以没有public类, ...

明白了,谢谢大家:victory:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马