java入門---物件導向編程之包(package)&import 關鍵字&dos命令設定 CLASSPATH 系統變數__編程

來源:互聯網
上載者:User

    為了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。Java 使用包(package)這種機制是為了防止命名衝突,存取控制,提供搜尋和定位類(class)、介面、枚舉(enumerations)和注釋(annotation)等。我們來看下它的作用:

1、把功能相似或相關的類或介面組織在同一個包中,方便類的尋找和使用。

2、如同檔案夾一樣,包也採用了樹形目錄的儲存方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。

3、包也限定了存取權限,擁有包存取權限的類才能訪問某個包中的類。

    看下它的文法格式:

package pkg1 [ . pkg2 [ . pkg3 … ] ] ;

    例如,一個Something.java 檔案它的內容:

package net.java.util;
public class Something{
   ...
}

    那麼它的路徑應該是 net/java/util/Something.java 這樣儲存的。 package(包) 的作用是把不同的 java 程式分類儲存,更方便的被其他 java 程式調用。一個包(package)可以定義為一組相互聯絡的類型(類、介面、枚舉和注釋),為這些類型提供訪問保護和命名空間管理的功能。以下是一些 Java 中的包:

java.lang-打包基礎的類 java.io-包含輸入輸出功能的函數

    開發人員可以自己把一組類和介面等打包,並定義自己的包。而且在實際開發中這樣做是值得提倡的,當你自己完成類的實現之後,將相關的類分組,可以讓其他的編程者更容易地確定哪些類、介面、枚舉和注釋等是相關的。由於包建立了新的命名空間(namespace),所以不會跟其他包中的任何名字產生命名衝突。使用包這種機制,更容易實現存取控制,並且讓定位相關類更加簡單。

    瞭解了基本的東西之後我們就來嘗試建立和使用它。建立包的時候,你需要為這個包取一個合適的名字。之後,如果其他的一個源檔案包含了這個包提供的類、介面、枚舉或者注釋類型的時候,都必須將這個包的聲明放在這個源檔案的開頭。包聲明應該在源檔案的第一行,每個源檔案只能有一個包聲明,這個檔案中的每個類型都應用於它。如果一個源檔案中沒有使用包聲明,那麼其中的類,函數,枚舉,注釋等將被放在一個無名的包(unnamed package)中。讓我們來看一個例子,這個例子建立了一個叫做animals的包。通常使用小寫字母來命名避免與類、介面名字的衝突。首先在 animals 包中加入一個介面(interface):

/* 檔案名稱: Animal.java */
package animals;
 
interface Animal {
   public void eat();
   public void travel();
}

    接下來,在同一個包中加入該介面的實現:

package animals;
 
/* 檔案名稱 : MammalInt.java */
public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   }
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

    然後,編譯這兩個檔案,並把他們放在一個叫做animals的子目錄中。用下面的命令來運行:

$ mkdir animals$ cp Animal.class  MammalInt.class animals$ java animals/MammalIntMammal eatsMammal travel

    為了能夠使用某一個包的成員,我們需要在 Java 程式中明確匯入該包。使用 "import" 語句可完成此功能。在 java 源檔案中 import 語句應位於 package 語句之後,所有類的定義之前,可以沒有,也可以有多條,其文法格式為:

import package1 [ . package2 … ] . ( classname |* ) ;

    如果在一個包中,一個類想要使用本包中的另一個類,那麼該包名可以省略。下面的 payroll 包已經包含了 Employee 類,接下來向 payroll 包中添加一個 Boss 類。Boss 類引用 Employee 類的時候可以不用使用 payroll 首碼,Boss類的執行個體如下(Boss.java檔案):

package payroll;
 
public class Boss
{
   public void payEmployee(Employee e)
   {
      e.mailCheck();
   }
}

    如果 Boss 類不在 payroll 包中又會怎樣。Boss 類必須使用下面幾種方法之一來引用其他包中的類。使用類全名描述,例如:

payroll . Employee

    用 import 關鍵字引入,使用萬用字元 "*":

import payroll .*;

    使用 import 關鍵字引入 Employee 類:

