黑马程序员技术交流社区

标题: 谁能跟我解释下“一个JAVA文件里面有且只有一个public的clas... [打印本页]

作者: Softlmis    时间: 2014-3-29 21:52
标题: 谁能跟我解释下“一个JAVA文件里面有且只有一个public的clas...
本帖最后由 Softlmis 于 2014-3-29 21:55 编辑


  1. <div class="blockcode"><blockquote>public class test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println("Hello World!");
  6.         }
  7. }

  8. public class te
  9. {

  10.         void te()
  11.         {
  12.                 System.out.println("te");
  13.         }
  14. }


复制代码

为什么一加上public就报错:
test.java:9: 错误: 类te是公共的, 应在名为 te.java 的文件中声明
public class te
        ^
1 个错误

而什么都不加,却可以?

----------
不要跟我说不加就是默认这种回答,看清问题再说!
作者: ヽし☆ve    时间: 2014-3-29 22:05
访问权限的问题,他有个默认的修饰protected(包访问权限),(应在名为 te.java 的文件中声明)是让你在建一个文件才能用Public
作者: Softlmis    时间: 2014-3-30 00:25
ヽし☆ve 发表于 2014-3-29 22:05
访问权限的问题,他有个默认的修饰protected(包访问权限),(应在名为 te.java 的文件中声明)是让你在建 ...

扯淡。类只有public和默认修饰符。而默认并不是你所谓的protected,而是什么都不写。
作者: syusikoku    时间: 2014-3-30 06:28
一个java文件里面是只能有一个public的class的。我们可以有多个。但是编译的时候,它们会生成独立的.class文件。public修饰的class要和源文件同名。否则在编译的时候会提示找不到class的
作者: ヽし☆ve    时间: 2014-3-30 10:34
Softlmis 发表于 2014-3-30 00:25
扯淡。类只有public和默认修饰符。而默认并不是你所谓的protected,而是什么都不写。 ...

默认是什么都不写???你大神行不
作者: 小班。    时间: 2014-3-30 17:34
本帖最后由 小班。 于 2014-3-30 17:40 编辑



作者: Softlmis    时间: 2014-3-30 20:01
syusikoku 发表于 2014-3-30 06:28
一个java文件里面是只能有一个public的class的。我们可以有多个。但是编译的时候,它们会生成独立的.class ...

只能对你“呵呵”。去学学再来回答好吗?
作者: Softlmis    时间: 2014-3-30 20:04
小班。 发表于 2014-3-30 17:34
  • public class test
  • {
  •         public static void main(String[] args)

  • 有的时候确实是这么规定的(就像1+1=2),但是有的时候规定是有原因。其实我要表达的意思是其原因是什么。
    作者: 小班。    时间: 2014-3-30 20:29
    Softlmis 发表于 2014-3-30 20:04
    有的时候确实是这么规定的(就像1+1=2),但是有的时候规定是有原因。其实我要表达的意思是其原因是什么 ...

    你有没有发现一个类文件在编译后会生成一个.class文件。我是这么理解的:如果在一个类文件中有两个public文件,编译成.class文件后,你说如果用这个.class文件生成对象,你说它生成是这个.class文件中的哪一个对象呢?是不是就不好分辨了呢。。。

    你有什么想法么?说出来讨论下。
    作者: Softlmis    时间: 2014-3-31 10:34
    小班。 发表于 2014-3-30 20:29
    你有没有发现一个类文件在编译后会生成一个.class文件。我是这么理解的:如果在一个类文件中有两个public ...

    没有public(默认修饰符)也是生成.class文件,那为什么就能区分开来。又该如何解释?
    作者: 小班。    时间: 2014-3-31 13:57
    你在问之前我还真没想过这个问题。
    我查了下,发现有个人的博客写的而特别好、你看下吧
    http://blog.csdn.net/bareheadzzq/article/details/6562211
    作者: ノtrack    时间: 2014-3-31 14:56
    你编译的java文件只能有一个public类,要与你编译的文件名一致, 实际开发中都是在包下面写的吧,不会在几个类同一文件里, 一对一的.    当然我只是菜鸟..  求不喷..
    作者: anqi    时间: 2014-3-31 18:07
    这个命名规则吧,public的意思就是公开,是给往外提供类的。假设你一个java文件中命名多个public类。当外部需要查找这个公开类的时候怎么通过文件名直接查到?
    默认的可以有多个是因为这是在同一包中,我是这个包的建立者,不需要对外提供,自然不需要单独的文件存放了。
    就如同还有你的te类是公开的,但内部没有public内容,公开何用?




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