当前位置: 首页 > news >正文

湛江市网站建设_网站建设公司_留言板_seo优化

四川杰新建设工程网站,wordpress连接memcached,wordpress mu 搜索,现在个人都在哪个网站做外贸今天我们就来聊一下 Java 中的 10 大坑爹功能#xff0c;它们分别是#xff1a;1.switch必须加上break才结束2.逻辑运算符的“短路”现象3.数组下标从零开始4.ArrayList遍历删除时报错5.字符转成数字的坑6.while循环体的“障眼法”7.Integer类有缓存8.空方法体导致死循环9.神… 今天我们就来聊一下 Java 中的 10 大坑爹功能它们分别是1.switch必须加上break才结束2.逻辑运算符的“短路”现象3.数组下标从零开始4.ArrayList遍历删除时报错5.字符转成数字的坑6.while循环体的“障眼法”7.Integer类有缓存8.空方法体导致死循环9.神奇的10.Java注释能够识别Unicode作为一门面向对象的编程语言Java 凭借其简单易用、功能强大的特点受到了广大编程爱好者的青睐伴随着开源社区的推波助澜 Java 语言更是席卷全球势不可挡在世界各地都有 Java 技术的从业者它也常年高居编程语言排行榜的首位足以表明 Java 的强悍与王者之风。然而即便是如此强大的编程语言也有很多“坑爹”的功能稍不注意我们就会掉入坑里轻则遭到同事的嘲笑和鄙视重则造成悲惨后果而不得不跑路。当然坑爹这个词加上了双引号因为大部分时候都是由于我们不够熟练、违反我们的常识才造成了令人不愉快的后果。今天我们就来梳理一下 Java 中最“坑爹”、最违反常识的功能点以排行榜的方式发布以飨读者。说明一下本文中的代码基于 JDK8 来编译实现。1、switch必须加上break才结束对于多重分支选择一系列的if-else-if语句会让代码的可读性变差建议使用switch语句来代替然而switch case中的分支判断必须加上break语句才会中止其它case的执行比如int count  1; switch(count){case 1:System.out.println(one);case 2:System.out.println(two);case 3:System.out.println(three); } 上面的代码会输出one two three 然而这并不是我们想要的或者说违反了我们的常识。满足了某种条件当然就只需要执行这种条件下的逻辑即可其他的case应该不予理会、直接跳过象上面这段代码只需要输出one就行了。当然在每个case结尾处加上break就可以达到我们期望的效果。这个功能点稍显“坑爹”也是初学者常犯的错误所以它也光荣上榜排名第10位。2、逻辑运算符的“短路”现象使用逻辑运算符时我们会遇到“短路”的现象一旦能够确定整个表达式的值就不会计算余下的部分了当然这个功能点其实是非常有用的但对于初学者来说可能会感觉比较惊讶使用不当就会产生“坑爹”后果。比如下面的代码int num  1; System.out.println(false  ((num)1)); System.out.println(num); 就会输出false和1因为逻辑与的前半部分为false不管后半部分为true还是false整个表达式都会返回false所以就不会再计算后面的部分了如果把false改成true那么后半部分就会得到执行num也就变成2了。它在“坑爹”榜单中位列第9位。3、数组下标从零开始Java程序员都清楚数组的下标是从零开始的比如我们要遍历一个数组可以采用如下的方式int[] arr  new int[]{1,3,5,7,9}; for(int i0;iarr.length;i){ System.out.println(the element is:arr[i]); } 这跟我们日常生活中的经验是相违背的正常情况都是从第1个元素开始计数的特别是对于初学者来说有点难以接受会觉得很惊讶。即使对于经验丰富的程序员来说有些地方也需要格外注意比如String str  hello world; System.out.println(str.charAt(1)); 我们知道charAt的作用是获取字符串中某个位置的字符然而上面的代码并不是输出第一个字符h而是e因为数组是从零开始计数的这个也是比较“坑爹”啊。当然设计者这么做的原因是考虑到了内存偏移量的因素。每次在编写这样的代码时都需要做这样的1到0的映射和转换熟练了就是下意识的转换确实也有点“坑爹”所以它也不能幸免排在第8位。4、ArrayList遍历删除时报错Talk is cheap先上代码public static void main(String[] args) {ListString list  new ArrayListString();list.add(abc);list.add(bc);list.add(bc);list.add(abcd);list.add(abcdef);//报错int length  list.size();for(int i  0;i  length;i){if(list.get(i).equals(bc)){list.remove(i);}} } 想从ArrayList中删除某个元素于是我们就写了上面的代码但是它却抛出了IndexOutOfBoundsException异常原因是ArrayList在删除元素后会重新计算数量把list.size放在for循环中即可for(int i0;ilist.size();i){if(list.get(i).equals(bc)){list.remove(i);} } 当然这种方法也存在问题建议使用迭代器的方式来删除元素。对于不太熟练的程序员来说有时候就会掉入这样的陷阱之中。这是排名第7的情况。5、字符转成数字的坑有时候我们想把字符直接通过类型转换变成整数比如像下面这样char symbol  8; System.out.println((int) symbol); 我们想要的结果是8然而上面的代码却输出了56略显“坑爹”具体原因参考ASCII的知识。6、while循环体的“障眼法”对于while循环语句如果你没有加上大括号即使后面的语句挨在一起也只会执行第一条statement比如int i  0; while(i3)System.out.print(A);System.out.print(B); 上面的代码会输出AAAB 而不是3个A、3个B更“坑爹”的是如果两条语句放在一行上迷惑性会更大int i  0; while(i3)System.out.print(A);System.out.print(B); 上面这种写法同样是输出AAAB。所以象这样的情况哪怕只有一条语句也建议加上大括号完美避坑。7、Integer类有缓存这个功能点也是面试的高频热点之一稍不注意也有可能被带入沟里我们看看下面这段代码public static void main(String[] args){Integer a  100;Integer b  100;Integer c  200;Integer d  200;System.out.println(ab);System.out.println(cd); } 上面的代码竟然输出true false 这确实太出乎意料了同样的代码只是数值不同而且差别不太大的样子就产生了不一样的输出这也太离谱了。原来Integer中有一个静态内部类IntegerCache在类加载的时候它会把[-128, 127]之间的值缓存起来而Integer a 100这样的赋值方式会首先调用Integer类中的静态valueOf方法这个方法会尝试从缓存里取值如果在这个范围之内就不用重新new一个对象了public static Integer valueOf(int i) {if (i  IntegerCache.low  i  IntegerCache.high)return IntegerCache.cache[i  (-IntegerCache.low)];return new Integer(i); } 此功能入选“坑爹”排行榜的第4名。8、空方法体导致死循环如果循环的方法体为空则会导致死循环比如下面的代码打印出数字123int i  1; while(i4){System.out.println(i); } 如果你在敲键盘的时候不小心在while结尾处加了一个分号如果方法体没有加大括号更容易产生这种情况int i  1; while(i4);{System.out.println(i); } 你猜怎么着上面的代码可以正常编译并运行然而它却陷入了死循环……是不是非常“坑爹”for循环也存在类似的情况。它高居排行榜的第3位。9、神奇的我们知道对于类似aab这样的赋值语句有一种简写方式a b然而如果你不小心写成了a b结果又会是什么呢我们看看下面的代码int i  100; i  2; //注意加号在后面 System.out.println(i); 上面的代码既不会输出102也不会报错而是输出2这的确出乎意料完全不是我们期望的结果太神奇了非常的“坑爹”。所以它排名第2稳居榜眼的位置。10、Java注释能够识别Unicode先看看代码public static void main(String[] args){// \\u000d System.out.println(Hello World!); } 乍一看代码都被注释掉了当然不会输出任何东西然而它还是输出每个程序员都倍感亲切的Hello World这是因为unicode解码发生在代码编译之前编译器将\u样式的代码进行文本转义即使是注释也是这样然后\u000a被转换成\n换行符所以println代码得以正常执行。这样的功能着实“坑爹”极其违反常识它必须要上榜必须要荣登状元的位置。以上就是Java语言中十大“坑爹”的功能点你是否认同这样的排名你觉得有哪些功能更应该入选此榜单欢迎后台留言讨论往期推荐搬家又一次和过往告别阿里为什么推荐使用LongAdder而不是volatileJava中的一些坑汇总篇2万字为什么劝你放弃Maven看看Gradle的这些优点就知道了定时任务最简单的3种实现方法超好用
http://www.ihoyoo.com/news/97865.html

