Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use static method and field?

I know what static is, but just not sure when to use it.

static variable: I only used it for constant fields. Sometimes there are tens of constants in a class, so using static constants can save lots of memory. Is there any other typical use cases?

static method: I use it when I make a class about algorithms. For example, a class which provides different sorting algorithms. Is it against OOP design? I think it is better to maintain this way rather than implementing sorting algorithms inside each class that needs to use them. Am I wrong? What are some good use cases?

Also, are there any performance difference between using static and non-static fields/methods?

like image 896
Alex Avatar asked Jul 12 '13 18:07

Alex


People also ask

Why we need static methods and fields?

Why Static Fields & Methods Are Important & Useful. The static keyword in Java can be applied to both fields and methods of a class. A field or method of a class that is static can be accessed without an instance of the class.

When should I use a static method?

Static methods are usually preferred when: All instance methods should share a specific piece of code (although you could still have an instance method for that). You want to call method without having to create an instance of that class. You must make sure that the utility class is never changed.

When should I make a field static in Java?

The use of a static field means that each object does not need to know about the other objects to get a unique id. This could be useful if you wanted to know the order in which the Item objects were created.

What is static field and static method?

Recall that main is a static method. All the methods of the Math class are static. One way to think of static methods is that they are “non- object-oriented” methods. A static field is a field that is shared by all instances of the class.

What is a static method in Java?

If you apply static keyword with any method, it is known as static method. A static method belongs to the class rather than object of a class. A static method invoked without the need for creating an instance of a class. static method can access static data member and can change the value of it.

How to use static and non-static fields of a class?

A static method can be accessed just using the name of a class dot static name . . . example : Student9.change (); If you want to use non-static fields of a class, you must use a non-static method. //Program of changing the common property of all objects (static field).

Why do we use static properties and methods in a class?

Actually, we use static properties and methods in a class, when we want to use some part of our program should exists there until our program is running. And we know that, to manipulate static properties, we need static methods as they are not a part of instance variable.

What are static fields and static constants in Java?

Static fields and static constants enable this type of sharing by belonging to the class and not to the actual objects. Normally fields and methods defined in a class can be used only when an object of that class type has been created.


2 Answers

You are describing cases where you've used static, but this doesn't quite explain fundamentally why you would use static vs non-static - they are more than just keywords for constants and utility methods.

When something is not static (instance), it means that there is an instance of it for each instance of the class. Each one can change independently.

When something is static, it means there is only one copy of it for all instances of the class, so changing it from any location affects all others.

Static variables/methods typically use less memory because there is only one copy of them, regardless of how many instances of the class you have. Statics, when used appropriately, are perfectly fine in object oriented design.

If you have a method/variable that you only need one instance of (e.g. a constant or a utility method), then just make it static. Understand though that making a method static means it cannot be overridden. So if you have a method you want to override in a subclass, then don't make it static.

The general rule of thumb is - if you need only one copy of it, make it static. If you need a copy per instance, then make it non static.

like image 186
Jeff Storey Avatar answered Oct 10 '22 01:10

Jeff Storey


Is there any other typical use cases?

Global Variables

Is it against OOP design?

Not exaclty, the point is that static methods are stateless since you don't need a particular instance of a class. My favorite approach is for utility methods (like Apache Commons). But you may be aware that some methods may be better placed as class members instead of static.

Also static methods can make class testability harder once you can't override these methods or replace by mock implementation.

Performance difference ?

There's a performance Android recommendation from Google that says "prefer static over virtual":

http://developer.android.com/training/articles/perf-tips.html#PreferStatic

I'm not sure it's true for JVM since Android uses a different VM, but it makes sense given the reasons the link points out:

If you don't need to access an object's fields, make your method static. Invocations will be about 15%-20% faster. It's also good practice, because you can tell from the method signature that calling the method can't alter the object's state."

like image 35
ivan.aguirre Avatar answered Oct 10 '22 02:10

ivan.aguirre