0

在下面显示的代码示例中,我使用“new”关键字来实例化一个字符串数组。但是实例化仅适用于对象,由于 c[] 数组是静态的,这样做是错误的吗?还有另一种方法可以做到这一点,还是我应该使用“新”来实例化它,就好像它是一个对象一样?

public class SmallTank {

static String tableString = " ";

static String c[];
static String d[];
static String p;

public SmallTank(){

    c = new String[66];
    d = new String[29];

    // initialize string array
    for(int v = 0; v<66; v++ ){
        c[v] = null; 
    }
4

8 回答 8

0

static修饰符的含义是:

您可以将“静态”方法或字段视为在类定义之外声明。换句话说

静态字段/方法只有一个“副本”。静态字段/方法不能访问非静态字段/方法。

所以你想要的是:

static String c[] = new String[66];
static String d[] = new String[29];
于 2013-07-02T06:34:57.203 回答
0

您的方法的问题是每次创建 SmallTank 实例时都会初始化数组。也许这是您想要的,但通常,静态初始化程序是正确的方法:

public class SmallTank {

    static String tableString = " ";

    static String c[] = new String[66];
    static String d[] = new String[29];
    static String p;

    static {
        // initialize string array
        for(int v = 0; v<66; v++ ){
            c[v] = null; 
        }

这将在第一次加载类时初始化一次数组 - 通常是在您第一次创建它的任何实例时。

正如其他人指出的那样,初始化为 null 是没有意义的。

于 2013-07-02T06:34:57.073 回答
0

在声明数组时初始化数组,而不是在构造函数中。

public class SmallTank {
    static String c[] = new String[66];
    static String d[] = new String[99];
...
}

在构造函数中这样做是合法的,但使用静态字段的目的是在实例之间共享它。在您的情况下,每次创建SmallTank.

于 2013-07-02T06:35:24.023 回答
0

您不需要此代码c[v] = null;,默认情况下,引用数组的所有元素都是null. Array 是一个 object ,因此您可以使用new它来实例化它。不要在构造函数里面做,你可以直接在你声明的地方实例化它。

static String c[] = new String[66];

这将创建一个静态数组对象,因此该类的所有实例共享该对象。您也可以通过其他方式创建数组:

static String[] c = {"a","b","c"};
static String[] c = new String[]{"a","b","c"};
于 2013-07-02T06:31:27.487 回答
0

你的数组是对象。因此它们是用new.

只有对 this 对象的引用classstatic关键字绑定到 。

于 2013-07-02T06:31:41.993 回答
0

数组是一个对象。cobject 也是如此,它是静态的并不会改变这一点。

但这确实意味着,will的每个对象SmallTank最终都会覆盖cd.

我想你想要的是做静态初始化

添加

static {
    c = new String[66];
    d = new String[29];

    // initialize string array
    for(int v = 0; v<66; v++ ){
        c[v] = null; 
    }
}

并从构造函数中删除这些调用。

这将初始化c一次d

于 2013-07-02T06:31:48.927 回答
0

在 java 中,每个array都是object. 没关系数组是静态引用。出于初始化目的,您可以使用静态初始化程序块

  static {

        c = new String[66];
        d = new String[29];

        }

当类加载到内存中时,它只会先加载一次。

于 2013-07-02T06:33:30.927 回答
0

数组是 Java 中的对象。因此它们是用new关键字创建的。

并且静态字段/方法只有一个“副本”。意味着类中只有一个静态变量,并且始终在类的所有方法之间共享。静态字段/方法不能访问非静态字段/方法。

因此,您可以将代码修改为:

static String c[] = new String[66];
static String d[] = new String[29];

您还可以参考此文档: http ://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2013-07-02T06:49:24.610 回答