为什么Java中的本地类不能有静态方法?

时间:2015-07-09 08:32:59

标签: java

方法main中是类计数器,它具有返回给定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的实例是uselles,只调用Counter.quantity(str)比创建实例更容易。那么为什么我们不能在本地类中使用静态方法呢?

4 个答案:

答案 0 :(得分:2)

只能在初始化父类时创建本地类。提到它们静态意味着它们应该在类初始化之前创建,这是不可能的。

有关详细信息,请参阅this

答案 1 :(得分:1)

静态:static关键字,用于创建属于该类的字段和方法,而不是类的实例。我们将成员和方法设置为静态,以便可以在别处使用,并通过使用类名来从任何地方调用,但< / p>

如果我们仍然使内部类的成员静态,我们将无法在该类之外访问它。

在这种情况下,内部类与其外部类的实例相关联,它本身不能定义任何静态方法。静态嵌套类不能直接引用其封闭类中定义的实例变量或方法,它只能通过对象引用来使用它们。

答案 2 :(得分:0)

因为可以从代码的任何地方调用静态方法。

如何调用您无法访问的类Counter的静态方法,因为它位于其他类的本地范围内?

你做错了什么。

<强> UPD

为什么要尝试实例化静态类?

Counter c=new Counter();

你实际上想要达到什么目标?

答案 3 :(得分:0)

如果你想调用类似Counter.quantity(str)的方法,你可以用主方法定义类。

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;
    }
}