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


    test.java下public class classA

    public class classA{
      public static void main(String[] args){
           System.out.println("public  classA main...");
        }  
    }

     

    test.java下public class classA + class test

    public class classA{
      public static void main(String[] args){
            System.out.println("public classA main...");
        }  
    } 
    
    class test{
      public static void main(String[] args){
            System.out.println("class test main...");
       }  
    }

     

    test.java下public class classA + public class test

    public class test{
       public static void main(String[] args){
          System.out.println("public classA main...");
       }
    }
    
    public class classA{
       public static void main(String[] args){
          System.out.println("class test main...");
       }
    }

    test.java 下 class classA, class classB

    class classA{
       public static void main(String[] args){
          System.out.println("classA main...");
       }
    }
    
    class classB{
       public static void main(String[] args){
          System.out.println("classB main...");
       }
    }

    test.java 下 class test, class classB

    class test{
       public static void main(String[] args){
          System.out.println("test main...");
       }
    }
    
    class classB{
       public static void main(String[] args){
          System.out.println("classB main...");
       }
    }

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

    规定:编译器决定

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

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

    (参考:www.cnblogs.com/fuhongliang/p/4304477.html

    优点:

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

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

  • 相关阅读:
    LeetCode12: 整数转罗马数字
    LeetCode11:盛最多水的容器
    LeetCode09:判断回文数
    LeetCode08:字符串转换成整数
    LeetCode04:寻找中位数
    LeetCode03:无重复字符的最长子串
    《JAVA编程思想》第四版 PDF 下载 中文版和英文版 高清PDF扫描带书签
    XML
    异常
    委托和匿名方法和Lambda表达式
  • 原文地址:https://www.cnblogs.com/datamining-bio/p/13050332.html
Copyright © 2020-2023  润新知