一、 包的概念及使用
1. package 是在使用多個類或接口時,爲了避免名稱重複而採用的一種措施,直接在程序中加入 package 關鍵字即可。
作用:用於將完成不同功能的類分門別類,放在不同的目錄(包)下。
命名規則:將公司域名反轉作爲包名。www.sun.com, com.sun(包名), 對於包名:每個字母都需要小寫。
【定義格式】
package 包名稱。子包名稱;
//爲程序打包
package org.sdd.demo08; //定義一個包
class Demo{
public String getInfo(){
return "Hello World!!!";
}
}
public class PackageDemo01{
public static void main(String args[]){
System.out.println(new Demo().getInfo()); //實例化本包對象
}
}
以上程序主要的功能是在屏幕上打印“Hello World!!!”字符串,但是因爲程序是在包中,所以此時完整的類名稱應該爲 “包。類名稱”,即“org.sdd.demo08.PackageDemo01”, 在編譯的時必須加上若干參數纔行,編譯語法如下:
編譯:javac -d 。 PackageDemo01.java
-d: 表示生成目錄,生成的目錄以package 的定義爲準。
。:表示在當前所在的文件夾中生成。
執行: java org.sdd.demo08.PackageDemo01
2. 導入(import),將使用 package 分離的各個類導入回來,讓編譯器能夠找到所需要的類。
注意:導入的是一個類,而不是一個包。 import aa.bb.*並不會導入 aa.bb.cc包下的類,這是需要寫:import aa.bb.*; import aa.bb.cc.*;
【格式 類的導入】
import 包名稱。子包名稱。類名稱;-> 手工導入所需要的類
import 包名稱。子包名稱。*;-> 由JVM 自動加載所需要的類
//新加一個文件修改Demo類的定義
package org.sdd.demo08.a; //定義一個包
public class Demo{ //定義爲public的類必須與文件名相同
public String getInfo(){
return "Hello World!!!";
}
}
//在另外一個類中引用Demo類
package org.sdd.demo08.b;
import org.sdd.demo08.a.Demo; //導入不同包中的Demo類
public class ImportDemo01{
public static void main(String args[]){
System.out.println(new Demo().getInfo());
}
}
提示:關於 public class 與 class 聲明類的補充。
如果一個類聲明爲 public class,則文件名稱必須與類名稱一直,而且在一個類文件中只能有一個 public class, 而如果使用 class 聲明一個類,則文件名稱可以與類名稱不一致,但是執行時必須執行生成的class 文件名稱。除了這些之外,public class 和 class 還在包的訪問上有所限制,如果一個類只在本包中訪問,不需要被外包訪問,則直接聲明稱 class 即可;而如果一個類需要被外包訪問,則必須聲明爲
public class。
可以使用“*”方式由 JVM 根據需要自動加載所需的類,手動導入與使用*號導入性能是一樣的。但是,如果在一個程序中同時導入了兩個包的同名類,在使用時就必須明確地寫出完整的“包。類名稱”。
3. 靜態導入
JDK 1.5之後提供了靜態導入功能。如果一個類中的方法全部是使用 static 聲明的靜態方法,則在導入時就可以直接誒使用 import static 的方式導入。
【格式 靜態導入】
import static包。類。*;
//定義一個類,全部由靜態方法組成
package org.sdd.demo08.e;
public class Operate{ //裏面的方法全部都是 static 類型
public static int add(int i, int j){ //加法操作
return i + j;
}
public static int sub(int i, int j){ //減法操作
return i - j;
}
public static int mul(int i, int j){ //乘法操作
return i * j;
}
public static int div(int i, int j){ //除法操作
return i / j;
}
}
//使用靜態導入
package org.sdd.demo08.f;
import static org.sdd.demo08.e.Operate.*; //靜態導入
public class StaticImportDemo{
public static void main(String args[]){
System.out.println("3 + 3 = " + add(3, 3)); //直接調用靜態方法
System.out.println("3 - 2 = " + sub(3, 2)); //直接調用靜態方法
System.out.println("3 * 3 = " + mul(3, 3)); //直接調用靜態方法
System.out.println("3 / 3 = " + div(3, 3)); //直接調用靜態方法
}
}
使用靜態導入,所以 Operate 類中的所有靜態方法可以直接在 StaticImportDemo 類中使用,而不需要使用“類。靜態方法()” 的形式調用。總結: 當需要使用的類與當前類不再同一個目錄下才需要導入,如果兩個類在同一目錄下則不需要導入,直接使用即可。
4. 關於 package、import、class 的順序問題:
a)首先需要定義包(package), 可選
b)接下來使用 import 進行導入, 可選
c)然後纔是 class 或 interface 的定義。
二、 訪問權限
Java中一共存在4中訪問控制權限,即 private、default(默認)、protected、public。
(1) private: 私有訪問權限。可以用在屬性的定義、方法的聲明上。被 private 所修飾的屬性和方法只能在該類內部使用。
(2) default: 默認訪問權限。在類內部以及相同包下面的類所使用。
(3) protected: 受保護的。被 protected 所修飾的屬性和方法可以在類內部、相同包、及該類的子類所使用(可以被子類所繼承下來使用,而不是在子類裏面定義方法去訪問。或者說它可以被子類繼承下來)。
(4) public:公共訪問權限。一個類中的成員使用了 public 訪問權限,就可以在所有類中被訪問, 不管是否在同一個包中。
例子:protected 所修改的可以被子類繼承下來使用。
package com.test.base;
public class ProtectedTest extends Parent {
public void output(){
System.out.println(age); //直接使用被繼承下來的方法或屬性
print();
}
public static void main(String[] args) {
ProtectedTest pt = new ProtectedTest();
pt.output();
}
}
class Parent{
protected int age = 10;
protected void print(){
System.out.println("This is parent");
}
}
三、jar命令的使用
作用: 將 *。class 文件 壓縮成一個文件。jar(Java Archive File)
查看:JDK中的bin目錄 jar.exe,在命令行輸入 jar 可以查看此命令的提示界面。
如何使用jar文件:得到一個 jar 文件後,可以通過設置 classpath 的方式在系統中註冊好此 jar 文件,以供程序使用。設置命令: SET CLASSPATH=.;F:\text\my.jar。從當前文件中查找,或指定路徑查找。
jar 命令中的主要參數:
· C: 創建新的文檔。
· V: 生成詳細的輸出信息。
· F: 指定存檔的文件名。
查看 jar 包中的全部內容: “jar -tvf 文件名稱”。
解壓縮 jar 包中的文件:“jar-xf 文件名稱”即可。
四、 Java 命名規範
(1) 類: 所有單詞的首字母大寫,如 TestJava
(2) 方法: 第一個單詞的首字母小寫,之後每個單詞的首字母大寫,如 getInfo()。
(3) 屬性: 第一個單詞的首字母小寫,之後每個單詞的首字母大寫,如 studentName 。
(4) 包: 所有單詞的字幕小寫,如 org.sdd.demo。
(5) 常量: 所有單詞的字母大寫,如 FLAG。