標籤:
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。編譯器會採取貪心規則,盡量找最多的運算子(如果學過編譯原理能明白為什麼這麼做)。
Java片段知識