【計(jì)算機(jī)本科補(bǔ)全計(jì)劃】Java學(xué)習(xí)筆記(四) 修飾符

正文之前

今天總算是把那個(gè)黨員談話給弄完了豹缀,三個(gè)學(xué)弟輪番跟我來(lái)聊天,講自己的入黨動(dòng)機(jī)啥的慨代,看到他們就仿佛看到了大一的自己邢笙,原來(lái)當(dāng)時(shí)面對(duì)學(xué)長(zhǎng),面對(duì)這類事情侍匙,會(huì)緊張氮惯,會(huì)局促,被學(xué)長(zhǎng)安慰了但是還是繃著的樣子想暗。哇咔咔妇汗,一晃眼啊,號(hào)稱是人生中最令人迷醉的那段時(shí)間就快沒(méi)了说莫,研究生的時(shí)候可能就沒(méi)這么寫意的事情了杨箭。感傷~ 不如看Java,對(duì)了储狭,我要推薦國(guó)漫--《一人之下》互婿,很好看捣郊,很有趣,各路方言看著滿滿的土氣擒悬,但這才是國(guó)漫嗎模她。稻艰。雖然有的地方有點(diǎn)少兒不宜懂牧,但是真的很好看啊,簡(jiǎn)直把我想象中的小說(shuō)結(jié)合現(xiàn)代漫畫風(fēng)格搬上了B棧尊勿,太好看了僧凤!

勸君莫看日文版,這也是國(guó)漫崛起的原因元扔,有自己的特色了躯保。

(鄭重聲明:本文非原創(chuàng),只是筆記澎语,取自菜鳥編程途事!好東西,繼續(xù)打CALL)

正文

========復(fù)習(xí)========

  • 類:類是一個(gè)模板擅羞,它描述一類對(duì)象的行為和狀態(tài)尸变。

  • 方法:方法就是行為,一個(gè)類可以有很多方法减俏。邏輯運(yùn)算召烂、數(shù)據(jù)修改以及所有動(dòng)作都是在方法中完成的。

  • 子類:利用繼承的方法娃承,可以重用已存在類的方法和屬性奏夫,而不用重寫這些代碼。被繼承的類稱為超類(super class)历筝,派生類稱為子類(subclass)酗昼。

  • 接口:在Java中,接口可理解為對(duì)象間相互通信的協(xié)議梳猪。接口在繼承中扮演著很重要的角色仔雷。接口只定義派生要用到的方法,但是方法的具體實(shí)現(xiàn)完全取決于派生類舔示。

========復(fù)習(xí)========

1碟婆、 Java 修飾符

Java語(yǔ)言提供了很多修飾符,主要分為以下兩類:

  • 訪問(wèn)修飾符
  • 非訪問(wèn)修飾符

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

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

2俺祠、 訪問(wèn)控制修飾符

Java中公给,可以使用訪問(wèn)控制符來(lái)保護(hù)對(duì)類借帘、變量、方法和構(gòu)造方法的訪問(wèn)淌铐。Javav支持 4 種不同的訪問(wèn)權(quán)限肺然。

  • default (即缺省,什么也不寫): 在同一包內(nèi)可見(jiàn)腿准,不使用任何修飾符际起。使用對(duì)象:類、接口吐葱、變量街望、方法。

  • private : 在同一類內(nèi)可見(jiàn)弟跑。使用對(duì)象:變量灾前、方法。 注意:不能修飾類(外部類)

*public : 對(duì)所有類可見(jiàn)孟辑。使用對(duì)象:類哎甲、接口、變量饲嗽、方法

*protected : 對(duì)同一包內(nèi)的類和所有子類可見(jiàn)炭玫。使用對(duì)象:變量、方法喝噪。 注意:不能修飾類(外部類)础嫡。

我們可以可以通過(guò)以下表來(lái)說(shuō)明訪問(wèn)權(quán)限:

修飾符 當(dāng)前類 同一包內(nèi) 子孫類 其他包
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N

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

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

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

4晚唇、 私有訪問(wèn)修飾符-private

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

  • 聲明為私有訪問(wèn)類型的變量只能通過(guò)類中公共的 getter 方法被外部類訪問(wèn)。Private 訪問(wèn)修飾符的使用主要用來(lái)隱藏類的實(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;
   }
}

5闽瓢、 公有訪問(wèn)修飾符-public

  • 被聲明為 public 的類、方法心赶、構(gòu)造方法和接口能夠被任何其他類訪問(wèn)扣讼。
  • 如果幾個(gè)相互訪問(wèn)的 public 類分布在不同的包中,則需要導(dǎo)入相應(yīng) public 類所在的包缨叫。由于類的繼承性椭符,類所有的公有方法和變量都能被其子類繼承荔燎。
