JavaSE基礎知識分享(二)

ikestu小猪發表於2024-07-30

寫在前面

昨天給了十題程式設計題,如果你能有思路很快速地完成它,說明你的Java資料型別、運算子、選擇語句、迴圈語句部分的基礎知識很好,接下來就來看看後面的方法、陣列以及他們在JVM中的記憶體劃分知識吧!

方法

語句定義格式:

修飾符 返回值型別 方法名(引數型別 引數名,引數型別 引數名,......)
{
方法體;
return 返回值;
}

使用通俗一點的語言就是說,Java中定義一個方法需要指定修飾符、返回值型別(如果是空型別則寫void)、方法的名字以及後面使用小括號將一個引數列表括起來,最後使用一個大括號,在裡面寫上方法體和return返回值。

這裡的修飾符就像是public、static等修飾方法的符號,每種都有自己特殊的含義。返回值型別就是像int、String、int[][]等Java中的資料型別,也是後面return需要返回值的資料型別。方法名字自己可以取,但最好是見名知意,方法在命名時建議使用小寫字母組成的單詞或字串,如果有兩個及兩個以上單片語合建議使用駝峰法命名,與類名區分。引數列表指的是引數的資料型別和引數的個數,比如這樣定義(int a , int b)也就意味著這個方法裡面有兩個引數,並且這兩個引數的型別都是int型別的,傳入的引數也只能是int型別的引數,當然,引數可以沒有也可以有很多,所以說是一個列表。最後就是方法體了,這個是方法最核心的部分,也是實現功能編寫程式碼的地方,需要自行編寫,如果有返回值,前面的返回值資料型別一定要一致,沒有返回值也要在開頭的返回值型別寫void,不然會在執行時報錯。

方法中的一些注意事項:

1、修飾符,第一次學的話,預設使用public static。
2、方法和方法是平級關係,不能巢狀定義的。
3、方法不呼叫不執行。
4、方法呼叫的時候,只需要傳值就可以。
5、引數分為形式引數(方法定義小括號中的引數)和實際引數(實際呼叫時傳入的值)。
6、若一個方法沒有返回值,那麼它的返回值型別是void。
7、若一個方法沒有返回值,return可以省略不寫。
8、若方法有返回值,那麼方法內部必須要有一個return生效。

陣列

陣列的概述:陣列是一塊連續固定大小的記憶體空間

特點:

1、一旦建立,大小固定。
2、同一個陣列、元素的資料型別是一樣的。
3、具有索引下標的概念,將來可以透過索引獲取元素。
4、資料查詢快,增刪慢。

一維陣列

定義語句:資料型別[] 陣列名;

初始化:
靜態初始化
	資料型別[] 陣列名= new 資料型別[]{元素1,元素2,....};
	或 資料型別[] 陣列名= {元素1,元素2,....};

動態初始化
	資料型別[] 陣列名= new 資料型別[元素的個數];

二維陣列

定義語句:資料型別[][] 陣列名;

初始化:
靜態初始化:
	資料型別[][] 陣列名= new 資料型別[][]{{2,3,4},{2,3,4}};
	或 資料型別[][] 陣列名={{2,3,4},{2,3,4}};

動態初始化:
	資料型別[][] 陣列名= new 資料型別[二維陣列中一維陣列的個數][每個一維陣列中的元素個數];

陣列獲取長度的屬性

使用屬性length
使用的方式:陣列名.length

可能會有很多人不清楚這個二維陣列是個什麼樣的,可以看下面這個圖有助於理解:

也就是說,定義的二維陣列裡面,不一定要像矩形一樣,每個位置都有值。

陣列在JVM中的記憶體劃分

如圖所示:

下面我就來解釋一下這個圖中的意思。

我們先來看程式碼部分,首先定義並建立了兩個字元型別的一維陣列,長度固定都是5,這個時候看圖裡的棧中的main裡面會有兩個字元陣列arr1和arr2被定義,再看堆記憶體裡的兩個陣列,下標都是從0開始的,裡面都被系統進行了初始化賦值,因為是字元型別,所以都是'\u0000',這個就是系統進行賦值的預設值,就像int型別會預設賦值為0一樣。

我們再繼續看程式碼,列印了兩個陣列的地址,地址就是圖中標紅的一串16進位制編碼,它是這兩個陣列在記憶體中的具體位置。之後進行了兩種賦值,一種是動態for迴圈賦值,因為a的阿斯克碼為97,所以就直接i遞增把值賦給每個陣列的第i+1個位置就行了,第二種則是直接寫死,最後使用一個方法列印出來就有了兩個陣列的具體內容。在記憶體中就是,把對應地址的內容分別改成a到e和f到j,可以看到,在棧中的main裡,兩個陣列都是指向自己陣列對應的地址的,所以我在賦值的時候,系統就會分別找到其地址並進行相應的賦值。

最後,再說說方法。方法其實很簡單,就是列印一個一維的字元陣列,不過是以類似[a,b,c,d,e]的格式列印出來而已,也是進行了方法呼叫,不用的話需要寫兩遍這個列印,體現了使用方法的便捷。具體實現細節可以看程式碼,有不清楚的可以在下面評論!歡迎指正批評!

相關文章