提问,static方法拿来做“牧羊人”

SealedBook 2010-03-23 09:50:39
大家好!
Thinking in Java 中文第四版
书第30页。
"2.7 你的第一个Java程序" 这句话上一自然段描述道:
和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。

小弟对于这句话有点不解,希望大家踊跃提出自己的想法。
在这先谢各位了!
...全文
325 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon&sean 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dinghun8leech 的回复:]
引用 1 楼 ma1kong 的回复:
呵呵,牧羊人的角色就是一个人看管所有的样。static方法就像牧羊人一样,用static修饰的方法只在类加载的时候调用,不管有多少个程序调用这个方法都是这样,一个static方法可以“看管”多个应用程序。

类加载时不会自动调用static方法。
[/Quote]

谢谢指点!
magicluo 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 magicluo 的回复:]
我感觉这句话是翻译的人自己加上去的

我刚看了原著的E文版,其中并没有这段话,原著这个地方说的是:

Although static, when applied to a field, definitely changes the way the data is created (one for each class versus the non-static one for each o……
[/Quote]

第四版中确实没有,但咋第三版中却有,呵呵,原文这样讲:
Like any method, a static method can create or use named objects of its type, so a static method is often used as a “shepherd” for a flock of instances of its own type.
magicluo 2010-03-24
  • 打赏
  • 举报
回复
我感觉这句话是翻译的人自己加上去的

我刚看了原著的E文版,其中并没有这段话,原著这个地方说的是:

Although static, when applied to a field, definitely changes the way the data is created (one for each class versus the non-static one for each object), when applied to a method it’s not so dramatic. An important use of static for methods is to allow you to call that method without creating an object. This is essential, as you will see, in defining the main( ) method that is the entry point for running an application.

所谓牧羊人,这段比喻的话,原著中根本就没有,只是译者画蛇添足加上去的霉涩之辞了..
keeya0416 2010-03-24
  • 打赏
  • 举报
回复
中文版翻译的太难读了
很多地方没有很好的表达作者的意思
还是看E文的吧 没多少生词的
24K純帥 2010-03-24
  • 打赏
  • 举报
回复
这比喻的太难懂了,一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象
SealedBook 2010-03-24
  • 打赏
  • 举报
回复
多谢多谢!
多谢各位的回复。我仔细阅读一下。
随后就结贴。别着急哈
liu_siat 2010-03-24
  • 打赏
  • 举报
回复
“负责看护与其隶属同一类型的实例群”可以如下理解:
Static作用于同属于一个类对象的多个实例的意思
licip 2010-03-24
  • 打赏
  • 举报
回复
static是所类的方法,不是实例方法。但实例中也是可以用的。
BearKin 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 sealedbook 的回复:]
大家好!
Thinking in Java 中文第四版
书第30页。
"2.7 你的第一个Java程序" 这句话上一自然段描述道:
和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。

小弟对于这句话有点不解,希望大家踊跃提出自己的想法。
在这先谢各位了!
[/Quote]

这段话他的意思是 你可以通过static方法去管理对象(有些时候也可以通过对象方法去创建对象 这并不一定是错误的) static不一定是“牧羊人”的角色 因为static有些时候不是为了对象服务的 但是“牧羊人”和"羊"是有本质区别的 你不能将羊当做“牧羊人”人来用 反过来也是一样
dinghun8leech 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ma1kong 的回复:]
呵呵,牧羊人的角色就是一个人看管所有的样。static方法就像牧羊人一样,用static修饰的方法只在类加载的时候调用,不管有多少个程序调用这个方法都是这样,一个static方法可以“看管”多个应用程序。
[/Quote]
类加载时不会自动调用static方法。
liujun3512159 2010-03-24
  • 打赏
  • 举报
回复
同意4楼说法
Eniak 2010-03-24
  • 打赏
  • 举报
回复
对于一个 static 修饰的成员变量,所有的类的实例都用的是同一个内存,比如,下面这个程序,对 a1 和 a2 的操作,都能达到修改各自成员变量的效果


public class A {
private static int a;



public static int getA() {
return a;
}



public static void setA(int a) {
A.a = a;
}



public static void main(String[] arg) {
A a1 = new A();
a1.setA(3);
A a2 = new A();
a2.setA(4);
System.out.println("the value of a1 is " + a1.getA());
System.out.println("the value of a2 is " + a2.getA());
}

}
zhouyong80 2010-03-23
  • 打赏
  • 举报
回复
如果你的类代表羊,那么创建的若干的该类的对象,就好像创建了一个羊群,然而,类中的static方法就好比牧羊人一样,无论你的羊群中有多少只羊,而牧羊人只有一个。也就是说,static方法或属性与对象的创建无关,只和类有关。
  • 打赏
  • 举报
回复
这本书上说得太晦涩了!
magicluo 2010-03-23
  • 打赏
  • 举报
回复
静态的 内存中只有一份拷贝..

这个静态方法所属于的类的所有对象实例,都共享同一个内存地址空间的这个static方法..

有点像看管的意思
moon&sean 2010-03-23
  • 打赏
  • 举报
回复
呵呵,牧羊人的角色就是一个人看管所有的样。static方法就像牧羊人一样,用static修饰的方法只在类加载的时候调用,不管有多少个程序调用这个方法都是这样,一个static方法可以“看管”多个应用程序。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