为什么Java中的本地类不能有静态方法?
在方法main中,类计数器具有返回给定字符串中数字数量的方法数量为什么Java中的本地类不能有静态方法?,java,Java,在方法main中,类计数器具有返回给定字符串中数字数量的方法数量 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()){
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));
}
我认为创建计数器的实例是uselles,只调用
Counter.quantity(str)
将比创建实例更容易。那么为什么我们不能在本地类中使用静态方法呢?因为静态方法可以从代码的任何地方调用
由于类计数器在其他类的局部作用域中而无法访问,您将如何调用该类的静态方法
你做错了什么
UPD
为什么要尝试实例化静态类
计数器c=新计数器()代码>
您实际想要达到的目标是什么?Static:Static关键字创建属于类的字段和方法,而不是属于类的实例。我们将成员和方法设置为静态,以便可以在其他地方使用,也可以通过使用类名从任何地方调用
如果我们使内部类的成员仍然是静态的,我们将无法在该类之外访问它
在这种情况下,内部类与其外部类的实例相关联,它本身不能定义任何静态方法。静态嵌套类不能直接引用其封闭类中定义的实例变量或方法,只能通过对象引用使用它们。只有在初始化父类时才能创建局部类。提到它们是静态的意味着它们应该在类初始化之前创建,这是不可能的
有关更多详细信息,请参见如果要调用类似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;
}
}
那不是一个静态类。这是一个。当您声明静态成员时,您隐式地声明了静态类。如果您想要重写方法,那么您不能重写静态方法,因此您失去了继承OOPS概念。您可以在静态void main(…)之外重构计数器类
方法,并将计数器类和方法声明为静态。这应该使您能够调用System.out.println(Counter.quantity(str))如果可以接受,则从主方法中选择代码>you@AnantLaxmikantBobde实用程序类通常是这样设计的。在utitlity类中添加新方法或在此处创建新的实用程序类通常是解决方案。如果一个实用程序类的设计考虑到灵活性,那么就可以使用策略模式在运行时切换具体的实现——Spring SecuritySecurityContextHolder
类建立在该概念的基础上,您可以将其策略定义为GLOBAL
,THREADLOCAL
或INHERITEDTHREADLOCAL