2012-09-19 35 views
19

單個活動的內部關係,定義組件時,僅在該活動中使用,有什麼下面的定義之間的真正區別:公共或私人的,它真的與Android變量

Button btnPower = null; 
//or 
private Button btnPower = null; 
//or 
public Button btnPower = null; 

public void somethingUsingTheButton(){ 
    btnPower = (Button)findViewById(R.id.btnpower_id); 
} 

是有一些如果實體本身只會被用在它所寫的類中,那麼應該考慮的「垃圾清理」,「內存」等常規應該被認爲總是使用私有的公共方法。

+1

大多數情況下,尤其是在您描述一切僅在一個類/活動中的場景中,它只是一種很好的形式,可以將範圍限制爲您使用的任何變量。 –

回答

20

私人領域推廣encapsulation

這是普遍接受的慣例,除非你需要的字段或方法暴露給其他類使用private。作爲一種習慣進入這將會爲你節省很多痛苦,從長遠來看。

然而,public字段或方法沒有任何內在錯誤。它對垃圾收集沒有影響。

在某些情況下,某些類型的訪問會影響性能,但它們可能比此問題的主題稍高一些。

一個這樣的情況與內部類訪問外部類字段有關。

class MyOuterClass 
{ 
    private String h = "hello"; 

    // because no access modifier is specified here 
    // the default level of "package" is used 
    String w = "world"; 

    class MyInnerClass 
    { 
     MyInnerClass() 
     { 
      // this works and is legal but the compiler creates a hidden method, 
      // those $access200() methods you sometimes see in a stack trace 
      System.out.println(h); 

      // this needs no extra method to access the parent class "w" field 
      // because "w" is accessible from any class in the package 
      // this results in cleaner code and improved performance 
      // but opens the "w" field up to accidental modification 
      System.out.println(w); 
     } 
    } 
} 
+2

我從來不知道這些隱藏的方法,因此我upvote –

0

如果你的變量聲明在Activity的作用域內,它通常作爲一個作用域變量正常工作。

但是,當編程實踐不是參數時,在另一種方法中使用一個方法的變量是一種不好的編程習慣。

例子:

壞:

void Foo() 
{ 
    int foo = 5; 
    System.out.println(Bar()); 
} 

int Bar() 
{ 
    return foo + 5; 
} 

這實際上將拋出一個語法錯誤,因爲foo聲明的範圍之外Bar()

好:

int foo; 

void Foo() 
{ 
    foo = 5; 
    System.out.println(Bar(foo)); //prints 10 
} 

int Bar(int foo) 
{ 
    return foo + 5; 
} 
+0

爲什麼'好'雖然好? –

+0

@Alex因爲你想避免(作爲設計原理)不必要的副作用。副作用被定義爲會影響當前上下文之外的信息。 – Codeman

+2

你的'壞'不編譯,因此它不是壞的,而是它不存在。因此,好與不相比,因此我想知道爲什麼它是好的。 –

1

privatepublic都是具有面向對象設計目的的Java關鍵字。我建議你閱讀這個:http://docs.oracle.com/javase/tutorial/java/concepts/

如果你只打算在你的活動中使用這些變量(對象),那麼我建議你讓這些變量爲私有。

我希望這會有所幫助。

編輯:

我不知道如果使用的是私有,公共或沒有關鍵字將應用優化您的角度的記憶點。據我可以告訴我認爲它不,你應該使用什麼使你的代碼最易讀,直觀和可維護。

+0

謝謝,我知道他們做了什麼,而且我知道他們不需要在我的情況下是公開的,但我想知道是否有任何類型的巫毒內存管理或垃圾收集是否受默認值,公共或私人。 – Octoth0rpe

2

知名度的範圍無關的垃圾收集器或內存管理

你會想降低能見度儘可能的範圍,使你的代碼更容易維護。

+0

感謝男人,挖掘一些更多,它看起來像這樣的約定:垃圾收集或內存管理沒有區別。 它是私人的。 – Octoth0rpe

4

好吧, 重要的一點是將變量定義爲private是java編程中的標準。 因此,直接調用對象的變量對於其他可能讀取您的代碼的人來說至少會顯得很奇怪。

我想說的另一件事是,如果你不是獨自一人編寫項目,總是一個很好的做法,以限制在類實現上關鍵的屬性的可見性,以避免圍繞其他開發者的奇怪工作拿出來。

我個人不知道這些修飾符是否用於編譯和優化的目的。

總結,因爲我認爲每個有經驗的java編碼器我強烈要求在屬性的定義中使用這個模式。