HiveBrain v1.2.0
Get Started
← Back to all entries
principlejavaCritical

When to use static methods

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
usewhenmethodsstatic

Problem

I am wondering when to use static methods? Say if I have a class with a few getters and setters, a method or two, and I want those methods only to be invokable on an instance object of the class. Does this mean I should use a static method?

Example:

Obj x = new Obj();
x.someMethod();


...or:

Obj.someMethod(); // Is this the static way?


I'm rather confused!

Solution

One rule-of-thumb: ask yourself "Does it make sense to call this method, even if no object has been constructed yet?" If so, it should definitely be static.

So in a class Car you might have a method:

double convertMpgToKpl(double mpg)


...which would be static, because one might want to know what 35mpg converts to, even if nobody has ever built a Car. But this method (which sets the efficiency of one particular Car):

void setMileage(double mpg)


...can't be static since it's inconceivable to call the method before any Car has been constructed.

(By the way, the converse isn't always true: you might sometimes have a method which involves two Car objects, and still want it to be static. E.g.:

Car theMoreEfficientOf(Car c1, Car c2)


Although this could be converted to a non-static version, some would argue that since there isn't a "privileged" choice of which Car is more important, you shouldn't force a caller to choose one Car as the object you'll invoke the method on. This situation accounts for a fairly small fraction of all static methods, though.

Code Snippets

double convertMpgToKpl(double mpg)
void setMileage(double mpg)
Car theMoreEfficientOf(Car c1, Car c2)

Context

Stack Overflow Q#2671496, score: 1670

Revisions (0)

No revisions yet.