簡體   English   中英

為什么Java中的本地類不能具有靜態方法?

[英]Why local classes in Java can`t have static methods?

方法主類中的Counter類具有返回給定String中數字的數量的方法數量。

 public static void main(String... args) {

    class Counter{
        static final String numbers="0123456789";
        int quantity(String main){
           int i=0;
            for (char c:main.toCharArray()){
                if (numbers.contains(Character.toString(c)))
                i++;
                }
         return i;
        }
    }

    String str="a0b3s2d6";
    Counter c=new Counter();
    System.out.println(c.quantity(str));
}

我認為創建Counter實例很麻煩,只調用Counter.quantity(str)比創建實例要容易。 那么為什么我們在本地類中不能有靜態方法呢?

只能在初始化父類時創建本地類。 靜態提及它們意味着應該在類初始化之前創建它們,而這是不可能的。

有關更多詳細信息,請參閱

static:static關鍵字,用於創建屬於該類而不是該類實例的字段和方法。我們將成員和方法設為靜態,以便可以在其他位置使用它並可以通過使用類名在任何地方調用它,

如果我們將內部類的成員設為靜態,我們將無法在該類外部訪問它。

在這種情況下,內部類與其外部類的實例相關聯,它本身不能定義任何靜態方法。 靜態嵌套類不能直接引用其封閉類中定義的實例變量或方法,它只能通過對象引用來使用它們。

因為可以從代碼的任何位置調用靜態方法。

您將如何調用Counter類的靜態方法,因為它在某些其他類的本地范圍內而無法到達?

您做錯了。

UPD

為什么要嘗試實例化靜態類?

Counter c=new Counter();

您實際上要達到什么目標?

如果要調用Counter.quantity(str)之類的方法,則可以在main方法中定義類。

public static void main(String... args) {
    String str = "a0b3s2d6";
    System.out.println(Counter.quantity(str));
}

static class Counter {
    static final String numbers = "0123456789";

    static int quantity(String main) {
        int i = 0;
        for (char c : main.toCharArray()) {
            if (numbers.contains(Character.toString(c)))
                i++;
        }
        return i;
    }
}

暫無
暫無

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

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