作者NullLife (929rock化)
看板java
标题Re: [问题] xxx = null
时间Sun Jul 20 00:49:54 2014
※ 引述《dharma (达)》之铭言:
: 问个弱弱的问题
: Java很多时候都会出现 XX YYY = null;
: 例如下面例子
: 原因是什麽啊
: thank
: public class Main {
: public static void main(String args[]) {
: JFrame frame = new JFrame("Welcome");
: String picPath = "C:\\xxx.jpg";
: Icon icon = new ImageIcon(picPath);
: JLabel lab = null;
: JLabel lab = new JLabel("", icon, JLabel.CENTER);
: 省略
: }
: };
不给定初始值无法使用~
但说一个最近我才发现的事情,
那就是如果是全域变数,并且有final修饰词的时候,
可以在建构子里头给定第一次的reference,例如:
class A {
final String kerker;
public A(String kerker) {
this.kerker = kerker;
}
}
所以如果你一开始就写 final String kerker = null;
你後续就不可能让kerker去参照其他的refence了
因为有一次我在写物件的时候,就觉得很奇怪,
为什麽我final的变数一定要宣告的时候马上给值,
不能new整个物件的时候再来决定吗?
所以无意间被我try出来 XD
不过我又继续想那static的field是否能在static{}里头处理?
结果是不行,所以我想了想才觉得有点笨,
既然static又final了,那一定有初始值才能提供给其他物件使用。
以上一点心得分享。
--
你只是大大的世界中小小的一个岛屿
在你怀中长大的我们 从未忘记
我要用全部的力气唱出对你的深情
歌声中 只是真心的赞美
929 吴志宁
也有感谢和依恋 疼惜和忧烦
全心全意爱你
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.158.25
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1405788598.A.32C.html
1F:推 dream1124:我猜final的变数可以在静态起始区域才给初始值,试试看吧 07/20 01:14
刚刚又试了一下,发现居然可以!!
於是回想了一下我之前在玩的时候为什麽不行,
因为我习惯在取static的field的时候会冠上class的名字,例如:
class A {
static final String kerker;
static {
A.kerker = "123";
}
}
这样写的话 Eclipse 会叫我把final拿掉,
但如果我不冠上class名字,就正常可以使用了,就是:
class A {
static final String kerker;
static {
kerker = "123";
}
}
实际原因有请高手回答,
不过我猜测是加上class名称,可能会认为你要从外面另一个class来取值,
但实际上我并没有给A的kerker初始值,所以就出问题了。
※ 编辑: NullLife (123.194.158.25), 07/20/2014 01:28:55
2F:→ cha122977:A.kerker的时候A还没初始化好 所以不能这样写 07/20 01:38
3F:推 dharma:待理解 07/20 20:22
4F:推 kiwatami:我也是学了builder pattern之後才知道可以在建构子里初始 07/20 23:49
5F:→ kiwatami:化final修饰的变数值XD 07/20 23:49
6F:推 PttTime:同一楼, 只要A.就会立刻执行A里的static {...}了 07/24 19:24