静态方法与非静态方法java更好地理解

静态方法与非静态方法java更好地理解,java,Java,我仍然不能完全理解这个静态和非静态的概念 public static void main(String args[]){ staticClass.setString("hey there"); System.out.println(staticClass.getString2()); //expecting to be blank NonStaticCalling nonStaticCalling = new NonStaticCalling(); } st

我仍然不能完全理解这个静态和非静态的概念

public static void  main(String args[]){

    staticClass.setString("hey there");
    System.out.println(staticClass.getString2());
    //expecting to be blank
    NonStaticCalling nonStaticCalling = new NonStaticCalling();
}

static String aw = "";
public static void setString(String a){
    aw =a;
}

public String getString(){
    return aw;
}

public static String getString2(){
    return aw;
}


public class NonStaticCalling {
    staticClass staticClass = new staticClass();
    public NonStaticCalling(){
        staticClass.getString();
        System.out.println(staticClass.getString());
    }
}
如果我理解正确的话。我声明一个新对象为非静态调用。因此,我假设该类的输出值为“”(空白)

有人能给我一个更好的枫树吗?谢谢你,你可以打电话

NonStaticCalling.getString2()
但不是

NonStaticCalling.getString()

可以在不实例化类的情况下调用静态方法

设置静态变量时,该类的所有实例都是相同的。静态变量也称为“类变量”。我认为你的困惑实际上是关于变量,而不是方法。以这个没有静态变量的例子作为一个简单的例子。“name”对于类“myName”的所有实例都是相同的(抱歉,它应该大写,因为它是一个类名)


静态变量只为该StaticClass的所有对象创建一个,因此您将从新创建的对象返回相同的静态变量

 SomeName.setString("hey there");
        System.out.println(SomeName.getString2());

//expecting to be blank
        SomeName object = new SomeName();
 object.setString2("hey there");
System.out.println(object.getString());


public class SomeName
{
    static String aw = "";
    String aw2 = "";

    public SomeName()
    {

    }
    public static void setString(String a){

        aw =a;
    }
   public void setString2(String a){

        aw2 =a;
    }

    public String getString(){

        return aw;
    }

    public static String getString2(){
        return aw;
    }
}
这会把你得到的打印出来!所以不同之处在于,在一个类中,您使用的是该类的静态属性,这意味着如果您更改了它,那么将来使用它的每个其他对象的属性都会更改


在第二个示例中,您使用的是“对象”或类的实例,这意味着所有变量仅在对象存在时设置为该对象!如果你创建了一个新的,你将不得不再次为它设置aw2

你的主要方法在哪里?@Trojan.ZBOT在那里我编辑了我的帖子你能解释一下为什么它会打印相同的内容吗?我声明了一个新对象,为什么?根据更新的代码,您将调用两次
System.out.println()
:一次在主方法中,一次在构造函数中。如果您想更好地理解在应该向
System.out.println()
调用的每个(或仅一个)添加一些区别文本时调用了哪个。正如davecom和Kojueffect所指出的,静态变量是在main方法中设置的,因此它是为所有实例和/或对静态方法的调用设置的,无论您可以实例化或不实例化什么
非静态调用
实例。
 SomeName.setString("hey there");
        System.out.println(SomeName.getString2());

//expecting to be blank
        SomeName object = new SomeName();
 object.setString2("hey there");
System.out.println(object.getString());


public class SomeName
{
    static String aw = "";
    String aw2 = "";

    public SomeName()
    {

    }
    public static void setString(String a){

        aw =a;
    }
   public void setString2(String a){

        aw2 =a;
    }

    public String getString(){

        return aw;
    }

    public static String getString2(){
        return aw;
    }
}