在java中从静态方法调用非静态方法的最佳方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1457)

我知道关于这个话题有很多问题。 我有两个程序来调用arrPrint方法。

第一程序:

public class Test {
  public static void main(String args[]) {
    int[] arr = new int[5];
    arr = new int[] { 1, 2, 3, 4, 5 };

    Test test = new Test();
    test.arrPrint(arr);

}

public void arrPrint(int[] arr) {
  for (int i = 0; i < arr.length; i++)
      System.out.println(arr[i]);

  }
}

第二程序:

public class Test {
  public static void main(String args[]) {
    int[] arr = new int[5];
    arr = new int[] { 1, 2, 3, 4, 5 };      
    arrPrint(arr);
}

public static void arrPrint(int[] arr) {
  for (int i = 0; i < arr.length; i++)
    System.out.println(arr[i]);
  }
}

哪个程序是最好的,为什么?

提问于
用户回答回答于

实例方法在类的实例上运行,因此要执行实例方法,您需要一个类的实例。 因此,如果要从静态方法中调用实例方法,则需要对实例进行一些访问,可以是全局变量,也可以作为参数传递。 否则,您将收到编译错误。

用户回答回答于

“实例方法”是指需要在类的实例上执行该方法。对象的要点是实例可以有自己的专用数据,实例方法对其起作用,因此尝试在没有对象实例的情况下调用实例方法是没有意义的。如果您将示例重写为:

public class Test {

    int[] arr = new int[] {1,2,3,4,5};

    public static void main(String args[]) {
        Test test = new Test();
        test.arrPrint();
    }

    public void arrPrint() {
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

然后这变得有点简单。 Test的实例有自己的数据,实例方法可以访问并执行某些操作。

查看像String或ArrayList这样的JDK类,看看它们是如何设计的。 它们封装数据并允许通过实例方法访问它。

另一方面,静态方法无法查看实例数据,因为它们不属于对象实例。 如果实例方法不接触任何实例数据,则某些静态分析工具(如sonarqube)会建议将实例方法更改为静态方法。 由于您的方法对传入的数据进行操作,并且创建的对象不需要作为实例方法调用它,因此最好将其作为静态方法。

扫码关注云+社区

领取腾讯云代金券