Static methods are 1 of the of import programming concepts inwards whatever programming linguistic communication but unfortunately it is also most misunderstood as well as misused one. Talking nearly Java, almost all programmers knows that. static methods belong to the shape as well as non-static methods belong to the objects of the class, but hardly all of them sympathise what it means. That's why this is 1 of the pop weed out questions on programming interviews. If a Java programmer doesn't know departure betwixt static as well as non-static method, he is in all likelihood non ready yet, as well as needs to a greater extent than exercise as well as experience. With one-half knowledge, making a method static tin give the sack receive got serious repercussion , specially inwards today's heavily multi-threaded Java application. Today, 1 of my reader message me this inquiry on my Facebook employment concern human relationship of Javarevisited, which prompted me to to write this tutorial cum give-and-take postal service to give a skillful explanation or instance to clarify the concept. What y'all receive got learned is totally find, all nosotros do hither is to elaborate your learning past times agreement fundamental differences betwixt static methods as well as instance methods inwards Java.
Let's start amongst what y'all receive got learned, static methods belong to the class, this agency it tin give the sack hold out called without a specific instance of that class. For example, the java.lang.Math shape contains many static methods as well as y'all commonly telephone band them every bit Math.random() to generate random numbers, or Math.abs() to calculate the absolute value of a number. You don't demand to do an instance of Math shape to utilisation these methods. This is quite convenient if y'all merely desire to utilisation the functionality. Another instance of the static method is top dog method, which is commonly static because it is called start earlier at that topographic point is whatever fourth dimension to instantiate a class. In fact, that is 1 of the reasons why top dog is static inwards Java.
On merely about other hand, non-static methods tin give the sack solely hold out called on an instance of the shape itself, as well as they commonly do something that depends on the private characteristic of the shape (e.g. play amongst variables). They also receive got side trial e.g. calling a move() method on Player object most probable modify its position. H5N1 key departure betwixt static as well as non-static method is that static method affects all object if they are using whatever static variable, but non-static method solely affects the object they are operating upon. Let's run across an instance to sympathise how a static as well as non-static method works.
In start instance of our try program, nosotros telephone band instance method move() on p1 as well as y'all tin give the sack run across that solely its X as well as Y are modified, p2's seat has non changed because instance method solely impact terra firma of methods they were called upon. In side past times side instance nosotros telephone band static method changeGame(), straightaway this volition impact both p1 as well as p2 because static variable "game" is shared betwixt them. You tin give the sack run across the output after invocation of instance method as well as static method to figure out difference.
1) You cannot utilisation this keyword within a static method inwards Java. Since this is associated amongst the electrical flow instance, it's non allowed inwards static context because no instance be that time. Trying to utilisation this variable within static context e.g. static block or method is compile fourth dimension error inwards Java.
2) super keyword is non allowed within the torso of a static method or static block. Just similar this, a super keyword is also used to stand upwards for electrical flow instance of the rear shape as well as since the instance is non valid inwards static context, it's a compile-time error to utilisation super keyword within a static method inwards Java.
3) You cannot utilisation whatever instance variable within a static method, they volition termination inwards compile fourth dimension error e.g. "non-static reference is non allowed within static methods". Why? because instance may non be when the static method gets called. They are non associated amongst whatever instance, y'all tin give the sack telephone band them fifty-fifty on a zero variable without throwing NullPointerException inwards Java. In short, y'all cannot utilisation non-static members within your static methods inwards Java.
3) H5N1 static method cannot hold out overridden inwards Java, Why? because they are non resolved at runtime, which is the instance amongst overriding. Like a private as well as finally method, static methods are also resolved at compile time. By the way, this doesn't hateful that y'all cannot declare merely about other static method amongst same elevate as well as signature inwards the nipper class, y'all tin give the sack do hence as well as the compiler volition non complain at all, but that would non hold out method overriding, instead that is called method hiding inwards Java. This novel method volition shroud the static method from the rear shape as well as when y'all telephone band it using Child shape only. See why static method cannot hold out overridden for to a greater extent than details.
4) Static method invocation is to a greater extent than efficient than instance method because the compiler doesn't demand to go past times this reference, dissimilar instance methods. That's why y'all should brand utility method every bit static if they are non using whatever instance variable.
5) Static methods are bonded during compile time, every bit opposed to an instance method, which is resolved during runtime; old is known every bit static binding spell afterward is known every bit dynamic binding inwards Java. See the difference betwixt static as well as dynamic binding for to a greater extent than details.
6) By the way, You tin give the sack overload static methods inwards Java, at that topographic point is no restriction on that from Java linguistic communication perspective. In fact, JDK API itself has lots of overloaded static method e.g. String.valueOf() is overloaded to bring an int, long, float, double, as well as boolean information type. EnumSet.of() is also overloaded to do EnumSet amongst one, 2 or multiple values.
7) You tin give the sack telephone band a static method without creating whatever instance of that class, this is 1 of the biggest argue of making a method static inwards Java. For example, to telephone band Double.valueOf(), y'all don't demand to do an instance of the Double class. You tin give the sack fifty-fifty telephone band static methods amongst reference variable having a zero value as well as to your surprise, those volition non termination inwards a zero pointer, every bit only the classname is used to detect as well as telephone band static methods. For example, next code volition run fine inwards Java.
8) H5N1 static method tin give the sack hold out synchronized, as well as to a greater extent than importantly, they utilisation different lock than instance synchronized method. Which means, 2 threads tin give the sack simultaneously run a static as well as a non-static method inwards Java. This is a mutual multi-threading error inwards Java as well as y'all should expect for that spell writing Java try involving code as well as multiple threads. To acquire to a greater extent than run across the difference betwixt static as well as non-static synchronized method inwards Java.
9) You cannot declare a static method within the torso of an interface inwards Java.
10) As the elevate implies, instance methods require an instance of a class. Static methods (and fields) are independent of shape instances, every bit they are solely associated amongst class. To utilisation instance methods, you'll receive got to do an instance using new. H5N1 static method is considered to receive got no side trial on the terra firma of an object because of the said reason.
1) Use static method every bit static mill method for information conversion e.g. Integer.valueOf(), which is used to convert whatever other information type to integer e.g. Integer.valueOf(String str) converts String to Integer inwards Java.
2) Use static method every bit utility methods e.g. methods from Math class or Arrays or Collections e.g. Collections.sort() method.
3) getInstance() method of Singleton pattern pattern is merely about other pop instance of Static method inwards Java
4) Pattern.compile() is merely about other static method, which is instance of static mill method every bit discussed inwards the start example
5) Hmm, how tin give the sack I forget the most pop instance of a static method inwards Java, yes I am talking nearly public static void main(String[] str). The top dog method is 1 of the most known examples of static methods, inwards fact, why top dog is static inwards Java, is also 1 of the frequently asked Java question on college viva or on Java interviews.
1) No Runtime Polymorphism
First as well as foremost, the static method reduces the flexibility of your system. Once a method is declared static, it's fixed. You cannot furnish an alternate implementation of that method inwards a subclass, every bit the static method cannot hold out overridden, they tin give the sack solely hold out hidden. Even this method hiding tin give the sack displace serious as well as subtle bugs.
2) Potential of Concurrency Bugs
One of the not-so-obvious affair nearly static synchronized method is that it uses different lock than instance synchronized method. which means, If y'all are sharing a resources betwixt a static as well as non-static method, as well as thinking that y'all receive got synchronized their access, y'all are living on a dream. Both methods tin give the sack hold out run inwards parallel at the same fourth dimension as well as potentially displace subtle concurrency bugs.
3) Lose of interface
You cannot declare a static method within interface inwards Java, hence if your pattern has a static method, y'all cannot utilisation interface. You demand to lay your static method solely on implementations, which agency all code, which is written against interface volition non receive got access to that static method. Since programming to interface than implementation is 1 of the pop object-oriented pattern principles, y'all volition run across a lot of code written similar that.
That's all nearly the difference betwixt the static as well as non-static method inwards Java. We receive got learned fundamental points nearly static methods, receive got seen merely about pop examples of them, explored when to utilisation static methods as well as also learned nearly the potential disadvantage of using static methods. This gives y'all a fair thought nearly capability as well as limitation of static methods inwards Java programming language. Careful as well as clever utilisation of this concept tin give the sack termination inwards to a greater extent than readable as well as concise code spell misuse tin give the sack displace a lot of hurting specially inwards areas of concurrency, flexibility, as well as maintainability.
Further Learning
SOLID Principles of Object Oriented Design
Absolute Introduction to Object Oriented Programming inwards Java
Java - Object Oriented Programming [For Absolute Beginners]
Let's start amongst what y'all receive got learned, static methods belong to the class, this agency it tin give the sack hold out called without a specific instance of that class. For example, the java.lang.Math shape contains many static methods as well as y'all commonly telephone band them every bit Math.random() to generate random numbers, or Math.abs() to calculate the absolute value of a number. You don't demand to do an instance of Math shape to utilisation these methods. This is quite convenient if y'all merely desire to utilisation the functionality. Another instance of the static method is top dog method, which is commonly static because it is called start earlier at that topographic point is whatever fourth dimension to instantiate a class. In fact, that is 1 of the reasons why top dog is static inwards Java.
On merely about other hand, non-static methods tin give the sack solely hold out called on an instance of the shape itself, as well as they commonly do something that depends on the private characteristic of the shape (e.g. play amongst variables). They also receive got side trial e.g. calling a move() method on Player object most probable modify its position. H5N1 key departure betwixt static as well as non-static method is that static method affects all object if they are using whatever static variable, but non-static method solely affects the object they are operating upon. Let's run across an instance to sympathise how a static as well as non-static method works.
Static vs Non-Static Method Example
Here is a Java programme to demonstrate as well as explicate departure betwixt an instance method as well as a shape method inwards Java. If y'all are using Eclipse IDE, you tin give the sack easily run this programme past times merely re-create pasting inwards your Java project, no demand to do Java origin file as well as directories to stand upwards for package, Eclipse volition bring aid of those things. In this programme nosotros receive got 2 players P1 as well as P2, which are instance of Player class. This shape contains a shape variable called "game" as well as 2 instance variable X as well as Y to announce coordinates of Player. We receive got a static method called changeGame() to laid value of static variable "game" as well as non-static method move() to modify value of instance variables X as well as Y./** * Java programme to exhibit departure betwixt static as well as non-static method. * It explains how calling static method as well as changing static variable * impact all objects, instead of merely calling object inwards instance of non-static * method * @author WINDOWS 8 * */ public class StaticDemo{ public static void main(String args[]) { Player p1 = new Player(10, 10); Player p2 = new Player(20, 20); // calling non-static method move() on p1 p1.move(); // let's impress seat of p1 as well as p2 // solely p1 should receive got moved, no impact on p2 System.out.println("P1 : " + p1); System.out.println("P2 : " + p2); // calling static method on p2 p2.changeGame("Cricket Brian Lara 1997"); // should receive got affected both p1 as well as p2 System.out.println("P1 : " + p1); System.out.println("P2 : " + p2); } } /** * Simple Java shape to stand upwards for a Player amongst position. * It has both static as well as non-static method to operate on * instrumentalist objects. * @author WINDOWS 8 * */ class Player{ private static String game = "Super Mario Bros"; private int X; private int Y; public Player(int x, int y){ this.X = x; this.Y = y; } public void move(){ X++; Y++; } public static void changeGame(String nextGame){ game = nextGame; } @Override public String toString() { return String.format("Game: %s, X : %d, Y: %d ", game, X, Y); } } Output P1 : Game: Super Mario Bros, X : 11, Y: 11 P2 : Game: Super Mario Bros, X : 20, Y: 20 P1 : Game: Cricket Brian Lara 1997, X : 11, Y: 11 P2 : Game: Cricket Brian Lara 1997, X : 20, Y: 20
Properties of Static Methods inwards Java
Static is non merely precisely about other keyword it's 1 of most of import programming concept as well as every linguistic communication has merely about specific features related to static variables, methods, as well as classes. Though fundamental departure comes from the fact that static is something which is associated amongst the shape rather than an instance, at that topographic point are many subtle details of static keyword, which y'all should conk on inwards mind. Let's run across merely about of them here.1) You cannot utilisation this keyword within a static method inwards Java. Since this is associated amongst the electrical flow instance, it's non allowed inwards static context because no instance be that time. Trying to utilisation this variable within static context e.g. static block or method is compile fourth dimension error inwards Java.
2) super keyword is non allowed within the torso of a static method or static block. Just similar this, a super keyword is also used to stand upwards for electrical flow instance of the rear shape as well as since the instance is non valid inwards static context, it's a compile-time error to utilisation super keyword within a static method inwards Java.
3) You cannot utilisation whatever instance variable within a static method, they volition termination inwards compile fourth dimension error e.g. "non-static reference is non allowed within static methods". Why? because instance may non be when the static method gets called. They are non associated amongst whatever instance, y'all tin give the sack telephone band them fifty-fifty on a zero variable without throwing NullPointerException inwards Java. In short, y'all cannot utilisation non-static members within your static methods inwards Java.
3) H5N1 static method cannot hold out overridden inwards Java, Why? because they are non resolved at runtime, which is the instance amongst overriding. Like a private as well as finally method, static methods are also resolved at compile time. By the way, this doesn't hateful that y'all cannot declare merely about other static method amongst same elevate as well as signature inwards the nipper class, y'all tin give the sack do hence as well as the compiler volition non complain at all, but that would non hold out method overriding, instead that is called method hiding inwards Java. This novel method volition shroud the static method from the rear shape as well as when y'all telephone band it using Child shape only. See why static method cannot hold out overridden for to a greater extent than details.
4) Static method invocation is to a greater extent than efficient than instance method because the compiler doesn't demand to go past times this reference, dissimilar instance methods. That's why y'all should brand utility method every bit static if they are non using whatever instance variable.
5) Static methods are bonded during compile time, every bit opposed to an instance method, which is resolved during runtime; old is known every bit static binding spell afterward is known every bit dynamic binding inwards Java. See the difference betwixt static as well as dynamic binding for to a greater extent than details.
6) By the way, You tin give the sack overload static methods inwards Java, at that topographic point is no restriction on that from Java linguistic communication perspective. In fact, JDK API itself has lots of overloaded static method e.g. String.valueOf() is overloaded to bring an int, long, float, double, as well as boolean information type. EnumSet.of() is also overloaded to do EnumSet amongst one, 2 or multiple values.
7) You tin give the sack telephone band a static method without creating whatever instance of that class, this is 1 of the biggest argue of making a method static inwards Java. For example, to telephone band Double.valueOf(), y'all don't demand to do an instance of the Double class. You tin give the sack fifty-fifty telephone band static methods amongst reference variable having a zero value as well as to your surprise, those volition non termination inwards a zero pointer, every bit only the classname is used to detect as well as telephone band static methods. For example, next code volition run fine inwards Java.
Double d = null; d.valueOf(2);
8) H5N1 static method tin give the sack hold out synchronized, as well as to a greater extent than importantly, they utilisation different lock than instance synchronized method. Which means, 2 threads tin give the sack simultaneously run a static as well as a non-static method inwards Java. This is a mutual multi-threading error inwards Java as well as y'all should expect for that spell writing Java try involving code as well as multiple threads. To acquire to a greater extent than run across the difference betwixt static as well as non-static synchronized method inwards Java.
9) You cannot declare a static method within the torso of an interface inwards Java.
10) As the elevate implies, instance methods require an instance of a class. Static methods (and fields) are independent of shape instances, every bit they are solely associated amongst class. To utilisation instance methods, you'll receive got to do an instance using new. H5N1 static method is considered to receive got no side trial on the terra firma of an object because of the said reason.
When to utilisation Static method inwards Java
Methods which never demand to access instance variables are skillful candidate to conk static. The functions inwards java.lang.Math are a skillful instance every bit they solely demand input arguments. One rule-of-thumb, if y'all receive got a shape MyClass, ask yourself "does it brand feel to telephone band this method, fifty-fifty if no Object of MyClass has been constructed yet?" If so, it should definitely hold out static. Another uncomplicated dominion inwards Java is, Immutable is good. So if your method does non modify the terra firma of the object as well as if it must non hold out overridden past times a subclass, it should hold out static. Also static methods are easier to inline past times the JIT-Compiler. Let's run across an example, supper y'all receive got a shape Car as well as y'all powerfulness receive got a method double convertMpgToKpl(double mpg) , this is merely about other skillful candidate to become static, because 1 powerfulness desire to know what 45mpg converts to, fifty-fifty if nobody has always built a Car. But void setOdometer(double mi) (which sets the distance-travelled for 1 particular Car) can't hold out static because it's inconceivable to telephone band the method earlier whatever Car has been constructed. In short, If a method within a shape is non using instance variable, as well as hence it's the skillful candidate for making it static, as well as may hold out it powerfulness non belong to that shape itself. Here are yoke of mutual scenarios inwards Java world, where utilisation of static method is considered appropriate :1) Use static method every bit static mill method for information conversion e.g. Integer.valueOf(), which is used to convert whatever other information type to integer e.g. Integer.valueOf(String str) converts String to Integer inwards Java.
2) Use static method every bit utility methods e.g. methods from Math class or Arrays or Collections e.g. Collections.sort() method.
3) getInstance() method of Singleton pattern pattern is merely about other pop instance of Static method inwards Java
4) Pattern.compile() is merely about other static method, which is instance of static mill method every bit discussed inwards the start example
5) Hmm, how tin give the sack I forget the most pop instance of a static method inwards Java, yes I am talking nearly public static void main(String[] str). The top dog method is 1 of the most known examples of static methods, inwards fact, why top dog is static inwards Java, is also 1 of the frequently asked Java question on college viva or on Java interviews.
Disadvantage of Using static method inwards Java
There is nix inwards the footing which solely has pros without whatever cons, as well as static methods are no different. Though they are immensely helpful from convenience perspective as well as critical to implement merely about amount Java pattern patterns similar Singleton as well as Factory Pattern, they also receive got merely about serious drawbacks. Here are a yoke of them :1) No Runtime Polymorphism
First as well as foremost, the static method reduces the flexibility of your system. Once a method is declared static, it's fixed. You cannot furnish an alternate implementation of that method inwards a subclass, every bit the static method cannot hold out overridden, they tin give the sack solely hold out hidden. Even this method hiding tin give the sack displace serious as well as subtle bugs.
2) Potential of Concurrency Bugs
One of the not-so-obvious affair nearly static synchronized method is that it uses different lock than instance synchronized method. which means, If y'all are sharing a resources betwixt a static as well as non-static method, as well as thinking that y'all receive got synchronized their access, y'all are living on a dream. Both methods tin give the sack hold out run inwards parallel at the same fourth dimension as well as potentially displace subtle concurrency bugs.
3) Lose of interface
You cannot declare a static method within interface inwards Java, hence if your pattern has a static method, y'all cannot utilisation interface. You demand to lay your static method solely on implementations, which agency all code, which is written against interface volition non receive got access to that static method. Since programming to interface than implementation is 1 of the pop object-oriented pattern principles, y'all volition run across a lot of code written similar that.
That's all nearly the difference betwixt the static as well as non-static method inwards Java. We receive got learned fundamental points nearly static methods, receive got seen merely about pop examples of them, explored when to utilisation static methods as well as also learned nearly the potential disadvantage of using static methods. This gives y'all a fair thought nearly capability as well as limitation of static methods inwards Java programming language. Careful as well as clever utilisation of this concept tin give the sack termination inwards to a greater extent than readable as well as concise code spell misuse tin give the sack displace a lot of hurting specially inwards areas of concurrency, flexibility, as well as maintainability.
Further Learning
SOLID Principles of Object Oriented Design
Absolute Introduction to Object Oriented Programming inwards Java
Java - Object Oriented Programming [For Absolute Beginners]
No comments:
Post a Comment