从问题System.out.println 在 Java 中的含义是什么?我发现out
inSystem.out.println
是一个静态字段。
从 C/C++ 背景来看,静态方法很容易理解,因为它与 C 中的函数相同。但是,我不确定静态字段的用例。
它只是一种使用多种方法而不实例化对象的方法,就像我们使用System.out.println
而不实例化任何东西一样吗?还是有静态字段的用例?
从问题System.out.println 在 Java 中的含义是什么?我发现out
inSystem.out.println
是一个静态字段。
从 C/C++ 背景来看,静态方法很容易理解,因为它与 C 中的函数相同。但是,我不确定静态字段的用例。
它只是一种使用多种方法而不实例化对象的方法,就像我们使用System.out.println
而不实例化任何东西一样吗?还是有静态字段的用例?
静态字段是类的一个属性,它在堆上分配并且独立于特定的对象实例。
例如,您可以使用静态变量来计算类的实例数。
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
整个类的值,因此也更改了所有实例。
除了 System 中的 .out var 之外,它还可以用作类的所有实例都可以更新的共享变量
private static int meatballsConsumed;
或作为通用共享变量
public static String thisSeemsDangerous;
或者作为一个常数
public static final String FLD_OF_DREAMS = "COSTNER,KEVIN";
该类System
只有一个OutputStream
写入标准输出(称为out
)的实例,因此它是一个静态变量。我们不需要多个实例,因为只有一个标准输出。
静态字段是已设置的字段,无需实例化类即可获取(使用 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
out
是一个object
。PrintStream
System
是java.lang
包中的一个类
println
是PrintStream
类的实例方法(不是静态方法)
out
要在System
不实例化的情况下访问该字段System
,请声明该字段static
。
静态字段也称为“类”字段(与“实例”字段相反)。
这意味着无需先实例化类就可以访问它们。
因此,您可以调用类方法(如Math.abs()
在Math
类上),而无需实例化一个Math
类。您还可以访问诸如Math.PI
.
此外,更改类属性意味着它会影响该类的所有实例,这意味着被实例化的每个对象都会看到此值的更改,从而允许您通过单个属性更改来影响它们。