簡體   English   中英

為什么要使用public和private來靜態成員和方法?

[英]Why use public and private to static members and method?

我正在學習Java,我只是想知道為什么當一個方法或成員是靜態的時,為什么要使用public和private? 當使用static時,它們是類方法和類成員,可以在不創建對象的情況下用於其他類,因此有必要使用public和private嗎? 希望能有所幫助。 抱歉,這個問題對某些人來說太簡單了。

字段或方法的可訪問性與它是否是靜態的這一事實正交。

您可以有一個可以從外部訪問的靜態方法,而一個靜態方法只能從類本身內部使用(由其他靜態或非靜態方法使用)。 字段也是如此。

例如:

// not visible from the outside
private static final long MILLISECONDS_IN_A_MINUTE = 1000L * 60 * 60;

public static Date addMinutes(Date d, int amount) {
    return addMillis(d, MILLISECONDS_IN_A_MINUTE * amount);
}

// not visible from the outside
private static Date addMillis(Date d, long amount) {
    return new Date(d.getTime() + amount);
}

我正在學習Java,我只是想知道為什么當一個方法或成員是靜態的時,為什么要使用public和private?

我相信您的問題是由於普遍的誤解,即訪問修飾符是針對instance的 ,但事實並非如此!

如果兩個私有實例屬於同一類,則它們可以彼此訪問。

換句話說, 訪問修飾符在級別上起作用 由於靜態成員也屬於某個類,因此在它們上也具有訪問修飾符是有意義的。

只能由同一類中的代碼使用的靜態方法(或變量)(如JB Nizet的示例中)應為私有,而任何類中的代碼可以使用的靜態方法或變量應為公共。

這不是必需的,但是可以有static方法和數據成員僅供內部使用。

例如,如果您想要該類的每個實例的唯一ID:

class Foo
{
   private static int nextId = 0;
   private static int generateId() { return ++nextId; }
   private int id;
   public Foo()
   {
      id = generateId();
   }
}

如您所見,在類外不需要nextIdgenerateId()也不必在類外使用它們。 該類本身負責生成id。 但是您需要它們是static (好吧,您需要nextIdstatic ,但是還可以使generateId()靜態的,因為它不訪問非靜態成員)。

每當創建對象Foostatic計數器都會增加,因此對於該類的每個實例,您將獲得不同的ID。 (此示例不是線程安全的)

假設您有一個靜態的public方法,並且此方法必須訪問private屬性。 此私有屬性也必須是靜態的。 私有靜態存在的一個原因。

范例:

public class Test {
  private static int myattr = 0;

  public static void foo() {
    myattr = 2;
  }
}

上面, myattr必須是靜態屬性,才能在foo()方法中使用它。

是的,這是必需的。

如果您有一個靜態方法,並且想在該方法中使用私有變量,那么您也需要將其聲明為靜態。

或者,您希望靜態變量對其他軟件包不可見,那么不要將其聲明為公共變量。

從我的記憶中,並不需要它 但是,從根本上講,任何一種編程語言中的公開手段都可以由外部文件使用。 使用private只能在該文件中使用,而static意味着您不能更改該引用的值。 無論這些是函數還是變量,都適用相同的規則。 我可能會離開。 大約一年半沒做過Java。

合並這些類型的方式由您決定。 畢竟,一個程序只是其用戶而已。 ^ _ ^

公共和私有密鑰與可見性有關:您希望其他類可以訪問哪些成員,哪些應該隱藏或封裝。 靜態成員與整個類有關,而非靜態成員對對象實例進行操作。

當將靜態方法與方法一起使用時,它不僅意味着應由其他類的成員使用。

當我們無法訪問該類的靜態方法時,該類(包含該方法)無法實例化,即無法創建該類的對象

在某些情況下,兩個不同的類可能具有名稱相同的靜態方法。 在這種情況下,您要使用同一類的方法,而不要使用其他類的方法。

暫無
暫無

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

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