这当然是一个基本问题,但我必须要求澄清我的一个问题。如果一个类成员被设为static,它可以在没有实例化的情况下被访问,使用类似class.member的语法。创建对象时,它是否接收静态成员,并且该值可以更改吗?既然静态成员不需要对象,那么任何对象都一样吗?(即改变了一个,改变了另一个)。
基本上,静态成员是如何在对象中实现的,它们又是如何变化的?它们只能用静态方法来操作吗?
谢谢你们。
从技术上讲,您可以使用如下实例更改静态成员:
SomeClass c = new SomeClass();
c.someStaticMember = 5;
但是,这将产生一个警告,它应该这样做。正确的方法是这样做:
SomeClass.someStaticMember = 5;
既然静态成员不需要对象,那么任何对象都一样吗?(即改变了一个,改变了另一个)。
同样,技术上是的,因为您可以这样做:
System.out.println(c.someStaticMember);
这是不正确的,会给你一个警告;正确的方法是:
System.out.println(SomeClass.someStaticMember);
静态成员是否进入对象?
不,他们在不同的地方举行,实际上是在课堂上。
创建对象时,它是否接收静态成员
不。
可以更改该值吗?
是的,除非它是最终的,但该更改会影响所有实例都看到的单个静态变量。
既然静态成员不需要对象,那么任何对象都一样吗?(即改变了一个,改变了另一个)。
是的。
基本上,静态成员是如何在对象中实现的
他们不是。它们在类中实现。
它们是如何变化的?
何时以及是否更改它们。
它们只能用静态方法来操作吗?
不,静态变量可以被任何可以访问它的方法操作。
让我们看看这个。
首先,请记住与Class
不与任何特定实例相关联的静态方法(以及就此而言的静态变量)。即使您不创建任何实例,静态方法也存在。
要访问静态方法,请执行以下操作:
ClassName.staticMethodName(args)
虽然,Java 也允许您使用实例(对象)访问静态变量,但是不鼓励这样做,因为它会混淆该方法是否为静态方法。
objectName.staticMethodName(args)
现在回答你的问题:
创建对象时,它是否接收静态成员,并且该值可以更改吗?
静态成员存在于定义类而不是任何对象。如果静态成员是可变变量,那么您当然可以更改它的值。每个人(类自己的对象、任何其他对象、任何其他静态方法)都将看到相同的值。
既然静态成员不需要对象,那么任何对象都一样吗?(即改变了一个,改变了另一个)。
是的。但请注意,以重复自己为代价,静态成员与类相关联,而不是对象。
基本上,静态成员是如何在对象中实现的,它们又是如何变化的?它们只能用静态方法来操作吗?
哦,伙计,这越来越累了 :) 静态成员没有在对象中实现。它们可以通过其他静态和非静态方法进行操作(基本上可以从任何提供权限的地方)。但是,静态成员不能看到任何实例变量,除非他们定义了该实例。
创建对象时,它是否接收静态成员,并且该值可以更改吗?
是的,当然您可以使用对象更改静态成员的值,但最好使用类名更改它。
既然静态成员不需要对象,那么任何对象都一样吗?
是的,静态成员意味着这个成员在这个类的所有实例中都是相同的,并且可以通过任何对象或通过类名访问。
他们如何改变?
有两种方法可以更改静态成员的值:
public static int x = 5;
Object.x = 10;
Class.x = 20
并且改变静态成员值的两种方法都是正确的,但是第一种方法会给你一个警告,第二种方法不会。
除了@Doorknob 的回答,特别是回应:
并且只能用静态方法来操作它们吗
您可以通过各种方式访问和更改静态成员,如下所示:
public class Foo {
public static String BAR = "BAR!!";
public static void changeBAR() {
BAR = "BAZ!";
}
public void instanceMethod() {
// some code
BAR = "CHANGED AGAIN!";
// some code
}
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(Foo.BAR);
Foo.changeBAR();
System.out.println(Foo.BAR);
f.instanceMethod();
System.out.println(Foo.BAR);
Foo.BAR = "WHATS HAPPENING";
System.out.println(Foo.BAR);
}
}
将导致:
BAR!!
BAZ!
CHANGED AGAIN!
WHATS HAPPENING