亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一篇文章帶你入門Java修飾符

 更新時(shí)間:2021年08月06日 08:40:35   作者:編程界明世隱  
Java語(yǔ)言提供了很多修飾符,主要分為以下兩類:訪問(wèn)修飾符;非訪問(wèn)修飾符。修飾符用來(lái)定義類、方法或者變量,通常放在語(yǔ)句的最前端。我們通過(guò)下面的例子來(lái)說(shuō)明,下面就跟小編一起來(lái)看下吧

定義

Java修飾符:修飾符用來(lái)定義類、方法或者變量,通常放在語(yǔ)句的最前端。

分類

主要分為2類:

訪問(wèn)控制修飾符

非訪問(wèn)控制修飾符

訪問(wèn)控制修飾符

可以使用訪問(wèn)控制符來(lái)保護(hù)對(duì)類、變量、方法和構(gòu)造方法的訪問(wèn)。分為以下4中權(quán)限:private,default,protected,public。

權(quán)限說(shuō)明:

修飾符 當(dāng)前類 同包 子類(不同包) 不同包(其他類)
private Y
default Y Y
protected Y Y Y
public Y Y Y Y

非訪問(wèn)控制修飾符

修飾符 說(shuō)明
static 用來(lái)修飾類方法和類變量。
final 用來(lái)修飾類、方法和變量,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,是不可修改的。
abstract 用來(lái)創(chuàng)建抽象類和抽象方法。
synchronized
volatile
主要用于線程的編程。

修飾符的使用說(shuō)明

修飾類

1.public 將一個(gè)類聲明為公共類,他可以被任何對(duì)象訪問(wèn),一個(gè)程序的主類必須是公共類,一個(gè).java文件中只能有一個(gè)public類,而且文件名必須與該類相同。

public class Learn9 {
	public static void main(String[] args) {

	}
}

假如類名與文件名不一致

在這里插入圖片描述

如果一個(gè) .java 文件中兩個(gè)public類呢?

在這里插入圖片描述

報(bào)錯(cuò)跟剛才一樣,就是公共類必須獨(dú)立占用一個(gè)java文件。

在這里插入圖片描述

1.把下面修飾類的public去掉就可以了。

♀ 小AD:明哥,我有個(gè)問(wèn)題?
♂ 明世隱:請(qǐng)放!
♀ 小AD:文明點(diǎn)啊哥,就知道欺負(fù)人家,我就想說(shuō)這一個(gè)類里面怎么還可以再放一個(gè)類的,也沒(méi)看到報(bào)錯(cuò)。
♂ 明世隱:這個(gè)是可以的,就比如我可以帶你雙排、三排、5排,甚至可以。。。,但是你必須搞清楚誰(shuí)是大哥,誰(shuí)是小老弟。
♀ 小AD:哥我知道,你就是那個(gè)大哥,只有你可以拋頭露面、帶頭沖鋒,用public修飾。
♂ 明世隱:算你識(shí)相,不然我單排去了。
♀ 小AD:是是是,哥回頭請(qǐng)你吃奶茶!
♂ 明世隱:說(shuō)謊的人要吞一千根針哦。
♀ 小AD:。。。
♂ 明世隱:一般也不這樣寫,寫成單獨(dú)的普通類,這種內(nèi)部類寫法主要是一個(gè)功能模塊的方便或者相關(guān)的封裝。
♂ 明世隱:其實(shí)他們雖然放在一起,也只是編譯時(shí)概念,編譯完成后也是獨(dú)立的class文件。
♀ 小AD:哦
♂ 明世隱:就比如剛才寫的代碼

在這里插入圖片描述

2.默認(rèn)的,把一個(gè)類聲明為默認(rèn)的,可以被同一個(gè)包中的其他類使用。

3.abstract,將一個(gè)類聲明為抽象類,抽象類中可以有抽象方法,也可以沒(méi)有。抽象類只能被繼承不能被實(shí)例化。

4.final,將一個(gè)類聲明為最終(即非繼承類),表示他不能被其他類繼承。

5.外部類不能使用protected、private、static等修飾符,內(nèi)部類可以使用。

♀ 小AD:我開(kāi)始懵逼了。
♂ 明世隱:很正常,因?yàn)槌橄箢悺⒆罱K類的你都沒(méi)接觸過(guò),不過(guò)不要緊,你現(xiàn)階段只要有個(gè)印象,不需要去記,后面單獨(dú)再講這個(gè),你只需要知道public修飾類就行了。
♀ 小AD:好,這樣就比較好弄。

修飾方法

訪問(wèn)控制修飾符

1.private

在Learn10類中創(chuàng)建私有方法test

private void test() {
	System.out.println("learn10 test方法被調(diào)用");
}

主方法main 調(diào)用這個(gè)方法

public class Learn10 {

	public static void main(String[] args) {
		System.out.println("learn10 main");
		new Learn10().test();
	}
	
	private void test() {
		System.out.println("learn10 test方法被調(diào)用");
	}
}

運(yùn)行

在這里插入圖片描述

在同包下的 Learn9 類看能否調(diào)用此方法

在這里插入圖片描述

同包下的類都不能調(diào)用private了,更別說(shuō)其他包了。

2.default

把Learn10類中創(chuàng)建方法test改成默認(rèn)的,也就是把private刪除

public class Learn10 {

	public static void main(String[] args) {
		System.out.println("learn10 main");
		new Learn10().test();
	}
	
	void test() {
		System.out.println("learn10 test方法被調(diào)用");
	}
}
public class Learn9 {
	public static void main(String[] args) {
		System.out.println("learn9 main");
		new Learn10().test();
	}
}

可以看到本類和同包下的類可以訪問(wèn)的,其他包的試一下。

建立包adc,并創(chuàng)建類XiaoLuBan,調(diào)用test方法:

在這里插入圖片描述

3.protected

把Learn10類中創(chuàng)建方法test改成protected的,然后發(fā)現(xiàn)跟上面的是一樣的,其他包中也不行,但實(shí)際上這個(gè)在子類中是可以的,子類的問(wèn)題下次再研究。

4.public

方法修飾改成public

public class Learn10 {

	public static void main(String[] args) {
		System.out.println("learn10 main");
		new Learn10().test();
	}
	
	public void test() {
		System.out.println("learn10 test方法被調(diào)用");
	}
}
public class Learn9 {
	public static void main(String[] args) {
		System.out.println("learn9 main");
		new Learn10().test();
	}
}
import learnJava.Learn10;

public class XiaoLuBan {

	public static void main(String[] args) {
		new Learn10().test();
	}

}

發(fā)現(xiàn)public是都可以用。

♀ 小AD:明哥,是不是又只要記住public。
♂ 明世隱:對(duì),public確實(shí)很常用,但是private也蠻經(jīng)常用。
♀ 小AD:是不是跟排位排隊(duì)一樣的,沒(méi)排到之前大家都可能排到,公共的。
♂ 明世隱:你咋啥都要往這方面想?
♀ 小AD:沒(méi)辦法,我天生麗質(zhì)。private就是比如我兩雙排,固定組合,總不能把你T出去,我跟別人排吧。
♂ 明世隱:你這么一說(shuō),我瞬間覺(jué)得以前我學(xué)代碼的時(shí)候,不香了。
♀ 小AD:那可不,我是人見(jiàn)人愛(ài)、花見(jiàn)花。。。
♂ 明世隱:花見(jiàn)花凋零!

非訪問(wèn)控制修飾符

1.抽象方法控制符abstract

abstract 修飾的方法稱為抽象方法。抽象方法僅有方法頭,沒(méi)有方法體和具體實(shí)現(xiàn)。

2.靜態(tài)方法控制符static

指定不需要實(shí)例化就可以調(diào)用的一個(gè)方法,即在內(nèi)存中只有一份,通過(guò)類名即可調(diào)用。

3.最終方法控制符final

最終方法是功能和內(nèi)部語(yǔ)句不能更改的方法,即最終方法不能重寫覆蓋。

4.本地方法控制符native

指定此方法的方法體是用其他語(yǔ)言在程序外部編寫的。

