Một nguyên tắc nhỏ: hãy tự hỏi mình "Có hợp lý không khi gọi phương thức này, ngay cả khi chưa có đối tượng nào được xây dựng?" Nếu vậy, nó chắc chắn nên tĩnh.
Vì vậy, trong một lớp Car
bạn có thể có một phương thức:
double convertMpgToKpl(double mpg)
... đó sẽ là tĩnh, bởi vì người ta có thể muốn biết 35mpg chuyển đổi thành gì, ngay cả khi chưa có ai từng xây dựng Car
. Nhưng phương pháp này (thiết lập hiệu quả của một cụ thể Car
):
void setMileage(double mpg)
... không thể tĩnh vì không thể gọi phương thức trước khi bất kỳ phương thức nào Car
được xây dựng.
(Nhân tiện, điều ngược lại không phải lúc nào cũng đúng: đôi khi bạn có thể có một phương thức liên quan đến hai Car
đối tượng và vẫn muốn nó ở trạng thái tĩnh. Ví dụ:
Car theMoreEfficientOf( Car c1, Car c2 )
Mặc dù điều này có thể được chuyển đổi thành phiên bản không tĩnh, nhưng một số người sẽ cho rằng vì không có lựa chọn "đặc quyền" nào Car
quan trọng hơn, bạn không nên buộc người gọi chọn một Car
đối tượng làm đối tượng bạn sẽ gọi phương pháp trên. Tuy nhiên, tình huống này chiếm một phần khá nhỏ trong tất cả các phương thức tĩnh.)