由於之前沒有計算機專業的基礎,剛開始學習JAVA時,我感覺到很吃力,感覺JAVA語言的世界離我很遠。但是我懂得“萬事開頭難”這個道理,我還是堅持了一段時間自學視頻!然後我到傳智播客開始了預熱班,我才真正進入了JAVA的世界!
第一節 基本概念概述
一、關鍵字:
被java賦予了特殊含義的單詞。總結如下:
1、類型定義符關鍵字:
整數類型:byte,short,int,long 浮點類型:float、double
字符類型:char 布爾類型:boolean
2、循環判斷修飾符關鍵字:
表判斷:if、else、else if;switch、case;
表循環:for,while、do while;
表繼續:continue;表結束:break;
3、訪問權限修飾符關鍵字:
私有的:private;受保護的:protected;公有的:public。
修飾符間的比較見後面文章的總結。
4、類、函數、變量修飾符關鍵字:
抽象的:abstract;最終的:final;靜態的:static;同步的:synchronized;枚舉類:enum。
5、類與類間關係的關鍵字
繼承的:extends;實現的:implements。
6、實例的建立、引用及判斷的關鍵字:
創建:new;當前引用:this;父類引用:super;判斷所屬:instanceof。
7、異常處理的關鍵字:
嘗試(檢查異常):try; 捕獲(異常):捕獲異常; 最終(一定執行):finally;
拋出(異常對象):throw; 拋出(異常):throws。
包:package;導入(包)import。
9、其他修飾符關鍵字(現在不做重點說明,以及java保留關鍵字不再闡述):
native:定義本地方法;
strictfp:即strict float point,精確浮點;
transient:變量修飾符,用它聲明一個實例變量,當對象存儲時,它的值不需要維持。
volatile:類型修飾符,用來修飾被不同線程訪問和修改的變量。
assert:斷言,作爲異常處理的一種高級形式,在測試代碼運行時使用。
二、標識符:
1、定義:程序中自定義的一些名稱。如類名
2、命名規則:
a.由26個英文字符大小寫,數字0-9,符號中的_和$,組成。
b.數字不可以開頭,不可以使用關鍵字
c.嚴格區分大小寫,起名爲了提高閱讀性,儘量使用有意義的名字
3、名稱規範:
a.包名:多單詞組成是全部爲小寫字母。如:packageperson
b.類名和接口名:首個單詞大寫,多個單詞組成時,後面的每個單詞首字母大寫。如:StringDemo
c.變量名和函數名: 首個單詞小寫,多個單詞組成時,後面的每個單詞首字母大寫。如:functionTest
d.常量名:所有字母都大寫。多個單詞組成時,用下劃線(“_”)連接。如MAX_VALUE
三、變量:
1、概述:將不確定的數據進行存儲,會在內存中開闢一塊空間,存放在棧內存中。每一個變量都隸屬於一種類型。它代表着一個值,便於在語句中靈活使用,且比具體值更有意義。
2、聲明變量:a.數據類型 變量名; b.數據類型 變量名 = 初始化值;
3、變量初始化:對於上面的a,系統默認初始化值,也稱隱式初始化。對於b,是顯式初始化值。
默認初始化值:
數值類型:byte、short、int :0 ; long:0L; float:0.0f; double:0.0d
字符類型:char:''(空字符,打印時無顯示)
布爾類型:boolean:false
引用型默認初始化值爲null。
4、常量:
在java中,使用final聲明常量,變量名要全部大寫。。如:
public static final double PI = 3.1415926;
需要注意的是:
a.聲明變量並賦初值後,這個值就不能再更改了。
b.類常量的聲明位於main方法的外部,或無main函數的類的全局中的位置。這樣,可以在同一個類中的其他地方使用這個常量。
c.上面默認初始化的那些值皆爲常量值。
第二節 數據類型
java中的數據類型分爲基本數據類型和引用數據類型(後面會具體體現,這裏主要講基本數據類型)。他們的共性之處在於,都是存在於棧內存中的。但是基本數據類型和引用數據類型在內存中的本質是有區別的,基本數據類型本身的值就是在棧內存中的,無需引用任何數據,自己管自己的。但是引用數據類型則不一樣,它在棧內存中也有值,只不過這值是地址值,拿的別人的東西。下面我就簡單總結一下關於基本數據類型。
先來個黑馬面試的題目:
然後我們來說一下有哪些數據類型?
好的,這個表格已經完全展示了數據類型的結構了!下面我們就根據這個表格來一步一步學習數據類型:
一、基本數據類型:
上面程序中提到的int、float、double等是數據類型中的幾種。這些都屬於基本數據類型。對於基本數據類型,上面也說到了,是自己的值存放在棧內存中。對於基本數據類型,主要有八種,分別爲:
1、整數類型:
byte: 字節型 -------> 1字節,取值範圍:(-2E7 ~ 2E7 - 1)-128 ~ 127
short:短整型 -------> 2字節,取值範圍:(-2E15 ~ 2E15 - 1)-32768 ~ 32767
int: 整型 -------> 4字節,取值範圍:(-2E31 ~ 2E31 - 1)-2147483648 ~ 214748367 ---超過20億
long: 長整型 -------> 8字節,取值範圍:(-2E61 ~ 2E61 - 1)-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
2、浮點型:
float: 單精度浮點型 -------> 4字節,取值範圍:大約± 3.402 823 47E + 38F(有效位6 ~ 7位)
double:雙精度浮點型 -------> 8字節,取值範圍:大約± 1.797 693 134 862 315 70E + 308(有效位15位)
3、字符型:
char:字符型 ------->用於表示單個字符。如‘A’。
4、布爾型:
boolean:布爾型 ------->表示邏輯判斷條件,有兩個值爲true和false。
二、基本數據類型說明:
1、int類型:在整數類型中,對數據進行賦值的時候,默認是int類型的,就是說,可以直接使用任何整型數據,基本上是作爲int使用的。大數值單說。
2、double類型:在浮點型類型中,和int相似,默認的是double類型的。
3、char類型:每一個字符都對應一個ASCll碼,如'A'對應着65,'a'對應着97。
4、對於基本數據類型,在進行參數傳遞時,是進行的值傳遞。
5、基本數據類型的初始化:
整型默認初始化爲: 0 字符型默認初始化爲:null
浮點型默認初始化爲: 0.0(f) 布爾型默認初始化爲:false
三、關於基本類型轉化與提升問題
1、自動類型轉換:
也成爲隱式類型轉化。當一個“小”(指範圍小)數據與“大”數據進行運算時,java默認會向“大”數據方向轉換,然後再運算,如上面的程序中的運算,就是講i = 5轉爲i = 5.0在和f進行運算,然後再提升爲double類型。
注:
a.所有byte、short、char類型的值將提升爲int類型。
b.自動類型轉換關係:byte -->short(char) -->int -->long -->float -->double
2、強制類型轉換:
和自動轉換類型相反,格式:int i = (int)6.53;,就是將“大”數據強轉爲“小”數據。
注:
a.會損失精度,如6.53轉完後爲6,會將小數點後的值去除,只保留整數位。
b.強制類型轉換關係:double -->float -->long -->int -->short(char) -->byte
c.對於int m = (int)'a';//結果爲97,因爲a在ASCll碼中的值爲97。
第三節 運算符
一、概述:
數據的存儲不僅僅只爲了存,更多的是運算,那麼該如何對這些數據進行運算呢?先說一說基本的運算符及運算。
二、運算符:
1、算數運算符
正號:+ 負號:-
加法:+ 減法:- 乘法:* 除法:/ 取模:%
自增:++,即自加1,可至於前或後;如:++a(a先自增,然後再和a相加),a++(先和a相加,a再自增)
自減:- -,即自減1, 可至於前或後;如:- -a(a先自減,然後再和a相減),a- -(先和a相減,a再自減)
字符串相連:+
2、賦值運算符:=、+=、-=、*=、/=、%=等
如:s += 5,就是將s的值和5相加再賦值給s。但是這種運算和s = s + 5;是有區別的。
s += 5有自我提升的功能,而 s = s + 5;可能就會編譯失敗。比如,s爲short型的值,對於後者那麼編譯時就會報錯:可能損失精度。對於前者,會將5強轉爲short型,在與s的值相加,然後再賦值給s。
3、比較運算符:==、!=、< 、> 、<= 、>= 、instanceof
結果均爲boolean型,即所得的值爲true或者false
如:5 == 3爲false;5 != 3爲true
4、邏輯運算符:&、|、^、!、&&、||
與: &; 如:true & false 爲false;
或:|; 如:true | false爲true;
非: !; 如: ! true 爲false
異或: ^; 如:true ^ false 爲true(真異或真爲假)
短路:&&:只要有一邊爲false,結果則爲false
||:只要有一邊爲true,結果則爲true
5、位運算:<< 、>> 、>>> 、 &、|、^ 、~;在二進制水平上運算
左移:<<;3 << 2 = 12 ---->3*2*2=12
右移:>>;3 >> 1 = 1 ---->3/2 =1
無符號右移:>>>; 3 >>> 1 = 1 ---->3/2 =1
與: &;6 & 3 = 2
或:|;6 | 3 = 7
異或: ^;6 ^ 3 = 5。一個數以後兩次相同點數,那麼結果還爲本身。在加密和解密中有應用。
~:反碼:~ 6 = -7,其實就是對當前數的二進制的取反。
注:
a.對於>>,最高位補什麼由原有數據的最高位值而定,若最高位爲0,右移後,用0補空位。如果最高位爲1,右移後,用1補空位。
b.對於>>>,無論最高位是0還是1,右移後,都用0補空位。
三、進制操作(瞭解不做重點總結)
1、概述:java中有四種進制形式:二進制,八進制,十進制,十六進制。
整數的表現形式:
二進制: 0和1,逢2進1.如110(表示六)
八進制: 0 - 7,逢8進1;以0開頭表示。如015(表示十三)
十進制: 0 - 9,逢10進1。如12(表示十二)
十六進制:0 - 9、A - F,逢16進1;以0x開頭表示。如0x3c(表示60)
2、進制特點:
a.二進制:始於電信號。任何計算機底層都是用二進制表示的。
b.八進制:將二進制的三位表示一位,即爲八進制,最大值爲7(2^3-1)。
c.十六進制:將二進制的四位表示一位,即爲十六進制,最大值爲15(2^4-1)。
d.進制數越大,位數越短。
3、進制間轉化:
1)十進制轉二進制:取2的餘數運算
例:求6的二進制:6/2商3---餘0,3/2商1---餘1,1/2---餘1;最終餘1或除盡餘0,則將每次除得的餘數倒敘排列爲110,即十進制的6轉爲二進制是110.
2)二進制轉十進制:取2的冪運算
例:求110的十進制:0*2^0 +1*2^1 +1*2^2 = 6,其中012...代表各位數。
3)二進制轉八進制:從右向左取二進制三位爲一位,不足補0,算出每三位的十進制值(不會超過7)
例:求10011011的八進制:八位補一位爲010,011,011;計算010 = 2, 011 = 3, 011 =3;則八進制爲233
4)二進制轉十六進制:從右向左取二進制四位爲一位,不足補0,算出每四位的十進制值(不會超過15,過了9,記爲A/B/C/D/E/F)
例:求10011011的十六進制:補位爲0000,0000,1001,1011,計算0000 = 0, 0000 = 0,1001 = 9, 1011 = B(11),則十六進制爲9B
4)八進制、十六進制轉二進制:先轉爲十進制,再轉爲二進制。
5)二進制的負數形式:取反後再求其補碼
例:求-6的二進制:
0000-0000 0000-0000 0000-0000 0000-0110
^ 1111-1111 1111-1111 1111-1111 1111-1111
--------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1001
+ 0000-0000 0000-0000 0000-0000 0000-0001
--------------------------------------------------------------------
1111-1111 1111-1111 1111-1111 1111-1010
則-6的二進制爲:1111-1111 1111-1111 1111-1111 1111-1010。
說明:二進制的負數形式的最高位皆爲1.
四、三元運算符:
格式:布爾型表達式 ? 表達式1 : 表達式2
說明:當布爾型表達式的值爲true時,則計算表達式1;否則計算表達式2。
如:返回兩個數中較小的值----> x < y ? x : y。
注意:
a.這個是有返回值的,需要由變量接收這個返回值,如:int a = x < y ? x : y;
b.表達式1和表達式2必須都返回相同類型,或是相同類型的數據。
五、運算符優先級:
運算符間有不同的優先級。就是誰先運算的問題。具體如下:從左向右運算的:
運算級別由高到低
1級----- 方法調用:[ ] . ()
2級----- 一元運算符:! 、~ 、++、-- 、+、-;強制類型轉換:( );創建:new
3級----- 二元運算符:*和 / 優於 + 和 -
4級----- 位運算:<<、>> 、>>>
5級----- 比較運算符:< 、> 、<= 、>= 、instanceof 優於 ==、!=、
6級----- 邏輯運算符:&、|、^、!、&&、||
7級----- 三元運算符:? :
8級----- 算數運算符等: =、+=、-=、*=、/=、%=、&=、|=、 ^=、 <<=、>>= 、>>>=
上面除了第2、7和8級的是從右向左運算,其他的都是從左向右進行的運算。
六、轉義字符:
1、概述:通過 \ 來轉變後面字母或符號的含義。如:\n表示換行。
2、常用轉義字符:
\b:退格 \n:換行
\t:製表符,相當於tab鍵 \r:回車
\\:表示反斜槓 \':表示單引號 \":表示雙引號