通過「訪問修飾符」java想告訴我們什麼?

2020-12-08 碼不停

在平時編寫代碼的時候我們一定會用到public、private這些「java訪問修飾符「,可是你知道java為什麼要設計這些「訪問修飾符」嗎?今天我們就一起來看看

廢話少說,先看定義!

01定義

java有四個訪問修飾符

public:被public修飾的成員可以被所有類訪問到

protected:所修飾的成員會被位於同一包中所有類可以訪問到。被protected所修飾的成員會被該類的所有子類繼承下來

default:會被位於同一package中所有類訪問到

private:私有的,即只能在當前類中被訪問到。

四個訪問修飾符的作用域如下:

結合這些定義,再回想我們平時的編碼和學習,public和private用的很多。下面就舉一個簡單的例子。

02舉例子

我們用public修飾一個普通人的錢

然後直接修改這個錢的數目

可以看到是可以修改成功

那如果這是實際生活,我們銀行帳號上的錢是不可以被隨意修改的,必須要有認證才可以。

修改如下:

細心的小夥伴可能發現了,我只是加了認證方法,money的訪問修飾符還是public這樣是不可以的,別人依舊可以繞過我們的認證方法,直接去操作我們的money。所以,這裡money的訪問修飾符必須改成private

把訪問修飾符改成private之後我們就不能之前去操作money了,必須通過我們提供的public修飾的方法才可以,這樣我們就可以通過這個方法,來進行控制,保證只有我們認可的用戶才可以修改我們的變量,這樣就安全很多了。

通過上面的例子我們能感受到,通過private修飾符,我們就可以對自己類中的變量進行保護,不讓用戶可以隨便的進行操作,保證了安全。

結合上面的例子和各個訪問修飾符的定義,我們大致就能了解訪問修飾符在程序中的作用了

設立各個成員的界限,讓程序更安全

03訪問修飾符目的

我們都知道java是一門面向對象的設計語言,「封裝」是它的一大特性

封裝(Encapsulation)是面向對象方法的重要原則,就是把對象的屬性和操作(或服務)結合為一個獨立的整體,並儘可能隱藏對象的內部實現細

那麼如何隱藏內部的具體實現,就可以通過訪問修飾符,把不想給別人看見的用private修飾,把暴露給別人的用public實現,這樣就能實現一個基本的封裝。

將上面的例子進行一點點改動

我們在User類中寫了一個增加錢的方法,可如何增加錢調用者並不知道,我們可以一次加100也分兩次加一次加50,調用者只關心結果能不能實現和傳入什麼樣的參數。這其實就是封裝,讓User類變為一個更獨立的整體了。

java通過訪問控制符來加強封裝性,告訴調用者那些是可用的哪些是不可用的,而類的調用者只關心結果就行,不需要關心具體的實現,不僅保證了安全性,也對後期的維護和修改帶來便利。

