一個.java文件內只能寫一個class嗎


先給結論:當然不是!!

可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。一個文件中可以不含public類,如果只有一個非public類,此時可以跟文件名不同。

為什么一個java源文件中只能有一個public類?

 在java編程思想(第四版)一書中有這樣3段話(6.4 類的訪問權限):

  1. 每個編譯單元(文件)都只能有一個public類,這表示,每個編譯單元都有單一的公共接口,用public類來表現。該接口可以按要求包含眾多的支持包訪問權限的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出錯誤信息。
  2. public類的名稱必須完全與含有該編譯單元的文件名相同,包含大小寫。如果不匹配,同樣將得到編譯錯誤。
  3. 雖然不是很常用,但編譯單元內完全不帶public類也是可能的。在這種情況下,可以隨意對文件命名。

例如:

package ab;

class Alpha {
    private int privateVar;
    Alpha(int _privateVar){     //構造方法
        privateVar = _privateVar;
    }
    boolean isEuqualTo(Alpha b) {
        if (this.privateVar == b.privateVar) return true;
        else return false;
    }
}
public class Beta{
    public static void main(String[] args){
        Alpha a = new Alpha(1);
        Alpha b = new Alpha(2);
        System.out.println(a.isEuqualTo(b));
    }
}

編譯會產生兩個.class文件,且能正確運行。

 

其次,這里並沒有要求main函數只能寫在public類中(雖然我們通常是這么做的)。我們可以把main函數寫在非public類中,例如新建test.java:

package exercise;

public class test {
    public static void func(){
        System.out.println(1);
    }
}

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

 Java里面就是main方法(這個main方法只需要放到任意一個類中即可)。當你用java執行這個類時,系統會尋找main方法作為入口執行。

所以這里test類中的函數根本沒有執行,結果只打印出2。

 

參考鏈接:

 1、https://www.cnblogs.com/zhukunqiang/p/6652787.html

 2、https://blog.csdn.net/bareheadzzq/article/details/6562211

 3、https://www.jianshu.com/p/8624e27ae45d


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM