Java中常見(jiàn)的修飾符語(yǔ)法有那幾種

這篇文章主要講解了“Java中常見(jiàn)的修飾符語(yǔ)法有那幾種”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java中常見(jiàn)的修飾符語(yǔ)法有那幾種”吧!

臨朐網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,臨朐網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為臨朐千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的臨朐做網(wǎng)站的公司定做!

一、11 種常見(jiàn)的 Java 修飾符

1、修飾符應(yīng)用表

修飾符構(gòu)造方法方法數(shù)據(jù)解釋
(default)?????類、構(gòu)造方法、方法或數(shù)據(jù)域在所在的包中可見(jiàn)
public???? 類、構(gòu)造方法、方法或數(shù)據(jù)域在任何包任何程序中都可見(jiàn)
private ??? 構(gòu)造方法、方法或數(shù)據(jù)域只在所在的類中可見(jiàn)
protected ??? 構(gòu)造方法、方法或數(shù)據(jù)域在所屬的包中可見(jiàn),或者在任何包中該類的子類中可見(jiàn)
static  ???定義類方法、類數(shù)據(jù)域或靜態(tài)初始化模塊
final? ?? 終極類不能擴(kuò)展。終極方法不能在子類中修改。終極數(shù)據(jù)域是常量
abstract? ?  抽象類必須被擴(kuò)展。抽象方法必須在具體的子類中實(shí)現(xiàn)
native  ?  用native修飾的方法表明它是用Java以外的語(yǔ)言實(shí)現(xiàn)的
synchronized  ? ?同一時(shí)間只有一個(gè)線程可以執(zhí)行這個(gè)方法
strictfp? ?  使用精確浮點(diǎn)數(shù)計(jì)算模式,保證在所有的Java虛擬機(jī)中計(jì)算結(jié)果都相同
transient   ? 標(biāo)記實(shí)例數(shù)據(jù)域,使其不進(jìn)行序列化

2、訪問(wèn)權(quán)限對(duì)比

public > protected > default > private

說(shuō)明:以下僅介紹我們常用的 7 種修飾符語(yǔ)法說(shuō)明以及開(kāi)發(fā)應(yīng)用說(shuō)明,另外 4 種用法查看修飾符應(yīng)用表即可。

二、public 修飾符

語(yǔ)法說(shuō)明

  1. 修飾類、方法、變量??梢栽谌我馕恢迷L問(wèn),公共的。

開(kāi)發(fā)應(yīng)用

  1. 開(kāi)發(fā)中,通常類和業(yè)務(wù)方法都使用 public 修飾。

三、private 修飾符

語(yǔ)法說(shuō)明:

  1. 修飾方法、變量、還可以修飾內(nèi)部類。只能在本類中訪問(wèn),私有的。

開(kāi)發(fā)應(yīng)用

  1. 開(kāi)發(fā)中,通常實(shí)體類(Entity,Vo)中的成員變量使用 private 修飾,會(huì)提供訪問(wèn)這些變量的方法 getter 或
    setter,原則上要求不準(zhǔn)定義私有的方法。

  2. 一個(gè)實(shí)體數(shù)據(jù)的表通常對(duì)應(yīng)一個(gè)實(shí)體類。

四、protected 修飾符

語(yǔ)法說(shuō)明

  1. 修飾方法、變量、還可以修飾內(nèi)部類。

  2. 同一個(gè)包可以訪問(wèn)、子類可以訪問(wèn)(子類和父類不在同一個(gè)包也可以訪問(wèn))。

開(kāi)發(fā)應(yīng)用

  1. 開(kāi)發(fā)中,通常方法或變量是用來(lái)繼承的,都使用 protected 修飾。

  2. 在繼承中,方法的重寫(xiě),子類方法的訪問(wèn)權(quán)限必須大于或等于父類方法的訪問(wèn)權(quán)限。

class Fu {   public void play() {   }}class Son extends Fu {   void play() {   }}

五、default(不加任何訪問(wèn)權(quán)限修飾符)

語(yǔ)法說(shuō)明

  1. 修飾類、方法、變量。

  2. 只能在同一個(gè)包中訪問(wèn),子類也必須在同一個(gè)包中。

開(kāi)發(fā)應(yīng)用

  1. 項(xiàng)目中,類、方法、變量根據(jù)需求,通常都會(huì)指定訪問(wèn)權(quán)限。

六、static 修飾符

1、static 修飾成員變量(靜態(tài)變量/類變量)

語(yǔ)法說(shuō)明

  1. Java 中 可以通過(guò) static 關(guān)鍵字修飾變量達(dá)到全局變量的效果。

  2. static 修飾的變量(靜態(tài)變量)屬于類,在類第一次通過(guò)類加載器到 jvm 時(shí)被分配至方法區(qū)。

  3. 沒(méi)有 static 修飾的變量,稱為實(shí)例變量。

在這里插入圖片描述

1.1、類變量和實(shí)例變量的區(qū)別

  • 實(shí)例變量,在創(chuàng)建對(duì)象之后,被分配到堆內(nèi)存中,實(shí)例變量屬于某個(gè)具體的對(duì)象。當(dāng)創(chuàng)建對(duì)象,實(shí)例變量出現(xiàn)在堆內(nèi)存中,當(dāng)對(duì)象被垃圾回收,實(shí)例變量立即釋放內(nèi)存。

比如:我們創(chuàng)建兩個(gè)對(duì)象。

Cell c1 = new Cell(4,5);Cell c2 = new Cell(5,6);

當(dāng)創(chuàng)建對(duì)象 c1,c2 時(shí),實(shí)例變量(4,5),(5,6)出現(xiàn)在堆內(nèi)存中,當(dāng)對(duì)象 c1,c2 被垃圾回收,實(shí)例變量立即釋放內(nèi)存。

  • 類變量,被存儲(chǔ)在方法區(qū)中,“只有一份”,被所有對(duì)象共享。當(dāng)類被加載的時(shí)候,立即被存儲(chǔ)在方法區(qū)中,當(dāng)類被卸載,類變量立即釋放內(nèi)存。

開(kāi)發(fā)應(yīng)用

  1. 類變量可以由類名直接訪問(wèn),開(kāi)發(fā)中推薦使用類名的全稱。

比如:我們定義一個(gè)實(shí)體類。

public class Student {   // 實(shí)例變量,在創(chuàng)建對(duì)象之后,被分配到堆內(nèi)存中,實(shí)例變量屬于某個(gè)具體的對(duì)象// 當(dāng)創(chuàng)建對(duì)象,實(shí)例變量出現(xiàn)在堆內(nèi)存中,當(dāng)對(duì)象被垃圾回收,實(shí)例變量立即釋放內(nèi)存
	String name;// 類變量,被存儲(chǔ)在方法區(qū)中,"只有一份",被所有對(duì)象共享static String jtName;public void print() {   
		System.out.println(this.name);
		System.out.println(jtName);}}

下次使用靜態(tài)變量 jtName 時(shí),我們直接使用 Student 這個(gè)類名直接調(diào)用即可。同時(shí)我們也就可以理解下面兩個(gè)對(duì)象的屬性取值是一樣的。

public class Demo01 {   public static void main(String[] args) {   // TODO Auto-generated method stub
		Student stu1 = new Student();
		stu1.name = "張三";
		stu1.jtName = "王老師";

		Student stu2 = new Student();// 一般直接取類名// stu2.jtName = "盧老師";
		Student.jtName = "盧老師";
		System.out.println(stu1.name);// 張三
		System.out.println(stu2.name);// null
		System.out.println(stu1.jtName);// 盧老師
		System.out.println(stu2.jtName);// 盧老師}}

2、static 修飾成員方法(靜態(tài)方法/類方法)

靜態(tài)方法:static 修飾的方法屬于類方法,不需要?jiǎng)?chuàng)建對(duì)象就可以調(diào)用。static 方法中不能使用 this 和 super 等關(guān)鍵字,不能調(diào)用非 static 方法,只能訪問(wèn)所屬類的靜態(tài)成員變量和靜態(tài)方法。靜態(tài)方法(類方法),當(dāng)類被加載,靜態(tài)方法立即被加載到方法區(qū)中,類方法可以由類名直接調(diào)用。