public static void main(String[] arguments) {
   // ...
}

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

6、 受保護(hù)的訪問(wèn)修飾符-protected

  • 被聲明為 protected 的變量蒸健、方法和構(gòu)造器能被同一個(gè)包中的任何其他類訪問(wèn)座享,也能夠被不同包中的子類訪問(wèn)。

  • protected 訪問(wèn)修飾符不能修飾類和接口纵装,方法和成員變量能夠聲明為 protected征讲,但是接口的成員變量和成員方法不能聲明為 protected据某。

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

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é)
   }
}

7癣籽、 訪問(wèn)控制和繼承

請(qǐng)注意以下方法繼承的規(guī)則(就是子類中的東西必須必父類更加開放挽唉,等同于人類的開放程度逐級(jí)遞增的概念,當(dāng)然筷狼,老爸私有的東西粱腻,兒子是沒(méi)法繼承的):

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

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

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

8水由、 非訪問(wèn)修飾符

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

  • static 修飾符裤唠,用來(lái)修飾類方法和類變量。
  • final 修飾符莹痢,用來(lái)修飾類种蘸、方法和變量,final 修飾的類不能夠被繼承竞膳,修飾的方法不能被繼承類重新定義航瞭,修飾的變量為常量,是不可修改的坦辟。
  • abstract 修飾符刊侯,用來(lái)創(chuàng)建抽象類和抽象方法。
  • synchronized 和 volatile 修飾符长窄,主要用于線程的編程滔吠。

9纲菌、 static 修飾符

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

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

public class InstanceCounter 
{
   private static int numInstances = 0;
   protected static int getCount() 
   {
      return numInstances;
   }
 

   private static void addInstance() 
   {
      numInstances++;
   }
 
   InstanceCounter() 
   {
      this.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");
   }
}
Started with 0 instances
Created 500 instances

10、 final 修飾符(不就是const一樣的喜德?只是沒(méi)有指針?biāo)詻](méi)那么復(fù)雜而已)

* final 變量

final 變量能被顯式地初始化并且只能初始化一次山橄。被聲明為final 的對(duì)象的引用不能指向不同的對(duì)象。但是 final 對(duì)象里的數(shù)據(jù)可以被改變舍悯。也就是說(shuō) final 對(duì)象的引用不能改變航棱,但是里面的值可以改變。final 修飾符通常和 static 修飾符一起使用來(lái)創(chuàng)建類常量萌衬。

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)容被修改秕豫。

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

final 類不能被繼承朴艰,沒(méi)有類能夠繼承 final 類的任何特性。

11混移、 abstract 修飾符

  • 抽象類(為了去掉虛函數(shù)祠墅,真是辛苦Java了):

抽象類不能用來(lái)實(shí)例化對(duì)象,聲明抽象類的唯一目的是為了將來(lái)對(duì)該類進(jìn)行擴(kuò)充沫屡。一個(gè)類不能同時(shí)被 abstract 和 final 修飾饵隙。如果一個(gè)類包含抽象方法,那么該類一定要聲明為--抽象類--沮脖,否則將出現(xiàn)編譯錯(cuò)誤金矛。**抽象類可以包含抽象方法和非抽象方法

abstract class Caravan{
 private double price;
 private String model;
 private String year;
 public abstract void goFast(); //抽象方法
 public abstract void changeColor();
}
  • 抽象方法(類似于C++的虛函數(shù)吧)

    • 抽象方法是一種沒(méi)有任何實(shí)現(xiàn)的方法,該方法的的具體實(shí)現(xiàn)由子類提供勺届。
      抽象方法不能被聲明成 final 和 static驶俊。
    • 任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法,除非該子類也是抽象類免姿。
    • 如果一個(gè)類包含若干個(gè)抽象方法饼酿,那么該類必須聲明為抽象類。抽象類可以不包含抽象方法。
    • 抽象方法的聲明以分號(hào)結(jié)尾故俐,例如:public abstract sample();
public abstract class SuperClass{
    abstract void m(); //抽象方法
}
 
class SubClass extends SuperClass{
     //實(shí)現(xiàn)抽象方法
      void m(){
          .........
      }
}

12想鹰、 synchronized 修飾符(簡(jiǎn)單點(diǎn)說(shuō)就是上鎖?)

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

13辑舷、 transient 修飾符(不大懂~)

  • 序列化的對(duì)象包含被 transient 修飾的實(shí)例變量時(shí),java 虛擬機(jī)(JVM)跳過(guò)該特定的變量槽片。
  • 該修飾符包含在定義變量的語(yǔ)句中何缓,用來(lái)預(yù)處理類和變量的數(shù)據(jù)類型。

