公共类的公共方法是否可以通过其名称来调用,例如" method()"取代" classname.method()"?

时间:2015-03-07 10:14:44

标签: java

我在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);

2 个答案:

答案 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)调用,也可以从非静态方法调用。