亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
Java 修飾符
默認(rèn)訪問修飾符-不使用任何關(guān)鍵字
私有訪問修飾符-private" >私有訪問修飾符-private
公有訪問修飾符-public
受保護(hù)的訪問修飾符-protected
訪問控制和繼承
非訪問修飾符
static 修飾符
final 修飾符
abstract 修飾符
synchronized 修飾符
transient 修飾符
volatile 修飾符
首頁 Java Java基礎(chǔ) java中private是什麼意思

java中private是什麼意思

Nov 24, 2022 pm 06:27 PM
java private

在java中,private的意思為“私有的”,是一種存取控制修飾符,用於修飾類別、屬性和方法。用private修飾的類別成員,只能被該類別本身的方法存取和修改,而不能被任何其他類別(包括該類別的子類別)存取和引用;因此??,private修飾符具有最高的保護(hù)等級(jí)。

java中private是什麼意思

本教學(xué)操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。

Java 修飾符

Java語言提供了許多修飾符,主要分為以下兩類:

    ##存取修飾符
  • 非存取修飾符
修飾符用來定義類別、方法或變量,通常放在語句的最前端。我們透過下面的範(fàn)例來說明:

public?class?ClassName?{
???//?...
}
private?boolean?myFlag;
static?final?double?weeks?=?9.5;
protected?static?final?int?BOXWIDTH?=?42;
public?static?void?main(String[]?arguments)?{
???//?方法體
}

存取控制修飾符

Java中,可以使用存取控制符來保護(hù)對(duì)類別、變數(shù)、方法和構(gòu)造方法的存取。 Java 支援 4 種不同的存取權(quán)限。

  • default?(即默認(rèn),什麼也不寫): 在同一包內(nèi)可見,不使用任何修飾符。使用物件:類別、介面、變數(shù)、方法。

  • private?(私有的): 在相同類別內(nèi)可見。使用物件:變數(shù)、方法。?注意:不能修飾類別(外部類別)

  • #public?: 對(duì)所有類別可見。使用物件:類別、介面、變數(shù)、方法

  • protected?: 對(duì)同一套件內(nèi)的類別和所有子類別可見。使用物件:變數(shù)、方法。?注意:不能修飾類別(外部類別)。

我們可以透過以下表格來說明存取權(quán)限:

存取控制## 修飾符publicprotecteddefaultprivate#

默認(rèn)訪問修飾符-不使用任何關(guān)鍵字

使用默認(rèn)訪問修飾符聲明的變量和方法,對(duì)同一個(gè)包內(nèi)的類是可見的。接口里的變量都隱式聲明為?public static final,而接口里的方法默認(rèn)情況下訪問權(quán)限為?public。

如下例所示,變量和方法的聲明可以不使用任何修飾符。

實(shí)例

String?version?=?"1.5.1";
boolean?processOrder()?{
???return?true;
}

私有訪問修飾符-private

私有訪問修飾符是最嚴(yán)格的訪問級(jí)別,所以被聲明為?private?的方法、變量和構(gòu)造方法只能被所屬類訪問,并且類和接口不能聲明為?private。

聲明為私有訪問類型的變量只能通過類中公共的 getter 方法被外部類訪問。

Private 訪問修飾符的使用主要用來隱藏類的實(shí)現(xiàn)細(xì)節(jié)和保護(hù)類的數(shù)據(jù)。

下面的類使用了私有訪問修飾符:

public?class?Logger?{
???private?String?format;
???public?String?getFormat()?{
??????return?this.format;
???}
???public?void?setFormat(String?format)?{
??????this.format?=?format;
???}
}

實(shí)例中,Logger 類中的 format 變量為私有變量,所以其他類不能直接得到和設(shè)置該變量的值。為了使其他類能夠操作該變量,定義了兩個(gè) public 方法:getFormat() (返回 format的值)和 setFormat(String)(設(shè)置 format 的值)

公有訪問修飾符-public

被聲明為 public 的類、方法、構(gòu)造方法和接口能夠被任何其他類訪問。

如果幾個(gè)相互訪問的 public 類分布在不同的包中,則需要導(dǎo)入相應(yīng) public 類所在的包。由于類的繼承性,類所有的公有方法和變量都能被其子類繼承。

以下函數(shù)使用了公有訪問控制:

public?static?void?main(String[]?arguments)?{
???//?...
}

Java 程序的 main() 方法必須設(shè)置成公有的,否則,Java 解釋器將不能運(yùn)行該類。

受保護(hù)的訪問修飾符-protected

protected 需要從以下兩個(gè)點(diǎn)來分析說明:

  • 子類與基類在同一包中:被聲明為 protected 的變量、方法和構(gòu)造器能被同一個(gè)包中的任何其他類訪問;

  • 子類與基類不在同一包中:那么在子類中,子類實(shí)例可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類實(shí)例的非protected修飾的方法。

protected 可以修飾數(shù)據(jù)成員,構(gòu)造方法,方法成員,不能修飾類(內(nèi)部類除外)。

接口及接口的成員變量和成員方法不能聲明為 protected。 可以看看下圖演示:

