首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中从静态方法调用非静态方法的最好方法是什么?

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

Stack Overflow用户
提问于 2015-10-20 21:36:45
回答 3查看 64关注 0票数 -4

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

第一个步骤:

代码语言:javascript
复制
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]);

  }
}

第二步:

代码语言:javascript
复制
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]);
  }
}

哪种程序是最好的?为什么?

EN

回答 3

Stack Overflow用户

发布于 2015-10-20 21:39:34

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-20 21:48:50

“实例方法”是指该方法需要在类的一个实例上执行。对象的意义在于,实例可以有自己的专用数据,实例方法对这些数据进行操作,因此尝试调用没有对象实例的实例方法是没有意义的。如果您将示例重写为:

代码语言:javascript
复制
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,会建议将实例方法更改为静态方法。由于您的方法对传入的数据进行操作,并且不需要创建对象将其作为实例方法调用,因此最好将其作为静态方法。

票数 0
EN

Stack Overflow用户

发布于 2015-10-20 21:58:20

如果您想在另一个类中使用方法arrPrint,则使用第二个过程。

代码语言:javascript
复制
public class A{
    public int[] intArray;

    public A(int[] intArray) {
        this.intArray = intArray;
    }

    public int[] getIntArray() {
        return intArray;
    }        
}


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

    public static void arrPrint(int[] arr) {
        for (int i = 0; i < arr.length; i++)System.out.println(arr[i]);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33238175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档