欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Java中的訪問控制權(quán)限

 更新時間:2016年02月15日 17:22:01   作者:VictorZhang  
這篇文章主要介紹了淺析Java中的訪問控制權(quán)限,在Java中,提供了四種訪問權(quán)限控制,分別是默認訪問權(quán)限、public、private以及protected,感興趣的小伙伴們可以參考一下

Java中為什么要設計訪問權(quán)限控制機制呢?主要作用有兩點:

(1)為了使用戶不要觸碰那些他們不該觸碰的部分,這些部分對于類內(nèi)部的操作時必要的,但是它并不屬于客戶端程序員所需接口的一部分。

(2)為了讓類庫設計者可用更改類的內(nèi)部工作方式,而不必擔心會對用戶造成重大影響。

 Java中的訪問權(quán)限控制的等級,按照權(quán)限從大到小依次為:

Public -> protected -> 包訪問權(quán)限(沒有權(quán)限修飾詞)-> private。

 一、包(package)

Java中包(package)的概念和C++中命名空間(namespace)的概念很類似,都可以限制類的作用域。二者最大的差別在于,Java中的包隱式地指明了類的樹形層級結(jié)構(gòu)(同時也是Java源碼文件的目錄結(jié)構(gòu))。這樣做的好處在于:可以通過文件系統(tǒng)中對于文件路徑唯一性的要求來限制類的唯一性。

 1、代碼組織

編寫一個Java源代碼文件(.java文件)時,此文件通常被稱為編譯單元。在編譯單元內(nèi)最多允許有一個public類,且該類的名稱必須與文件名完全相同(包括大小寫)。

編譯一個.java文件時,在.java文件中的每個類都會有一個.class輸出文件,這個文件名和類名是相同的。Java可運行程序是一組可以打包并壓縮為一個Java文檔文件(JAR包,使用Java的jar文檔生成器)的.class文件。Java解釋器負責這些文件的查找、裝載和解釋。

類庫實際上是一組類文件。其中每個.java文件最多允許有一個public類,以及任意數(shù)量的非public類。因此,每個文件都有一個構(gòu)件。如果要將這些構(gòu)件(每個構(gòu)建有一個.java文件和若干個.class文件)組織起來,形成不同的群組,可以使用Java中的關鍵字package。

 2、包(package)的作用

(1)     把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。

(2)     如同文件夾一樣,包也采用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調(diào)用兩個不同包中相同類名的類時,應該加上包名加以區(qū)別。因此,包可以避免名字沖突。

(3)     包也限定了訪問權(quán)限,擁有包訪問權(quán)限的類才能訪問某個包中的類。

 3、創(chuàng)建包

Java中,使用package關鍵字來指定代碼所屬的包(命名空間)。

語法格式:

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

注意點:

(1)     包的名字隱含地指出了代碼的目錄結(jié)構(gòu)。

(2)     同一目錄下的public類名(同時也是java文件名)應該是獨一無二的。

(3)     包聲明應該在源文件的第一行,每個源文件只能有一個包聲明,這個文件中的每個類型都應用于它。

(4)     如果一個源文件中沒有使用包聲明,那么其中的類,函數(shù),枚舉,注釋等將被放在一個無名的包(unnamed package)中。

(5)     package的名字一般全是小寫字母。

例如:

查看java.util.ArrayList類的源碼可以看到文件第一行代碼為:

package java.util;

它的代碼目錄結(jié)構(gòu)就是java/util/ArrayList.java

 4、導入包

Java中,使用import關鍵字來導入包。

語法格式:

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

例:

還是以java.util.ArrayList來舉例。如果以一個了類完整路徑的方式來使用它,十分不方便。

java.util.ArrayList<String> list = new java.util.ArrayList<String>();

如果想要省略前面的路徑,可以使用import關鍵字。

import java.util.ArrayList;

文件中使用了import導入包后,前面的聲明list的代碼就可以簡化如下:

ArrayList<String> list = new ArrayList<String>();

二、訪問權(quán)限修飾詞

1、package:包訪問權(quán)限

如果不提供任何訪問權(quán)限修飾詞,則意味著它是包訪問權(quán)限。

默認訪問權(quán)限沒有任何關鍵字,但通常是指包訪問權(quán)限(有時也表示為friendly,有點像C++中的友元概念)。這意味著包中所有其他類都可以訪問這個成員或方法,但是這個包之外的所有類不可以訪問。

例:

com.notes.packages.test.Info

package com.notes.packages.test;

publicclass Info {

  void print() { System.out.println("default method -- print()"); }

}

com.notes.packages.test.PublicDemo01

package com.notes.packages.test;

publicclass PublicDemo01 {

  publicstaticvoid main(String[] args) {

    Info x = new Info();

    x.print();

  }

}

PublicDemo01和Info在同一個包下,可以訪問Info的default級別的方法——print()。

 com.notes.packages.PublicDemo02

package com.notes.packages;

import com.notes.packages.test.Info;