相關焦點

  • 程式設計師的術與道:道——Java修飾符之非訪問控制修飾符
    Java提供了很多修飾符,主要分為訪問控制修飾符和非訪問控制修飾符。通常放在語句的最前端,用來定義類、方法、變量。下面介紹一下Java提供的非訪問控制修飾符。static 修飾符:修飾類方法和類變量。final 修飾符:修飾類、方法和變量修飾的變量為常量,是不可修改的,修飾的類不能被繼承,修飾的方法不能被繼承的類重寫。abstract 修飾符:創建抽象類和抽象方法。
  • java修飾符
    Java 修飾符Java語言提供了很多修飾符,主要分為以下兩類:訪問修飾符非訪問修飾符修飾符用來定義類、方法或者變量,通常放在語句的最前端。我們通過下面的例子來說明:public class ClassName {// ...
  • 一起學JAVA——修飾符
    java修飾符的作用就是對類或類成員進行修飾或限制。訪問修飾符訪問修飾符作用是控制類成員的可見度。 類的訪問控制符有兩種:public關鍵字修飾:可以被所有的類訪問預設為default:只能被同一包中的類訪問static(靜態修飾符)
  • Java修飾符關鍵詞大全
    最近,有人問我關於Java修飾符關鍵字的一個問題,但我根本不知道那是什麼。所以我覺得除了實際編程和算法,我也有必要學習這些內容。通過谷歌搜索,我只得到一些瑣碎的要點,並不完整。所以我以此主題寫了這篇文章。這也是一個可用於測試你的計算機科學知識的面試問題。Java修飾符是你添加到變量、類和方法以改變其含義的關鍵詞。
  • Java訪問控制修飾符詳解(public、 private、protected 和 friendly)
    、transient 和 volatile,這些修飾符有類修飾符、變量修飾符和方法修飾符。本文將詳細介紹訪問控制修飾符。在實際生活中,如果要獲取某件物品,與其直接穿過堡壘的牆壁,從而導致牆壁毀滅和破壞,不如通過門口的警衛請求進入堡壘的許可。一般而言,這對對象同樣適用:沒有對象的許可(即對象的屬性是私有的),不能直接訪問該對象的私有屬性。信息隱藏是 OOP 最重要的功能之一,也是使用訪問修飾符的原因。
  • Java訪問權限修飾符總結-Java基礎教程系列-11
    大家好,我是你的老師父,這次講講剩下的兩個權限修飾符一個是public,其實之前講過,另外一個是什麼都不寫那其實是default或者稱作friendly修飾符。public:這個修飾符權限完全公開,所有類和包都可以訪問的到作用:一般用作公開的方法、常量、靜態變量、靜態常量等地方注意:屬性上很少用public,
  • 「002期」JavaSE面試題(二):基本數據類型與訪問修飾符
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫開篇導讀大家好,我是Java面試題庫的提褲姐,今天這篇是JavaSE系列的第二篇,
  • Java基礎教程:Java包和權限修飾符
    包包我們每天建的項目就是在一個目錄下,我們每次都會建立一個包,這個包在磁碟下其實就是一個目錄。包是用來分門別類的管理技術,不同的技術類放在不同的包下,方便管理和維護。權限修飾符在Java中提供了四種訪問權限,使用不同的訪問權限修飾符修飾時,被修飾的內容會有不同的訪問權限,我們之前已經學習過了public 和 private,接下來我們研究一下protected和預設(default默認)修飾符的作用。
  • 「Java」基礎19:修飾符有哪些?
    這就得學到一個新的修飾符了。一、final修飾符final,翻譯成中文就是「不可更改的 」。顧名思義,它是一個修飾符,用於修改不可更改的內容。被final修飾的類:不能被繼承。二、權限修飾符public這個關鍵字太常見了,它就是一個權限修飾符。在Java語言裡面有四種權限修飾符。其實看字面意思也蠻好理解的:①public:公共的。
  • Java類與對象及訪問控制修飾詞解析
    類是構造對象的模板,每個類對象都是類通過 new 語句創建的。通過關鍵字 class 定義一個類,類的結構:類名(ClassName)通常首字母大寫,多個單詞用駝峰式(CamelCase)命名法。一個類可以定義多個屬性,多個構造函數,多個行為方法。類和類中定義的屬性方法都需要有訪問權限控制,不受限的訪問將會導致程序混亂,不可控制。
  • 在.NET中,C#訪問修飾符決定類和成員的訪問權限,常見的有哪些?
    -訪問修飾符1.訪問修飾符在C#中,訪問修飾符用於控制接口/類/方法/屬性等訪問權限。常用的訪問修飾符有public/private/protected/internal等。1.1.,且該類內的Cure()方法的訪問修飾符也使用了public訪問修飾符。
  • Java面向對象中的封裝和訪問控制符詳解
    封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的接口。面向對象設計始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。封裝可以讓程序更容易理解和維護,也加強了程序的安全性。封裝給對象賦予了「黑盒「特徵,這是提高重用性和安全性的關鍵。讓開發者關注結果而不用去關注每個細節。
  • 從頭再來:Java訪問權限控制
    Java訪問權限控制先來一個簡單的測試題:Java中的抽象類和接口可以設為private嗎?導入其他的包,可以用import語句,比如import java.util.List; 可以使用static import導入一個類的靜態方法或者變量,比如import static java.util.Arrays.copyOf;package的名字最好是獨一無二的,比如用倒過來域名,或者自己的名字等
  • Java面試總結之Java基礎
    封裝表面上看就把描述一個對象的屬性和行為封裝成一個類,把業務邏輯封裝成方法,封裝的另一層含義在於通過修飾符控制類的訪問屬性(公有,私有等)。繼承主要是實現了代碼的復用,所有子類公用的行為和屬性可以抽取為一個父類,所有子類繼承了父類的屬性和行為,java中繼承是單一性的。
  • 程式設計師的術與道:道——Java入門,Java基礎知識
    3.Java修飾符Java修飾符主要為兩類:訪問控制符和非訪問控制符。訪問控制符: defualt:一般稱為「默認修飾符」或者「包修飾符」,通常都省略不寫,表示只能在同一個包裡面進行訪問。public:一般稱為「公共」,表示是公用的,是Java限制最寬的標識符,被public修飾的類、屬性、方法,都可以被跨跨類跨包進行訪問。 private:一般稱為「私有」,表示是私用的,是Java限制最窄的標識符,被其修飾的屬性以及方法只能被自己訪問,子類不行,跨包訪問就更不行。
  • Java 基礎語法教程筆記
    、_value、__1_value非法標識符舉例:123abc、-salary像其他語言一樣,Java可以使用修飾符來修飾類中方法和屬性。主要有兩類修飾符:訪問控制修飾符 : default, public , protected, private非訪問控制修飾符 : final, abstract, strictfp在後面的章節中我們會深入討論Java修飾符。Java中主要有如下幾種類型的變量數組是儲存在堆上的對象,可以保存多個同類型變量。
  • Java什麼情況要使用static修飾
    static修飾的方法為靜態方法,修飾的變量為靜態變量,那什麼情況要使用static修飾呢?
  • 通俗易懂地告訴你,java語言中為什麼沒有sizeof操作符
    花10分鐘看完一篇文章,或許你會有意想不到的收穫想要了解java中為什麼沒有sizeof()操作符就先要知道什麼是sizeof()?01sizeof()定義sizeof是c語言的一種單目操作符,如c語言的其他操作符++、--等。它並不是函數。sizeof操作符以字節形式給出了其操作數的存儲大小。操作數可以是一個表達式或括在括號內的類型名。操作數的存儲大小由操作數的類型決定。
  • 10個經典的 Java main 方法面試題
    不行,沒有main方法我們不能運行Java類。在Java 7之前,你可以通過使用靜態初始化運行Java類。但是,從Java 7開始就行不通了。2.main()方法需要的參數不是字符串數組?不是的,main()方法的參數必須是字符串數組。
  • Java面向對象之final、abstract抽象、和變量生命周期
    通常開發中,我們建議final修飾的常量名用大寫字母表示,多個單詞之間使用下劃線(_)連接:如:public static final String USER_NAME = "用戶名";且在Java中多個修飾符之間是沒有先後關係的,以下的三種修飾符排列順序都是ok的: