Java編程思想 第6章 訪問權限控制
標籤(空格分隔): JAVA學習
6.1 包:庫單元
當編譯一個Java源代碼文件時,此文件通常被稱爲編譯單元。
每個編譯單元都必須有一個後綴名.java,而在編譯單元內則可以有一個public類,該類的名稱必須與文件的名稱相同。
6.1.1 代碼組織
Java通過關鍵字package將特定的構件組織在同一個羣組中。
如果使用package語句,它必須是文件中除註釋以外的第一句程序代碼。在文件起始處寫:
package access;
就表示你在聲明該編譯單元是名爲access的類庫的一部分。任何想要使用該名稱的人都必須指定全名或者與access結合使用關鍵字import。
例如,假設文件的名稱是MyClass.java,這就意味着在該文件中有且只有一個public類,該類的名稱必須是MyClass。
//: access/mypackage/MyClass.java
package access.mypackage;
public class MyClass {
// ...
}
現在,如果有人想用MyClass或者是access中的任何其他public類,有兩種方法:
1.指定全名
//: access/QualifiedMyClass.java
public class QualifiedMyClass {
public static void main(String[] args) {
access.mypackage.MyClass m =
new access.mypackage.MyClasss();
}
}
2.使用關鍵字import
//: access/ImportedMyClass.java
import access.package.*;
public class ImportedMyClass {
public static void main(String[] args) {
MyClass m = new MyClasss();
}
}
6.1.2 創建獨一無二的包名
按照慣例,package名稱的第一部分是類的創建者的反順序的Internet域名,因此你的package名稱將是獨一無二的,也就不會出現名稱衝突的問題了。
package的名稱對應你機器上的一個目錄(比如,package foo.bar.baz對應於foo/bar/baz)。所以當Java程序運行並且需要加載.class文件的時候,它就可以確定.class文件在目錄上所處的位置。
Java解釋器查找.class文件的路徑通過環境變量CLASSPATH設置。
// /etc/profile
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
6.1.3 定製工具庫
package net.mindview.util;
import java.io.PrintStream;
/**
* Created by weijie on 17-5-15.
*/
public class Print {
// Print with a newline
public static void print(Object obj) {
System.out.println(obj);
}
// Print a newline by itselt
public static void print() {
System.out.println();
}
// Print with no line break
public static void printnb(Object obj) {
System.out.println(obj);
}
// The new java SE5 printf()
public static PrintStream printf(String format, Object... args) {
return System.out.printf(format, args);
}
}
可以猜到,這個文件的位置一定是在某個以一個CLASSPATH位置開始,然後接着是net/mindview的目錄下。編譯完之後,就可以用import static語句在你的系統上使用靜態的print()和printnb()方法了。
package com.java.chapter6;
import static net.mindview.util.Print.*;
/**
* Created by weijie on 17-5-15.
*/
public class PrintTest {
public static void main(String[] args) {
print("Available from now on!");
print(100);
print(100L);
print(3.14159);
}
}
當然也可以這樣調用:
package com.java.chapter6;
// 這裏無static關鍵字,且只導入至Print。
import net.mindview.util.Print;
/**
* Created by weijie on 17-5-15.
*/
public class PrintTest {
public static void main(String[] args) {
// 必須帶上類名Print
Print.print("Available from now on!");
Print.print(100);
Print.print(100L);
Print.print(3.14159);
}
}
6.2 Java訪問權限修飾詞
Java訪問權限修飾詞:public,protected和private。如果不提供任何訪問權限修飾詞,即默認訪問權限 ,則意味着它是“包訪問權限”。
關鍵字 | private | default | protected | public |
---|---|---|---|---|
同一類 | Y | Y | Y | Y |
同一包中的類 | N | Y | Y | Y |
子類 | N | N | Y | Y |
其它包中的類 | N | N | N | Y |