背景
最近开始重新翻阅了《Think in Java》这本书。果然,温故而知新,发现了一些冷知识。
java中的goto
goto是java中的保留字,但是却不是java中的关键字,你并不能在代码中使用goto。但是java能够使用break/continue和标签达到goto的效果。然而,需要注意的是,java里唯一需要用到这种效果的理由就是因为循环嵌套的存在,并且想从循环嵌套中break/continue。
到目前为止,本人阅读过的开源源码中且有记忆的,有使用过类似这种goto效果的,只有Google的Gson。
以返回值区分重载方法
在我们学习重载的时候就知道,只能以方法和方法的形参列表作为标准。那为何不能以方法的返回值来区分呢?
如以下2个方法:
void f(){}
int void f(){return 1;}
编译器可以通过int x=f()这里的语义来区分需要调用的方法。但是,有时候你并不关心方法的返回值,你想要的是方法调用的其他效果(这通常称为“为了副作用而调用”)。所以,像f()这种调用方法,编译器就无法区分了。
this关键字
为何我们能在一个类的方法(非静态方法)中使用this关键字,即当前对象呢?是因为在调用该实例对象的方法的时候,编译器“偷偷”的帮我们把当前实例对象的传进来了。
逗号操作符
这里说的不是逗号分隔符,逗号用作分隔符时用来函数的不同参数。java中唯一用到逗号操作符的地方就是for循环的控制表达式。在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,而且那些语句俊辉独立执行。例如一下代码:
for(int i = 1, j = i + 10; i<5; i++, j = i * 2){
}
else if
在java中else if不是关键字。由于java是自由格式语言。else if其实相当于:
if(a==1){
}else{
if(a==2){
}
}
大家都知道,if和else的大括号是可以省略的。于是就成了else if。