我在hackerrank.com上遇到了这个代码,这让我问这个问题:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int solveMeFirst(int a, int b) {
return a+b;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a;
a = in.nextInt();
int b;
b = in.nextInt();
int sum;
sum = solveMeFirst(a, b);
System.out.println(sum);
}
}
为什么这可能? 这里,不应该是Solution.solveMeFirst(a,b);
答案 0 :(得分:2)
在这里,不应该是Solution.solveMeFirst(a,b);
你可以称之为,但你当然不必。
查找名称含义的详细规则在JLS 6.5中给出,但基本上编译器将搜索"当前" class(你正在调用它的那个)和所有祖先类(在这种情况下只是Object
)。它还将使用任何静态导入(在这种情况下你不会有)。
它与实例方法完全相同:
public class Foo {
public void firstMethod() {
secondMethod();
}
private void secondMethod() {
}
}
实例方法可以在没有任何限定的情况下调用静态方法,但静态方法不能调用实例方法而不指定调用方法的实例,例如
public class Foo {
public static void staticMethod(Foo instance) {
instance.instanceMethod();
}
private void instanceMethod() {
}
}
答案 1 :(得分:0)
这是可能的,因为你在类中有你想要调用的静态方法。 它不是main方法的特殊行为。 任何静态方法都可以从同一个类中从另一个静态方法(如main)调用,也可以从非静态方法调用。