Making a method static in Java is an important decision . Though, static keyword is one of the fundamental concepts, many times programmers gets confused to make a particular method static or not. In Java programming, main motivation for making a method static is convenience. You can call a static method without creating any object, just by using it's class name. So if you need a method, which you want to call directly by class name, make that method static. Utility classes e.g. java.lang.Math or StringUtils, are good examples of classes, which uses static methods. Before making a method static, you should look into limitation of static methods as well, as you can not override static method in Java.
By keeping these properties in mind, we can make few rules, which will help to decide when to make a method static in Java and when to use them.
In this Java article, we will learn more about benefits and limitation of making a method static, and also see couple of examples of static methods from JDK to learn when and how to use static method in Java.
By keeping these properties in mind, we can make few rules, which will help to decide when to make a method static in Java and when to use them.
In this Java article, we will learn more about benefits and limitation of making a method static, and also see couple of examples of static methods from JDK to learn when and how to use static method in Java.
What does static method do in Java
When you see a static method in Java code, What do you assume? What reasoning and assumptions a reader make, when he sees a static method? This is important to learn to ensure we are using static method correctly.
1) Static method doesn't modify state of object. Since state of object is maintained as instance variables, and Java doesn't allow non static variables on static context. Modern days IDE like Netbeans also shows static method in italics to differentiate it from other methods.
2) Static method mostly operates on arguments, almost all static method accepts arguments, perform some calculation and return value.
Rules to make a method static in Java
There is no hard and fast, well written rules, to decide when to make a method static or not, But there are few observations based upon experience, which not only help to make a method static but also teaches when to use static method in Java. You should consider making a method static in Java :
2) You want to call method without creating instance of that class.
3) A method is good candidate of being static, if it only work on arguments provided to it e.g. public int factorial(int number){}, this method only operate on number provided as argument.
4) Utility methods are also good candidate of being static e.g. StringUtils.isEmpty(String text), this a utility method to check if a String is empty or not.
5) If function of method will remain static across class hierarchy e.g. equals() method is not a good candidate of making static because every Class can redefine equality.
When to use static method in Java

1) Along with creational design pattern e.g. Factory and Singleton.
2) As utility method, which operate on arguments.
3) A conversion tool e.g. valueOf().
That's all about when to make a method static in Java. We have seen benefits and limitation of making a method static, and few examples of static methods from JDK. JDK examples will also help you to decide when to use static method in Java.
Further Learning
Complete Java Masterclass
Java Fundamentals: The Java Language
Java In-Depth: Become a Complete Java Engineer!
8 comments :
nice explanation. thanks
how marker interface works internally. can you post regarding this topic.
Static is good to use. I prefer to make all method static and make object static, this way I can use method of any object from any other object without stupid use of references and new().
The new() operation should never have been put into the Java language. It is a terrible concept when you can simply declare everything static and make develop much easier.
can you provide some thoughts on making a method static or not with respect to multithreading?
In addition to the answer to the above question who asked on making a method static or not with respect to multithreading?
If an method which is changing the state of an object and that object is used by multiple resources (resource could also be an object such as User,or any entity dependent on the changed object) then we can't make it static.Therefore an object operated in multi-threaded environment changing state of an object cannot be static.
Hi Javin,please put some emphasize on second point as well in brief i.e when we need to call a method without using any instance such as Single threaded task i.e where only one object active at a time.
Great article
Thanks for this insightful article. This is the first time I know about use of static methods, in past I didn't even know about how to call a static method, but once I know that you can call them just by using class name, I am kind of making every method static in my code. This gives me so many error like you can not use non static members in static context, then I started making all my member variable static, now my program is working fine. Do you think its right? Does making all variable and method static has any disadvantage in Java?
One reason to make your method static must be performance. Static method Invocations is 15%-20% faster than virtual method invocation. It's also good programming practice, because you can tell from the method signature that calling the method can't alter the object's state.
*Making all variables static has disadvantage.
Let's take an example of BankAccount class which has three variables accNo, accName, balance
for every account holder (instance of BankAccount) a copy of these three variable will be created if these are declared non static. However if we created them static then in this case only one copy would be created and every time a new instance is create the same copy would be shared and updated and there would be loss of data.
Identify the need of sharing data among instance only that variable should be static not all.
The good use of static key word is on final variables it assures a single copy of variable for all instances.
So don't make your all variables static instead create a one object in your static method to access the non static data.
Post a Comment