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

本帖最后由 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 个错误

而什么都不加,却可以?

----------
不要跟我说不加就是默认这种回答,看清问题再说!

评分

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

查看全部评分

12 个回复

倒序浏览
访问权限的问题,他有个默认的修饰protected(包访问权限),(应在名为 te.java 的文件中声明)是让你在建一个文件才能用Public
回复 使用道具 举报
ヽし☆ve 发表于 2014-3-29 22:05
访问权限的问题,他有个默认的修饰protected(包访问权限),(应在名为 te.java 的文件中声明)是让你在建 ...

扯淡。类只有public和默认修饰符。而默认并不是你所谓的protected,而是什么都不写。
回复 使用道具 举报
一个java文件里面是只能有一个public的class的。我们可以有多个。但是编译的时候,它们会生成独立的.class文件。public修饰的class要和源文件同名。否则在编译的时候会提示找不到class的
回复 使用道具 举报
Softlmis 发表于 2014-3-30 00:25
扯淡。类只有public和默认修饰符。而默认并不是你所谓的protected,而是什么都不写。 ...

默认是什么都不写???你大神行不
回复 使用道具 举报
本帖最后由 小班。 于 2014-3-30 17:40 编辑

  • public class test
  • {
  •         public static void main(String[] args)
  •         {
  •                 System.out.println("Hello World!");
  •         }
  • }
  • //你这里定义了两个类,但是有要求规定,一个类中有且只能有一个类为public修饰,且该类名与该文件名一致。所以在编译时会问你是否需要再建立一个te.java文件来存放te.java类。而且默认的是该类的使用范围为default,即只能在同一个包内访问
  • public class te//上面的类已经是public了,这里不可以用public来修饰类名
  • {
  •         void te()
  •         {
  •                 System.out.println("te");
  •         }
  • }

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个! ing

查看全部评分

回复 使用道具 举报
syusikoku 发表于 2014-3-30 06:28
一个java文件里面是只能有一个public的class的。我们可以有多个。但是编译的时候,它们会生成独立的.class ...

只能对你“呵呵”。去学学再来回答好吗?
回复 使用道具 举报
小班。 发表于 2014-3-30 17:34
  • public class test
  • {
  •         public static void main(String[] args)

  • 有的时候确实是这么规定的(就像1+1=2),但是有的时候规定是有原因。其实我要表达的意思是其原因是什么。
    回复 使用道具 举报
    Softlmis 发表于 2014-3-30 20:04
    有的时候确实是这么规定的(就像1+1=2),但是有的时候规定是有原因。其实我要表达的意思是其原因是什么 ...

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

    你有什么想法么?说出来讨论下。
    回复 使用道具 举报
    小班。 发表于 2014-3-30 20:29
    你有没有发现一个类文件在编译后会生成一个.class文件。我是这么理解的:如果在一个类文件中有两个public ...

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