2016-04-22 150 views
0

我很困惑,爲什麼我不能在構造函數或主內部創建變量private時指定變量,但可以在類內的變量之外執行。Java中的構造函數內部的私有變量

public class Stuff 
{ 
    private double x; 

    public Stuff(int i, double d) { 
     private double y; 
    } 

    public static void main(String[] args) { 
     private double z; 
    } 
} 
+0

您應該閱讀[Java POJO中的字段,變量,屬性和屬性之間的區別是什麼?](http://stackoverflow.com/q/10115588/5221149) – Andreas

+0

謝謝我認爲我現在明白了更好 –

回答

4

訪問修飾符是沒有意義的內部功能,因爲變量超出範圍的函數結束

+0

哦所以他們自動私人? –

+0

@ClangorousChimera我想你可以這樣想想 – Natecat

+3

它們不是私有的,因爲它們不存在*對象*上的* fields *。它們是*方法*的本地*變量*。 – Andreas

1

一個類字段和方法,可以通過一些其他類進行訪問後,始終該類本身取決於訪問級別修飾符(私有,默認訪問,受保護或公共)。您可以將字段和方法視爲該類的屬性/屬性。

一個字段就是你所描述的「一個不在任何方法內的類中的變量」。一個字段描述了類的值,一個方法描述了類(或類的對象)可以做什麼。

爲簡化本文,忽略static關鍵字,類是用於創建對象的模板。您爲某個類創建的每個對象都將擁有一組自己的字段和方法(除非該字段或方法爲static)。

如果將類的字段設置爲private沒有任何外部該類可以達到它。只有類本身(實質上是類的方法)才能達到它。私人方法也一樣。只有該類的其他方法才能訪問私有方法。

考慮這個例子:

public class Person { 
    private String name; 
    public int id; 

    public Person(String name, int id) { 
     this.name = name; 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

如果有人想通過直接引用該名接取這個人的名字,他們將無法做到這一點,因爲名字是private。他們將不得不使用方法getName()來做到這一點。

Person person = new Person(John, 5); 
System.out.print(person.name); //does not work 

Person person = new Person(John, 5); 
System.out.print(person.getName()); //works 

這是一件好事,因爲如果名字是直接訪問,你可以寫:

person.name = "Felicity"; 

和改變的人,這是不想要的(我們可以用id做到這一點的名字,這可能會導致麻煩)。這是不可能的,當名稱是私人的。

變量裏面的一種方法,但是,不是字段。這意味着它不是對象的屬性。它只是一個臨時變量,允許該方法做它想做的事情。當方法完成執行時,變量被銷燬。聲明這樣的變量爲private或其他任何內容都是毫無意義的,因此不允許。