5.同步方法控制符synchronized

同步修飾符,在多個(gè)線程中,該修飾符用于在運(yùn)行前,對(duì)它所屬的方法加鎖,以防止其他線程的訪問(wèn),運(yùn)行結(jié)束后解鎖。

♂ 明世隱:abstract等后面講接口的時(shí)候來(lái)說(shuō)明,我們比較常用就是 static 了。
♀ 小AD:這個(gè)我知道,main方法就是用static修飾的。
♂ 明世隱:用static修飾的調(diào)用就不需要每次都實(shí)例化,可以直接調(diào)用。
♀ 小AD:為啥不用實(shí)例化,我之前看你的調(diào)用方法都是要 new *** 這樣的 。
♂ 明世隱:嗯,new 類名 就是實(shí)例化,static 方法在類第一次加載的時(shí)候,static就已經(jīng)在內(nèi)存中了,直到程序結(jié)束后,該內(nèi)存才會(huì)釋放。不需要再消耗資源反復(fù)創(chuàng)建對(duì)象。
♀ 小AD:我覺(jué)得我聽(tīng)懂了。
♂ 明世隱:那你說(shuō)說(shuō)看
♀ 小AD:比如我們兩雙排,你邀請(qǐng)我后,每盤結(jié)束以后是不是不需要重新再拉我了,默認(rèn)就在隊(duì)伍里面,不需要你每次點(diǎn)擊邀請(qǐng),重復(fù)力氣。(符合兩個(gè)條件:1.第一次就加載。2.不需要重復(fù)占用資源。)
♂ 明世隱:我草,給我個(gè)痛快吧,受不了了。
♀ 小AD:我這才學(xué)多久你就受不了了。
♂ 明世隱:我只能說(shuō)你是大聰明!
♀ 小AD:哥,我肯定你是在夸我。
♂ 明世隱:對(duì)對(duì)對(duì)!看一下static調(diào)用實(shí)例。

public class Learn9 {
	public static void main(String[] args) {
		System.out.println("learn9 main");
		Learn9.test();
	}
	
	static void test(){
		System.out.println("learn9 static test");
	}
}

運(yùn)行

在這里插入圖片描述

修飾變量

1.public(公共訪問(wèn)控制符),指定該變量為公共的,它可以被任何對(duì)象的方法訪問(wèn)。

定義public變量a,看看訪問(wèn)情況

在同類中

public class Learn10 {
	public int a=10;
	public static void main(String[] args) {
		System.out.println("learn10 main");
		new Learn10().test();
	}
	
	void test(){
		System.out.println(a);
	}
}

同包別的類

public class Learn9 {
	public static void main(String[] args) {
		System.out.println("learn9 main");
		System.out.println(new Learn10().a );
	}
}

不同包中

import learnJava.Learn10;

public class XiaoLuBan {

	public static void main(String[] args) {
		System.out.println(new Learn10().a );
	}

}

可以看到都是可以訪問(wèn)的。

2.protected(保護(hù)訪問(wèn)控制符)指定該變量可以別被自己的類和子類訪問(wèn)。在子類中可以覆蓋此變量。

把變量a改成 protected

在這里插入圖片描述

在這里插入圖片描述

可以觀察到在其他包中不能訪問(wèn)到

3.default(默認(rèn)權(quán)限),指定該變量只對(duì)同包可見(jiàn),對(duì)不同包(含不同包的子類)不可見(jiàn)。

改成default,和上面的情況一樣(子類的情況先不管)

4.private(私有訪問(wèn)控制符)指定該變量只允許自己的類的方法訪問(wèn),其他任何類(包括子類)中的方法均不能訪問(wèn)。

在這里插入圖片描述

在這里插入圖片描述

改成private后只有本類中的方法可以訪問(wèn)到這個(gè)變量。

5.final,最終修飾符,指定此變量的值不能變。

把a(bǔ)定義成final后,想對(duì)這個(gè)變量進(jìn)行賦值操作,就會(huì)編譯錯(cuò)誤。

在這里插入圖片描述

