簡體   English   中英

方法中的訪問修飾符

[英]Access modifiers within a method

在Java方法中聲明的變量上使用訪問修飾符(公共/私有/受保護)是否絕對非法? 是否有任何例外情況允許我們在方法內聲明的變量上使用訪問修飾符?

范例1:

public class myclass
{
  public static void main (String[] args)
  {
    public int number = 0; //This will cause an error (illegal start of expression)
  }

}

范例2:

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

  }
  public static void myMethod()
  {
    public int number = 0; //This will cause an error (illegal start of expression)
  }
}

對於許多人來說,這個問題聽起來很簡單,但是我想知道我們不能在方法中使用訪問修飾符的絕對程度。 絕對不可能嗎?

是的,使局部變量具有任何訪問修飾符是非法的: publicprotectedprivate

JLS的14.4節定義了可以成為局部變量聲明的一部分的內容,並且不包括訪問修飾符:僅包含注釋和/或final

LocalVariableDeclaration:

{VariableModifier} UnannType VariableDeclaratorList

VariableModifier:

最終注解

同樣,局部變量的作用域已經被限制在聲明它們的塊中。

局部變量在它們創建的范圍內總是可見的,訪問修飾符在那里根本沒有任何意義。 在任何情況下或特殊情況下都不允許。

訪問修飾符只能應用於實例或類級別的變量。

您可以檢查JLS以了解局部變量聲明的規范,以確保語法規則從不允許這樣做:

局部變量聲明語句聲明一個或多個局部變量名稱。

...
LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableModifiers:
    VariableModifier
    VariableModifiers VariableModifier

VariableModifier: one of
    Annotation final
...

在這里,您可以清楚地看到,除注釋外, final是在局部變量之前唯一允許的修飾符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM