繁体   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