没有合适的资源?快使用搜索试试~ 我知道了~
全世界所有程序员都会犯的错误
3星 · 超过75%的资源 需积分: 9 1 下载量 85 浏览量
2009-10-25
13:07:05
上传
评论
收藏 5KB TXT 举报
温馨提示
试读
6页
全世界所有程序员都会犯的错误,看看吧,真的。
资源推荐
资源详情
资源评论
全世界所有程序员都会犯的错误
-------------------------------------------------------------------------------
全世界所有程序员都会犯的错误
当年,国际巨星成龙的「龙种」曝光,众人指责他对不起娇妻林凤娇,逼得他出面召开记
者会,向世人自白他犯了「全世界所有男人都会犯的错误」。从来没犯过这种错误的我,
也因此常常认为自己不是个男人。
虽然没犯过「全世界所有男人都会犯的错误」,但是我倒是曾经犯了「全世界所有程序员
都会犯的错误」。不管使用何种语言,全世界所有程序员都一定犯过这种错误,那就是:
太依赖编译器,却不知道编译器做了哪些事。
一般来说,越高阶的程序语言,会提供越多语法上的便利,以方便程序撰写,这就俗称为
syntactic sugar,我称其为「语法上的甜头」。虽说是甜头,但是如果你未能了解该语法
的实质内涵,很可能会未尝甜头,却吃尽苦头。
不久前,我收到一个电子邮件,读者列出下面的Java程序,向我求救。看过这个程序之后
,我确定这又是一个「全世界所有程序员都会犯的错误」。
// 程序1
CODE:
--------------------------------------------------------------------------------
class Singleton {
private static Singleton obj = new Singleton();
public static int counter1;
-------------------------------------------------------------------------------
全世界所有程序员都会犯的错误
当年,国际巨星成龙的「龙种」曝光,众人指责他对不起娇妻林凤娇,逼得他出面召开记
者会,向世人自白他犯了「全世界所有男人都会犯的错误」。从来没犯过这种错误的我,
也因此常常认为自己不是个男人。
虽然没犯过「全世界所有男人都会犯的错误」,但是我倒是曾经犯了「全世界所有程序员
都会犯的错误」。不管使用何种语言,全世界所有程序员都一定犯过这种错误,那就是:
太依赖编译器,却不知道编译器做了哪些事。
一般来说,越高阶的程序语言,会提供越多语法上的便利,以方便程序撰写,这就俗称为
syntactic sugar,我称其为「语法上的甜头」。虽说是甜头,但是如果你未能了解该语法
的实质内涵,很可能会未尝甜头,却吃尽苦头。
不久前,我收到一个电子邮件,读者列出下面的Java程序,向我求救。看过这个程序之后
,我确定这又是一个「全世界所有程序员都会犯的错误」。
// 程序1
CODE:
--------------------------------------------------------------------------------
class Singleton {
private static Singleton obj = new Singleton();
public static int counter1;
public static int counter2 = 0;
private Singleton() {
counter1++;
counter2++;
}
public static Singleton getInstance() {
return obj;
}
}
// 程序2
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2);
}
}
--------------------------------------------------------------------------------
执行结果是:
obj.counter1==1
obj.counter2==0
你有没有被此结果吓一跳?乍看程序代码,你很可能会认为counter1和counter2的值一定
会相等,但执行结果显然不是如此。其实,程序1被编译后的程序应该等同于下面的程序3
:
private Singleton() {
counter1++;
counter2++;
}
public static Singleton getInstance() {
return obj;
}
}
// 程序2
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1=="+obj.counter1);
System.out.println("obj.counter2=="+obj.counter2);
}
}
--------------------------------------------------------------------------------
执行结果是:
obj.counter1==1
obj.counter2==0
你有没有被此结果吓一跳?乍看程序代码,你很可能会认为counter1和counter2的值一定
会相等,但执行结果显然不是如此。其实,程序1被编译后的程序应该等同于下面的程序3
:
剩余5页未读,继续阅读
资源评论
- xiexiaozhuo2011-11-16只有几页,讲了单个比较偏的错误。建议删除以下标签--教程 课件
mc32753203
- 粉丝: 3
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功