Benefits of static methods?
Why use static methods is it because memory is saved because a new instance is not required for each use?
First of all you have to know, that creating instance of object is one of most expensive operation in java execution. Second, sometimes you don't need to have any state information within object, for example you'd like to write method to add two integer numbers given as parameters. Static methods are known also as Class methods, there is only one such method for all instances of class. Static methods are very usefull and convinient ! There are more and more reasons to use static methods !
Similar Messages
-
What is the advantage of having static methods?
(They are basically methods which can be called with
having an instance of a class)
What benefits do they have.?
Then,why not have all classes define static methodsThen,why not have all classes define static methodsThat's because Java is object oriented. If everything would be static then there would be no objects.
So the better question is why should anything at all be static!. The answer is that seldom but sometimes you have information that really belongs to the class itself and not to any particular object of the class. An example would be a static method that returns how many objects have been created. Or a static factory class that creates new objects for you. -
Static methods. Why?
I understand what static means, and that each class has only ONE copy of its static variables and methods.
I an see the benefits of using static variables, but i cant seem to get my head round the benefits of using static methods.
What is the advantage of this, and is there a common situation where they are appropriate? (not main)
CheersI don't think static exists to prevent namespace conflicts. I think that the reason for static to exist is just as I described it: When you've got some task that is appropriate to be performed by a specific class, but that doesn't make sense to be associated with a particular instance of that class.
For example, String.valueOf. It's appropriate for the String class to have a method that returns the String representation of anything you feed to it (so it's in the String class) but it doesn't make sense for that method to be associated with a particular instance of String (so it's static). After all, you don't yet have a String to operate on--you're producing the String.
Which raises another interesting point: I wonder what the design decision was that led to
String.valueOf(int)
String.valueOf(long)
String.valueOf(Object)
etc.
instead of
new String(int)
new String(long)
newString(Object)
etc.
I've used both patterns in my own work, but I don't really have any good criteria for picking one over the other.
One thing that comes to mind for the general case is that with the static method, you can return a subclass, which you can't do with a constructor. Conversely, with a constructor, the caller knows exactly which class he'll get, whereas with a static method he doesn't. Of course, these points don't apply to String, as it's final.
I'm new to java, but as far as I can tell, "static"
means "global". The reason for having them in classes
is mainly to prevent name conflicts. For instance,
you could have an Array object, and a List object, and
both could have sort() methods, but they may be very
different types of methods. By forcing sort() to be a
member of a class, instead of a global identifier, you
have Array.sort() and List.sort(), which is much
safer.
It seems that the java designers went to great lengths
to make sure there are no namespace conflicts in the
language. Maybe they even went a bit too far in this
sometimes. -
Unsure of purpose of static methods
Hello,
I know the distinction between instance and class variables, but the same distinction in terms of methods is giving me a bit of confusion.
With variables, it makes sense that common (class) variables are not copied for each instance, while instance variables are. I'm able to see the implications and purpose of separating instance and class in this case.
I'm having trouble figuring out the purpose of instance versus class methods, though. Here, there is no 'copy' of the method to be made, right, so what are the benefits of having instance vs class methods?
So far I know instance methods cannot be used unless an instance exists, and I think(?) the only limitation of class methods is that they be used from where their access modifier allows?
Can anybody please shed some light on what the purpose of having both types of methods is, and maybe some other theory on it? The online tutorials I read on this matter weren't very clear for me? Thank you.An instance of an object has state. This Person object's state is that the name is "John Smith" and the age is 25. That other Person object's state is that the name is "Mary Jones" and the age is 17.
If you have a canDrink() method, you have to have state--the Person's age--to use for executing that method, so you need an instance to call it on.
john.canDrink() uses the state of that object to return true.
mary.canDrink() uses the state of that object to return false.
Static methods are related to the class as a whole, not to the state of any particular instance of that class.
For example, Person.howManyPersonObjectsHaveBeenCreated() -
What 's the advantage of static method.
I think if a method is declared as static, the program should allocate some spaces for the method when the program start. However, I found many static method in an erp open source project. What make me confused is that it will cost many spaces.
Perhaps they want to lose some spaces for speed???
Can somebody answer my question.thanks!> I think if a method is declared as static, the
program should allocate some spaces for the method
when the program start. However, I found many static
method in an erp open source project. What make me
confused is that it will cost many spaces.
Perhaps they want to lose some spaces for speed???
Can somebody answer my question.thanks!
To be sincere, I've never thought about performance cost when static methods are used. I decide to create and use them mainly whether I have the "feeling" that it will provide me benefits, in terms of designing. Yes, it's like a feeling. I am not able to explain you why or how I have this feeling, I'm not native in English language, so choosing the appropriate words to explain my ideas sometimes is hard to me. Besides. I admit that I am a little bit lazy in this moment, I don't want to search through some dictionary...;-).
I think the more you develop your abilities and skills in java programming, the more you can feel, you can have this "feeling", and naturally you figure out in which situations using static methods is a better choice. -
GetInstance() vs static methods
Say you want some globally accessible manager type class.
I can think of two ways to do it.
1. singleton. i.e. private constructor, static getInstanceMethod(), non-static methods. So you do: Manager.getInstance().doIt();
2. private constructor, static methods.
So you do: Manager.doIt();
What are the benefits of each?
Any ideas?
Cheers,
Jimhttp://www.google.com/search?q=singleton+vs.+static+methods
-
Compilation error while calling static method from another class
Hi,
I am new to Java Programming. I have written two class files Dummy1 and Dummy2.java in the same package Test.
In Dummy1.java I have declared a static final variable and a static method as you can see it below.
package Test;
import java.io.*;
public class Dummy1
public static final int var1= 10;
public static int varDisp(int var2)
return(var1+var2);
This is program is compiling fine.
I have called the static method varDisp from the class Dummy2 and it is as follows
package Test;
import java.io.*;
public class Dummy2
public int var3=15;
public int test=0;
test+=Dummy1.varDisp(var3);
and when i compile Dummy2.java, there is a compilation error <identifier > expected.
Please help me in this program.public class Dummy2
public int var3=15;
public int test=0;
test+=Dummy1.varDisp(var3);
}test+=Dummy1.varDisplay(var3);
must be in a method, it cannot just be out somewhere in the class! -
Using a non-static vector in a generic class with static methods
I have a little problem with a class (the code is shown underneath). The problem is the Assign method. This method should return a clone (an exact copy) of the set given as an argument. When making a new instance of a GenericSet (with the Initialize method) within the Assign method, the variables of the original set and the clone have both a reference to the same vector, while there exists two instances of GenericSet. My question is how to refer the clone GenericSet's argument to a new vector instead of the existing vector of the original GenericSet. I hope you can help me. Thanks
package genericset;
import java.util.*;
public class GenericSet<E>{
private Vector v;
public GenericSet(Vector vec) {
v = vec;
private <T extends Comparable> Item<T> get(int index) {
return (Item<T>) v.get(index);
public static <T extends Comparable> GenericSet<T> initialize() {
return new GenericSet<T>(new Vector());
public Vector getVector() {
return v;
public static <T extends Comparable> GenericSet<T> insert (GenericSet<T> z, Item<T> i){
GenericSet<T> g = assign(z);
Vector v = g.getVector();
if (!member(g,i))
v.addElement(i);
return g;
public static <T extends Comparable> GenericSet<T> delete(GenericSet<T> z, Item<T> i){
GenericSet<T> g = assign(z);
Vector v = g.getVector();
if (member(g,i))
v.remove(i);
return g;
public static <T extends Comparable> boolean member(GenericSet<T> z, Item<T> i) {
Vector v = z.getVector();
return v.contains(i);
public static <T extends Comparable> boolean equal(GenericSet<T> z1, GenericSet<T> z2) {
Vector v1 = z1.getVector();
Vector v2 = z2.getVector();
if((v1 == null) && (v2 != null))
return false;
return v1.equals(v2);
public static <T extends Comparable> boolean empty(GenericSet<T> z) {
return (cardinality(z) == 0);
public static <T extends Comparable> GenericSet<T> union(GenericSet<T> z1, GenericSet<T> z2) {
GenericSet<T> g = assign(z1);
for(int i=0; i<cardinality(z2); i++) {
Item<T> elem = z2.get(i);
insert(g, elem);
return g;
public static <T extends Comparable> GenericSet<T> intersection(GenericSet<T> z1, GenericSet<T> z2) {
GenericSet<T> g = initialize();
for(int i=0; i<cardinality(z2); i++) {
Item<T> elem = z2.get(i);
if(member(z1, elem))
insert(g, elem);
return g;
public static <T extends Comparable> GenericSet<T> difference(GenericSet<T> z1, GenericSet<T> z2) {
GenericSet<T> g = initialize();
for(int i=0; i<cardinality(z1); i++) {
Item<T> elem = z1.get(i);
if(!member(z2, elem))
insert(g, elem);
for(int i=0; i<cardinality(z2); i++) {
Item<T> elem = z2.get(i);
if(!member(z1, elem))
insert(g, elem);
return g;
public static <T extends Comparable> GenericSet<T> assign(GenericSet<T> z) {
GenericSet<T> g = initialize();
for(int i=0; i<cardinality(z); i++) {
Item<T> elem = z.get(i);
insert(g, elem);
return g;
public static <T extends Comparable> boolean subset(GenericSet<T> z1, GenericSet<T> z2) {
for(int i=0; i<cardinality(z1); i++) {
Item<T> elem = z1.get(i);
if(!member(z2, elem))
return false;
return true;
public static <T extends Comparable> int cardinality(GenericSet<T> z){
Vector v = z.getVector();
return v.size();
}The issue is not "reference a non-static interface", but simply that you cannot reference a non-static field in a static method - what value of the field ed would the static method use? Seems to me your findEditorData should look something like this: public static EditorBean findEditorData( String username, EditorBean editorData )
return editorData.ed.findEditor( username );
} -
Using HttpServletRequest object to share variables between static methods.
Does anyone know of the overhead/performance implications of using the HttpServletRequest object to share variables between a static method and the calling code?
First, let me explain why I am doing it.
I have some pagination code that I would like to share across multiple servlets. So I pulled the pagination code out, and created a static method that these servlets could all use for their pagination.
public class Pagination {
public static void setPagination (HttpServletRequest request, Config conf, int totalRows) {
int page = 0;
if (request.getParameter("page") != null) {
page = new Integer(request.getParameter("page")).intValue();
int articlesPerPage = conf.getArticlesPerPage();
int pageBoundary = conf.getPageBoundary();
int numOfPages = totalRows / articlesPerPage;
// Checks if the page variable is empty (not set)
if (page == 0 || (page > numOfPages && (totalRows % articlesPerPage) == 0 && page < numOfPages + 1)) {
page = 1; // If it is empty, we're on page 1
// Ex: (2 * 25) - 25 = 25 <- data starts at 25
int startRow = page * articlesPerPage - (articlesPerPage);
int endRow = startRow + (articlesPerPage);
// Set array of page numbers.
int minDisplayPage = page - pageBoundary;
if (minDisplayPage < 1) {
minDisplayPage = 1;
int maxDisplayPage = page + pageBoundary;
if (maxDisplayPage > numOfPages) {
maxDisplayPage = numOfPages;
int arraySize = (maxDisplayPage - minDisplayPage) + 1;
// Check if there is a remainder page (partially filled page).
if ((totalRows % articlesPerPage) != 0) arraySize++;
// Set array to correct size.
int[] pages = new int[arraySize];
// Fill the array.
for (int i = 1; i <= pages.length; i++) {
pages[i - 1] = i;
// Set pageNext and pagePrev variables.
if (page != 1) {
int pagePrev = page - 1;
request.setAttribute("pagePrev", pagePrev);
if ((totalRows - (articlesPerPage * page)) > 0) {
int pageNext = page + 1;
request.setAttribute("pageNext", pageNext);
// These will be used by calling code for SQL query.
request.setAttribute("startRow", startRow);
request.setAttribute("endRow", endRow);
// These will be used in JSP page.
request.setAttribute("totalRows", totalRows);
request.setAttribute("numOfPages", numOfPages);
request.setAttribute("page", page);
request.setAttribute("pages", pages);
}I need two parameters from this method (startrow and endrow) so I can perform my SQL queries. Since this is a multithreaded app, I do not want to use class variables that I will later retrieve through methods.
So my solution was to just set the two parameters in the request and grab them later with the calling code like this:
// Set pagination
Pagination.setPagination(request, conf, tl.getTotalRows());
// Grab variables set into request by static method
int startRow = new Integer(request.getAttribute("startRow").toString());
int endRow = new Integer(request.getAttribute("endRow").toString());
// Use startRow and endRow for SQL query below...Does anyone see any problem with this from a resource/performance standpoint? Any idea on what the overhead is in using the HttpServletRequest object like this to pass variables around?
Thanks for any thoughts.You could either
- create instance vars in both controllers and set them accordingly to point to the same object (from the App Delegate) OR
- create an instance variable on the App Delegate and access it from within the view controllers
Hope this helps! -
Can you set a global EntityResolver (via system property, or static method)
I'm trying to set a customized EntityResolver (telling the xml parser where to look for XML schema files).
Usually, you'd use the standard syntax - somehting like:
SaxParser parser=new SaxParser();
parser.parser.setEntityResolver(myResolver);
However, I was wondering whether you can set a "global" EntityResolver, to be used as default for all parsers ?
Maybe this can be done through some system property, or a static method somewhere in the parsing XML ?
(BTW, I need it because I'm using some third-party API, that encapsulates a SaxParser, but won't let me access it, so I can't configure it directly).
thanks.I don't think you can.
What is possible is to set content on the folder resource itself; that would be returned instead of the page you mentioned. -
How to call a static method from an event handler
Hi,
I'm trying to call a static method of class I designed. But I don't know how to do it. This method will be called from an event handler of a web dynpro for Abap application.
Can somebody help me?
Thx in advance.
Hamza.To clearly specify the problem.
I have a big part code that I use many times in my applications. So I decided to put it in a static method to reuse the code. but my method calls functions module of HR module. but just after the declaration ( at the first line of the call function) it thows an exception. So I can't call my method. -
How to call a static method in a class if I have just the object?
Hello. I have an abstract class A where I have a static method blah(). I have 2 classes that extend class A called B and C. In both classes I override method blah(). I have an array with objects of type B and C.
For every instance object of the array, I'm trying to call the static method in the corresponding class. For objects of type B I want to call blah() method in B class and for objects of type C I want to call blah() method in C class. I know it's possible to call a static method with the name of the object, too, but for some reason (?) it calls blah() method in class A if I try this.
So my question is: how do I code this? I guess I need to cast to the class name and then call the method with the class name, but I couldn't do it. I tried to use getClass() method to get the class name and it works, but I didn't know what to do from here...
So any help would be appreciated. Thank you.As somebody already said, to get the behavior you
want, make the methods non-static.You all asked me why I need that method to be
static... I'm not surprised to hear this question
because I asked all my friends before posting here,
and all of them asked me this... It's because some
complicated reasons, I doubt it.
the application I'm writing is
quite big...Irrelevant.
Umm... So what you're saying is there is no way to do
this with that method being static? The behavior you describe cannot be obtained with only static methods in Java. You'd have to explicitly determine the class and then explicitly call the correct class' method. -
Calling a method from a static method
hello all,
I'm calling a non-static method from a static method (from the main method). To overcome this i can make the method i am calling static but is there another way to get this to work without making the method that is being called static?
all replies welcome, thanksWhen you call a non-static method, you are saying you are calling a method on an object. The object is an instance of the class in which the method is defined. It is a non-static method, because the instance holds data in it's instance variables that is needed to perform the method. Therefore to call this kind of method, you need to get (or create an instance of the class. Assuming the two methods are in the same class, you could do
public class Foo
public static void main(String[] args)
Foo f = new Foo();
f.callNonStaticMethod();
}for instance. -
Calling a non-static method from another Class
Hello forum experts:
Please excuse me for my poor Java vocabulary. I am a newbie and requesting for help. So please bear with me! I am listing below the program flow to enable the experts understand the problem and guide me towards a solution.
1. ClassA instantiates ClassB to create an object instance, say ObjB1 that
populates a JTable.
2. User selects a row in the table and then clicks a button on the icon toolbar
which is part of UIMenu class.
3. This user action is to invoke a method UpdateDatabase() of object ObjB1. Now I want to call this method from UIMenu class.
(a). I could create a new instance ObjB2 of ClassB and call UpdateDatabase(),
== OR ==
(b). I could declare UpdateDatabase() as static and call this method without
creating a new instance of ClassB.With option (a), I will be looking at two different object instances.The UpdateDatabase() method manipulates
object specific data.
With option (b), if I declare the method as static, the variables used in the method would also have to be static.
The variables, in which case, would not be object specific.
Is there a way or technique in Java that will allow me to reference the UpdateDatabase() method of the existing
object ObjB1 without requiring me to use static variables? In other words, call non-static methods in a static
way?
Any ideas or thoughts will be of tremendous help. Thanks in advance.Hello Forum:
Danny_From_Tower, Encephalatic: Thank you both for your responses.
Here is what I have done so far. I have a button called "btnAccept" created in the class MyMenu.
and declared as public.
public class MyMenu {
public JButton btnAccept;
//Constructor
public MyMenu() {
btnAccept = new JButton("Accept");
} I instantiate an object for MyMenu class in the main application class MyApp.
public class MyApp {
private MyMenu menu;
//Constructor
public MyApp(){
menu = new MyMenu();
public void openOrder(){
MyGUI MyIntFrame = new MyGUI(menu.btnAccept);
}I pass this button all the way down to the class detail02. Now I want to set up a listener for this
button in the class detail02. I am not able to do this.
public class MyGUI {
private JButton acceptButton;
private detail02 dtl1 = new detail02(acceptButton);
//Constructor
public AppGUI(JButton iButton){
acceptButton = iButton;
public class detail02{
private JButton acceptButton;
//Constructor
public detail02(JButton iButton){
acceptButton = iButton;
acceptButton.addActionListener(new acceptListener());
//method
private void acceptListener_actionPerformed(ActionEvent e){
System.out.println("Menu item [" + e.getActionCommand( ) + "] was pressed.");
class acceptListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
acceptListener_actionPerformed(e);
} I am not able to get the button Listener to work. I get NullPointerException at this line
acceptButton.addActionListener(new acceptListener());in the class detail02.
Is this the right way? Or is there a better way of accomplishing my objective?
Please help. Your inputs are precious! Thank you very much for your time! -
Calling a static method from another class
public class Command
public static void sortCommands(String command, String order, List object)
if(command.equalsIgnoreCase("merge") && order == "a")
object.setAscending(true);
Mergesort.mergesort(object.list); // line 85
}and
public class Mergesort
public static void mergesort (int[] a)
mergesort(a, 0, a.length-1);
private static void mergesort (int[] a, int l, int r)
private static void merge (int[] a, int l, int m, int r)
}Error:
Command.java:85: cannot find symbol
symbol : variable Mergesort
location: class Command
Mergesort.mergesort(object.list)
What am I doing wrong here? Within the Command class I am calling mergesort(), a static method, from a static method. I use the dot operator + object so that the compiler would recognize the 'list' array. I tried using the
Mergesort.mergesort(object.list);notation in hopes that it would work like this:
Class.staticMethod(parameters);but either I am mistaken, misunderstood the documentation or both. Mergesort is not a variable. Any help would be appreciated, I have been hitting a brick wall for hours with Java documentation. Thanks all.[Javapedia: Classpath|http://wiki.java.net/bin/view/Javapedia/ClassPath]
[How Classes are Found|http://java.sun.com/j2se/1.5.0/docs/tooldocs/findingclasses.html]
[Setting the class path (Windows)|http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/classpath.html]
[Setting the class path (Solaris/Linux)|http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/classpath.html]
[Understanding the Java ClassLoader|http://www-106.ibm.com/developerworks/edu/j-dw-javaclass-i.html]
java -cp .;<any other directories or jars> YourClassNameYou get a NoClassDefFoundError message because the JVM (Java Virtual Machine) can't find your class. The way to remedy this is to ensure that your class is included in the classpath. The example assumes that you are in the same directory as the class you're trying to run.
javac -classpath .;<any additional jar files or directories> YourClassName.javaYou get a "cannot resolve symbol" message because the compiler can't find your class. The way to remedy this is to ensure that your class is included in the classpath. The example assumes that you are in the same directory as the class you're trying to run.
Maybe you are looking for
-
using sharepoint designer 2013 - connected to sharepoint online - but getting " data source file cannot be saved" after making a new linked datasource
-
I was waiting for this feature in Safari 7 but still missing.. Firefox does, Chrome does... I would like to use safari because its great features, but is not usable (for me) in a little screen without this feature. It cannot be so dificult to remembe
-
DW in a wamp environment - database connectivity issues
I'm new to creating dynamic websites. I'm working with The Missing Manual Tutorial and setting up a wamp localhost testing environment. On the last step in setting up the environment, I'm trying to point DW to the MySql database cosmofarmer and the o
-
OEPE plugin for Eclipse 3.4
Hello All, Please help me with this problem. I have Eclipse 3.4 ( Ganymede ), and I wanted to develop a bottom up webservice which has to be tested and deployed in weblogic. I have a weblogic 10gR3 app server, but in order to make use of the easy fea
-
Material extension to other plants
Hi, Is there any easy way to extend material to other plants in SAP R/3. Regards, Fawaz