衆所周知,程序員須要快速學習新知識,因此就有了《21天精通C++》和《MySQL-從刪庫到跑路》這樣的書籍,Java做爲更「高級」的語言也不該該落後,因此我就寫一個《極·Java速成教程》,讓想學的人可以快速學習Java(手斜)。
本文大概分三大部分:java
本文請逐字理解文本內容,本文僅供理解和學習Java編程,不可做爲概念性參考程序員
本文是閱讀《Java編程思想》後的讀後感編程
Java是一個從設計之初就遵循面向對象思想的語言,所以而有着諸多面向對象的特性,那麼問題來了,面向對象指的是什麼?
面向對象,不是指的臉超女友,而是說編程的時候,你所操做的一切事物都是「對象」,假如說Java程序員是個搬磚工,那Java操做的對象就是搬磚工手裏的磚,一塊磚就是一個對象,一堆轉就是一堆對象,諸多一樣的對象能夠用一個概念來歸納,這個概念就是「類」。
先在咱們能夠思考磚是個什麼東西,也就是磚的「概念(類)」:磚,由土燒製而成,能夠用來砌牆、鋪地和墊桌角,有必定的重量和體積,能被搬被砌。仔細分析這句定義,能夠發現能分爲4小句:數組
將許多個「磚」同樣的對象搭配組合,堆壘到一塊兒,就能夠構建起程序的這棟房屋,實現總體的功能。函數
Java中的類有幾個特色學習
只要想好這個類和它的對象應該怎麼設計,怎麼正常運行便可,其餘語言的包袱,甩掉便可設計
當Java使用者須要一個對象時,這個對象在內存中的位置時咱們不用管也無法管的。但這個對象是怎麼來的,倒是能夠思考的。就像房子是磚壘成的,磚是由土燒成的,那土是什麼構成的呢,這麼追究下去,追究到最後就成了重子和輕子了,可是咱們沒必要追求這麼細,就像Java中咱們知道一切對象都有Object這個「祖宗」,可是咱們不須要凡事都請動這個祖宗,它有幾個子女是咱們經常使用的,也就是「基本類型」:code
類型 | 大小 | 包裝器 | 初始值 |
---|---|---|---|
boolean | true/false | Boolean | false |
char | 16 bit | Character | '\u0000' |
byte | 8 bit | Byte | (byte)0 |
short | 16 bit | Short | (short)0 |
int | 32 bit | Integer | 0 |
long | 64 bit | Long | 0L |
float | 32 bit | Float | 0.0f |
double | 64 bit | Double | 0.0d |
void | Void | void |
這些基本類型的大小都與其位數n有關,最小值爲-2n-1,最大值爲2n-1-1,float和double遵循IEEE754標準。
除了基本類型,還有字符串String,高精度整數BigInteger和高精度浮點數BigDecimal等常見類。對象
一個對象,給他個稱號,就能夠根據這個名字喊他作各類事,就像家裏人能夠喊你小名讓你幹活同樣。可是當出了家裏,可能有好多人跟你重名,這會帶來困擾,所以是不被容許的,而在外面叫你的小名,這也會帶來尷尬,也就是說,這個名字超出了做用域,在Java中,一個稱號(或者說引用)的做用域是從這個命名的聲明到所在花括號的結尾。固然若是不關心這一點也沒問題,由於IDE會提醒你這裏出了問題。
當一個對象有了它的稱呼之後,就能夠安排他作好多的事情了,不管誰喊,只要是喊到,就能夠用。在做用域範圍內的全部調用均可以經過這個名字實行,而你也能夠再給這個對象起另外一個名字,這多個名字都是指的同一個對象,當處理不當時,這會帶來一些問題,好比一個喊你張三的人給你圖了個花臉,別人喊你李四把你喊過來之後也會看到一個花臉。
對於一堆相同類型的對象,能夠用一個容器裝住他們,方便咱們管理和使用,Java中提供了多種類型的容器,有最基本的數組,也就是一串連續的空間去裝同樣的對象,還有其餘的諸如set和map之類的容器能夠裝,這一點能夠在後面進行詳細討論。繼承
運算符有其優先級,也有短路的特徵。優先級就是說先乘除後加減,短路就是邏輯運算時當直接能夠產生結果時就再也不繼續運算。
運算符有如下幾個:
+。加號,數字的累加,字符串的鏈接,將較小類型的數字提高爲int類型。
-。減號,數字相減。負號。
*。乘號,數字相乘。
/。除號,數字相除,給出結果的整數部分,直接截斷小數,不會四捨五入。
%。求餘,數字相除求餘數。
++自增,--自減,當出如今對象前面時先運算再輸出值,當出如今對象後面時先輸出值再運算。
>,<,>=,<=。大於,小於,大於等於,小於等於。顧名思義。
==判斷相等,對於Java來講,這是容易令人困擾的一點,由於除了在判斷基本類型對象是否相等時之外,==僅僅爲判斷別名所指向的對象是否爲同一個,而不關心對象的屬性是否相等。若是要判斷String等官方封裝好的類型,就要用到equals()
方法,可是對於本身定義的類來講,若是沒有從新定義equals()
方法,就會和==同樣,對引用對象進行判斷,而不是對對象的屬性進行判斷。
&&,||,!。邏輯運算符與或非,對boolean值進行判斷,兩邊都true時&&結果爲真,兩邊有一個爲true時||結果爲真,!是對boolean對象的邏輯值進行顛倒。
&,|,^,~。按位操做符,對數字類型進行按位的與,或,異或和非操做,與,或,異或是對兩個對象進行操做,非是對一個對象進行操做。
<<,>>,>>>。移位操做符,就是將操做數按位進行移位,A※※B就是將A往箭頭方向移B位。若是是負數,>>在左側補1,>>>在左側補0。
=。數字賦值,或者是給一個對象起別名,或者是將另外一個別名添加到一個對象上。
+=,-=,*=,/=,&=,|=,^=,>>=,>>>=,<<=。比較相似,a※=b就是a=a※b。當>>>=byte和short時,轉化成int進行處理而後截斷,可能產生不正確的結果。
指數計數法:AeB表明了Ax10B,如1.39e-43f表明float的1.39x10-43。
?:。這是個三元運算符,如A?B:C就表示若是A的邏輯結果爲真,就執行B,不然就執行C。
直接常量,就是直接的數,如200D,0x200。其規則是若是後面跟D表示double,F表示float,L表示long,前面跟0表示8進制數,0x表示16進制數。
(A)B能夠將B強制轉化爲A類型,若是是從較小的類型轉化爲較大的類型,將不會帶來問題,但若是是從較大的類型轉化爲較小的類型,則會帶來信息丟失的問題。自定義類的轉換同理。
對於浮點數來講,強制轉化爲整形時,會捨棄小數部分,若是要獲取舍入的結果,須要使用java.lang.Math中的round()
方法。
Java是一種面向對象的語言,但其執行過程依舊時順序的,在順序執行的程序中,會進行一些選擇分支和循環操做。
Java中可使用if-else和switch進行分支選擇。
形如
if(A){ B }else{ C }
就是若是判斷條件A爲真,則執行B,不然執行C。
形如
switch(A){ case 1: B; case 2: C;break; case 3: D;break; case 4: E;break; ··· }
即若是判斷條件A爲1,則執行B而後執行C而後中斷該代碼塊,若是判斷條件爲2則執行C而後中斷該代碼塊,若是判斷條件爲3則執行D而後中斷該代碼塊,等等。
循環有3種形式:while,do-while和for。
形如
while(A){ B } 對判斷條件A進行判斷,當判斷條件爲A時,屢次執行B代碼。
形如
do{ B }while(A)
先執行一次B代碼,而後對判斷條件A進行判斷,當判斷條件A爲真時,循環至花括號頭部執行B代碼。
形如
for(int i=0,j=0;i<100;i++,j++){ B }
首先對第一個;
前面的部分執行,常見於循環控制對象進行初始化,多個對象可使用,
進行區分,而後對;
間的循環控制條件進行判斷,若是條件爲真則執行下方代碼塊,最後對;
後的第三部分執行,好比對循環對象進行自增操做等。實例中就是先對i和j進行初始化爲0,而後判斷i是否小於100,若是爲真則執行B代碼,最後執行i自增和j自增,而後判斷i是否小於100,若是爲真繼續循環,該代碼最後將執行B代碼段100次。
在編程時,循環常在數組等可迭代對象上進行。可迭代就是能夠從前到後順序走一遍。對此,Java提供了一些便利的語法方便開發。形如
容器 A; for(int i:A){ B }
就是說對於容器A,迭代遍歷一遍,i會在每次循環中引用到A中的每一個對象,而後執行B代碼塊。假如容器A中有100個對象,那B就會被執行100次。
結束該語句所在函數,返回返回值。
返回值類型由函數定義決定,若是不匹配且沒法兼容則會IDE報錯。
Java的流程控制中沒有goto語句,可是經過break和continue語句,實現了從深層循環中跳出的功能。經過在循環前標記label:
,而後使用break label
和continue label
,便可跳出循環到指定位置或者是跳出本次循環到指定位置。
label1: while(true){ label2: while(true){ continue label1;//結束本次循環,跳轉到外循環繼續循環 break label1://結束外層循環 } }
Java的基本語法,與其餘的語言有類似之處,也有不一樣之處,但編程原本就是一種實踐的技能,紙上得來終覺淺,絕知代碼要手擼,仍是實打實的寫代碼才能夠將知識轉化爲能力。以及,文章真難寫。