gpt4 book ai didi

Java 对象 - 公共(public)与静态行为

转载 作者:行者123 更新时间:2023-11-30 09:14:42 24 4
gpt4 key购买 nike

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

公共(public)无效:

  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)方法,必须初始化对象。

举个例子,像这样的一个类:

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] 个实例。对于该方法的静态版本和本地版本都是如此。

关于Java 对象 - 公共(public)与静态行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com