亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中package是什么

發布時間:2020-10-29 10:17:35 來源:億速云 閱讀:234 作者:小新 欄目:編程語言

這篇文章主要介紹Java中package是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Java里的包,可以理解成文件夾因為它是一種樹形結構的路徑,當我們用package把包聲明到某個package下面時,我們也要把它的.class放到以該package為名字的目錄下,否則將找不到類。

要把類放到某個包需要用package語句,事實上,當我們沒有使用package語句時,我們的類都被放到了一個默認缺省包,這也是為什么我們運行Java程序時,在運行目錄下面不能有同名的.class文件。

此外,一個完整類名是包名+類名,在沒有import導入的情況下,使用一個類需要給出完整的類名,如java.util.Date。為了方便,Java自動導入兩個包java.lang和現在文件的缺省包,也就是說:(1)Java規定,其他包使用java.lang包中的類時無需給出完整類名;(2)缺省包中的類之間(或者說同一個包下面)互相使用也不需要給出完整類名。

 

有包的類和無包的類互相訪問有以下規則:(1)無包的類可以訪問有包的類, 直接導入即可;(2)有包的類無法訪問無包的類, 直接訪問是找同一個包中的, 由于不同包需要導入, 而無包的類無法導入;(3)在定義類的時候, 為了讓別人都能使用到, 所以一定要定義一個包。

Java的包表面上看(從路徑上看)是有等級的,但實際上并沒有,比如java.awt,java.awt.color是兩個地位相同的包。java.awt.color并不屬于java.awt。

在采用類名方式使用一個類的時候, 先在當前包中查找是否有這個類, 如果沒有才去導入的包中找。

包的成員

一些相關聯的類、接口、枚舉、注釋類型、包中的類所用到的資源文件如圖片等

包的作用

(1)將相關聯的接口和類集合到一塊

比如,package graphics; 就把圖形處理相關的模塊放到一起

(2)避免了類型之間命名沖突:包作為一種封裝,給類提供多層命名空間。

(3)實現了外界對包的訪問控制

包的使用(包的聲明、導入)

總的來說,包的使用可以總結為三個步驟:如何將類和接口捆綁到包中、如何使用包中的類、以及如何安排文件系統以便編譯器找到源文件。

一、定義包

1、帶包類的聲明

在源代碼的第一行使用package關鍵字定義包. 包名通常全部小寫, 用"."分隔。

包的命名規范見鏈接:https://segmentfault.com/a/1190000008711718

https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

包的聲明有以下原則:(1)package語句必須放在源文件開頭;(2)一個源文件只能有一個package語句;(3)包名字全部小寫,避免與類、接口的名字沖突。

2、編譯帶包的類

javac -d 目錄 源文件名.java

3、運行帶包的類

java 包名.類名

二、使用包

同個包的類之間訪問比較簡單,在代碼中直接以類名使用;而不同包之間的訪問則必須滿足一個條件:一個類如果希望被其他包中的類訪問, 那么必須加上public修飾(注意:用public修飾的類必須和文件名同名)。不同包之間的使用通常有以下3種方法:(1)使用全名訪問類;(2)import 該類;(3)import 包含該類的整個包

1、使用全名

假設有個graphics包,其中有個Circle類(public修飾),那么外包訪問它時如下所示:

graphics.Circle cir = new graphics.Circle();

2、導入該類

上面使用全名的方法有些繁瑣,如果要略寫或者經常使用這個類時可以這樣:

import graphics.Circle;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
    }
}

3、導入整個包

當我們想要使用該包的更多類,比如Line類時,可以把該包的所有類都導入:

import graphics.*;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
        Line line = new Line();
    }
}

三、管理文件系統

許多Java平臺的實現依賴于文件系統的等級制度 來管理源文件和class文件。我們一般把類、接口、枚舉、注釋類型放在可以反映包名的目錄中,比如,Rectangle.java屬于graphics類,我們就放在.....\graphics\Rectangle.java的路徑上。同樣,我們對其進行編譯產生的class文件也要放在類似的目錄上(這個目錄最好不要和源文件放在一起),這樣的好處是當我們要復用某個類時,就知道到哪去找了,JVM在運行程序時也知道去哪里找類。