子類能訪問 protected 修飾符聲明的方法和變量,這樣就能保護(hù)不相關(guān)的類使用這些方法和變量。

下面的父類使用了 protected 訪問修飾符,子類重寫了父類的 openSpeaker() 方法。

class?AudioPlayer?{
???protected?boolean?openSpeaker(Speaker?sp)?{
??????//?實(shí)現(xiàn)細(xì)節(jié)
???}
}
?
class?StreamingAudioPlayer?extends?AudioPlayer?{
???protected?boolean?openSpeaker(Speaker?sp)?{
??????//?實(shí)現(xiàn)細(xì)節(jié)
???}
}

如果把 openSpeaker() 方法聲明為 private,那么除了 AudioPlayer 之外的類將不能訪問該方法。

如果把 openSpeaker() 聲明為 public,那么所有的類都能夠訪問該方法。

如果我們只想讓該方法對(duì)其所在類的子類可見,則將該方法聲明為 protected。

protected 是最難理解的一種 Java 類成員訪問權(quán)限修飾詞,更多詳細(xì)內(nèi)容請(qǐng)查看?Java protected 關(guān)鍵字詳解

訪問控制和繼承

請(qǐng)注意以下方法繼承的規(guī)則:

  • 父類中聲明為 public 的方法在子類中也必須為 public。

  • 父類中聲明為 protected 的方法在子類中要么聲明為 protected,要么聲明為 public,不能聲明為 private。

  • 父類中聲明為 private 的方法,不能夠被繼承。


非訪問修飾符

為了實(shí)現(xiàn)一些其他的功能,Java 也提供了許多非訪問修飾符。

static 修飾符,用來修飾類方法和類變量。

final 修飾符,用來修飾類、方法和變量,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,是不可修改的。

abstract 修飾符,用來創(chuàng)建抽象類和抽象方法。

synchronized 和 volatile 修飾符,主要用于線程的編程。

static 修飾符

  • 靜態(tài)變量:

    static 關(guān)鍵字用來聲明獨(dú)立于對(duì)象的靜態(tài)變量,無論一個(gè)類實(shí)例化多少對(duì)象,它的靜態(tài)變量只有一份拷貝。 靜態(tài)變量也被稱為類變量。局部變量不能被聲明為 static 變量。

  • 靜態(tài)方法:

    static 關(guān)鍵字用來聲明獨(dú)立于對(duì)象的靜態(tài)方法。靜態(tài)方法不能使用類的非靜態(tài)變量。靜態(tài)方法從參數(shù)列表得到數(shù)據(jù),然后計(jì)算這些數(shù)據(jù)。

對(duì)類變量和方法的訪問可以直接使用?classname.variablename?和?classname.methodname?的方式訪問。

如下例所示,static修飾符用來創(chuàng)建類方法和類變量。

public?class?InstanceCounter?{
???private?static?int?numInstances?=?0;
???protected?static?int?getCount()?{
??????return?numInstances;
???}
?
???private?static?void?addInstance()?{
??????numInstances++;
???}
?
???InstanceCounter()?{
??????InstanceCounter.addInstance();
???}
?
???public?static?void?main(String[]?arguments)?{
??????System.out.println("Starting?with?"?+
??????InstanceCounter.getCount()?+?"?instances");
??????for?(int?i?=?0;?i?<?500;?++i){
?????????new?InstanceCounter();
??????????}
??????System.out.println("Created?"?+
??????InstanceCounter.getCount()?+?"?instances");
???}
}

以上實(shí)例運(yùn)行編輯結(jié)果如下:

Starting?with?0?instances
Created?500?instances

final 修飾符

final 變量:

final 表示"最后的、最終的"含義,變量一旦賦值后,不能被重新賦值。被 final 修飾的實(shí)例變量必須顯式指定初始值。

final 修飾符通常和 static 修飾符一起使用來創(chuàng)建類常量。

實(shí)例

public?class?Test{
??final?int?value?=?10;
??//?下面是聲明常量的實(shí)例
??public?static?final?int?BOXWIDTH?=?6;
??static?final?String?TITLE?=?"Manager";
?
??public?void?changeValue(){
?????value?=?12;?//將輸出一個(gè)錯(cuò)誤
??}
}

final 方法

父類中的 final 方法可以被子類繼承,但是不能被子類重寫。

聲明 final 方法的主要目的是防止該方法的內(nèi)容被修改。

如下所示,使用 final 修飾符聲明方法。

public?class?Test{
????public?final?void?changeName(){
???????//?方法體
????}
}

final 類

final 類不能被繼承,沒有類能夠繼承 final 類的任何特性。

實(shí)例

public?final?class?Test?{
???//?類體
}

abstract 修飾符

抽象類:

抽象類不能用來實(shí)例化對(duì)象,聲明抽象類的唯一目的是為了將來對(duì)該類進(jìn)行擴(kuò)充。

一個(gè)類不能同時(shí)被 abstract 和 final 修飾。如果一個(gè)類包含抽象方法,那么該類一定要聲明為抽象類,否則將出現(xiàn)編譯錯(cuò)誤。

