Java2
java的記憶體劃分
程式計數器,本地方法堆疊,虛擬機堆疊,堆,方法區(??)
| 記憶體劃分 | 作用 |
|---|---|
| 堆記憶體 | 給物件提供存放空間 |
| 虛擬機堆疊 | 給方法提供運行空間 |
| 方法區 | 存放所有類相關的資料 |
| 本地方法堆疊 | 被native修飾的方法,java給本地呼叫的方法提供空間 |
? 類的方法以及其他屬性都存在于本地方法區當中,當運行java時,堆疊就會給方法分配記憶體空間(入堆疊),運行結束后,堆疊會回收記憶體空間(出堆疊),所有參考資料型別(物件)都是存放在堆空間中,堆疊空間存放的是物件型別的記憶體地址,堆空間里物件的生命周期要比堆疊空間的資料長
實作swap交換函式
? 因為普通資料型別都存盤在堆疊空間中,所以要通過陣列,進行地址交換
public static void swap(int[] arr,int a,int b){
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
代碼運行流程(先進后出)
// 示例代碼
public static void main(String[] args){
int[] arr = new int[10];
}
- Java代碼編譯生成class檔案
- class檔案中的位元組碼資料被加載到Java記憶體的方法區中
- 堆疊記憶體的給main方法分配運行空間(入堆疊)
- 執行new向堆空間申請以快記憶體區域,用來建立一個長度為10,并且陣列型別為 int 的陣列,并賦予初值
- 陣列的記憶體地址被賦予給了堆疊區域里的參考,通過地址訪問堆內陣列
- main 方法結束,釋放堆疊空間(出堆疊)
- GC發現堆空間中陣列沒有被參考,從而釋放堆空間
陣列
陣列特點
-
陣列具有下標(index),下標從0開始
-
陣列在創建的時候,就需要定義其大小
-
陣列通常用于存放相同資料型別的資料
-
靜態初始化:在初始化陣列的同時,就給陣列完成賦值
-
動態初始化:在初始化陣列的同時,不給陣列元素賦值,多有陣列的元素使用默認值
// 靜態初始化(JVM會根據提供的陣列數量,自動定義陣列長度)
int[] arr = {5,4,3,2,1,2,3,4,2,3,2,1,3,2};
// 動態初始化
int[] arr = new int[10];
System.out.println(arr.length); // 查看陣列長度
陣列遍歷
- for回圈遍歷(基礎,不推薦)
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
-
增強 for回圈遍歷(底層使用的是 itearor 迭代器)
增強for回圈,只能用于陣列遍歷,不能用于做陣列元素的修改,
int[] arr = new int[10];
// 增強for回圈中定義的變數,代表的不是下表,而是存放陣列元素的臨時變數
for(int i:arr){
System.out.print(i+"\t");
}
合并陣列
// 合并陣列
public class Test{
public static void main(String[] args){
int[] a = {1,3,5,7,9};
int[] b = {2,3,4,5,6};
int[] target=new int[a.length + b.length];
System.arraycopy(a,0,target,0,a.length);
System.arraycopy(b,0,target,a.length,b.length);
for(int i :target){
System.out.print(i + "\t");
}
}
}
靜態方法的基本使用(太簡單了,咱就不寫了??)
靜態方法帶有static修飾符
// 引數數量不同,順序不同,型別不同,都可以實作方法多載
public class Test{
public static void play(){
System.out.println("無參靜態方法");
}
public static void play(int tmp){
System.out.println("有參靜態方法");
}
public static void main(String[] args){
play();
play(1);
}
}
// 輸出
無參靜態方法
有參靜態方法
遞回演算法(同上??)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548561.html
標籤:Java
上一篇:Java資料型別、識別符號
下一篇:Java入門3
