需要注意,不需要使用对象调用静态方法。例如,不需要构造Math类对象就可以调用Math.pow。
同理,main方法也是一个静态方法。
- public class Application
- {
- public static void main(String[] args)
- {
- //construct objects here
- ...
- }
- }
main方法不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象。静态的main方法将执行并创建程序所需要的对象。
提示:每一个类可以有一个main方法。这是一个常用于对类进行单元测试的技巧。例如,可以在Employee类中添加一个main方法:
- class Employee
- {
- public Employee(String n, double s, int year, int month, int day)
- {
- name = n;
- salary = s;
- GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
- hireDay = calendar.getTime();
- }
- ...
- public static void main(String[] args) //unit test
- {
- Employee e = new Employee("Romeo", 50000, 2003, 3, 31);
- e.raiseSalary(10);
- System.out.println(e.getName() + " " + e.getSalary());
- }
- ...
- }
如果想要独立地测试Employee类,只需要执行
- java Employee
如果雇员类是大型应用程序的一部分,就可以使用下面这条语句运行程序
- java Application
并且Employee类的main方法永远不会被执行。
例4-3中的程序包含了Employee类的一个简单版本,其中有一个静态域nextId和一个静态方法getNextId。这里将三个Employee对象写入数组,然后打印雇员信息。最后,打印出下一个可用的员工标识码来作为对静态方法使用的演示。
需要注意,Employee类也有一个静态的main方法用于单元测试。试试运行
- java Employee
和
- java StaticTest
执行两个main方法。
- //**
- * This program demonstrates static methods
- * @Version 1.01 2012-11-13
- * author Wucg
- */
- public class StaticTest
- {
- public static void main(String[] args)
- {
- //fill the staff array with three Employee objects
- Employee[] staff = new Employee[3];
- staff[0] = new Employee("Tom", 40000);
- staff[1] = new Employee("Dick", 60000);
- staff[2] = new Employee("Harry", 65000);
- // print out information about all Employee objects
- for(Employee e : staff)
- {
- e.setId();
- System.out.println("name=" + e.getName() + ", id=" + e.getId() + ", salary=" + e.getSalary());
- }
- int n = Employee.getNextId(); // calls static method
- System.out.println("Next available id = " + n);
- }
- }
- class Employee
- {
- public Employee(String n, double s)
- {
- name = n;
- salary = s;
- id = 0;
- }
- public String getName()
- {
- return name;
- }
- public double getSalary()
- {
- return salary;
- }
- public int getId()
- {
- return id;
- }
- public void setId()
- {
- id = nextId; // set id to next available id
- nextId++;
- }
- public static int getNextId()
- {
- return nextId; // returns static field
- }
- public static void main(String[] args) // unit test
- {
- Employee e = new Employee("Harry", 50000);
- System.out.println(e.getName() + " " + e.getSalary());
- }
- private String name;
- private double salary;
- private int id;
- private static int nextId = 1;
- }