這算是一個我自己弄的一個查漏補缺的小東西吧。。。
目錄
使用動態初始化數組的時候,其中的元素將會自動擁有一個默認值:
前言:是java9.但是其大部分特性都差不多啊。。語法也差不多= =emmm我只是想和其他稍微區分一丟丟。哦。。我是把自己稍微覺得,還需要再看看的知識進行了整理。。算是個人筆記了。這部分存放的應該是我覺得比較簡單的java知識。
還有些東西沒有添加上去,不代表只有那些哦!有些。。。懶得寫。。+ 看視頻還沒複習到那裏。。
java程序3個步驟:
編寫源程序(.java源程序),編譯源程序(.class文件 字節碼文件),運行(JVM運行)
常量:
程序運行期間不發生改變的量。
1.字符串常量:雙引號引起來的。
2.整數常量:直接寫上的數字,沒有小數點。
3.浮點數常量:直接寫上的數字,有小數點。
4.字符常量:單引號引起來的。
5.布爾常量:只有兩種取值:true\false
6.空常量:null。沒有任何數據
注意:空常量不能直接用來打印輸出。
System.out.println(1024); // 這就是一個整數,默認是int類型
System.out.println(3.14); // 這就是一個浮點數,默認是double類型。
數據類型:
基本數據類型:整數型、浮點型、字符型、布爾型。(四類八種)
引用數據類型:字符串、數組、類、接口、lambda
注意:
1.字符串不是基本類型,而是引用類型。
2.浮點型可能只是一個近似值,並非精確的值。
3.數據範圍和字節數不一定相關,例如float數據範圍比long更加廣泛,但是float是4字節,long是8字節。
4.浮點數當中默認類型是double。如果一定要使用float類型,需要加上一個後綴F(f)。
如果是整數,默認爲int類型,如果一定要使用long類型,需要加上一個後綴L(l)。推薦使用大寫字母后綴。
long num6 = 3000000000; //這樣沒加後綴的是會被報錯的。
long num6 = 3000000000L;//這樣的纔是對的。
int 最高只能表示21個億
變量:
程序運行期間,內容可以發生改變的量。
1.數據類型 變量名稱; //創建了一個變量
變量名稱=數據值; //賦值。
2.數據類型 變量名稱=數據值; //再創建一個變量的同時,立刻放入指定的數據值。
注意事項:使用變量時
1.如果創建多個變量,那麼變量之間的名稱不可重複。
2.對於float和long類型來說,字母后綴F和L不要丟掉,
3.如果使用byte或者short類型的變量,那麼右側的數據值不能超過左側類型的的範圍。
4.沒有賦值的變量,不能直接使用;一定要複製之後,才能使用。
5.變量使用不能超過作用於的範圍。
6.可以通過一個語句來創建多個變量,但一般情況不推薦。
數據類型轉換:
1.當數據類型不一樣時,將會發生數據類型轉換。
自動類型轉換(隱式)
1.特點:代碼不需要進行特殊處理,自動完成
2.規則:數據範圍從小到大
注意事項:
1.float num=30L;
左邊float類型,右邊long類型。long--->float,範圍是float更大一些,所以符合從小到大規則。
強制類型類型轉換:
1.特點:代碼需要進行特殊的格式處理,不能自動完成。
2.格式:範圍小的類型 範圍小的變量名=(範圍小的類型)原本範圍大的數據
注意事項:
1.強制類型轉換一般不推薦使用,因爲有可能發生精度損失、數據溢出。
2.byte/short/char 這三種類型都可以發生數學運算,例如加法“+”
3.byte/short/char 這三種類型在運算的時候,首先都會被提升成int類型,然後計算。
4.右側數值大小不能超過左側的類型範圍。
5.boolean類型不能發生數據類型轉換。
編譯器優化注意事項:
1. 如果沒有超過左側範圍,編譯器補上強轉。
對於byte/short/char三種類型來說,如果右側賦值的數值沒有超過範圍
那麼javac編譯器將會自動隱含地爲我們補上一個(byte)(short)(char)
byte num1=30; //左側是byte,右側是int,但是自動補上了強轉。
2.如果右側超過了左側範圍,那麼編譯器報錯。
3.在給變量進行賦值的時候,如果右側的表達式中全是常量,沒有任何變量,那麼編譯器javac將會直接將若干個常量表達式計算得到結果。
右側的常量結果數值,沒有超過左側範圍,所以正確。
這稱爲“編譯器的常量優化”
但是注意:一旦表達式當中有變量參與,那麼就不能進行這種優化了。
4.short a=5;
short b=8;
//short + short --> int + int -->int
short result = a+b; //錯誤寫法!左側需要的是int類型。
數字和字符的對照關係表(編碼表)
ASCLL碼值:
48 0
65 A
97 a
運算符等等的:
運算符:進行特定操作的符號。
表達式:用運算符連起來的式子叫做表達式。
四則運算:+-*/
取模運算:只有對於整數的除法來說,取模運算符纔有餘數的意義。
注意事項:
1.一旦運算當中有不同類型的數據,那麼結果將會是數據類型範圍大的那種。
四則運算中的+號
1.對於數值來說,就是加法
2.對於字符類型char,在計算之前,char會被提升稱爲int,然後在計算
3.對於字符串String來說,加號代表字符串連接操作。
任何數據類型和字符串進行連接的時候,結果都會變成字符串。
String str="java";
System.out.println(str + 20 +30); //顯示java2030
自增自減運算符:只有變量纔可使用,常量不行。
複合賦值運算符:
+= a=a+b;
-= a=a-b;
*= a=a*b;
/= a=a/b;
%= a=a%b
注意事項:
1.只有變量才能使用賦值運算符,常量不能進行復制。
2.複合賦值運算符其中隱含了一個強制類型轉換。
定義一個方法的格式:
public static void 方法名稱(){ 方法體 }
方法名稱的命名規則和變量一樣,使用小駝峯式。
方法體:也就是一個大括號當中可以包含任意條語句。
注意事項:
1.方法定義的先後順序無所謂。
2.方法的定義不能產生嵌套包含關係。
3.方法定義好了之後,不會執行的。如果想要執行,一定要進行方法的調用。
如何調用方法,格式:
方法名稱();
java9裏面的新特性,jshell
它是一個輕量級的小工具,用於操作簡單的東西,不值得去保存的。
退出它 /exit
switch語句使用的注意事項:
1.多個case後面的數值不可以重複
2.switch後面小括號當中只能是下列數據類型:
基本數據類型:byte/short/char/int
引用數據類型:String字符串、enum枚舉
3.switch語句格式可以很靈活:前後順序可以顛倒,而且break語句還可以省略。
“匹配哪一個case就從哪一個位置向下執行,直到遇到了break或者整體結束爲止。”
方法:
若干語句的功能及和。
方法名稱:方法的名字,規則和變量一樣,小駝峯。
參數:進入方法的數據
返回值:從方法中出來的數據。
定義方法的完整格式:
修飾符 返回值類型 方法名稱(參數類型 參數名稱,。。。){
方法體
return 返回值;
}
return :兩個作用,第一停止當前方法,第二將後面的返回值還給調用處。
return後面的返回值需要與方法的返回值類型保持一致。
方法的三種調用:
1.單獨調用:方法名稱(參數);
2.打印調用
3.賦值調用
注意:返回值類型爲void,這種方法只能夠單獨調用,不能進行打印調用或者賦值調用。
使用方法時的注意事項:
1.方法應該定義在類當中,但是不能再方法當中在定義方法。不能嵌套。
2.方法定義的前後順序無所謂。
3.方法定義之後不會執行,如果希望執行,一定要調用:單獨調用、打印調用、賦值調用。
4.如果方法有返回值,那麼必須協商“return 返回值”,不能沒有。
5.return後面的返回值數據,必須和方法的返回值類型,對應起來。
6.對於一個void沒有返回值的方法,不能寫return後面的返回值,只能寫return自己。
7.對於void方法當中最後一行的return可以省略不寫。
8.一個方法當中可以有多個return語句,但是必須保證同時只有一個會被執行到。
方法的重載:
多個方法的名稱一樣,但是參數列表不一樣。
好處,只需要記住唯一一個方法名稱,就可以實現類似的多個功能。
方法的重載與下列因素相關:
1.參數個數不同
2.參數類型不同。
3.參數的多類型順序不同。
方法重載與下列因素無關:
1.與參數的名稱無關
2.與方法的返回值類型無關。
3.與修飾符無關
//在調用輸出語句的時候,println方法其實就是進行了多種數據類型的重載形式
數組:
是一種容器,可以同屬存放多個數據值。
特點:
1.是一種引用數據類型。
2.其中的多個數據,類型必須統一。
3.數組長度在程序運行期間不可改變。
數組的初始化:
1.動態初始化(指定長度)
數據類型[] 數組名稱=new 數據類型[數組長度];
2.靜態初始化(指定內容)
注意事項:
雖然靜態初始化沒有直接告訴長度,但是根據大括號裏面的元素具體內容,也可以推算出長度。
直接打印數組名稱,得到的是數組對應的:內存地址哈希值。
使用動態初始化數組的時候,其中的元素將會自動擁有一個默認值:
規則如下:
如果是整數類型,那麼默認爲0;
浮點類型,默認0.0
字符類型,默認'\u0000'
布爾類型,false
引用類型,null
java內存需要劃分成5個部分:
1.棧:
存放方法中的局部變量。方法的運行一定要在棧中運行。
局部變量:方法的參數,或者是方法{}內部的變量
作用域,一旦超出作用域,立刻從棧內存當中消失。
2.堆
凡是new出來的東西,都在堆當中。
堆內存裏面的東西都有一個地址值:16禁止。
堆內存裏面的數據,都有默認值。規則:
整數類型,默認爲0;
浮點類型,默認0.0
字符類型,默認'\u0000'
布爾類型,false
引用類型,null
3.方法區:
存儲.class相關信息,包含方法的信息。
4.本地方法棧。與操作系統相關。
5.寄存器:與cpu相關。
一個數組的內存圖:
(嗷,我這個截圖的視頻的!)
兩個數組的內存圖:
兩個引用指向同一個數組:
copy的視頻截圖
類與對象的關係:
1.類是對一類事物的描述,是抽象的。
2.對象是一類事物的實例,是具體的。
3.類是對象的模板,對象是類的實體。
局部變量和成員變量
1.定義的位置不一樣【重點】
局部變量:在方法的內部。
成員變量:在方法的外部,直接寫在類當中。
2.作用範圍不一樣【重點】
局部變量:只有方法當中纔可以使用,出了方法就不能再用了。
成員變量:整個類全都可以通用。
3.默認值不一樣【重點】
局部變量:沒有默認值,如果想要使用,必須手動進行賦值。
成員變量:如果沒有賦值,會有默認值,規則和數組一樣
4.內存的位置不一樣
局部變量:位於棧內存。
成員變量:位於堆內存。
5.生命週期不一樣
局部變量:隨着方法進棧而誕生,隨着方法出棧而消失。
成員變量:隨着對象創建二誕生,隨着對象被垃圾回收而消失。
面向對象三大特徵:封裝、繼承、多態。
封裝性在Java當中的體現:
1.方法就是一種封裝
2.關鍵字private也是一種封裝。
封裝就是將一些細節信息隱藏起來,對於外界不可見。
this關鍵字的作用:
當方法的局部變量和類的成員變量重名的時候,根據“就近原則”,有限使用局部變量。
如果需要訪問本類當中的成員變量,需要使用格式:this.成員變量名
“通過誰調用的方法,誰就是this”
private 關鍵字的作用及其使用:
1.一旦使用了private進行修飾,那麼本類當中仍然可以隨意訪問,但是超出了本類範圍之外,就不能再直接訪問了。
2.間接訪問private成員變量,就是定義一對兒getter/setter方法。
3.必須叫setXxx或者時getXxx命名規則。
對於Getter來說,不能有參數,返回值類型和成員變量對應。
對於Setter來說,不能有返回值,參數類型和成員變量對應。
構造方法:
構造方法是專門用來創建對象的方法,當我們通過關鍵字new來創建對象時,就是在調用構造方法。
格式:
public 類名稱(參數類型 參數名稱){
方法體
}
注意事項:
1.構造方法的名稱必須和所在的類名完全一樣,就連大小寫也要一樣。
2.構造方法不要寫返回值類型,連void都不寫。
3.構造方法不能return一個具體的返回值
4.如果沒有編寫任何構造方法,那麼編譯器將會默認贈送一個沒有參數的構造方法,其方法體什麼事情都不做。
5.一旦編寫了至少一個構造方法,那麼編譯器將不再贈送。
6.構造方法也是可以進行重載的。
重載:方法名稱相同,參數列表不同。
一個標準的類通常要擁有下面四部分組成部分:
這樣標準的類也叫做Java Bean
1.所有的成員變量都要使用private關鍵字修飾
2.爲每一個成員變量編寫一對getter/setter方法
3.編寫一個無參數的構造方法
4.編寫一個全參數的構造方法
//快速生成get/set: alt+insert 【getter/setter】
//快速生成構造方法: alt+insert 【Constructor】
//如果不是快速生成就是【code】-【generate】//ideaij快捷鍵。都是