找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 1917|回复: 16

一个关于Java的菜鸟问题

[复制链接]
发表于 2007-8-16 11:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-8-18 19:20 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-19 10:00 | 显示全部楼层
原帖由 混海角 于 2007-8-16 11:48 发表
用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。

对的,而且被附了初值了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-20 18:21 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-22 08:01 | 显示全部楼层
所以static量必须声明的时候就赋初值,而不是象其他量那样可以通过构造函数赋值。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-22 11:07 | 显示全部楼层
原帖由 cn1h 于 2007-8-22 08:01 发表
所以static量必须声明的时候就赋初值,而不是象其他量那样可以通过构造函数赋值。


这么说有点过啊;) static 变量不必赋初值的,可以在任何函数内赋值的. 类似构造函数,也可以在static{}块内赋值.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-22 11:15 | 显示全部楼层
原帖由 renzaijianghu 于 2007-8-22 11:07 发表


这么说有点过啊;) static 变量不必赋初值的,可以在任何函数内赋值的. 类似构造函数,也可以在static{}块内赋值.

这还有点不太对吧,static变量是自动被赋初值的,比入如果 int 类型就 是0, Integer 就是null
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-22 22:02 | 显示全部楼层
原帖由 irgendwobb 于 2007-8-22 11:15 发表

这还有点不太对吧,static变量是自动被赋初值的,比入如果 int 类型就 是0, Integer 就是null

;)1. 所有的成员变量,static变量,如果不赋初值的,都会被自动赋初值,也就是说,是否被赋初值和static没有关系.
2,我的命题是, "static 变量不必赋初值的,可以在任何函数内赋值的. 类似构造函数,也可以在static{}块内赋值.", 不必的意思就是说,可以赋初值,也可以不赋, 这和它是不是自动被赋初值没什么关系.
3,这个命题的反命题是,"static 变量必须被赋初值",这个很好验证,随便写个类,声明一个没有初值的static变量,如果编译通过,就可以证明反命题是错误的.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-28 11:11 | 显示全部楼层
原帖由 混海角 于 2007-8-16 11:48 发表
用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。

你的话有点别扭,但是是对的,java摒弃了全局变量的概念,但是保留了静态成员,static成员在类加载的时候就已经在静态内存区域分配了固定的空间(应该是在栈里面,我对jvm了解不多,不敢确定),所以在使用的时候,最好直接用类名引用,不要用对象名,以示区别,还有在引用前无需实例化,一般作为类的公共属性(比如记载实例的个数),静态成员可以被继承,但是不体现多态性。

我对java了解不多,这些只是我个人的理解,如有错误,还望指教。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

头像被屏蔽

TA的专栏

发表于 2007-8-28 20:53 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-29 14:45 | 显示全部楼层
你的解释的看起来有点问题。
>static变量在声明的时候是不占内存存储空间的。它会为初始值,或是Null
怎么可能不占,不然他该呆在什么地方,你理解的内存又是什么???,你的英语原话中没有提及此事。
>static变量不能被实例化,而是被初始化initialization
一般实例化只是指类变量的实例化,static一般是不用来声明类的(好像只能用于内部类),不存在实例化的问题,实例化的目的是为了动态的分配内存给一个类的实例,而static数据类型的内存分配是在加载类的时候,和实例化没有关系。即使没有实例的存在,只要有对类引用的存在,static变量也就一直存在,也就是和类共存亡。
>static变量被初始化后,不会重复占用内存存储空间
可以这么说,由于静态数据类型是在类加载时就初始化的,所以是自动初始化的,当然也可以手动得给一个初始值。静态数据类型的内存分配就固定的,只加载一次。

[ 本帖最后由 并非如此 于 2007-8-29 14:49 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

头像被屏蔽

TA的专栏

发表于 2007-8-30 11:54 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

头像被屏蔽

TA的专栏

发表于 2007-8-30 11:59 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-30 13:52 | 显示全部楼层
//the static initialization occurs only if it’s necessary.
//If you don’t create a MyClass object and you never refer to MyClass.c2 or MyClass.c3, the static
// MyClass2 c2 and c3 will never be created. They are initialized only when the first MyClass object is
//created (or the first static access occurs). After that, the static objects are not reinitialized.
解释起来有点像文字游戏。
我已经说过,static是在类加载的时候初始化的,类一般在第一次引用或者是第一次实例化的时候加载,当然也由预先加载的类,和这段话并不冲突。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-30 18:42 | 显示全部楼层
只有类才能实例化,就是取得该类的一个实例. 初始化嘛,对于变量来说, 实际就是第一次赋值, 可以在声明的时候初始化, 也可以再以后. 这些跟java没有什么关系, 只不过是个通用的说法嘛. 这些概念性的东西没什么好研究的, 又不是考试, 会编程序了,自然就明白了嘛.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

头像被屏蔽

TA的专栏

发表于 2007-8-31 00:22 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2007-8-31 10:13 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+2, 2025-7-10 18:38 , Processed in 0.094921 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表