这当然是一个基本问题,但我必须要求澄清我的一个问题。如果类成员是 static ,则可以在没有实例化的情况下访问它,其语法类似于 class.member 。创建对象时,它是否接收静态成员,是否可以更改该值?由于静态成员不需要对象,对于任何对象都是一样的吗? (即在一个中改变,在另一个中改变)。
基本上,如何在对象中实现静态成员,以及它们如何更改? 它们只能用静态方法操作吗?
谢谢大家。
答案 0 :(得分:2)
您可以在技术上使用如下实例更改静态成员:
SomeClass c = new SomeClass();
c.someStaticMember = 5;
然而,这将产生一个警告,它应该。正确的方法是这样做:
SomeClass.someStaticMember = 5;
由于静态成员不需要对象,对于任何对象都是一样的吗? (即在一个中改变,在另一个中改变)。
再次,从技术上讲,是的,因为你可以这样做:
System.out.println(c.someStaticMember);
虽然这是不正确的,但会给你一个警告;正确的方法是:
System.out.println(SomeClass.someStaticMember);
答案 1 :(得分:1)
静态成员是否输入对象?
没有。他们被关押在一个不同的地方,实际上是在课堂上。
创建对象时,是否收到静态成员
没有
并且可以更改该值吗?
是的,除非它是最终的,但该更改会影响所有实例看到的单个静态变量。
由于静态成员不需要对象,对于任何对象都是一样的吗? (即在一个中改变,在另一个中改变)。
是
基本上,如何在对象中实现静态成员
他们不是。它们在课堂上实现。
他们如何改变?
何时以及是否更改它们。
并且它们只能用静态方法操作吗?
不可以,任何有权访问它的方法都可以操纵静态变量。
答案 2 :(得分:1)
让我们来看看。
首先,请记住与Class
关联的静态方法(以及与此有关的静态变量)与任何特定实例无关。即使您不创建任何实例,也存在静态方法。
要访问静态方法,请执行以下操作:
ClassName.staticMethodName(args)
虽然,Java也允许你使用实例(对象)访问静态变量,但是不鼓励这样做,因为它会造成关于方法是否是静态的混淆。
objectName.staticMethodName(args)
现在回答你的问题:
创建对象时,是否收到静态成员,是否可以更改该值?
静态成员的存在与定义的Class没有任何对象。如果静态成员是一个可变变量,那么你当然可以改变它的值。每个人(类自己的对象,任何其他对象,任何其他静态方法)将看到相同的值。
由于静态成员不需要对象,对于任何对象都是一样的吗? (即在一个中改变,在另一个中改变)。
是。但请注意,以重复自己为代价,静态成员与Class相关联,而不是与对象相关联。
基本上,如何在对象中实现静态成员,以及它们如何更改?它们只能用静态方法操作吗?
哦,伙计,这是累人的:)静态成员不是在对象中实现的。它们可以从其他静态和非静态方法操作(基本上来自任何提供权限的地方)。但是,静态成员除非定义该实例,否则无法看到任何实例变量。
答案 3 :(得分:1)
创建对象时,是否收到静态成员,是否可以更改该值?
是的,您当然可以使用对象更改静态成员的值,但如果您使用类名更改它,则会更好。
由于静态成员不需要对象,对任何对象都是一样的吗?
是的,静态成员意味着该成员在此类创建的所有实例中都是相同的,并且可以通过任何对象或类名访问。
他们如何改变?
有两种方法可以更改静态成员的值:
public static int x = 5;
Object.x = 10;
Class.x = 20
并且更改静态成员值的两种方法都是正确的,但是第一种方法会给你一个警告,第二种方法不会。
答案 4 :(得分:0)
除了@ 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