通过对象实例访问静态方法

时间:2015-08-16 20:34:28

标签: java static-methods

我已经了解到如果我们希望调用另一个类的静态方法,那么你必须在调用静态方法时编写类名。在下面的程序中,我在Employee_Impl类中创建了Employee类的对象,并使用该对象,我仍然可以访问count方法。如果仅使用类名访问count方法,为什么它允许我在对象中使用static方法?这是否意味着可以使用对象和类名访问静态方法?

Employee.java

public class Employee{
    static int counter = 0;
    static int count(){
        counter++;
        return counter;
    }
}

Employee_Impl.java

class Employee_Impl
    public static void main(String args[]){
        Employee obj = new Employee();
        System.out.println(obj.count());
        System.out.println(Employee.count());
        System.out.println(obj.count());        
    }
}

output

1
2
3

3 个答案:

答案 0 :(得分:5)

编译器会自动通过变量的类别名称(!)来替换此来电。请注意,即使您的对象为空it will work,也不会引发NullPointerException

答案 1 :(得分:3)

您可以这样做,因为您创建了Employee的实例来访问该方法。

静态方法的要点是允许访问"实用方法"可以在没有实例化新对象的开销的情况下调用它。此外,这些方法可以由类Employee的任何实例共享,并且可以改变共享的静态变量或属性。例如,假装所有Employee对象的共享前缀都被维护为静态属性:

public class Employee {
    private static String EMPLOYEE_IDENTIFIER_PREFIX = "Acme Corporation Employee Number:"

    public static void setEmployeeIdentifierPrefix(String prefix){
         Employee.EMPLOYEE_IDENTIFIER_PREFIX = prefix;
    }
}

如果AcmeCorporation购买了MultinationalCorporation,则可以使用类上的Employee更新所有setEmployeeIdentifierPrefixMethod个对象的前缀,如下所示:

Employee.setEmployeeIdentifierPrefix("Multinational Corporation Employee Number:");

答案 2 :(得分:0)

静态方法总是从类...而不是从对象执行... 这里..,即使您在对象count()上调用obj.count()方法 它只会从Employee类执行... 首先它将识别对象类,然后从该对象类型执行count()方法。