我已经了解到如果我们希望调用另一个类的静态方法,那么你必须在调用静态方法时编写类名。在下面的程序中,我在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
答案 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()
方法。