[英]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.