【javase複習】## day2 語法 內存分析 ##

switch for while 的一些點

1、 if -else 和 三目運算符 A?B:C的區別
這裏寫圖片描述

所以不能用 5>3? System.out.println(“asd”):System.out.println(“asd”);
之類的語句







2、 switch的一些注意事項, 很慚愧,一直都記不清楚,這次打死都牢牢記住。

這裏寫圖片描述
一定要注意switch一定判斷的是變量, 而case後面判斷的一定是常量

如果是變量則不會編譯成功 參考下圖:
這裏寫圖片描述

圖中用num變量作爲case判斷的依據, 會報錯

另外注意:

case提供一個入口,如果後面的語句沒有break,則不判斷case是否滿足, 語句全部執行,直到break或者花括號結束。
這裏寫圖片描述

但是有一個例外就是 default 並不是按順序判斷的,不管default寫在哪裏,都是先判斷所有的case,如果都不滿足,才進入default入口,這個時候看default在哪裏,執行default以下的所有語句直到break或者花括號結束

這裏寫圖片描述









3、 廢話
java中不允許寫廢話, 會報錯
例如 while(false) {} 就會GG , 因爲{}內語句永遠不會執行,所以必須吧false賦給一個boolean變量, 然後用flag 就可以, 因爲編譯時候不知道while會不會執行。

類似的continue也有這個情況
這裏寫圖片描述
這裏也會報錯








4、 標號

    這學期才學的彙編, 終於在高級語言中也看到了標號應用的地方,我覺得有標號還是挺方便的。這裏記一個例子

這裏寫圖片描述








5、 return的存在與否

這裏寫圖片描述

之前也清楚return的用處,但是以爲void的函數不能有return,覺得這個return會返回一個null。






數組的內存分析

這一次的複習徹底搞清楚java中所有的東西是怎樣分配內存的,之前非常的不清楚,也許也是因爲沒有計組和操原的知識,所有的東西只能涵蓋的大致瞭解,不能深入理解其中的意思,而且有些課本上寫的是錯誤的。這裏先記一下數組的內存分析,後面會有對象的內存分析,然後靜態數據,之類的。會另開文章

受譚浩強影響。 定義數組習慣用 int a[] , 雖然在java中也可,卻不明究竟意義。

以後定義都要 int[] arr = new int[50]

逐詞分析:

這裏寫圖片描述

這樣int[]作爲一個整體, 顯然比int a[]的結構更加清晰,容易理解。

另外要注意的是內存的分配問題:
在java中,jvm管理3種內存:

1、 棧內存 2、堆內存 3、共享數據區






這裏寫圖片描述

這裏先暫時不考慮共享數據區的問題,之後複習static時再說。

對於棧和堆,必須明確:

棧內存: 存儲局部變量,一旦出了作用域,就會在內存中失效,釋放空間
堆內存: 存儲對象數據,對象一旦被用完,不會立刻從內存消失,而是等待垃圾回收期回收,才釋放內存。

所以這裏的arr 其實上存儲了是對象int[4]的地址,相當於一個指針,但是java中沒有指針這個東西,所以在函數中進行參數傳遞的時候,直接傳數組變量進去修改,真實值也會改變,因爲確實是通過地址進行存儲對象的內存中去修改值,這和c語言系列不同,需要注意。





這裏寫圖片描述

要深入理解new 出來的對象 都在堆內存, new一個,堆內存就出來一個。new多個 出來多個。
如果對變量進行賦值,則是將棧內存中的所存儲的地址進行賦值,而原對象依然存在,只是沒有變量指向他,所以再也找不到了。



這裏寫圖片描述





局部變量:定義在方法中變量

成員變量都可分爲 類變量 和 實例變量

類變量 是靜態變量
類變量 即使沒有創建對象,也會分配內存,這點之後講static再複習

這裏寫圖片描述

作用域: 即花括號所屬範圍。




二維數組相比C語言要容易一點。

這裏寫圖片描述

注意這裏一維中存儲的都是地址。

數組中最常見的問題:

1. NullPointerException 空指針異常
原因: 引用類型變量沒有指向任何對象,而訪問了對象的屬性或者是調用了對象的方法。\

2. ArrayIndexOutOfBoundsException 索引值越界。
原因:訪問了不存在的索引值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章