静态方法属于类而不是类的对象

时间:2015-03-05 14:54:06

标签: java oop

静态方法属于类而不是类的对象。 无需创建类的实例即可调用静态方法。这是什么意思?

7 个答案:

答案 0 :(得分:2)

ClassObject classObj = new ClassObject();
classObj.doSomething();

VS

ExampleClass.staticMethod();

首先需要ClassObject的实例来调用doSomething()。第二个没有。

答案 1 :(得分:2)

这意味着,而不是需要从类中创建一个新实例,然后调用函数,如:

Foo f = new Foo();
f.bar();

您可以直接从类中访问它,如:

Foo.bar();

这显然意味着您无法使用静态方法中的任何非静态字段或对象方法,当然。

答案 2 :(得分:1)

以下是使用静态方法和标准方法的类的示例。

public class MyClass {
    public static void staticPrintMe() {
        System.out.println("I can be printed without any instantiation of MyClass class");
    }

    public void nonStaticPrintMe() {
        System.out.println("I can be printed only from an object of type MyClass");
    }
}

以下是调用这两种方法的代码:

MyClass.staticPrintMe();                  // Called without instantiating MyClass

MyClass myClassInstance = new MyClass();  // MyClass instantiation 
myClass.nonStaticPrintMe();               // Called on object of type MyClass

正如您所看到的,在没有任何MyClass类型的对象的情况下调用静态方法。

答案 3 :(得分:0)

java.lang.Math类为例。在这行代码中:

double pi = 2 * Math.asin(1);

我提到了Math类,但asin方法是static。创建的类没有实例,该类只是该实用程序函数的占位符。

这样做的一个推论是,静态方法可能无法访问任何每个实例数据 - 它只能访问也被声明为static的类变量。

答案 4 :(得分:0)

看看这个例子。使用静态方法和实例方法定义类:

public class MyClass {
    public MyClass() {
        // do something
    }

    public static staticMethod() {
        // do something
    }

    public void instanceMethod() {
        // do something
    }
}

<强>用法:

MyClass anInstance = new MyClass();

// static method:
MyClass.staticMethod();

// instance method:
anInstance.instanceMethod();

// this is possible thought discoraged:
anInstance.staticMethod();

// this is forbidden:
MyClass.instanceMethod();

答案 5 :(得分:0)

要调用静态方法,您不需要构建类实例(即对象)。

例如:

class Multiplier {
  public static double multiply(double arg1, double arg2) {
          return arg1 * arg2;
  }
}

静态方法不使用类实例信息,您可以使用以下方法:

Multiplier.multiply(x, y);

非静态方法使用类实例信息并依赖于它。

例如:

class Pony {
  private Color color;
  private String name;

  public Pony(Color color, String Name) {
    this.color = color;
    this.name = name;
  }

  public void printPonyInfo() {
    System.out.println("Name: " + this.name);
    System.out.println("Color: " + this.color);
  }
}


   Pony pony1 = new Pony(Color.PINK, "Sugar");
   Pony pony2 = new Pony(Color.BLACK, "Jupiter");

当你打电话时:

pony1.printPonyInfo();
pony2.printPonyInfo();

您可以获得每个小马对象的名称和颜色。您无法调用Pony.printPonyInfo(),因为printPonyInfo()不知道要打印什么。它不是静态的。只有在创建了Pony类实例时,才能调用此方法,这取决于类实例信息。

答案 6 :(得分:0)

当我们调用一个方法时,我们需要一个像这样的类的实例。

class SomeClass {
    public void test() {}
}

SomeClass obj = new SomeClass();
obj.test();

&#39;物镜&#39;是SomeClass的一个实例。 如果没有类似&#39; obj&#39;这样的实例,我们就无法调用测试方法。

但静态方法不同。

class SomeClass2 {
    public static void testStatic() {}
}

我们不会像上面的SomeClass一样调用testStatic方法。

SomeClass2 obj = new SomeClass2();
obj.testStatic(); // wrong

我们只用类型打电话。

SomeClass2.testStatic();