相关文章:

  • 湖南网站优化wordpress后台代码
  • 母婴网站建设的与功能模块网站建设硬件环境
  • 福州 网站定制设计聊城做网站的公司
  • 摄影照片投稿网站wordpress 文章分页插件
  • 有移动端网站 怎么做app企业网站模板 html
  • 网站建设市场多大cnnic网站
  • 做网站备案谁做如何制作网站机器人
  • 建设婚介网站网站开发众包平台
  • 电子商务运营实务中网站开发流程wordpress怎么搭建成论坛
  • 鞍山网站制作一般多少钱建设信用卡激活中心网站
  • 平面网站设计网站域名的分类
  • 南昌高端网站定制一键制作单页网站
  • 网站论坛建设方案网站设计专业有哪些课程
  • 中国电力建设集团有限公司网站微网站如何建设方案
  • 青岛安装建设股份有限公司网站保定 营销型网站建设
  • 网站目录结构怎么做长沙赶集网招聘最新招聘
  • 网页网站设计培训深圳网站制作公司资讯
  • 南昌网站开发培训学校网站开源是什么意思
  • 中国站长之家网站开源企业网站
  • 西安知名网站制作公司100款免费安装的软件app
  • 顺德定制网站设计wordpress侧边栏目录菜单
  • 做网站用asp好吗南京做微网站
  • pc网站同步手机网站帝国网站管理 上一条 下一条 链接 信息id 信息发布时间
  • 手机网站后台管理系统公司网站首页怎么做
  • 做网站哪家最好项目计划书模板免费
  • 微网站样式游戏代理免费
  • 衡东网站定制wordpress 安装500
  • 硬件开发包河南网站建设优化技术
  • 怎样建设网站呢最好的网络推广方式
  • 单位建设网站申请报告windows10PHP 网站建设