【问题标题】:java objects - public vs static behaviourjava对象-公共与静态行为
【发布时间】:2013-12-18 08:44:06
【问题描述】:

我有两种方法都可以在数组上打印内容,一种被声明为public void,另一种被声明为static void。但是,当我从主程序类调用这些方法时,它们会表现出不同的行为。

公共无效:

  public void listStudent() {
    for (int i = 0;i < 10;i++) {
      if (studentNamesArray[i] != null) {
        System.out.println(studentNamesArray[i]);
        for(int y = 0;y < 3;y++) {
          System.out.println(studentMarksArray[i][y]);
        }
      }
    }
  }

静态无效:

  static void printArrays() {
    for (int i = 0;i < 10;i++) {
      if (studentNamesArray[i] != null) {
        System.out.println(studentNamesArray[i]);
        for(int y = 0;y < 3;y++) {
          System.out.println(studentMarksArray[i][y]);
        }
      }
    }
  }

public void 调用时会导致 nullPointerEception 错误,而 static void 调用不会打印任何内容(如预期的那样)。在这两种情况下,数组都是空的,但是如果我存储一个值然后删除该值,public void 方法则不会按预期打印任何内容。即public void 仅在创建对象之前调用它会导致错误,即使该对象随后立即从数组中删除。

为什么这些方法的行为方式不同?声明方法static void 是否被认为是不好的做法?

【问题讨论】:

  • 你怎么称呼public void?显示你的方法调用代码。
  • 为什么是i &lt; 10?使用i &lt; studentNamesArray.length
  • public 和 static 是两个完全不同的东西
  • staticpublic 是两个完全不同的东西。在继续其他任何事情之前,您需要学习它们。静态:stackoverflow.com/q/413898/1005102 公开:stackoverflow.com/q/215497/1005102
  • 你为什么不显示你的 main 方法,你在哪里调用这些方法。

标签: java arrays class oop object


【解决方案1】:

检查您是如何调用该方法的。 对于非静态的公共方法,必须初始化对象。

以这样的类为例:

public class CustomObject
{
  private static String[][] studentNamesArray = null;

  public void listStudents() {...}
  public static void printArrays() {...}
}

如果你打这个电话:

CustomObject.printArrays();

调用将起作用(并且不打印任何内容),因为该方法是静态的,因此在引用该 CustomObject 时始终存在。

如果你打这个电话:

CustomObject co;
co.listStudents();

它会因空指针异常而失败,因为 CustomObject "co" 尚未初始化。不能对空对象进行方法调用。

此外,数组必须初始化。如果没有周围的代码,很难判断程序中发生了什么,但调用:

if( studentNamesArray[i] == null )

如果数组未初始化,将产生 NPE。找不到空数组的第 [i] 个实例。对于该方法的静态和本地版本也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多