Java基礎(chǔ)7:關(guān)于Java類和包的那些事-創(chuàng)新互聯(lián)

10多年的鄧州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整鄧州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“鄧州網(wǎng)站設(shè)計(jì)”,“鄧州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

更多內(nèi)容請關(guān)注微信公眾號(hào)【Java技術(shù)江湖】

這是一位阿里 Java 工程師的技術(shù)小站,作者黃小斜,專注 Java 相關(guān)技術(shù):SSM、SpringBoot、MySQL、分布式、中間件、集群、Linux、網(wǎng)絡(luò)、多線程,偶爾講點(diǎn)Docker、ELK,同時(shí)也分享技術(shù)干貨和學(xué)習(xí)經(jīng)驗(yàn),致力于Java全棧開發(fā)?。P(guān)注公眾號(hào)后回復(fù)”資料“即可領(lǐng)取 3T 免費(fèi)技術(shù)學(xué)習(xí)資源以及我我原創(chuàng)的程序員校招指南、Java學(xué)習(xí)指南等資源)

** Java基礎(chǔ)7:關(guān)于Java類和包的那些事
本文主要介紹了Java外部類和包的一些基本知識(shí)

內(nèi)部類與匿名內(nèi)部類的文章將在后面發(fā)布。

具體代碼在我的GitHub中可以找到

https://github.com/h3pl/MyTech

文章首發(fā)于我的個(gè)人博客:

https://h3pl.github.io/2018/04/24/javase7

<!-- more -->

*.Java文件

問題:一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?

  答案:可以有多個(gè)類,但只能有一個(gè)public的類,并且public的類名必須與文件名相一致。一個(gè)文件中可以只有非public類,如果只有一個(gè)非public類,此類可以跟文件名不同。

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

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

  1.每個(gè)編譯單元(文件)都只能有一個(gè)public類,這表示,每個(gè)編譯單元都有單一的公共接口,用public類來表現(xiàn)。該接口可以按要求包含眾多的支持包訪問權(quán)限的類。如果在某個(gè)編譯單元內(nèi)有一個(gè)以上的public類,編譯器就會(huì)給出錯(cuò)誤信息。

  2.public類的名稱必須完全與含有該編譯單元的文件名相同,包含大小寫。如果不匹配,同樣將得到編譯錯(cuò)誤。

  3.雖然不是很常用,但編譯單元內(nèi)完全不帶public類也是可能的。在這種情況下,可以隨意對文件命名。

總結(jié)相關(guān)的幾個(gè)問題:

1、一個(gè)”.java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?

??答:可以有多個(gè)類,但只能有一個(gè)public的類,并且public的類名必須與文件名相一致。

2、為什么一個(gè)文件中只能有一個(gè)public的類

??答:編譯器在編譯時(shí),針對一個(gè)java源代碼文件(也稱為“編譯單元”)只會(huì)接受一個(gè)public類。否則報(bào)錯(cuò)。

3、在java文件中是否可以沒有public類

??答:public類不是必須的,java文件中可以沒有public類。

4、為什么這個(gè)public的類的類名必須和文件名相同

??答: 是為了方便虛擬機(jī)在相應(yīng)的路徑中找到相應(yīng)的類所對應(yīng)的字節(jié)碼文件。

Main方法

主函數(shù):是一個(gè)特殊的函數(shù),作為程序的入口,可以被JVM調(diào)用

主函數(shù)的定義:

public:代表著該函數(shù)訪問權(quán)限是大的

static:代表主函數(shù)隨著類的加載就已經(jīng)存在了

void:主函數(shù)沒有具體的返回值

main:不是關(guān)鍵字,但是一個(gè)特殊的單詞,能夠被JVM識(shí)別

(String[] args):函數(shù)的參數(shù),參數(shù)類型是一個(gè)數(shù)組,該數(shù)組中的元素師字符串,字符串?dāng)?shù)組。main(String[] args) 字符串?dāng)?shù)組的 此時(shí)空數(shù)組的長度是0,但也可以在 運(yùn)行的時(shí)候向其中傳入?yún)?shù)。

主函數(shù)時(shí)固定格式的,JVM識(shí)別

主函數(shù)可以被重載,但是JVM只識(shí)別main(String[] args),其他都是作為一般函數(shù)。這里面的args知識(shí)數(shù)組變量可以更改,其他都不能更改。

一個(gè)java文件中可以包含很多個(gè)類,每個(gè)類中有且僅有一個(gè)主函數(shù),但是每個(gè)java文件中可以包含多個(gè)主函數(shù),在運(yùn)行時(shí),需要指定JVM入口是哪個(gè)。例如一個(gè)類的主函數(shù)可以調(diào)用另一個(gè)類的主函數(shù)。不一定會(huì)使用public類的主函數(shù)。

外部類的訪問權(quán)限

外部類只能用public和default修飾。

為什么要對外部類或類做修飾呢?

1.存在包概念:public 和 default 能區(qū)分這個(gè)外部類能對不同包作一個(gè)劃分 (default修飾的類,其他包中引入不了這個(gè)類,public修飾的類才能被import)

2.protected是包內(nèi)可見并且子類可見,但是當(dāng)一個(gè)外部類想要繼承一個(gè)protected修飾的非同包類時(shí),壓根找不到這個(gè)類,更別提幾層了

