java中public 类名_java文件名为什么要和public类名一致?

①test.java下public class classA

public classclassA{public static voidmain(String[] args){

System.out.println("public classA main...");

}

}

0d8b0f37c6805a838cf02c00d5c0a21a.png

②test.java下public class classA + class test

public classclassA{public static voidmain(String[] args){

System.out.println("public classA main...");

}

}classtest{public static voidmain(String[] args){

System.out.println("class test main...");

}

}

060186621dd543aa944feefc20a845a7.png

③test.java下public class classA + public class test

public classtest{public static voidmain(String[] args){

System.out.println("public classA main...");

}

}public classclassA{public static voidmain(String[] args){

System.out.println("class test main...");

}

}

12da7f75a90884ffbf05cdd87bb41464.png

④test.java 下 class classA, class classB

classclassA{public static voidmain(String[] args){

System.out.println("classA main...");

}

}classclassB{public static voidmain(String[] args){

System.out.println("classB main...");

}

}

d2f91fe5715f9053937c37894b03e8a1.png

a799d9abcf5d5dfe2baeb0e19647f36b.png

⑤test.java 下 class test, class classB

classtest{public static voidmain(String[] args){

System.out.println("test main...");

}

}classclassB{public static voidmain(String[] args){

System.out.println("classB main...");

}

}

d56e6a77dd211316a8e2fcb8974543b1.png

1e8886b2a37741e4a3a331bb405d6a72.png

现象:只要代码中有public类就必须和文件名一致,否则编译报错,但是没有public类则文件名和类名无所谓。

规定:编译器决定

(《java编程思想》):当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元),每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,这是因为它们不是public类,而且它们主要用来为主public类提供支持。

每个编译单元(文件)只能有一个public类,意思是,每个编译单元只能有一个公开接口,而这个接口就由其public类来表示。(软件架构设计和安全性设计上得出的结论,或者说java的设计者们从这方面的考虑,或者真是一个规范?)

优点:

(1)防止.class文件覆盖,A.java下public class B若不记住这种关系,则可能再写出B.java下public class B,编译后只会留有一份B.class

(2)被项目中其他任何类引用时,只需在使用它前import所对应的class文件即可,将类名与文件名一一对应就可以方便虚拟机在相应的路径(包中)中找到相应的类的信息,否则很难找到需要的类,开销也很大。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值