實(shí)例方法:沒(méi)有static修飾的方法,實(shí)例方法,當(dāng)創(chuàng)建對(duì)象之后,實(shí)例方法立即被加載到方法區(qū)中,多個(gè)實(shí)例共享一份實(shí)例方法。

2.1、靜態(tài)方法與實(shí)例方法的區(qū)別和結(jié)論

  • 類方法中,不能使用this關(guān)鍵字,類方法中不隱含調(diào)用該方法對(duì)象的參數(shù)。

  • 實(shí)例方法可以直接調(diào)用靜態(tài)方法,靜態(tài)方法不可以直接訪問(wèn)實(shí)例成員,必須創(chuàng)建對(duì)象,由對(duì)象訪問(wèn)。

結(jié)論:所有對(duì)象共享的數(shù)據(jù),定義為靜態(tài)變量,否則定義為實(shí)例變量方法,方法中沒(méi)有訪問(wèn)實(shí)例成員,可以定義為靜態(tài)方法。

開(kāi)發(fā)應(yīng)用

  1. 項(xiàng)目中,通常工具類中的方法,都是靜態(tài)的。

3、static 靜態(tài)代碼段

語(yǔ)法說(shuō)明

  1. JVM在加載類時(shí)會(huì)執(zhí)行 static 靜態(tài)代碼段,常用于初始化靜態(tài)變量。

  2. static代碼只會(huì)在類被加載時(shí)執(zhí)行且執(zhí)行一次。

  3. 靜態(tài)優(yōu)于對(duì)象。

開(kāi)發(fā)應(yīng)用

  1. 開(kāi)發(fā)中,通常用于加載靜態(tài)資源,讀取配置文件等操作,在靜態(tài)代碼段中實(shí)現(xiàn)。

比如:我們定義一個(gè)工具類如下。

public class SomeUtil {   // 默認(rèn)的無(wú)參構(gòu)造public SomeUtil() {   
		System.out.println("創(chuàng)建對(duì)象!");}// 靜態(tài)優(yōu)于對(duì)象// 靜態(tài)代碼段 當(dāng)類被加載,立即被執(zhí)行,一個(gè)類在同一個(gè)進(jìn)程中,只加載一次static {   
		System.out.println("加載靜態(tài)資源!");}// 實(shí)例代碼段{   
		System.out.println("實(shí)例代碼段!");}public static void do1() {   
		System.out.println("do1....");}public static void do2() {   
		System.out.println("do2....");}public static void do3() {   
		System.out.println("do3....");}public static void main(String[] args) {   
		SomeUtil.do1();
		SomeUtil.do2();
		SomeUtil.do3();
		SomeUtil s1 = new SomeUtil();
		SomeUtil s2 = new SomeUtil();}}

執(zhí)行 main 方法,根據(jù)輸出的內(nèi)容我們可以明確看出執(zhí)行的順序。靜態(tài)代碼段只執(zhí)行一次,然后是靜態(tài)方法被執(zhí)行,最后是 new 的對(duì)象執(zhí)行無(wú)參構(gòu)造和實(shí)例代碼段,new 一次執(zhí)行一次。同時(shí)也可以得出我們的結(jié)論:靜態(tài)優(yōu)于對(duì)象。
Java中常見(jiàn)的修飾符語(yǔ)法有那幾種

4、static 內(nèi)部類

語(yǔ)法說(shuō)明:

  1. static 內(nèi)部類可以不依賴外部類實(shí)例對(duì)象而被實(shí)例化,而內(nèi)部類需要在外部類實(shí)例化后才能被實(shí)例化。

  2. 靜態(tài)內(nèi)部類不能訪問(wèn)外部類的普通變量,只能訪問(wèn)外部類的靜態(tài)成員變量和靜態(tài)方法。

