在java中使用static

在java中使用static,java,methods,attributes,static,Java,Methods,Attributes,Static,我想知道是否可以在非静态方法中使用静态变量 也 我可以在静态方法中使用非静态变量吗 谢谢 我想知道是否可以在非静态方法中使用静态变量 对 我可以在静态方法中使用非静态变量吗 没有 我想知道是否可以在非静态方法中使用静态变量 对 我可以在静态方法中使用非静态变量吗 只有在静态方法中有一个类的实例可用时才可以使用。想想在静态上下文中使用非静态变量意味着什么。静态方法不会在任何实例上执行-因此,对类上定义的成员字段进行操作意味着什么?该字段属于哪个实例?没有 相反的情况,即在非静态上下文中使用静态变量

我想知道是否可以在非静态方法中使用静态变量

我可以在静态方法中使用非静态变量吗

谢谢

我想知道是否可以在非静态方法中使用静态变量

我可以在静态方法中使用非静态变量吗

没有

我想知道是否可以在非静态方法中使用静态变量

我可以在静态方法中使用非静态变量吗


只有在静态方法中有一个类的实例可用时才可以使用。

想想在静态上下文中使用非静态变量意味着什么。静态方法不会在任何实例上执行-因此,对类上定义的成员字段进行操作意味着什么?该字段属于哪个实例?没有


相反的情况,即在非静态上下文中使用静态变量是完全有意义的。您在一个实例上,希望读取为给定类的所有实例定义的一些静态引用。

两者都可以,但要访问实例(非静态)变量,您需要一个实例。
这可以在非静态上下文(如实例方法)中隐式提供,并且必须在静态上下文中显式提供

class StaticOrNot {

    static int staticVar = 1;
    int instVar = 2;

    static void staticMethod() {
        staticVar += 1;
        StaticOrNot someInstance = new StaticOrNot();
        someInstance.instVar += 2;
    }

    void nonStatic() {
        staticVar += 1;
        instVar += 2;  // using this as instance
    }
}

静态变量可以从您喜欢的任何地方访问。 非静态变量只能从非静态方法或特定对象(类实例)访问

原因可能相当复杂,但简而言之:

无论何时从类实例化对象,都会复制类中非静态的任何内容。任何静态都是类的所有实例所共有的(对于新对象不重复),这意味着它不受单个对象状态变化的影响


现在很明显,在创建类的实例之前,任何非静态的东西都不可能存在——它们不属于任何对象。由于静态成员不需要类的实例存在,因此访问确实需要对象实例(非静态)的成员是不安全的。

请参阅。非静态方法和静态方法的不同之处在于将“this”作为零参数发送。因此,非静态方法通常有效地具有一个额外的参数(这在java源代码中从未显示,但您可以使用“this”)。在静态模式下,没有额外的参数。旁注:内部类通过使用接受外部(或内部)类引用的静态合成方法访问外部类的私有字段(反之亦然)。为什么我不能在静态方法内使用非静态变量?@Visa:因为这没有任何意义。静态方法与特定实例不关联,而非静态变量与特定实例关联。如果使用实例限定它,则可以:
someInstance.myInstanceVar
。它会隐式地使用
这个
,这在静态上下文中没有任何意义。@VisaMasterCard:Oli是对的,您需要类的实例来访问非静态变量。在静态方法中,您没有当前对象的实例。@Noon:应该是“类的实例”。“instance”和“object”是同义词……你所说的someInstance是什么意思?@VisaMasterCard-就是你想要访问其变量的类的任何实例(对象)。例如,一个局部变量。没问题,理解它的最好方法是在实践中玩转并观察它。