Java編程思想 第6章 訪問權限控制

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章