七、final 修飾符

語(yǔ)法說(shuō)明

  1. final 類,不能被繼承。

  2. final 方法,不能被重寫(xiě)。

  3. final 修飾的變量,是常量。

開(kāi)發(fā)應(yīng)用

  1. 開(kāi)發(fā)中,使用 final 定義數(shù)據(jù)字典。

比如:在如下 Card 類中我們定義數(shù)據(jù)字典,用于 main 函數(shù)的輸出和查詢。

備注:數(shù)據(jù)字典是指對(duì)數(shù)據(jù)的數(shù)據(jù)項(xiàng)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)、處理邏輯等進(jìn)行定義和描述,其目的是對(duì)數(shù)據(jù)流程圖中的各個(gè)元素做出詳細(xì)的說(shuō)明,使用數(shù)據(jù)字典為簡(jiǎn)單的建模項(xiàng)目。簡(jiǎn)而言之,數(shù)據(jù)字典是描述數(shù)據(jù)的信息集合,是對(duì)系統(tǒng)中使用的所有數(shù)據(jù)元素的定義的集合。

public class Card {   // 開(kāi)發(fā)中,使用final定義數(shù)據(jù)字典。public static final int SPADE = 1;public static final int HEART = 2;public static final int BLACK = 5;public static final int FLOWER = 6;public static final int THREE = 0;public static final int EIGHT = 5;public static final int JACK = 8;public static final int QUEEN = 9;public static final int KING = 10;public static final int ACE = 11;public static final int DUCE = 12;public static final int JOKER = 13;private int suit;private int num;public Card() {   }public Card(int suit, int num) {   this.suit = suit;this.num = num;}public int getSuit() {   return suit;}public void setSuit(int suit) {   this.suit = suit;}public int getNum() {   return num;}public void setNum(int num) {   this.num = num;}public static void main(String[] args) {   
		Card card = new Card(Card.HEART, Card.THREE);
		System.out.println(card.getNum());}}

八、abstract 修飾符

語(yǔ)法說(shuō)明

  1. 抽象的,可以修飾類,修飾方法。

抽象類

  • 抽象類存在的意義在于被繼承。

  • 抽象類不可以創(chuàng)建對(duì)象。

  • abstract 不能和 final 一起使用 。

抽象方法

  • 抽象方法,只有定義沒(méi)有實(shí)現(xiàn)。

  • 如果一個(gè)類中有抽象方法,這個(gè)類必須是抽象類。

  • 一個(gè)抽象類中,可以沒(méi)有抽象方法。

  • 抽象類的子類,必須實(shí)現(xiàn)父類中所有的抽象方法。

開(kāi)發(fā)應(yīng)用

  1. 抽象類中既可以有默認(rèn)實(shí)現(xiàn)的方法,又可以有沒(méi)有實(shí)現(xiàn)的方法。

  2. 接口的適配器——用子類去實(shí)現(xiàn)接口中的方法。

九、接口(特殊的抽象類)

語(yǔ)法說(shuō)明

  1. 特殊的抽象類接口中的方法都是抽象方法 接口中的變量都是靜態(tài)常量。

  2. 定義接口使用 interface 關(guān)鍵字。

  3. 實(shí)現(xiàn)接口使用 implements 關(guān)鍵字。

  4. 類實(shí)現(xiàn)了接口,必須實(shí)現(xiàn)接口中所有的方法。

