JAVA基礎 2021學習理解
- 前言
- 一、JVM和GC
- 1.java跨平臺運行原理
- 2 JVM理解
- 3 GC(垃圾回收器)
- 二、二進制
- 1 二進制基礎理解
- 2 二進制轉化(十進制)
- 三、資料型別和變數
- 3.1 變數
- 3.2 資料型別
- 3.2.1 資料型別介紹
- 3.2.2 資料型別轉換
- 3.2.3 轉義字符(對char補充)
- 四、運算子
- 4.1 算術運算子(自增或自減)
- 4.2 三目運算子
- 五、流程控制
- 5.1 if條件陳述句
- 5.2 switch 陳述句
- 5.3 while 回圈
- 5.4 do-while 回圈
- 5.5 for 回圈
- 六、陣列
- 6.1 陣列創建格式
- 6.2 Arrays常用方法
- 6.3 冒泡排序和二分查找
- 總結
前言
資料來源:
- 開課吧視頻學習
- 部分百度資料
- 個人學習筆記
一、JVM和GC
1.java跨平臺運行原理

java原始碼進行編譯成位元組碼(.class檔案),此檔案可以被jvm虛擬機識別轉化,然后通過在各個作業系統中的jvm虛擬機實作跨平臺運行,
舉個栗子:出國旅游,找一個既懂中文,也懂其他語言(日語、英語等)的翻譯向導,可以讓你無障礙的與他人進行交流,
這里面翻譯向導相當于jvm虛擬機,國家相當于各個作業系統,
2 JVM理解
jvm可以理解成一個可運行的java位元組碼的虛擬計算系統
jvm有一個解釋器組件,可以實作java位元組碼和計算機作業系統之間的通信,
jvm屏蔽了底層運行環境的差別,實作了一次編譯,隨處運行,
不同的平臺,有不同的jvm,
3 GC(垃圾回收器)
jvm提供了系統執行緒,用來跟蹤存盤空間的分配情況,檢查并且釋放可以被釋放的存盤空間,
GC在程式運行時自動啟用,
二、二進制
1 二進制基礎理解
二進制:逢二進一,只有0和1倆個值, // 0101 √ 2323 ×
位(Bit):表示一個二進制數碼0或1,是計算機存盤資訊的最基本單位,
位元組(Byte):一個位元組由8個位組成,表示作為一個完整處理單位的7個二進制數碼,
2 二進制轉化(十進制)
1.十進制轉成二進制主要有以下幾種:正整數轉二進制,負整數轉二進制,小數轉二進制;
a.正整數轉二進制:除二取余,倒序排列,高位補零
b.負整數轉換成二進制:整數轉二進制,取反,結果加一
c.負整數轉換成二進制:小數點以后的數乘以2,取結果的整數部分,然后用小數部分再乘以2,再取結果的整數部分(整數部分大于0的二進制轉化倒敘排列+小數部分的正序排列)
2.十進制轉成二進制主要有以下幾種:正整數轉二進制,負整數轉二進制,小數轉二進制;
a.整數二進制轉換為十進制:從低位開始按照2的0次方,2的1次方計算,所得結果相加,
b.負整數二進制轉換成十進制:取反,結果加一,整數二進制轉換為十進制,
b.小數轉換成二進制:從高位開始按照2的-1次方,2的-2次方計算,所得結果相加,
建議:前期只要了解二進制基本轉化、補碼即可,
三、資料型別和變數
八種基本型別 歸為四種不同的資料型別,
3.1 變數
變數就是系統為程式分配的一塊記憶體單元,用來存盤各種型別的資料,由于該存盤單元中的資料可以發生改變,因此得名為"變數",
變數分類:
按所屬的資料型別劃分:
- 基本資料型別變數
- 參考資料型別變數
按被宣告的位置劃分:
- 區域變數:方法或陳述句塊內部定義的變數
- 成員變數:方法外部、類的內部定義的變數
3.2 資料型別
3.2.1 資料型別介紹
| 型別 | 占用記憶體 | 值范圍(含邊界值) | 默認值 |
|---|---|---|---|
| 整數型(int) | 4 位元組 | -2 147 483 648 ~ 2 147 483 647(稍大于 20 億) | 0 |
| 短整數型(short) | 2 位元組 | -32 768 ~ 32 767 | 0 |
| 長整數型(long) | 8 位元組 | -9 223 372 036 854 775 808L ~ 9 223 372 036 854 775 807L | 0 |
| 位元組型(byte) | 1 位元組 | -128 ~ 127 | 0 |
| 浮點型(float) | 4 位元組 | -3.40292347E+38-3.40292347E+38 | 0.0f |
| 雙 精 度 型(double) | 8 位元組 | -1.79769313486231570E+308-1.79769313486231570E+308 | 0.0d |
| 布爾型(boolean) | 1 位元組 | true 或 false | false |
| 字符型(char) | 2 位元組 | ‘ \u0000 - u\ffff ’ | ‘\u0000 ’ |
3.2.2 資料型別轉換
自動型別轉換:容量小的型別自動轉換成容量大的資料型別
- byte,short,int -> float ->long ->double
- byte,short,int不會互相轉換,它們三者在計算時會轉換成 int 型別
強制型別轉換:容量大的型別轉換成容量小的資料型別時,要加上強制轉換符
long g = 100L;
int i = (int)g;
有可能造成精度降低或資料溢位,使用時要小心,
boolean 型別不能轉換成任何其它資料型別,
3.2.3 轉義字符(對char補充)
| 轉義字符 | 意義 | ASCII碼值(十進制) |
|---|---|---|
| \n | 換行,將當前位置移到下一行開頭 | 010 |
| \r | 回車 ,將當前位置移到本行開頭 | 013 |
| \t | 水平制表(HT) (跳到下一個TAB位置) | 009 |
| \ | 代表一個反斜線字符’’’ | 092 |
| ’ | 代表一個單引號(撇號) | 字符 039 |
| " | 代表一個雙引號字符 | 034 |
四、運算子
4.1 算術運算子(自增或自減)
(++): 如果是變數前綴:先對此變數加 1,再執行其他的操作,
如果是變數后綴:先執行當前陳述句的其他操作,再對此變數加 1
(- -): 如果是變數前綴:先對此變數減 1,再執行其他的操作,
如果是變數后綴:先執行當前陳述句的其他操作,再對此變數減 1
4.2 三目運算子
回傳值 = 條件運算式 ? 運算式1 : 運算式2
決議:條件運算式 為true則回傳運算式1,否則回傳運算式2
五、流程控制
5.1 if條件陳述句
if (條件陳述句) {…}
if (條件陳述句) {…} else {…}
if (條件陳述句) {…} else if (條件陳述句) {…}
if (條件陳述句) {…} else if (條件陳述句) {…} else {…}
5.2 switch 陳述句
switch(運算式){
case 取值 1: 陳述句塊 1; break;
case 取值 n: 陳述句塊 n; break;
default: 陳述句塊 n+1; break;
}
switch 陳述句有關規則
運算式的回傳值必須是下述幾種型別之一:int, byte, char, short,String;
case 子句中的取值必須是常量,且所有 case 子句中的取值應是不同的;
default 子句是可選的;
break 陳述句用來在執行完一個 case 分支后使程式跳出 switch 陳述句塊;如果 case 后面沒有寫 break 則直接往下面執行!
Case 后面的執行體可寫{ }也可以不寫{ }
5.3 while 回圈
符合條件,回圈繼續執行;否則,回圈退出
特點:先判斷,再執行
while(條件運算式){
//陳述句塊;
}
}
5.4 do-while 回圈
先執行一遍回圈操作,符合條件,回圈繼續執行;否則,回圈退出
特點:先執行,再判斷
do {
回圈操作
} while ()
while 回圈和 do-while 回圈的區別? while:先判斷條件,如果條件滿足,再執行回圈操作 do while:先執行一遍回圈操作,然后再判讀條件,如果條件滿足,繼續執行回圈操作,
5.5 for 回圈
for(初始化引數; 判斷條件 ; 更新回圈變數){
回圈體;
}
六、陣列
6.1 陣列創建格式
格式 1. 資料型別[] 陣列名稱 = new 資料型別[陣列長度];
格式 2. 資料型別[] 陣列名稱 = {陣列內容 1,陣列內容 2,陣列內容 3…陣列內容 n};
格式 3. 資料型別[] 陣列名(屬于只創建了陣列參考名, 并未在記憶體創建陣列空間);
格式 4. 資料型別[] 陣列名稱 = new 資料型別[]{內容 1,內容 2,內容 3…內容 n};
6.2 Arrays常用方法
// 陣列填充
Arrays.fill(arr, val);
// 陣列排序 數字型別按順序排 字串按開頭字母或數字順序進行排序 (還有重構方法)
Arrays.sort(arr);
// 陣列拷貝復制
Arrays.copeOf(arr, arr.length);
// 陣列轉化集合
Arrays.asList(arr);
// 陣列轉化集合
Arrays.asList(arr);
// 陣列轉流 可以使用流里面的方法
Stream stream = Arrays.stream(arr)
6.3 冒泡排序和二分查找
// 冒泡排序
// 初始化陣列
int[] nums = {1,3,9,5,6,7,15,4,8};
// 設定臨時變數 用來存盤某個節點上的最大值
int temp;
// 外層控制執行次數 第一次回圈相鄰元素最多比較nums.length - 1
for (int i = 0; i < nums.length - 1; i++) {
// 內層控制比較的次數 外層每回圈一次,就有最大值移動到末尾, 相應的末尾就不需要再進行比較 nums.length - i - 1
for (int j = 0; j < nums.length - i - 1; j++) {
if (nums[j] > nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(nums));
// 二分查找
// 設定目標元素
int target = 6;
// 設定第一次最大最小下標
int minIndex = nums[0];
int maxIndex = nums[nums.length - 1];
// 設定中間下標 3/2 = 1;4/2 = 2
int centerIndex = (minIndex + maxIndex) / 2;
while (true) {
// 下標值判斷 每次一半的劃分 進行二分邏輯查找
if (nums[centerIndex] > target) {
maxIndex = centerIndex - 1;
} else if (nums[centerIndex] < target) {
minIndex = centerIndex + 1;
} else {
centerIndex = (minIndex + maxIndex) / 2;
System.out.println("目標值下標為" + centerIndex);
break;
}
// 最小值大于最大值情況下
if (minIndex > maxIndex) {
System.out.println("此數不存在");
break;
}
// 每次回圈更新中間下標
centerIndex = (minIndex + maxIndex) / 2;
}
總結
人生無限,緩緩起航,修正改錯,在滿足完成任務的條件下,追求完善,全身而退,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273223.html
標籤:java
上一篇:JAVA初窺-DAY03
