混海角 发表于 2007-8-16 11:48

一个关于Java的菜鸟问题

用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。

liebe0708 发表于 2007-8-18 19:20

有关系么?同问?

irgendwobb 发表于 2007-8-19 10:00

原帖由 混海角 于 2007-8-16 11:48 发表 http://www.dolc.de/forum/images/common/back.gif
用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。
对的,而且被附了初值了

andylong 发表于 2007-8-20 18:21

;) 建议初学者去看一下马士兵java视频系列$支持$

cn1h 发表于 2007-8-22 08:01

所以static量必须声明的时候就赋初值,而不是象其他量那样可以通过构造函数赋值。

renzaijianghu 发表于 2007-8-22 11:07

原帖由 cn1h 于 2007-8-22 08:01 发表 http://www.dolc.de/forum/images/common/back.gif
所以static量必须声明的时候就赋初值,而不是象其他量那样可以通过构造函数赋值。

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

irgendwobb 发表于 2007-8-22 11:15

原帖由 renzaijianghu 于 2007-8-22 11:07 发表 http://www.dolc.de/forum/images/common/back.gif


这么说有点过啊;) static 变量不必赋初值的,可以在任何函数内赋值的. 类似构造函数,也可以在static{}块内赋值.
这还有点不太对吧,static变量是自动被赋初值的,比入如果 int 类型就 是0, Integer 就是null

renzaijianghu 发表于 2007-8-22 22:02

原帖由 irgendwobb 于 2007-8-22 11:15 发表 http://www.dolc.de/forum/images/common/back.gif

这还有点不太对吧,static变量是自动被赋初值的,比入如果 int 类型就 是0, Integer 就是null
;)1. 所有的成员变量,static变量,如果不赋初值的,都会被自动赋初值,也就是说,是否被赋初值和static没有关系.
2,我的命题是, "static 变量不必赋初值的,可以在任何函数内赋值的. 类似构造函数,也可以在static{}块内赋值.", 不必的意思就是说,可以赋初值,也可以不赋, 这和它是不是自动被赋初值没什么关系.
3,这个命题的反命题是,"static 变量必须被赋初值",这个很好验证,随便写个类,声明一个没有初值的static变量,如果编译通过,就可以证明反命题是错误的.

并非如此 发表于 2007-8-28 11:11

原帖由 混海角 于 2007-8-16 11:48 发表 http://www.dolc.de/forum/images/common/back.gif
用Static定义的类或方法,是不是系统立即分配内存空间啊,不需另外具体化。
刚刚开始接触,见笑了。
你的话有点别扭,但是是对的,java摒弃了全局变量的概念,但是保留了静态成员,static成员在类加载的时候就已经在静态内存区域分配了固定的空间(应该是在栈里面,我对jvm了解不多,不敢确定),所以在使用的时候,最好直接用类名引用,不要用对象名,以示区别,还有在引用前无需实例化,一般作为类的公共属性(比如记载实例的个数),静态成员可以被继承,但是不体现多态性。

我对java了解不多,这些只是我个人的理解,如有错误,还望指教。

奇朵啊朵 发表于 2007-8-28 20:53

并非如此 发表于 2007-8-29 14:45

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

[ 本帖最后由 并非如此 于 2007-8-29 14:49 编辑 ]

奇朵啊朵 发表于 2007-8-30 11:54

奇朵啊朵 发表于 2007-8-30 11:59

并非如此 发表于 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是在类加载的时候初始化的,类一般在第一次引用或者是第一次实例化的时候加载,当然也由预先加载的类,和这段话并不冲突。

renzaijianghu 发表于 2007-8-30 18:42

只有类才能实例化,就是取得该类的一个实例. 初始化嘛,对于变量来说, 实际就是第一次赋值, 可以在声明的时候初始化, 也可以再以后. 这些跟java没有什么关系, 只不过是个通用的说法嘛. 这些概念性的东西没什么好研究的, 又不是考试, 会编程序了,自然就明白了嘛.

奇朵啊朵 发表于 2007-8-31 00:22

瓜瓜乐 发表于 2007-8-31 10:13

朵朵的功课做的很认真仔细~~~~$支持$ $支持$ :)
页: [1]
查看完整版本: 一个关于Java的菜鸟问题