当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java进阶

静态方法的使用


  作者:lucan (采菊东篱者),
  
  什么时候使用静态方法:
  静态方法与一般方法在使用上是有所区别的
  静态方法可以不需要建立类的实例就可以直接调用
  但是一般方法需要建立实例
  public class MrHappyObject {
  private String _mood = _HAPPY;
  private final static String _HAPPY = "happy";
  private final static String _ANNOYED = "annoyed";
  private final static String _ANGRY = "angry";
  public void printMood() {
  System.out.println( "I am " + _mood );
  public void receivePinch() {
  if( _mood.equals( _HAPPY ) ) {
  _mood = _ANNOYED;
  } else {
  _mood = _ANGRY;
  }
  }
  public void receiveHug() {
  if( _mood.equals( _ANGRY ) ) {
  _mood = _ANNOYED;
  } else {
  _mood = _HAPPY;
  }
  }
  }
  如上,由于一般方法需要建立实例,因此他们调用的结果和每个实例的状态是有关系的
  Java Q&A
  Mr. Happy Object teaches static methods
  When to choose static methods over instance methods
  By Tony Sintes
  Printer-friendly version | Mail this to a friend
  Advertisement
  November 21, 2001
  When would you create static methods as opposed to instance methods? I understa
  nd that static methods allow you to use those methods without having to create a
  n instance of that class, and that class methods apply to the class rather than
  an object. Are these the only reasons? Could you give an example of a case where
  you would use a class method over an instance method?
  Many Java developers find it confusing to decide when, and when not to declare a
  method as static. However, making the choice is simple if you have a clear unde
  rstanding of the difference between a class method and an instance method.
  Note: You can download the source code that accompanies this article from Resour
  ces.
  Consider the following class definition:
  public class MrHappyObject {
  private String _mood = _HAPPY;
  private final static String _HAPPY = "happy";
  private final static String _ANNOYED = "annoyed";
  private final static String _ANGRY = "angry";
  public void printMood() {
  System.out.println( "I am " + _mood );
  }
  public void receivePinch() {
  if( _mood.equals( _HAPPY ) ) {
  _mood = _ANNOYED;
  } else {
  _mood = _ANGRY;
  }
  }
  public void receiveHug() {
  if( _mood.equals( _ANGRY ) ) {
  _mood = _ANNOYED;
  } else {
  _mood = _HAPPY;
  }
  }
  }
  Figure 1. Mr. Happy Object
  First, before I get emails about it, there are more object-oriented ways to trac
  k and transition between states. However, those fancy ways would detract from th
  e intent of the example. Now, without further ado...
  printMood(), receivePinch(), and receiveHug() are all instance methods. Syntacti
  cally, you call these methods instance methods because they are not static; but
  the important distinction concerns why I didn't declare them as static.
  Instance methods are instance methods because they rely on the state of the spec
  ific object instance. Instance methods are tied to a particular instance because
  the behavior that the method invokes relies upon the state of that particular i
  nstance.
  Consider the following example:
  MrHappyObject obj1 = new MrHappyObject();
  MrHappyObject obj2 = new MrHappyObject();
  obj1.printMood();
  obj2.printMood();
  obj1.receiveHug();
  obj2.receivePinch();
  obj1.printMood();
  obj2.printMood();
  大家可以看到上面的两个实例调用方法的结果是不一样的。
  而静态方法调用的结果都是一样的,它是类一级的方法,与实例的状态没有关系。
  private static int _instantiations;
  public MrHappyObject() {
  _instantiations++;
  }
  public static int instances() {
  return _instantiations;
  }
  这个静态方法就记录了类创建实例的数量。
  因此,如果你建立的类需要根据实例的状态进行处理那么就不要使用静态方法,如果对于不 同实例的状态结果都一样,那么就可以(注意是可以,而不是必须)使用静态方法
  
  
  
  
  
  
相关内容
赞助商链接