public interface MyInterface {   // 接口是高一級(jí)別的抽象。不能被實(shí)例化,所以只能定義常量// 定義了變量需要實(shí)例化,賦值才能使用,跟接口違背// 特殊的抽象類 接口中的方法都是抽象方法 接口中的變量都是靜態(tài)常量int I = 10;// 如果類中所有的方法都是抽象方法,使用接口void method1();void method2();}
import java.io.Serializable;/** * 其實(shí)適配器只是一個(gè)類,它實(shí)現(xiàn)了某種接口,提供了方法體。 * 這樣,再用到這個(gè)接口時(shí),可以直接繼承適配器,這樣就不需要把接口中的每一個(gè)方法再填充一遍了。 * 只需要在這個(gè)類中復(fù)寫(xiě)一下需要用的方法。這樣簡(jiǎn)單,方便。 * * @author bailu * */public class MyImpClass implements MyInterface, Serializable {   // Serializable序列化private static final long serialVersionUID = 1L;// 重寫(xiě)接口的方法——適配器,@Overridepublic void method1() {   
		System.out.println(I);}@Overridepublic void method2() {   }}

開(kāi)發(fā)應(yīng)用

  1. 如果類中所有的方法都是抽象方法,使用接口。

1、抽象類和接口的區(qū)別

  • 抽象類中,可以定義抽象方法和非抽象方法。接口中,所有的方法都是抽象方法。

  • 一個(gè)類只能繼承一個(gè)抽象類。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,多個(gè)接口使用逗號(hào)分隔。

比如:如下的類既實(shí)現(xiàn)了接口 MyInterface,同時(shí)實(shí)現(xiàn)了 Serializable 序列化序列化。

import java.io.Serializable;/** - 其實(shí)適配器只是一個(gè)類,它實(shí)現(xiàn)了某種接口,提供了方法體。 - 這樣,再用到這個(gè)接口時(shí),可以直接繼承適配器,這樣就不需要把接口中的每一個(gè)方法再填充一遍了。 - 只需要在這個(gè)類中復(fù)寫(xiě)一下需要用的方法。這樣簡(jiǎn)單,方便。 - - @author bailu - */public class MyImpClass implements MyInterface, Serializable {   // Serializable序列化private static final long serialVersionUID = 1L;// 重寫(xiě)接口的方法——適配器,@Overridepublic void method1() {   
		System.out.println(I);}@Overridepublic void method2() {   }}
  • 抽象類之間也可以繼承,但是也只是支持單繼承。接口之間也可以繼承,一個(gè)接口可以繼承多個(gè)接口。

開(kāi)發(fā)應(yīng)用

  1. 接口是用來(lái)制定標(biāo)準(zhǔn)或規(guī)范。

  2. 可以降低組件之間的耦合度,擴(kuò)展組件的功能。

  3. 體現(xiàn)了設(shè)計(jì)模式中的開(kāi)閉原則。

2、什么是適配器?

適配器只是一個(gè)類,它實(shí)現(xiàn)了接口,提供了方法體。再用到這個(gè)接口時(shí),可以直接繼承適配器,這樣就不需要把接口中的每一個(gè)方法再填充一遍了,只需要在這個(gè)類中復(fù)寫(xiě)一下需要用的方法。接口很好地體現(xiàn)了設(shè)計(jì)模式中的開(kāi)閉原則。

比如:我們做一個(gè)在線商城系統(tǒng),就需要調(diào)用第三方支付——銀行或者是支付寶的支付接口。我們就需要第三方為我們提供接口,里面定義了抽象的方法以及實(shí)現(xiàn)接口的方法——適配器,我們通過(guò)調(diào)用適配器里面的方法來(lái)完成支付。

ZsBankInter obj = 獲取實(shí)現(xiàn)類對(duì)象;obj.send();京東、淘寶
銀行接口ZsBankInter  
send() 類class DoSend implements ZsBankInter{   
  	send()具體的方法}

感謝各位的閱讀,以上就是“Java中常見(jiàn)的修飾符語(yǔ)法有那幾種”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java中常見(jiàn)的修飾符語(yǔ)法有那幾種這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

本文標(biāo)題:Java中常見(jiàn)的修飾符語(yǔ)法有那幾種
URL網(wǎng)址:http://bm7419.com/article22/igcpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站網(wǎng)站營(yíng)銷、定制開(kāi)發(fā)、域名注冊(cè)網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管