当前位置: 首页 > 科技观察

Java“作弊”的十大功能

时间:2023-03-13 21:09:48 科技观察

作为一种面向对象的编程语言,Java以其简单易用和强大的特性受到了广大编程爱好者的青睐。它席卷全球,势不可挡。全世界都有Java技术的实践者。也是常年在编程语言排行榜中高居榜首,足以见得Java的强大和王者地位。然而,即使是如此强大的编程语言也有很多“作弊”功能。一不留神,我们就掉坑里了。至少,我们会被同事嘲笑和鄙视,最严重的是,我们将因惨剧而不得不逃跑。.当然,欺骗这个词是用双引号引起来的,因为大多数时候,是我们缺乏技巧和常识造成了不愉快的后果。今天我们就把Java中最“烂”、最违背常识的功能点整理出来,以排行榜的形式公布给读者。说明一下,本文代码是基于JDK8编译实现的。1、switch必须加break结束。对于多分支选择,一系列的if-else-if语句会使代码的可读性变差。建议改用switch语句。但是必须加上switchcase中的分支判断。只有上面的break语句会停止其他case的执行,例如:intcount=1;switch(count){case1:System.out.println("one");case2:System.out.println("two");case3:System.out.println("three");}上面的代码会输出:onetwothree然而,这不是我们想要的,或者说违反了我们的常识。如果满足某个条件,当然只需要执行这个条件下的逻辑即可。其他情况忽略不计,直接跳过。和上面的代码一样,只需要输出一个即可。当然,在每个case的最后加一个break也能达到预期的效果。Java12骚开关还能这么玩,推荐阅读这篇文章。这个功能点有点“坑爹”,也是新手常犯的错误,所以也荣登榜单,排名第10。2、逻辑运算符的“短路”现象在使用逻辑运算符时,我们会遇到“短路”现象:一旦整个表达式的值可以确定,剩下的就不用计算了。当然,这个功能点其实是很有用的,但是对于初学者来说,可能会觉得比较意外,使用不当会有“作弊”的后果。例如下面的代码:intnum=1;System.out.println(false&&((num++)==1));System.out.println(num);会输出false和1,因为逻辑与&&的前半部分为false,不管后半部分为true还是false,整个表达式都会返回false,所以后半部分不会计算。如果把false改成true,那么会执行下半部分,num会变成2up。在“坑爹”榜单中排名第9位。3、数组下标从零开始Java程序员都知道数组下标从零开始。比如我们要遍历一个数组,可以使用如下方法:int[]arr=newint[]{1,3,5,7,9};for(inti=0;ilist=newArrayList();list.add("abc");list.add("bc");list.add("bc");list.add("abcd");list.add("abcdef");//报错intlength=list.size();for(inti=0;i=IntegerCache.low&&i<=IntegerCache.high)returnIntegerCache.cache[i+(-IntegerCache.low)];returnnewInteger(i);}这个函数被选为“坑爹”榜单的第4位。推荐看看IntegerCache的精彩用法和陷阱。8.空方法体导致无限循环。如果循环的方法体为空,就会造成死循环。例如,下面的代码打印出数字1、2、3:inti=1;while(i<4){System.out.println(i++);}如果不小心在whilewhile的末尾添加了分号键入(如果方法体没有大括号,则更有可能发生这种情况):inti=1;while(i<4);{System.out.println(i++);}猜猜看,上面的代码可以编译和正常运行,却陷入死循环……是不是很“坑爹”?for循环也存在类似的情况。它以第3名高居榜首。9.神奇的=+我们知道,对于像a=a+b这样的赋值语句,有一种简写方式:a+=b。但是,如果不小心写了a=+b,结果会是什么呢??我们看下面的代码:inti=100;i=+2;//注意加号在System.out.println(i)后面;上面的代码既不会输出102,也不会报错,而是输出2。这确实出乎意料,完全不是我们所期望的,很神奇,也很“坑爹”。因此,它排名第二,稳居榜单第二位。10.Java注释可以识别Unicode首先看代码:publicstaticvoidmain(String[]args){//\\u000dSystem.out.println("HelloWorld!");}一看代码已经被注释掉了,的当然不会输出任何东西,但是,它仍然会输出每个程序员都觉得很亲切的HelloWorld,这是因为unicode解码发生在代码编译之前,编译器对\u风格的代码进行text-escape,即使是acomment同理,那么\u000a转为\n换行,这样println代码就可以正常执行了。这样的功能真是“坑爹”,极其违背常理。一定要上榜,一定要排在第一位。