Zacard's Notes

关于java的一些冷知识

背景

最近开始重新翻阅了《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。

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章