0

从问题System.out.println 在 Java 中的含义是什么?我发现outinSystem.out.println是一个静态字段。

从 C/C++ 背景来看,静态方法很容易理解,因为它与 C 中的函数相同。但是,我不确定静态字段的用例。

它只是一种使用多种方法而不实例化对象的方法,就像我们使用System.out.println 而不实例化任何东西一样吗?还是有静态字段的用例?

4

7 回答 7

3

静态字段是类的一个属性,它在堆上分配并且独立于特定的对象实例。

例如,您可以使用静态变量来计算类的实例数。

于 2013-02-17T04:25:45.973 回答
3

static变量/方法不仅具有无需实例化即可使用的特性,而且它们在多个实例之间也是一致的。

例如,

public class A {
    public int a = 1;
    public static int b = 2;
}

现在,当我执行A a1 = new A()and时A a2 = new A()A.a获得 2 倍的内存并存储在对象实例中,而A.b只获得一次内存并存储在实例之外。

这方面的一个主要例子是

a1.b = 3;
System.out.println(a2.b);

这将打印 3 而不是 2,因为a1更改了b整个类的值,因此也更改了所有实例。

于 2013-02-17T04:30:05.257 回答
0

除了 System 中的 .out var 之外,它还可以用作类的所有实例都可以更新的共享变量

private static int meatballsConsumed;

或作为通用共享变量

public static String thisSeemsDangerous;

或者作为一个常数

public static final String FLD_OF_DREAMS = "COSTNER,KEVIN";
于 2013-02-17T05:50:14.457 回答
0

该类System只有一个OutputStream写入标准输出(称为out)的实例,因此它是一个静态变量。我们不需要多个实例,因为只有一个标准输出。

于 2013-02-17T04:26:38.463 回答
0

静态字段是已设置的字段,无需实例化类即可获取(使用 new ClassName())。

例如:

public class MyClass {
  public static int number = 1;
}

使用上面的代码,您可以使用MyClass.number.

public class MyClass {
  public int number = 1;
}

现在,您需要通过构造函数实例化 MyClass。由于没有声明构造函数,您只需使用 new MyClass():

MyClass cl = new MyClass();
cl.number; // <-- The number
于 2013-02-17T04:26:46.810 回答
0

out是一个objectPrintStream

Systemjava.lang包中的一个类

printlnPrintStream类的实例方法(不是静态方法)

out要在System不实例化的情况下访问该字段System,请声明该字段static

于 2013-02-17T04:27:23.427 回答
0

静态字段也称为“类”字段(与“实例”字段相反)。

这意味着无需先实例化类就可以访问它们。

因此,您可以调用类方法(如Math.abs()Math类上),而无需实例化一个Math类。您还可以访问诸如Math.PI.

此外,更改类属性意味着它会影响该类的所有实例,这意味着被实例化的每个对象都会看到此值的更改,从而允许您通过单个属性更改来影响它们。

于 2013-02-17T04:27:47.747 回答