比如,源文件放在:<path_one>\sources\com\example\graphics\Rectangle.java

class文件放在:<path_two>\classes\com\example\graphics\Rectangle.class,其中,<path_two>\classes是類路徑(class path),由CLASSPATH系統變量進行設置,而包名是com.example.graphics。編譯器、JVM通過將包名稱添加到類路徑來構造.class文件的路徑。

所以編譯器、JVM在路徑<path_two>\classes\com\example\graphics中查找類文件。class path可以有好幾條,由分號(Windows)或冒號(UNIX)分隔。 默認情況下,編譯器、JVM搜索當前目錄和包含Java平臺類的JAR文件,所以這些目錄自動位于類路徑中。

CLASSPATH是JVM或Java編譯器中的一個參數,它指定用戶定義的類和包的位置。 可以在命令行上或通過環境變量設置。默認情況下,我們訪問JDK標準API和擴展包時,無需設置查找位置。 而用戶自定義的包和庫,則必須設置。由于JVM會在當前目錄下搜索,所以當我們的文件都在運行目錄下時,也可以不設置CLASSPATH。

有關CLASSPATH可以參考:

https://en.wikipedia.org/wiki/Classpath_%28Java%29

https://en.wikipedia.org/wiki/Java_Classloader

關于Import

關于import,有三個注意的地方。

1、

首先是,Java的包表面上的等級問題。從路徑上看,包似乎是分層的,但它們不是。 例如,Java API包括java.awt包,java.awt.color包,java.awt.font包等等。但是,java.awt.color包、java.awt.font包和其他java.awt.xxxx包并不屬于java.awt。 前綴java.awt(The Java abstract window toolkit)的作用只是告訴開發者——和窗口有關的包都在這里面。但是包和包之間并不是包含關系。

當你導入java.awt.*時,會導入java.awt包中的所有類型,但它不會導入java.awt.color,java.awt.font或任何其他java.awt.xxxx包的所有類型。 如果你要使用java.awt.color中的類以及java.awt中的類,則必須同時導入導入這兩個包:

import java.awt.*;
import java.awt.color.*;

2、

其次是名字含糊不清的問題。當你導入的兩個包中有一個類名字相同時,如果你繼續采用縮寫,就會出現一些問題。這時,你就要使用這個類的全名。比如,java.util、java.sql包中都有Date類,程序又同時導入了這兩個包中的Date類。

import java.sql.*;
import java.date.*;

3、static import

當我們需要頻繁訪問某個類的常量和靜態方法,反復寫它們的前綴(全名)可能不利于代碼閱讀。 靜態import語句就提供了一種導入要使用的常量和靜態方法的方法,這樣您就不需要為其名稱添加前綴。比如java.lang.Math類定義PI常量和許多靜態方法,包括計算正弦,余弦,切線,平方根,最大值,最小值,指數等。

import static java.lang.Math.PI;
import static java.lang.Math.cos;

public class ImportTest {
    public static void main(String[] args) {
        double r = Math.cos(Math.PI * 2);
		double r1 = Math.cos(PI * 2);
		double r2 = cos(PI * 2);
		System.out.println(r+" "+r1+" "+r2);    
    }
}

當然,你也可以直接全部導入:

import static java.lang.Math.*;

應該注意的是,使用靜態導入時要非常謹慎。 過度使用靜態導入會導致代碼難以閱讀和維護,因為閱讀者不知道某個特定的靜態對象是哪個類的。 不過,當我們恰當地使用靜態導入時,代碼可以因為不用繁瑣地寫全名而更具可讀性。

以上是Java中package是什么的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

从江县| 贵定县| 和硕县| 云南省| 颍上县| 南丰县| 翼城县| 永修县| 襄樊市| 安化县| 穆棱市| 叶城县| 利辛县| 朔州市| 靖远县| 施甸县| 莱阳市| 伊宁县| 滕州市| 晋中市| 婺源县| 博湖县| 北票市| 克拉玛依市| 思南县| 肃宁县| 伊金霍洛旗| 平陆县| 土默特右旗| 驻马店市| 清镇市| 西藏| 丽水市| 霍林郭勒市| 綦江县| 唐海县| 炉霍县| 马龙县| 泸州市| 通河县| 台南县|