Java基础知识总结(一)
《Java基礎知識總結》系列是對自己學習Java歷程中知識的一個總結,也是為自己找工作前知識的回顧,為找工作奠定基礎。
?
1、Identifiers:標識符
①Names?of?class,method?and?variable:用于類名、方法名、變量名
②Begin?with?character,"_"?or?"$":標識符不能以數字開頭
③Case?sensitive:大小寫敏感(區分大小寫)
④No?length?limitation:長度無限制
⑤標識符不能是Java關鍵字,漢字也可以做標識符,但是不建議使用(使用漢字涉及到編碼問題,跨平臺時回出現問題)。
⑥String是Java的一個類,類名是標識符,所以String可以做標識符。
⑦There?is?no?sizeof?operator.Java中沒有sizeof運算符,所以sizeof可以作為標識符
⑧關鍵字、保留字(const、goto、true、false、null)不能用作標識符。
1 public class Identifiers { 2 public static void main(String[] args) { 3 String $abc="abc1"; 4 String _abc="abc2"; 5 //編譯錯誤,標識符不能以數字開頭 6 //String 8abc="abc3"; 7 String 中國="China"; 8 String String="wanghao"; 9 int Integer=22; 10 //Java中沒有sizeof運算符,所以sizeof可以作為標識符 11 String sizeof="sizeof"; 12 System.out.println(String);//wanghao 13 System.out.println(Integer);//22 14 } 15 }?
2、Keywords:關鍵字
The?goto?and?const?keyword?are?not?used?in?the?Java?programming.
const?保留關鍵字(留兒不用)。const是從C++繼承而來的,但是Java并不使用const這個關鍵字,由于JVM是由C++編寫的,因此,雖然Java并不使用const這個關鍵字,但卻要保留下來。和const一樣goto也是保留關鍵字!
關鍵字全部用小寫表示(53個)
Strictly?speaking,the?literals?true,false,and?null?are?not?keywords?but?literals;however,the?distinction?is?academic.
true,false,and?null是保留字但不是關鍵字,只是3個值,不能用來做關鍵字。
? 3、Primitive data types:基本數據類型
Java強數據類型只能先聲明后使用。
boolean????Boolean?literals?indicating?true?or?false
char???????Stores?one?16-bit?unicode?character
char?同時具備字符和整數的特征。
byte???????8-bit?integer
short??????16-bit?integer
int????????32-bit?integer
long???????64-bit?integer
Integer?Data?Types-byte,short,int?and?long
float???????32-bit?floating-point?number
double?????64-bit?floating-point?number
在范圍內的常數可以自動轉換類型,但是變量就不一定了。
小————》大??自動轉換
大————》小??強制類型轉化
Byte相當于截取了最后8位,前面的全部舍去
1 public class Demo { 2 public static void main(String[] args) { 3 int i1 = 5; //語句1 Right 4 5 byte b1=5; //語句2 Right 6 byte b2=3; //語句3 Right 7 //byte b3=128; //語句4 Wrong 128超出了byte的范圍 8 byte b3=(byte)128; //語句5 Right 9 //byte的取值范圍:(-128,127) 10 byte b4=127; 11 byte b5=-128; 12 //byte b6=-129; //-129超出了byte的范圍 13 14 long l1=5; //語句6 Right 15 long l2=5L; //語句7 Right 16 //b1=i1; //語句8 Wrong i1不能轉換成b1 17 b1=(byte)i1; //語句9 18 l1=i1; //語句10 Right 19 //i1=123L; //語句11 Wrong 20 i1=(int)123L; //語句12 21 22 //b1=b1+b2; //語句13 Wrong b1+b2變成int 23 b1=(byte)(b1+b2); //語句14 24 } 25 }程序分析:
① 整形數據默(byte,short,int?and?long)認類型是int型,因此語句1正確
②?占用位數小的類型(簡稱“小類型”)向占用位數多的類型(簡稱“大類型”)可以自動轉換,相反,大類型到小類型則要通過強制類型轉換。
? ?如:語句6是由int---->long(自動轉換)。
語句11是由long---->int(不能進行轉換,提示“可能損失精度”的錯誤),必須通過強制類型轉換,改正后為語句12。
③?語句2和語句3是由int---->byte(自動轉換),這又是怎么回事呢?
int可自動轉換為byte和short而無需強制類型轉換,這是因為byte和short表示的范圍較小,所有小于int的整型運算,先轉換為int類型,再參與運算。例如:15和20都在byte范圍內但是15*20卻超出了byte的表示范圍,則要存放在int類型變量里面。
④ 既然int可以自動轉換為byte和short而不需強制類型轉換,那么為什么語句8會出錯,需要改成語句9這樣的強制類型轉換呢?
語句8表面上是int---->byte但是i1是一個int型的變量,它表示(-65535----65535)范圍的整數,不能確定它的值,因此需要強制類型轉換。語句4中128超出了byte的表示范圍,因此不能賦值給byte變量b3需要進行強制類型轉換,如語句5。
⑤ 強制類型轉換的實質是什么呢?
例如語句5執行的結果是:-128,這是為什么呢?
這正是強制類型轉換后的結果。int類型是32-bit,128的二進制表示形式為:00000000,00000000,00000000,10000000。Byte類型是8-bit,要把int類型強制轉換成byte類型,則只截取其后8-bit,把前24-bit去除掉。因此byte?b3=(byte)128;執行后的結果的二進制表示形式為:10000000,對應的整數即為-128。
⑥?所有小于Int的整型運算,先轉成int?再運算,因此語句13出現錯誤,需要進行強制類型轉換,如語句14。
1 public class Float { 2 public static void main(String[] args) { 3 double d1=123.0; 4 double d2=123.0F; 5 //編譯錯誤 Default data type is double 6 //float f1=123.0; 7 //需要強制類型轉換 8 float f1=(float)123.0; 9 10 //int和long可以自動轉換為float和double 11 float f2=123; 12 float f3=123L; 13 double d3=123; 14 double d4=123L; 15 } 16 }Float?Point?Data?Type-float?and?double
① Default?data?type?is?double
② A?float?data?is?32-bit?long
③ A?double?data?is?64-bit?long
④ A?float?data?ends?with?'f'?or?'F'
⑤ A?double?data?can?end?with?'d'?or?'D'
在計算機領域對于float和double只能表示他們的近似值。因為小數可以無限,但是計算機表示的精度是有限的。
⑥ int和long可以自動轉換為float和double
?
Java變量類型:
① 基本類型:boolean,byte,char,shot,int,long,float,double
② 引用類型:所有類、接口、數組、枚舉、標注
Recommended?Naming?Rules
① Class?names?begin?with?uppercase?character
② Interface?names?begin?with?uppercase?character
③ Method?names?begin?with?lowercase?character
④ Variable?names?begin?with?lowercase?character
⑤ Constant?variable?names?are?in?uppercase?character,不同單詞間用“_” 隔開,例如:USER_NAME。
⑥ Package?names?are?in?lowercase?character
規范我們可以違背,但是我們提倡遵守,養成一種良好的習慣!
?
4、Operators
Assignment?operators
=???+=???-=???%=???*=???/=????<<=?????>>=?????>>>=??? &=????^=??????|=
1 public class ByteDemo { 2 public static void main(String[] args) { 3 byte b1=2; 4 byte b2=3; 5 b1=(byte)(b1+b2); // 語句1 加法,轉int 6 b1+=b2; //語句2 賦值,不轉int 7 } 8 }b1+=b2;是否和語句b1=b1+b2完全等價?
答案是否定的,上面程序中的語句1和語句2給出了證明。語句1中byte類型參數與運算時要先轉換為int型,因此要進行強制類型轉換。而語句2中,自動進行類型轉換。(我的理解:我們可以把“b11+=b2;”看做是對“b1=(byte)(b1+b2);”的優化!)
Comparison?operators
>????>=?????<?????<=?????instanceof
Equality?operators
=?=????????!=
Arithmetic?operators
+???????-???????*???????/????????%
Shift?operators
>>???<<????>>>
Bitwise?operators
&?????|??????^(按位異或)???~(按位取反)
Logic?operators
&&??(邏輯與)?&??????||??(邏輯或)??|??????!(邏輯非)
&&和&都是邏輯與,它們之間的區別:&&是短路邏輯與,有短路的效果,效率更高。
||和|都是邏輯或,它們之間的區別:||是短路邏輯或,有短路的效果,效率更高。
Conditional??operators
??:
Other?operators
++????--
1 public class Test5 { 2 public static void main(String [] args){ 3 int i=2; 4 System.out.println(i++); //2 5 System.out.println(i); //3 6 int a=i++ + ++i; //3+5=8 7 System.out.println(a); 8 System.out.println(i); //5 9 for(int j=0;j<1000;j++){ 10 i=i++; 11 } 12 System.out.println(i); //5 13 } 14 }程序分析:
為什么經過1000次循環后,i=i++;的結果仍然是5?
(老師講解)++的運算符優先級高于=(賦值)運算符,i++的運算結果為5,進入寄存器,這時寄存器中存放的值為5。然后i的值變為6,繼續執行賦值語句,賦值時,把寄存器中的值賦5值給i,因此i的值是5和6之間來回切換的!
(我的理解)++的運算符優先級高于=(賦值)運算符,因此這個表達式的執行順序如下:①運算i++這個表達式的結果為5?。---->?②i的值自加1(i++先參與運算,再自加1),即i的值變為6。---->?③將i++這個表達式的值,即第①部的結果賦值給變量i。("="表達式是將右邊表達式的值賦值與左邊的變量,因此是將5賦于i,而不是將6賦于i)。整個循環過程i的值在5和6之間來回切換。
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/gw811/archive/2012/09/09/2677453.html
總結
以上是生活随笔為你收集整理的Java基础知识总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux find 命令使用注意
- 下一篇: python对应的岗位_隐式相对导入如何