抽象類可以包含抽象方法和非抽象方法。

實(shí)例

abstract?class?Caravan{
???private?double?price;
???private?String?model;
???private?String?year;
???public?abstract?void?goFast();?//抽象方法
???public?abstract?void?changeColor();
}

抽象方法

抽象方法是一種沒有任何實(shí)現(xiàn)的方法,該方法的的具體實(shí)現(xiàn)由子類提供。

抽象方法不能被聲明成 final 和 static。

任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法,除非該子類也是抽象類。

如果一個(gè)類包含若干個(gè)抽象方法,那么該類必須聲明為抽象類。抽象類可以不包含抽象方法。

抽象方法的聲明以分號(hào)結(jié)尾,例如:public abstract sample();。

實(shí)例

public?abstract?class?SuperClass{
????abstract?void?m();?//抽象方法
}
?
class?SubClass?extends?SuperClass{
?????//實(shí)現(xiàn)抽象方法
??????void?m(){
??????????.........
??????}
}

synchronized 修飾符

synchronized 關(guān)鍵字聲明的方法同一時(shí)間只能被一個(gè)線程訪問。synchronized 修飾符可以應(yīng)用于四個(gè)訪問修飾符。

實(shí)例

public?synchronized?void?showDetails(){
.......
}

transient 修飾符

序列化的對(duì)象包含被 transient 修飾的實(shí)例變量時(shí),java 虛擬機(jī)(JVM)跳過該特定的變量。

該修飾符包含在定義變量的語句中,用來預(yù)處理類和變量的數(shù)據(jù)類型。

實(shí)例

public?transient?int?limit?=?55;???//?不會(huì)持久化
public?int?b;?//?持久化

volatile 修飾符

volatile 修飾的成員變量在每次被線程訪問時(shí),都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),會(huì)強(qiáng)制線程將變化值回寫到共享內(nèi)存。這樣在任何時(shí)刻,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值。

一個(gè) volatile 對(duì)象引用可能是 null。

實(shí)例

public?class?MyRunnable?implements?Runnable
{
????private?volatile?boolean?active;
????public?void?run()
????{
????????active?=?true;
????????while?(active)?//?第一行
????????{
????????????//?代碼
????????}
????}
????public?void?stop()
????{
????????active?=?false;?//?第二行
????}
}

通常情況下,在一個(gè)線程調(diào)用 run() 方法(在 Runnable 開啟的線程),在另一個(gè)線程調(diào)用 stop() 方法。 如果?第一行?中緩沖區(qū)的 active 值被使用,那么在?第二行?的 active 值為 false 時(shí)循環(huán)不會(huì)停止。

但是以上代碼中我們使用了 volatile 修飾 active,所以該循環(huán)會(huì)停止。

更多相關(guān)知識(shí),請(qǐng)?jiān)L問常見問題欄目!

目前類別 同一包內(nèi) 子孫類別(同一套件) 子孫類別(不同套件) 其他套件
Y Y #Y Y Y
Y #Y Y Y N
Y Y # N N
#Y N #N N N

以上是java中private是什麼意思的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級(jí)或工作區(qū)級(jí)路徑,用於自定義VSCode設(shè)置。 1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用於生成從可迭代對(duì)像中選取指定數(shù)量元素的所有不重複組合(順序無關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重複順序;2.對(duì)字符串取3個(gè)字符組合,如"abc"、"abd",適用於子序列生成;3.求兩數(shù)之和等於目標(biāo)值的組合,如1 5=6,簡化雙重循環(huán)邏輯;組合與排列的區(qū)別在於順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

故障排除常見的java`ofmemoryError`場(chǎng)景'' 故障排除常見的java`ofmemoryError`場(chǎng)景'' Jul 31, 2025 am 09:07 AM

java.lang.OutOfMemoryError:Javaheapspace表示堆內(nèi)存不足,需檢查大對(duì)象處理、內(nèi)存洩漏及堆設(shè)置,通過堆轉(zhuǎn)儲(chǔ)分析工具定位並優(yōu)化代碼;2.Metaspace錯(cuò)誤因類元數(shù)據(jù)過多,常見於動(dòng)態(tài)類生成或熱部署,應(yīng)限制MaxMetaspaceSize並優(yōu)化類加載;3.Unabletocreatenewnativethread因係統(tǒng)線程資源耗盡,需檢查線程數(shù)限制、使用線程池、調(diào)整棧大?。?.GCoverheadlimitexceeded指GC頻繁但回收少,應(yīng)分析GC日誌,優(yōu)化

Python Pytest夾具示例 Python Pytest夾具示例 Jul 31, 2025 am 09:35 AM

fixture是用於為測(cè)試提供預(yù)設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測(cè)試函數(shù)中以參數(shù)形式註入fixture;3.yield之前執(zhí)行setup,之後執(zhí)行teardown;4.通過scope參數(shù)控製作用域,如function、module等;5.將共用fixture放在conftest.py中實(shí)現(xiàn)跨文件共享,從而提升測(cè)試的可維護(hù)性和復(fù)用性。

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

See all articles