静态方法vs非静态方法java更好理解

时间:2013-12-04 01:22:33

标签: java

我仍然无法完全理解这种静态和非静态。

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());
    }
}

如果我理解正确的话。我声明一个新对象非静态调用。所以我假设该类的输出值为“”(空白)

有人可以给我一个更好的例子吗?感谢

4 个答案:

答案 0 :(得分:1)

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

public class myName {
  public static String name;
  public void setName(String newName) {
    name = newName;
  }
  public String getName() {
    return name;
  }
  public static void main(Strings args[]) {
     myName first = new myName();
     myName second = new myName();
     first.setName("hello");
     System.out.println(second.getName());  //prints hello
  }
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

首先,您可以致电

NonStaticCalling.getString2()

但不是

NonStaticCalling.getString()

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

答案 3 :(得分:0)

 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!