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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张帅 黑马帝   /  2011-12-19 10:10  /  9226 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张帅 于 2011-12-19 11:59 编辑

java程序是从一个public类的main函数开始执行的,被jvm所识别
所以如果有多个public,那么它将不知道从哪个类开始执行,
这是我的理解,不知道对不对

评分

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

查看全部评分

19 个回复

倒序浏览
我认为可以这么理解。
回复 使用道具 举报
刘博 黑马帝 2011-12-19 10:20:35
藤椅
java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。     只能有一个public类是为了给类装载器提供方便。     一个public   类只能定义在以它的类名为文件名的文件中。

每个编译单元(文件)都只有一个public   类。因为每个编译单元都只能有一个公共接口,用public类来表现。该接口可以按照要求包含众多的支持包访问权限的类。如果有一个以上的public   类,编译器就会报错。  并且public类的名称必须与文件名相同(严格区分大小写)。  当然一个编译单元内也可以没有public类。

在一个源文件.JAVA文件中可以有很多类,只有一个PUBLIC类其他的都不能是.   
在PUBLIC类中找程序的入口   main函数  你想想如果很多PUBLIC   类,那程序从何运行呢?

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void main(String[] args)
主函数是一个特殊的函数,作为程序的入口,可以被jvm调用。
主函数的定义:
public:代表着该函数访问权限是最大的。
static:代表着主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是一个特殊的单词,可以被jvm识别。
(String[] args):函数的参数,参数类型是一个数组,该数组中的元素类型是字符串类型。
主函数是固定格式的,jvm识别。
public只是代表访问权限,可以有多个。同样地还有private

评分

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

查看全部评分

回复 使用道具 举报
刘旭 黑马帝 2011-12-19 10:29:19
报纸
java中不允许定义多个public类。当虚拟机执行程序时,会首先找到public类,然后从这个类中寻找主方法,执行程序。如果主方法没有定义在public类中,编译可以通过,但是执行时会抛出异常。所以,我认同你的看法。

评分

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

查看全部评分

回复 使用道具 举报
张帅 黑马帝 2011-12-19 11:55:40
地板
说的有道理,常兆鹏 只是把视频的东西讲了下,孤独的人 和 刘旭 谈了下自己的看法,很好,受教了,
一个如果一个想独立运行的类,他必须得有main函数,否则  会  Exception in thread "main" java.lang.NoSuchMethodError: main,很好
最后,能不能也给我点分,求分。。。

评分

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

查看全部评分

回复 使用道具 举报
郭繁森 黑马帝 2011-12-19 12:01:40
7#
public 和 private一样,是权限修饰符。一个放大权限,一个缩小权限。
JVM通过main关键字 寻找入口,只要类中没有多个main都是可以的,都能被JVM识别,如果main多了,也
就是入口多了,编译器会报错的

评分

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

查看全部评分

回复 使用道具 举报
其实也可以一个public类也没有,这时就没有必要非的保证类名和java文件名一致了


jAVA中类的修饰几也就几个


public     公共类
默认类  (即class前什么都不假)
abstract   抽象类
fanal      不能被继承的类
static     静态类
private    只能修饰内部类
被public修饰的类是JVM的入口,也就是包含main函数的类,一但类被public修饰后,JAVA文件名就必须和类名一致

评分

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

查看全部评分

回复 使用道具 举报
窦超 黑马帝 2011-12-19 16:44:43
9#
public类是java程序执行main函数的起始点,在后台是识别到他才开始继续运行的,所以为了类装载器不会出现不知道运行哪个的问题只能有一个public类,他的定义要和文件名一致

评分

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

查看全部评分

回复 使用道具 举报
梁俊 黑马帝 2011-12-19 17:56:43
10#
  1. public class RegexDemo
  2. {
  3.         public static void checkQQ(String tel)
  4.         {
  5.         }

  6. }
  7. class ss
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 RegexDemo.checkQQ("18600019999");
  12.         }
  13. }
复制代码
我保存在RegexDemo.java里也正确编译啊,
main函数的 类,不用必须是public的吧

评分

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

查看全部评分

回复 使用道具 举报
张冬冬 黑马帝 2011-12-19 18:19:31
11#
本帖最后由 张冬冬 于 2011-12-19 18:20 编辑

你这么理解不对!
函数是从main函数开始运行的,并不是找public类中的main方法,
一个java文件即使没有公共类也是可以运行的,只要有main主函数就能运行,所以和是不是公共类没关系!
只不过public的类,java文件的名字要和类一致,只有这点不同。

点评

说的很对  发表于 2011-12-21 11:47

评分

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

查看全部评分

回复 使用道具 举报
舒远 黑马帝 2011-12-19 18:58:35
12#
张冬冬说的很对。
回复 使用道具 举报
张冬冬 黑马帝 2011-12-21 10:54:01
13#
舒远 发表于 2011-12-19 18:58
张冬冬说的很对。

:#  谢谢夸奖!
回复 使用道具 举报
房宝彬 黑马帝 2011-12-21 11:11:10
14#
11楼正解
回复 使用道具 举报
张帅 黑马帝 2011-12-21 11:48:14
15#
房宝彬 发表于 2011-12-21 11:11
11楼正解

是滴,这点我原来确实不知道
回复 使用道具 举报
黄战胜 黑马帝 2011-12-21 11:59:55
16#
首先说明你的理解大错特错。
在理解此问题上首先要明确各个关键字的含义,及在程序中的作用。我说明两点。
1,在Java程序中,对成员的修饰一共有四种。public private protected 默认 :这几个关键字是决定成员变量和成员方法的访问权限。跟虚拟机开始执行哪个程序没有直接关系。
2,在开发Java虚拟机的时候,就是默认了main关键字标志的程序为程序的开始。这个有虚拟机决定的,如果当时在开发Java虚拟机的时候把关键字hei作为程序的开头的话,那么虚拟机在执行程序的时候它就会把hei关键字作为程序的开头。而不是main。程序编译,汇编之后体现给虚拟机的就是一个二进制文件,虚拟机具体从那里开始执行要有一个约定,在二进制中体现出来的也就是一个i标号的地址。
回复 使用道具 举报
张帅 黑马帝 2011-12-21 12:09:28
17#
hzs_android 发表于 2011-12-21 11:59
首先说明你的理解大错特错。
在理解此问题上首先要明确各个关键字的含义,及在程序中的作用。我说明两点。
...

嗯,说的对,我确实在这迷糊了
回复 使用道具 举报
房宝彬 黑马帝 2011-12-21 20:49:37
18#
一个类里面 好象是 必须要有一个或多个public吧?张东东?
回复 使用道具 举报
奔→跑 黑马帝 2011-12-21 22:08:04
19#
public 是权限修饰符;
包与包之间必须由public修饰才能访问;
回复 使用道具 举报
张冬冬 黑马帝 2011-12-22 18:45:11
20#
房宝彬 发表于 2011-12-21 20:49
一个类里面 好象是 必须要有一个或多个public吧?张东东?

有public的类,可以被别的包调用,而没有public的不能被别的包调用。
如果一个类就是单独运行的,和别的类没有关系,就不需要有public类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马