关于static

coooliang 2010-08-27 10:06:29
最近老师推荐看传说中的
Thinging in java
果然 很传说

书上有看到些地方不大理解 希望大家能给出自己的看法

关于static我只知道 这是属于类 不属于对象 并且可以用类名直接点 如Math.random()方法

书中这样写到:

static 方法可以创建或使用与其类型相同的被命名对象,因此static方法常常拿来做"牧羊人"的角色,
负责看护其隶属同一类型的实例群。

请问:这句话应该怎么理解 希望能用大概的代码表达一下。
...全文
297 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
CaptainGan 2011-11-02
  • 打赏
  • 举报
回复
static方法或者变量。比如,在整个工程中都可以通过 Class.param;的形式访问存取,其实很方便,相当于整个工程项目的全局变量和全局的方法,不需要通过new Class()后访问Class中的static变量或者方法。
coooliang 2010-08-30
  • 打赏
  • 举报
回复
觉得。。。。。
coooliang 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 yktd26 的回复:]
Java code
public class Test {

static List<Test> testList = new ArrayList<Test>() ;
public int index;
public Test(){
testList.add(this);
index = testList.size()-……
[/Quote]

我常得你这代码靠谱!
应该是这意思吧!
king138888 2010-08-30
  • 打赏
  • 举报
回复
我只清楚static修饰的方法不需实例化就可调用,而且是先于其它非静态的。
coooliang 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 kylinsoong 的回复:]
上图运行结果可以看到,在同一进程的不同线程之间可以共享static变量
[/Quote]
这段代码运行的时候出错了。
songqinging 2010-08-30
  • 打赏
  • 举报
回复
这个意思要说明的就是一个问题:那就是用是static修饰的成员变量或者方法是属于一个类的,而不是属于某一个实例对象的。
别把问题看的太复杂了,还有就是用static修饰的变量存储在计算机的位置是ROM,因为这样,所以他和其他的变量有不一样的特性。希望我这段话能给你点帮助。
dabanphoto 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dyllove98 的回复:]
楼主有空看下 深入java虚拟机 这本书

static声明的方法 被成为 类方法 是属于类的,不是某个具体对象, 在class文件加载的时候初始化static方法和static块(如果我没记错的话)
所以可以直接使用 Math.random() 调用.

理解上面的就可以了
[/Quote]

这个比较容易理解。
shehun 2010-08-28
  • 打赏
  • 举报
回复
问题:static方法可以创建或使用与其它类型相同的被命名对象,因此,static方法常常拿来做‘牧羊人’的角色,负责看护与其隶属同一类型的实例群。”

Java code

回答:  其实作者的意思是说,按照GOF(模式四人帮)的观点,单实例工厂类的生产方法,应该是static的。   关于‘牧羊人’的意思是指,在面向对象的语言里,最高级首先是元类,元类(meta class)下面是类,类下面才是对象。对于虚拟机来说,类是元类的对象,static方法是类的方法,而不是对象的方法。   所以,对象就相当于“羊”,类就相当于“羊圈”盛放和标示“羊”,拿出来一只羊,就要问问,你是哪个羊圈里的?   static方法相当于“羊圈里的狗”,专门来管理羊。   而元类才是幕后的‘牧羊人’。   thinking作者本科是读物里的,后来才转过来读软件工程(那时候学的是c),可能是半路出家的原因,对面向对象的机制,在理解上有出入。

JAVA_Xiu 2010-08-28
  • 打赏
  • 举报
回复
楼主太执着于“牧羊人”这三个字了
aotian16 2010-08-27
  • 打赏
  • 举报
回复
学习的
chocolate001 2010-08-27
  • 打赏
  • 举报
回复
static 标记的是静态方法或者是静态属性,即一个类中不需要实例改类即可以访问的方法或属性。
public class Test{
public static string str="Hi.";
public static string testStatic()
{
return "Hello world";
}
}
//调用不需要生成实例
System.out.println(Test.str);
System.out.println(Test.testStatic());

另外在非静态方法中不能调用静态方法和属性的。
Jlins 2010-08-27
  • 打赏
  • 举报
回复
楼主有空看下 深入java虚拟机 这本书

static声明的方法 被成为 类方法 是属于类的,不是某个具体对象, 在class文件加载的时候初始化static方法和static块(如果我没记错的话)
所以可以直接使用 Math.random() 调用.

理解上面的就可以了

Jlins 2010-08-27
  • 打赏
  • 举报
回复
楼主有空看下 深入java虚拟机 这本书

static声明的方法 被成为 类方法 是属于类的,不是某个具体对象, 在class文件加载的时候初始化static方法和static块(如果我没记错的话)
所以可以直接使用 Math.random() 调用.

理解上面的就可以了

蒙奇D路飞 2010-08-27
  • 打赏
  • 举报
回复
我也正在看 java编程思想 我的总结是 static是一个类型不是一个对象,而类型是可以创建对象,就相当于牧羊人可以放养一样,这里的羊就是对象啊,是不是解释的很通俗易懂啊 哇咔咔
zyyww 2010-08-27
  • 打赏
  • 举报
回复
I am coming!learn from u!
goodsun00 2010-08-27
  • 打赏
  • 举报
回复
static 写在类是这种static {} 就是每次载入对象时 最先调用
fatlism 2010-08-27
  • 打赏
  • 举报
回复
一起学习下
wucq65 2010-08-27
  • 打赏
  • 举报
回复
建议再参考些有中文翻译的技术文档可能会有比较好的解释
wangyi123 2010-08-27
  • 打赏
  • 举报
回复
楼主先看一个比较简单的java语法书籍 ,在看Think in java吧
closewbq 2010-08-27
  • 打赏
  • 举报
回复
转:
问题:static方法可以创建或使用与其它类型相同的被命名对象,因此,static方法常常拿来做‘牧羊人’的角色,负责看护与其隶属同一类型的实例群。”

回答:
  其实作者的意思是说,按照GOF(模式四人帮)的观点,单实例工厂类的生产方法,应该是static的。

  关于‘牧羊人’的意思是指,在面向对象的语言里,最高级首先是元类,元类(meta class)下面是类,类下面才是对象。对于虚拟机来说,类是元类的对象,static方法是类的方法,而不是对象的方法。

  所以,对象就相当于“羊”,类就相当于“羊圈”盛放和标示“羊”,拿出来一只羊,就要问问,你是哪个羊圈里的?

  static方法相当于“羊圈里的狗”,专门来管理羊。

  而元类才是幕后的‘牧羊人’。

  thinking作者本科是读物里的,后来才转过来读软件工程(那时候学的是c),可能是半路出家的原因,对面向对象的机制,在理解上有出入。

加载更多回复(12)

62,616

社区成员

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

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