Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区 » Java与OOP初步  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 随笔1--静态方法的使用(转载)
liuyongsu

freshinfo.cn



发贴: 59
积分: 60
于 2002-12-10 22:10 user profilesend a private message to usersend email to liuyongsusearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
发信人: lucan (采菊东篱者), 信区: Java
标 题: Lucan随笔1--静态方法的使用
发信站: 北大未名站 (2001年11月26日18:14:41 星期一) , 站内信件

什么时候使用静态方法:
静态方法与一般方法在使用上是有所区别的
静态方法可以不需要建立类的实例就可以直接调用
但是一般方法需要建立实例

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;
}

这个静态方法就记录了类创建实例的数量。
因此,如果你建立的类需要根据实例的状态进行处理那么就不要使用静态方法,如果对于不
同实例的状态结果都一样,那么就可以(注意是可以,而不是必须)使用静态方法

这是我第一天写随笔,很多东西都是从国外网站里看到的还加如了我的理解,很多地方翻译
的不好的地方请大家指正,多多和我探讨。谢谢


littledeer1974 edited on 2004-11-17 12:52

精彩网址,尽收眼底---www.freshinfo.cn

话题树型展开
人气 标题 作者 字数 发贴时间
52609 随笔1--静态方法的使用(转载) liuyongsu 3760 2002-12-10 22:10
40565 我也来 supertoy 96 2002-12-12 00:50
40897 Re:我也来 floater 631 2002-12-12 04:20
40377 Re:我也来 Biubiu 539 2002-12-12 15:37
40543 Can you explain how you did the test? snowbug 0 2002-12-12 01:47
40989 Re:随笔1--静态方法的使用(转载) littledeer1974 21 2004-11-17 12:51
42137 Re:随笔1--静态方法的使用(转载) magin 221 2004-11-18 14:52

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923