java中修飾符的使用場景與注意事項


  在java編程語言里,修飾符是出現在類的定義、屬性、方法、構造器、初始化塊等定義時的修飾。修飾符有分為訪問修飾符和可選修飾符,他們基本都是關鍵字,有一個例外,就是訪問修飾符除了public/protected/private之外還有一個默認訪問修飾符,共4種。而可選修飾符則有abstract/const/default/final/native/static/strictfp/synchronized/transient/volatile。

 

 

修飾符

 

修飾場景

成員方法

構造方法

成員變量

局部變量

abstract(抽象的)

static (靜態的)

public(公共的)

protected(受保護的)

private(私有的)

synchronized(同步的)

native(本地的)

transient(暫時的)

volatile(易失的)

final(不要改變的)

無訪問修飾符(默認,同包訪問)

 -

   

  由上表可以明顯地看出各修飾符可出現的位置。

  const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。java中保留了此關鍵字,但是編者並沒有發現它在java中的用法。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。

  下面將按位置,對修飾符進行分析:

  1.

  類一般情況下只有public/abstract/final和默認修飾符是被允許的,但是有一個例外,那就是在內部類中,是允許static修飾的。

  public:表示該類可以被任意位置的類訪問,默認(不寫)表示該類被同包中的其他類訪問。

  abstract:表明該類為抽象類,不能被實例化。應注意類為abstract修飾時,不要求其中有抽象abstract方法,而類中有抽象方法時,該類就必須成為抽象類。

  final:表明該類為最終類,不能被繼承(擴展)。應注意類為final修飾時,依然可以繼承其他類和實現接口。

  static:外部類是不允許static修飾的,但是內部類卻允許:class Outter{ static class Inner{} } 此時 可以直接通過外部類的類名產生一個內部類的實例:new Outter.Inner(); 而不需要先產生一個外部類的實例 class Outter{ class Inner{} },

  Outter outter = new Outter();
  outter.new Inner();

  當內部類不是static時,只能通過外部類的實例產生內部類對象。

  2.成員變量

  一個類的成員變量的聲明必須在類體中,而不能在方法中,方法中聲明的是局部變量。

  訪問修飾符可以是4種中的任意一種。

   static:類變量:一個類所擁有的變量,該類型的變量與類的實例對象無關,不管類創建了多少對象,系統僅在第一次調用類的時候為類變量分配內存,所有對象共享該類的類變量,因此可以通過類本身(類名)或者某個對象來訪問類變量。

  final:常量。成員變量定義時一般可以不初始化(給變量賦初值),但是final修飾成員變量時,必須在定義時就初始化,如: final int age = 20;這里的“=20”不能不寫,否則編譯就會報錯。

  volatile:聲明一個可能同時被並存運行的幾個線程所控制和修改的變量。

  transient:聲明一個該值不能被序列化的變量(對象被序列化后,該變量仍然存在,值以該類型的默認值來保存,如整型為0,String類型為null,boolean類型為false)。

  3.方法

  訪問修飾符可以是4種中的任意一種。

  abstract:抽象方法:只有聲明部分,方法體為空,具體在子類中完成。

  static:類方法、靜態方法:

    1) 調用時,可以直接使用類名調用,也可以類的某個實例對象名調用

    2)不能被單獨對象擁有,屬於整個類共享。

    3) 不能處理非static修飾的成員變量。

  final:最終方法,不能被子類重寫的方法。

  native:本地方法,表示用其他語言書寫的特殊方法,包括C,C++,FORTRAN,匯編語言等。

  synchronized:多線程調用時同步,當此方法被調用時,其他線程不能夠調用該方法,直到該方法返回,用於避免在多線程操作時,數據的結果出現不一致。

  4.局部變量

  只能有final修飾,不能夠有訪問修飾符修飾。

  5.接口

  接口的訪問修飾符只能有public/默認不寫(同包) 兩種,其可選修飾符只能為abstract(abstract也可以不寫,接口默認即為抽象)。

  接口中的變量只能為 public static final 聯合修飾的公共靜態常量(這三個修飾符可以不寫,接口中變量為默認有這三個修飾符,此外 final 類型的變量必須 在定義時初始化(賦初值),這點在上文的【變量】中已經說過 )

  接口中的方法訪問修飾符只能為public,一般情況下可選修飾符為abstract,即接口中的方法為默認抽象方法,不能有方法體。

  此外,還可以有strictfp/static/default修飾(其中static和default只能二者選其一,strictfp必須與static和default中的一個配合使用)

  static:靜態方法 必須有方法體。

  default:修飾的方法 必須有方法體。

  strictfp:strict floatpoint 精確浮點 

  注意:類與接口的關系為多實現,當類實現的多個中有同名、同參、同返回類型的 抽象方法或者default方法時(包括兩個都為抽象、兩個都為default 和 一個為抽象一個為default ),實現類必須重寫該方法。

  而接口中的方法為靜態(static)方法時,可以直接用接口名調用該方法,與實現類無關。實現類可以有與之相同的靜態或非靜態方法。

6.構造方法

  構造方法前不能有返回類型,但是有一個例外:可以有一個void返回類型,一般默認不寫,但是寫上這個void(無返回值)修飾也不會有錯。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM