Java碎片知识
1.在java中有goto,但这只是保留字,并不能使用(const也是)。在eclipse中的报错信息为”Syntax error on token "goto", throw expected“。
goto的类似功能由break/continue 标签实现。
(1)break 标签
outer: for(int i=0; i<10; i++) { if(i == 5) break outer; System.out.print(i + " "); }
结果:0 1 2 3 4
分析:break通过标签跳到for循环体外,然后就不会再进入该循环了。
(2)continue 标签
outer: for(int i=0; i<3; i++) { for(int j=11; j<15; j++) { if(j == 13) continue outer; System.out.print(i + " " + j + " "); } }
结果:0 11 0 12 1 11 1 12 2 11 2 12
分析:continue通过标签跳到for外,但只是跳出当前的这次循环,它会重新进入for循环。
2.是否可以在static环境中访问非static变量?
eclipse的提示信息:Cannot make a static reference to the non-static field
3.标识符与unicode
标识符能由字母(unicode),数字,货币符号(¥,$),连接符号(_)组成。
这里关注unicode,并不是所有unicode都可以作为标识符的一部分。同时,并不是只有数字不能作为标识符首字符。
int start = 0; int part = 0; for(int i=0x0000; i<=0x10ffff; i++) { if(Character.isJavaIdentifierStart(i)) { start++; // System.out.println(Character.toChars(i)); } if(Character.isJavaIdentifierPart(i)) part++; } System.out.println("Unicode字符集个数:" + (0x10ffff+1)); System.out.println("作为首字符个数:" + start); System.out.println("作为标识符一部分个数:" + part); System.out.println("两者差距:" + (part-start));
结果:
4.i++与++i
这两者不只是先加和后加怎么简单,对于i++,其实i是先将自身的值复制给一个临时变量,然后对自身加1(如同++i),最后才参与运算。
int i = 1; i = i++; System.out.println(i);
结果: 1
i++的实现如下所示:
int temp = i; i = i+1; return temp;
5.i+++j结果是什么?
int i = 1, j = 3, result; result = i+++j; System.out.println("result: " + result); System.out.println("i = " + i); System.out.println("j = " + j);
结果:
分析:相当于(i++)+j。编译器会采取贪心规则,尽量找最多的运算符(如果学过编译原理能明白为什么这么做)。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。