3.private修飾的外部類,其他任何外部類都無法導(dǎo)入它。

//Java中的文件名要和public修飾的類名相同,否則會(huì)報(bào)錯(cuò)//如果沒有public修飾的類,則文件可以隨意命名public class Java中的類文件 {}//非公共開類的訪問權(quán)限默認(rèn)是包訪問權(quán)限,不能用private和protected//一個(gè)外部類的訪問權(quán)限只有兩種,一種是包內(nèi)可見,一種是包外可見。//如果用private修飾,其他類根本無法看到這個(gè)類,也就沒有意義了。//如果用protected,雖然也是包內(nèi)可見,但是如果有子類想要繼承該類但是不同包時(shí),//壓根找不到這個(gè)類,也不可能繼承它了,所以干脆用default代替。class A{}

Java包的命名規(guī)則

以 java.* 開頭的是Java的核心包,所有程序都會(huì)使用這些包中的類;

以 javax.  開頭的是擴(kuò)展包,x 是 extension 的意思,也就是擴(kuò)展。雖然 javax.  是對 java.  的優(yōu)化和擴(kuò)展,但是由于 javax.  使用的越來越多,很多程序都依賴于 javax. ,所以 javax.  也是核心的一部分了,也隨JDK一起發(fā)布。

以 org.* 開頭的是各個(gè)機(jī)構(gòu)或組織發(fā)布的包,因?yàn)檫@些組織很有影響力,它們的代碼質(zhì)量很高,所以也將它們開發(fā)的部分常用的類隨JDK一起發(fā)布。

在包的命名方面,為了防止重名,有一個(gè)慣例:大家都以自己域名的倒寫形式作為開頭來為自己開發(fā)的包命名,例如百度發(fā)布的包會(huì)以 com.baidu.  開頭,w3c組織發(fā)布的包會(huì)以 org.w3c.  開頭,微學(xué)苑發(fā)布的包會(huì)以 net.weixueyuan.* 開頭……

組織機(jī)構(gòu)的域名后綴一般為 org,公司的域名后綴一般為 com,可以認(rèn)為 org.  開頭的包為非盈利組織機(jī)構(gòu)發(fā)布的包,它們一般是開源的,可以免費(fèi)使用在自己的產(chǎn)品中,不用考慮侵權(quán)問題,而以 com.  開頭的包往往由盈利性的公司發(fā)布,可能會(huì)有版權(quán)問題,使用時(shí)要注意。

import的使用

Java import以及Java類的搜索路徑
如果你希望使用Java包中的類,就必須先使用import語句導(dǎo)入
語法為:

import package1[.package2…].classname;package 為包名,classname 為類名。例如:import java.util.Date; // 導(dǎo)入 java.util 包下的 Date 類import java.util.Scanner; // 導(dǎo)入 java.util 包下的 Scanner 類import javax.swing.*; // 導(dǎo)入 javax.swing 包下的所有類,* 表示所有類

注意:

import 只能導(dǎo)入包所包含的類,而不能導(dǎo)入包。
為方便起見,我們一般不導(dǎo)入單獨(dú)的類,而是導(dǎo)入包下所有的類,例如 import java.util.*;。

Java 編譯器默認(rèn)為所有的 Java 程序?qū)肓?JDK 的 java.lang 包中所有的類(import java.lang.*;),其中定義了一些常用類,如 System、String、Object、Math 等,因此我們可以直接使用這些類而不必顯式導(dǎo)入。但是使用其他類必須先導(dǎo)入。

前面講到的”Hello World“程序使用了System.out.println(); 語句,System 類位于 java.lang 包,雖然我們沒有顯式導(dǎo)入這個(gè)包中的類,但是Java 編譯器默認(rèn)已經(jīng)為我們導(dǎo)入了,否則程序會(huì)執(zhí)行失敗。

java類的搜索路徑
Java程序運(yùn)行時(shí)要導(dǎo)入相應(yīng)的類,也就是加載 .class 文件的過程。
假設(shè)有如下的 import 語句:

import p1.Test;

該語句表明要導(dǎo)入 p1 包中的 Test 類。
安裝JDK時(shí),我們已經(jīng)設(shè)置了環(huán)境變量 CLASSPATH 來指明類庫的路徑,它的值為 .;%JAVA_HOME%lib,而 JAVA_HOME 又為 D:Program Filesjdk1.7.0_71,所以 CLASSPATH 等價(jià)于 .;D:Program Filesjdk1.7.0_71lib。

如果在第一個(gè)路徑下找到了所需的類文件,則停止搜索,否則繼續(xù)搜索后面的路徑,如果在所有的路徑下都未能找到所需的類文件,則編譯或運(yùn)行出錯(cuò)。

你可以在CLASSPATH變量中增加搜索路徑,例如 .;%JAVA_HOME%lib;C:javalib,那么你就可以將類文件放在 C:javalib 目錄下,Java運(yùn)行環(huán)境一樣會(huì)找到。

用戶自己寫的類可以通過IDE指定編譯后的class文件的輸出目錄,appclassloader會(huì)到指定目錄進(jìn)行類的加載

下面是一個(gè)import兩種訪問權(quán)限的類的實(shí)例:

文章題目:Java基礎(chǔ)7:關(guān)于Java類和包的那些事-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article24/dsgpce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站外貿(mào)建站、ChatGPT移動(dòng)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)