JavaSE復習_1 Java的基本格式和運算符,javase_1
△.代表在當前目錄.classpath能在任何路徑下訪問類文件.
△單行注釋可以嵌套,多行注釋不能嵌套
△java中的標識符只能有數字,字母,$和_,其他的符號都是錯誤的,不合法的.其中數字不能是開頭.
△快捷打開命令窗口.按住shift,右鍵此處打開命令窗口.
△跨平台原理:只要在需要運行java應用程序的操作系統上,先安裝一個Java虛擬機(JVM Java Virtual Machine)即可。由JVM來負責Java程序在該系統中的運行。
△字符常量:''單引號中必須放的是單個數字(0~9),10代表的是2個字符.''不放字符也不可以.
△計算機內部以源碼的形式存儲,在運算的時候以補碼的形式去運算.
△java中,除了char和boolean其他數據類型都是從負數開始取到正數,如int -2^31~2^31 byte:-128~127
char占兩個字節:0~65535,boolean沒有明確指定大小.(sun官方文檔),float占四個字節,double占8個字節.
△>>>運算符將用0填充高位,而>>用符號位填充高位.在對於整數進行移位運算符的操作的時候,需要對移位運算符右側的參數進行模以32的運算.例如:1<<35和1<<3和8是相同的.
△整數默認的類型是int類型,因此不能直接用long x=999999999;這樣會顯示數據類型錯誤(out of range).需要long x=9999999999l才可以.標識最好加L.
△小數的默認類型是double類型.因此如果float f=1.32;會直接報錯.顯示可能會損失精度.需要標識float f=3.12f;
△輸出一個整數除以0的數值將會報錯ArithMeticException異常.但是用浮點數除以0則不會報異常,會得到NAN或者Infinity.
△byte b=2;不會出現和float/double一樣的錯誤,這是因為整數類型(常量在編譯的時候就能確定了.但是如果是變量的話另當別論(short同理).如:
byte b=3+4; //編譯時已經確定,不會報錯.直接數字相加直接轉換為byte.注意!!float不同.
byte b1=3;
byte b2=4;
b=b1+b2; //報錯,兩個byte變量相加會直接轉化為int.java編譯器有常量優化機制.
另外:
int x=32;
byte b=32;
b=b+x;
System.out.println(b); //編譯錯誤.這是因為b+x後轉化為了int字節.再轉換為byte會出現錯誤.
△小的數據類型在和大的數據類型運算時會補成大的數據類型.
△byte b=1;b+=1;//編譯通過,隱藏了一個類型的轉換,b++同理,不會報錯.而b=b+1;則是將int類型轉換為byte類型,會報錯(Can not convert from int to byte)
byte b=(byte)129;會得到負數.因為截斷.
而byte b=(byte)300;不會得到負數,因為300>256,因此最高位是0
△float f=123l; //編譯成功,因為float比long大.因此倒過來也是不對的. float使用ieee754格式存儲。只有24位精度,兩個float之間的距離可能很大。
舉個簡單的例子,2000000000和2000000050用float表示的話這兩個數是相同的 。
整數是精確表示的。0位代表符號位,8位代表指數位,23位代表尾數位.
△System.out.println('a'+1); //輸出98.因為在轉換為int
System.out.println("hello"+'a'+1)//輸出helloa1
System.out.println('a'+1+"hello")//輸出98hello
△System.out.println((float)(10/3))//輸出3.0,因為10/3已經事先算好
△當兩個數值進行想加的操作的時候,先將兩個操作數轉化為同一種類型,再進行計算.
- 如果兩個操作數中有一個是double類型,另一個操作數會轉化為double類型.
- 否則,如果有一個是float類型,另一個操作數會被轉化為float類型.
- 否則,如果有一個是long類型,另一個操作數將會被轉化為long類型.
- 否則,兩個操作數均被轉化為int類型(終點).
△Math.round方法方法代表對浮點數采用最接近的整數的捨入運算.如果參數是double類型,返回long.如果參數是float類型,返回int.
△常見的結合性從右向左的運算符:+=,-=,*=,/=,=.對於這類運算符,從右向左進行計算.a+=b+=c等價於a+=(b+=c).
△異或^:兩邊相同就是false兩邊不同則為true,&&是短路的,同時單與也有位運算符的作用.
△if語句和三元運算符的區別,a?b:c;三元運算符的b和c必須要要有明確的結果,因為三元運算符是運算符,要有明確的結果.
if(x<2)
int z=3;//錯誤.因為int z=3;實際上是兩個語句.
△switch(表達式){
case 語句:語句1;
break;
}
在switch括號內的表達式byte,short,char,int 枚舉(jse 1.5),字符串(jse 1.7).
case一旦成功匹配,其後的語句都不在判斷.default:即使放在任意位置,也是最後去執行.
int x =4;
switch(x )
{
case 1:System.out.println("a");
case 2:System.out.println("c");
case 3:System.out.println("b");
default:System.out.println("d");
}
此時輸出d.當default在最後面時,沒有break也可以正常結束.
當default在最前面時,執行完default後,會繼續向下.直到碰到break或者大括號
case 1:
case 2:
case 3:
語句;
這樣的格式也是可行的.
△break可以帶標簽:
U:
for( int x=0; x<=4; x++) {
for( int y=0; y<=3; y++) {
if( y==2)
break U;
System. out.println( "x="+ x+ ",y="+ y);
}
}
實際上帶break的標簽可以用在if語句中,跳出if語句塊.
還有帶標簽的continue語句,其作用與break近似.
△靜態導入:將類導入,以便使用類中的靜態方法或者靜態變量,如:import static java.lang.math.*;
△UTF-8一個中文三個字節,GBK碼表一個中文兩個字節.