publicclass PublicDemo02 {

  publicstaticvoid main(String[] args) {

    Info x = new Info();

    // x.print(); // Error

  }

}

PublicDemo02和Info不在一個包下,不可以訪問Info的包訪問權(quán)限級別的方法——print()。

 2、public:接口訪問權(quán)限

使用public關鍵字,就意味著被聲明的成員或方法對所有人都是可以訪問的。

例:如果將default級別權(quán)限例子中的print()方法權(quán)限設為public,則PublicDemo02可以訪問。

package com.notes.packages.test;

publicclass Info {

  publicvoid print() { System.out.println("public method -- print()"); }

}

3、private:無法訪問

使用private關鍵字,就意味著被聲明的成員或方法,除了本類,其他任何類都無法訪問。

應用場景:單例模式

 4、protected:繼承訪問權(quán)限

新類(稱之子類或派生類)通過繼承可以復用一個現(xiàn)有類(稱之父類或基類),然后擴展基類的成員、方法。有時,基類的創(chuàng)建者會希望某個特定成員,將它的訪問權(quán)限賦予派生類而不是所有類。public無法做到這一點,為此,引入了protected來完成這一工作。protected也提供包訪問權(quán)限,也就是說,派生類以及相同包內(nèi)的其他類都可以訪問protected成員或方法。

例:子類繼承父類后,可以訪問父類的protected成員。

class Father {

  private String a = "private";

  protected String b = "protected";

  public String c = "public";

};

 

class Son extends Father {

  publicvoid print() {

    // System.out.println("element a:" + super.a); // Error

    System.out.println("element b:" + super.b);

    System.out.println("element c:" + super.c);

  }

}

 

publicclass ProtectedDemo01 {

  publicstaticvoid main(String args[]) {

    Son sub = new Son();

    sub.print();

  }

};

 訪問權(quán)限修飾詞的注意點

前面各個例子中展示了類的成員、方法都可以用各種權(quán)限修飾詞來修飾。

除此之外,還有一些需要注意的點:

(1)     靜態(tài)成員、靜態(tài)方法的權(quán)限修飾詞的用法和普通成員、方法一樣。

(2)     類雖然也可以被修飾詞修飾,但是不可以用private、protected兩個權(quán)限修辭詞。

(3)     有些書中將包訪問權(quán)限又叫做默認訪問權(quán)限。個人不建議這么去記,因為這很容易與Java Se8中新特性——default關鍵字混淆。這個關鍵字只能用于Interface,作用是允許程序員在Interface中定義接口的默認具體實現(xiàn)(以往的JDK版本是不允許這樣的,你只能在接口中聲明方法)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關文章

  • Java 中IO流字符流詳解及實例

    Java 中IO流字符流詳解及實例

    這篇文章主要介紹了Java 中IO流字符流詳解及實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之排序算法

    Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之排序算法

    排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存
    2022-02-02
  • 解析Java繼承中方法的覆蓋和重載

    解析Java繼承中方法的覆蓋和重載

    這篇文章主要介紹了Java繼承中方法的覆蓋和重載的詳細概念及用法,非常的實用,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-05-05
  • Mybatis中特殊SQL的執(zhí)行

    Mybatis中特殊SQL的執(zhí)行

    這篇文章主要介紹了Mybatis中特殊SQL的執(zhí)行,介紹內(nèi)容包括模糊查詢、批量刪除、動態(tài)設置表名、添加功能獲取自增的主鍵等相關資料,需要的小伙伴可以參考一下
    2022-04-04
  • SpringBoot?整合?ElasticSearch操作各種高級查詢搜索

    SpringBoot?整合?ElasticSearch操作各種高級查詢搜索

    這篇文章主要介紹了SpringBoot?整合?ES?進行各種高級查詢搜索的實踐記錄,本文主要圍繞?SpringBoot?整合?ElasticSearch?進行各種高級查詢的介紹,需要的朋友可以參考下
    2022-06-06
  • Java 邏輯運算符中&&與&,||與|的區(qū)別

    Java 邏輯運算符中&&與&,||與|的區(qū)別

    這篇文章主要介紹了Java中&&與&,||與|的區(qū)別的相關資料,需要的朋友可以參考下
    2017-05-05
  • 再談java回調(diào)函數(shù)

    再談java回調(diào)函數(shù)

    個人對于回調(diào)函數(shù)的理解就是回調(diào)函數(shù)就是回頭再調(diào)用的函數(shù),哈哈,下面我們來詳細探討下回調(diào)函數(shù)。
    2015-07-07
  • Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)

    Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)

    這篇文章主要介紹了Mybatis-plus使用TableNameHandler分表詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解

    這篇文章主要為大家介紹了SpringMVC域?qū)ο蠊蚕頂?shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • spring boot實現(xiàn)驗證碼功能

    spring boot實現(xiàn)驗證碼功能

    這篇文章主要為大家詳細介紹了spring boot實現(xiàn)驗證碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論