6.static(靜態(tài)修飾符)指定變量被所有對(duì)象共享,即所有實(shí)例都可以使用該變量。變量屬于這個(gè)類。

♀ 小AD:明哥這次還是要重點(diǎn)關(guān)注public咯
♂ 明世隱:額。。不要一概而論,變量常用private修飾符。
♀ 小AD:那不是只能在本類中才能訪問(wèn)嗎?我其他類調(diào)用怎么辦?
♂ 明世隱:你知道private只能在本類中訪問(wèn),說(shuō)明private你是熟悉了。
♀ 小AD:對(duì)啊 ,那怎么取這個(gè)變量呢?
♂ 明世隱:用set get方法來(lái)存取呢。
♀ 小AD:那你還不是要把set get方法設(shè)置成public的嗎?有嘛區(qū)別?多此一舉。
♂ 明世隱:你有此問(wèn)題,說(shuō)明你是個(gè)愛(ài)動(dòng)腦的娃兒,但是你段位怎么就上不去了呢?
♀ 小AD:哥,你咋回事繞到那邊去了。
♂ 明世隱:意思就是說(shuō),我們一般不能直接開(kāi)放給別人訪問(wèn)變量,通過(guò)set get 訪問(wèn)更安全,我們可以在set get方法中做相應(yīng)的修飾,就不會(huì)被隨意的設(shè)置上值了。

實(shí)例1:

直接修改屬性方式

public class XiaoLuBan {
	private String yanzhi = ""; 
	
	public static void main(String[] args) {
		XiaoLuBan xiaoLuBan = new XiaoLuBan();
		xiaoLuBan.yanzhi="丑八怪";
		System.out.println(xiaoLuBan.niDeYanZhi());
	}
	
	public String niDeYanZhi(){
		return yanzhi;
	}
}

在這里插入圖片描述

實(shí)例2:

通過(guò)set方式

public class XiaoLuBan {
	private String yanzhi = ""; 
	
	public static void main(String[] args) {
		XiaoLuBan xiaoLuBan = new XiaoLuBan();
		//xiaoLuBan.yanzhi="丑八怪";
		xiaoLuBan.setYanzhi("丑八怪");
		System.out.println(xiaoLuBan.niDeYanZhi());
	}
	public void setYanzhi(String yanzhi) {
		if("美女".equals(yanzhi)){
			this.yanzhi = yanzhi;
		}else if("五百年一遇的美女".equals(yanzhi)){
			this.yanzhi = yanzhi;
		}else{
			this.yanzhi = "大美女";
		}
	}
	
	public String niDeYanZhi(){
		return yanzhi;
	}
}

在這里插入圖片描述

♀ 小AD:原來(lái)是這樣啊,直接設(shè)置比較死板,還容易有問(wèn)題。
♂ 明世隱:對(duì)啊,所以推薦set get方法來(lái)使用變量,變量設(shè)置為private。
♀ 小AD:比如你的錢,是私有的,如果設(shè)置為public的,那我可以拿了吧。
♂ 明世隱:你想的美,你問(wèn)你嫂子拿去吧,我創(chuàng)建一個(gè)方法,通過(guò)你嫂子拿。
♀ 小AD:我怕我要被打。
♂ 明世隱:知道就好!哥給你展示一下怎么用。

/**
 * 明哥類
 *
 */
public class MingGe {
	private int money=10000000;
	
	public void getMoneyFromMingSao(String user) {
		System.out.println("明哥的資產(chǎn):"+money);
		if("明哥".equals(user)){//如果是明哥,給1000
			money-=1000;
			System.out.println("1000");
		}else if("小魯班".equals(user)){//如果是小魯班,找打
			System.out.println("找打吧你");
		}else{
			System.out.println("給你 0 元");
		}
		System.out.println("取錢后明哥的資產(chǎn):"+money);
	}
	
	public static void main(String[] args) {
		new MingGe().getMoneyFromMingSao("明哥");
	}
}

在這里插入圖片描述

public class MingGe {
	private int money=10000000;
	