import payroll . Employee ;

    不過我們要注意,類檔案中可以包含任意數量的 import 聲明。import 聲明必須在包聲明之後,類聲明之前。

    在這裡呢,我們再來熟悉下package的目錄結構。類放在包中會有兩種主要的結果:

包名成為類名的一部分,正如我們前面討論的一樣。 包名必須與相應的位元組碼所在的目錄結構相吻合。

    下面是管理你自己 java 中檔案的一種簡單方式。首先是,將類、介面等類型的源碼放在一個文本中,這個檔案的名字就是這個類型的名字,並以.java作為副檔名。例如:

// 檔案名稱 :  Car.java
 
package vehicle;
 
public class Car {
   // 類實現  
}

    接下來,把源檔案放在一個目錄中,這個目錄要對應類所在包的名字:

....\ vehicle \ Car . java

    現在,正確的類名和路徑將會是如下樣子:

類名 -> vehicle.Car

路徑名 -> vehicle\Car.java (在 windows 系統中)

    通常,一個公司使用它互連網網域名稱的顛倒形式來作為它的包名.例如:互連網網域名稱是 luyaran.com,所有的包名都以 com.lytaran 開頭。包名中的每一個部分對應一個子目錄。例如:有一個 com.luyaran.test 的包,這個包包含一個叫做 Luyaran.java 的源檔案,那麼相應的,應該有如下面的一連串子目錄:

....\ com \ luyaran \ test \ Luyaran . java

    編譯的時候,編譯器為包中定義的每個類、介面等類型各建立一個不同的輸出檔案,輸出檔案的名字就是這個類型的名字,並加上 .class 作為擴充尾碼。例如:

// 檔案名稱: Luyaran.java
 
package com.lyaran.test;
public class Luyaran {
      
}
class Google {
      
}

    現在,我們用-d選項來編譯這個檔案,如下:

$javac -d . Luyaran.java

    這樣會像下面這樣放置編譯了的檔案:

.\com\luyaran\test\Luyaran.class.\com\luyaran\test\Google.class

    可以像下面這樣來匯入所有 \com\luyaran\test\ 中定義的類、介面等:

import com.luyaran.test.*;

    編譯之後的 .class 檔案應該和 .java 源檔案一樣,它們放置的目錄應該跟包的名字對應起來。但是,並不要求 .class 檔案的路徑跟相應的 .java 的路徑一樣。你可以分開來安排源碼和類的目錄。

<path-one>\sources\com\luyaran\test\Luyaran.java<path-two>\classes\com\luyaran\test\Google.class

    這樣,你可以將你的類目錄分享給其他的編程人員,而不用透露自己的源碼。用這種方法管理源碼和類檔案可以讓編譯器和java 虛擬機器(JVM)可以找到你程式中使用的所有類型。類目錄的絕對路徑叫做 class path。設定在系統變數 CLASSPATH 中。編譯器和 java 虛擬機器通過將 package 名字加到 class path 後來構造 .class 檔案的路徑。<path- two>\classes 是 class path,package 名字是 com.luyaran.test,而編譯器和 JVM 會在 <path-two>\classes\com\luyaran\test 中找 .class 檔案。一個 class path 可能會包含好幾個路徑,多重路徑應該用分隔字元分開。預設情況下,編譯器和 JVM 尋找目前的目錄。JAR 檔案按包含 Java 平台相關的類,所以他們的目錄預設放在了 class path 中。

    既然都說到了這裡,咱們就來看下如何使用dos命令來設定 CLASSPATH 系統變數。我們可以用下面的命令顯示當前的CLASSPATH變數:

Windows 平台(DOS 命令列下):C:\> set CLASSPATH UNIX 平台(Bourne shell 下):# echo $CLASSPATH

    刪除當前CLASSPATH變數內容:

Windows 平台(DOS 命令列下):C:\> set CLASSPATH= UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH

    設定CLASSPATH變數:

Windows 平台(DOS 命令列下): C:\> set CLASSPATH=C:\users\jack\java\classes UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH     好啦,關於包的東西到這裡就記錄完畢了。如果感覺不錯的話,請多多點贊支援哦。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.