14还栓、 volatile 修飾符

volatile 修飾的成員變量在每次被線程訪問(wèn)時(shí)碌廓,都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值。而且剩盒,當(dāng)成員變量發(fā)生變化時(shí)谷婆,會(huì)強(qiáng)制線程將變化值回寫到共享內(nèi)存。這樣在任何時(shí)刻勃刨,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值波材。一個(gè) volatile 對(duì)象引用可能是 null股淡。

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ì)停止垢揩。

15、 總結(jié)

  • JAVA 的類(外部類)有 2 種訪問(wèn)權(quán)限: public敛瓷、default叁巨。

  • 方法和變量有 4 種:public、default呐籽、protected锋勺、private。
    (PS:其中默認(rèn)訪問(wèn)權(quán)限和 protected 很相似狡蝶,有著細(xì)微的差別庶橱。)

    • public 意味著任何地方的其他類都能訪問(wèn)。
    • default 則是同一個(gè)包的類可以訪問(wèn)贪惹。
    • protected 表示同一個(gè)包的類可以訪問(wèn)苏章,其他的包的該類的子類也可以訪問(wèn)。
    • private 表示只有自己類能訪問(wèn)。
  • 修飾符:abstract枫绅、static泉孩、final

    • abstract: 表示是抽象類。 使用對(duì)象:類并淋、接口棵譬、方法
    • static: 可以當(dāng)做普通類使用,而不用先實(shí)例化一個(gè)外部類预伺。(用他修飾后订咸,就成了靜態(tài)內(nèi)部類了)。 使用對(duì)象:類酬诀、變量脏嚷、方法、初始化函數(shù)(注意:修飾類時(shí)只能修飾 內(nèi)部類 )
    • final: 表示類不可以被繼承瞒御。 使用對(duì)象:類父叙、變量、方法

正文之后

總體來(lái)說(shuō)肴裙,Java的兩類修飾符趾唱,一類訪問(wèn)控制符,側(cè)重于對(duì)訪問(wèn)權(quán)限的控制蜻懦,規(guī)定在哪兒可以訪問(wèn)我修飾的這個(gè)東西甜癞;而非訪問(wèn)控制符的話,更多就是側(cè)重于修飾功能宛乃,是對(duì)于變量或者方法的一種補(bǔ)充悠咱,比如static就規(guī)定了不論類有多少對(duì)象,只有這么一個(gè)變量公用征炼。這就是性質(zhì)的變化析既,而不是訪問(wèn)權(quán)限的變化。所以還是很好理解的W话隆眼坏!

社會(huì)我寶姐,這么好看的妹子酸些,你信她操著一口川普宰译,拿菜刀砍人,然后用鐵鏟挖坑埋人擂仍,埋了之后還砸?guī)紫聣簩?shí)的樣子么囤屹?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逢渔,隨后出現(xiàn)的幾起案子肋坚,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件智厌,死亡現(xiàn)場(chǎng)離奇詭異诲泌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铣鹏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門敷扫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诚卸,你說(shuō)我怎么就攤上這事葵第。” “怎么了合溺?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵卒密,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我棠赛,道長(zhǎng)哮奇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任睛约,我火速辦了婚禮鼎俘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辩涝。我一直安慰自己贸伐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布膀值。 她就那樣靜靜地躺著棍丐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沧踏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天巾钉,我揣著相機(jī)與錄音翘狱,去河邊找鬼。 笑死砰苍,一個(gè)胖子當(dāng)著我的面吹牛潦匈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赚导,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼茬缩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吼旧?” 一聲冷哼從身側(cè)響起凰锡,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掂为,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裕膀,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年勇哗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昼扛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欲诺,死狀恐怖抄谐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扰法,我是刑警寧澤斯稳,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站迹恐,受9級(jí)特大地震影響挣惰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜殴边,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一憎茂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锤岸,春花似錦竖幔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蛋铆,卻和暖如春馋评,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刺啦。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工留特, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玛瘸。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓蜕青,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親糊渊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子右核,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法渺绒,內(nèi)部類的語(yǔ)法贺喝,繼承相關(guān)的語(yǔ)法菱鸥,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • Win7下如何打開DOS控制臺(tái)搜变? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,588評(píng)論 4 12
  • 今天上午我跟著爸爸挠他,上醫(yī)院里去看媽媽和妹妹去了扳抽。看完媽媽和妹妹殖侵,爸爸想讓我回去贸呢,可是我姥姥說(shuō)讓我從醫(yī)院里住一晚上。...
    張廣遠(yuǎn)一班閱讀 182評(píng)論 0 0