锁定老帖子 主题:static解析
精华帖 (2) :: 良好帖 (4) :: 新手帖 (15) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-14
ddzero 写道 huangyuanmu 写道 静态块有的时候还是蛮有用的,在类被第一次引用时执行一次。这种应用的典型就是jdbc驱动,还记得jdbc编程中著名的那句Class.forName("XXXX")吗?
域,或者称为块,可以认为是一种行为上的初始化,与变量初始化具有相同的优先级。静态亦即共享,静态域可以在第一次引用时执行,主要作用就是进行某些共享性的操作,比如你说的JDBC。至于非静态域,其实可以用构造方法代替。 正解!!! 我只用过静态域来加载jdbc驱动 |
|
返回顶楼 | |
发表时间:2010-06-14
logic 写道 首先,很感谢楼主对静态类的补充,谢谢。
但如果能够把以下两个问题的答案补充到静态类中去,就可以说完美了。 1,非静态类中为什么不能定义静态(static)的属性or方法? 2,静态类中为什么不能访问外部类的非静态(no static)的属性or方法? 关于第二个问题:就像静态方法要调用非静态成员一样,静态类如果想访问外部类的非静态成员,需要对外部类实例化。 |
|
返回顶楼 | |
发表时间:2010-06-15
参加一次scjp考试,一切都明白了
|
|
返回顶楼 | |
发表时间:2010-06-15
logic 写道 首先,很感谢楼主对静态类的补充,谢谢。
但如果能够把以下两个问题的答案补充到静态类中去,就可以说完美了。 1,非静态类中为什么不能定义静态(static)的属性or方法? 2,静态类中为什么不能访问外部类的非静态(no static)的属性or方法? 1. 首先我想你问的是 non static inner class,对吧。 官方的说明是,non-static inner class 不是属于 class ,而是属于 object ,所以你得实例化外部,才能实例化里面。 如果 non - static inner class 属于 object, 你在里面又申明了一个属于 class 的 static 变量,岂不是矛盾。 此外,从语义上面还有一层解释。 2. 道理跟1一样,静态类是属于object的,你其他的 no static 属性or方法也是属于object的,没有实例化,都不能访问 |
|
返回顶楼 | |
发表时间:2010-06-15
beneo 写道 logic 写道 首先,很感谢楼主对静态类的补充,谢谢。
但如果能够把以下两个问题的答案补充到静态类中去,就可以说完美了。 1,非静态类中为什么不能定义静态(static)的属性or方法? 2,静态类中为什么不能访问外部类的非静态(no static)的属性or方法? 1. 首先我想你问的是 non static inner class,对吧。 官方的说明是,non-static inner class 不是属于 class ,而是属于 object ,所以你得实例化外部,才能实例化里面。 如果 non - static inner class 属于 object, 你在里面又申明了一个属于 class 的 static 变量,岂不是矛盾。 此外,从语义上面还有一层解释。 2. 道理跟1一样,静态类是属于object的,你其他的 no static 属性or方法也是属于object的,没有实例化,都不能访问 谢谢楼上的解答,完全能够理解了,建议楼主一块总结到static解析里面去。 |
|
返回顶楼 | |
发表时间:2010-06-15
beneo 写道 2. 道理跟1一样,静态类是属于object的,你其他的 no static 属性or方法也是属于object的,没有实例化,都不能访问 静态类应该是属于class的吧 |
|
返回顶楼 | |
发表时间:2010-06-16
ddzero 写道 beneo 写道 2. 道理跟1一样,静态类是属于object的,你其他的 no static 属性or方法也是属于object的,没有实例化,都不能访问 静态类应该是属于class的吧 my mistake, thanks static inner class 是属于 class 的,你其他的 no static 属性or方法是属于object的 |
|
返回顶楼 | |
发表时间:2010-06-16
java基础 http://java.afity.com
|
|
返回顶楼 | |
发表时间:2010-08-09
请问为什么可以在非静态内部类中定义 比如
static final int i= 0; 这类的属性? |
|
返回顶楼 | |
发表时间:2010-08-09
Firklaag 写道 请问为什么可以在非静态内部类中定义 比如
static final int i= 0; 这类的属性? jls 写的很清楚 http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.3 |
|
返回顶楼 | |