	public void getMoneyFromMingSao(String user) {
		System.out.println("明哥的資產(chǎn):"+money);
		if("明哥".equals(user)){//如果是明哥,給1000
			money-=1000;
			System.out.println("1000");
		}else if("小魯班".equals(user)){//如果是小魯班,找打
			System.out.println("找打吧你");
		}else{
			System.out.println("給你 0 元");
		}
		System.out.println("取錢后明哥的資產(chǎn):"+money);
	}
	
	public static void main(String[] args) {
		//new MingGe().getMoneyFromMingSao("明哥");
		new MingGe().getMoneyFromMingSao("小魯班");
	}
}

在這里插入圖片描述

♀ 小AD:明哥,你在家里的地位有那么高嗎?我才不信
♂ 明世隱:你不看哥我是誰(shuí),哥拿捏的好。
♀ 小AD:切。。。,打排位還不讓嫂子知道,還說(shuō)你拿捏的好。
♂ 明世隱:你不是一樣嗎,還說(shuō)這個(gè),今天你的星就免了,拜拜了您嘞。
♀ 小AD:不是哥、哎、哥。。。。。。哥。

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 詳解JAVA設(shè)計(jì)模式之適配器模式

    詳解JAVA設(shè)計(jì)模式之適配器模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之適配器模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2020-06-06
  • springboot使用CommandLineRunner解決項(xiàng)目啟動(dòng)時(shí)初始化資源的操作

    springboot使用CommandLineRunner解決項(xiàng)目啟動(dòng)時(shí)初始化資源的操作

    這篇文章主要介紹了springboot使用CommandLineRunner解決項(xiàng)目啟動(dòng)時(shí)初始化資源的操作,幫助大家更好的理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下
    2021-02-02
  • Java文件處理之使用itextpdf實(shí)現(xiàn)excel轉(zhuǎn)pdf

    Java文件處理之使用itextpdf實(shí)現(xiàn)excel轉(zhuǎn)pdf

    在文件處理中,經(jīng)常有文件類型轉(zhuǎn)換的使用場(chǎng)景,本文主要介紹了如何使用poi以及itextpdf完成excel轉(zhuǎn)pdf的操作,需要的小伙伴可以參考一下
    2024-02-02
  • Java類加載器層次結(jié)構(gòu)原理解析

    Java類加載器層次結(jié)構(gòu)原理解析

    這篇文章主要介紹了Java類加載器層次結(jié)構(gòu)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 關(guān)于SpringBoot改動(dòng)后0.03秒啟動(dòng)的問(wèn)題

    關(guān)于SpringBoot改動(dòng)后0.03秒啟動(dòng)的問(wèn)題

    這篇文章主要介紹了SpringBoot改動(dòng)后0.03秒啟動(dòng),本文結(jié)合示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表

    Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表

    當(dāng)數(shù)據(jù)量比較多時(shí),放在一個(gè)表中的時(shí)候會(huì)影響查詢效率,本文主要介紹了Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式

    使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式

    這篇文章主要介紹了使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot排除某些自動(dòng)配置的操作方法

    springboot排除某些自動(dòng)配置的操作方法

    Spring Boot 提供的自動(dòng)配置非常強(qiáng)大,某些情況下,自動(dòng)配置的功能可能不符合我們的需求,需要我們自定義配置,這個(gè)時(shí)候就需要排除/禁用Spring Boot 某些類的自動(dòng)化配置了,本文給大家介紹springboot排除某些自動(dòng)配置的方法,感興趣的朋友一起看看吧
    2023-08-08
  • Idea2022版本配置SpringBoot熱部署的教程

    Idea2022版本配置SpringBoot熱部署的教程

    這篇文章主要介紹了Idea2022版本配置SpringBoot熱部署的教程,包括添加依賴及更改IDEA設(shè)置的方法,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Spring Boot 日志配置方法(超詳細(xì))

    Spring Boot 日志配置方法(超詳細(xì))

    默認(rèn)情況下,Spring Boot會(huì)用Logback來(lái)記錄日志,并用INFO級(jí)別輸出到控制臺(tái)。下面通過(guò)本文給大家介紹Spring Boot 日志配置方法詳解,感興趣的朋友參考下吧
    2017-07-07

最新評(píng)論