Java開發環境
- JVM(Java Virtual Machine)
- 在需要運行Java應用程式的作業系統上,安裝一個與作業系統對應的JVM
- JRE(Java Runtime Environment)
- 是Java程式運行時的環境,包含JVM和運行時需要的核心類別庫
- JDK(Java Development Kit)
- Java程式開發工具包,包含JRE和開發人員使用的編譯器工具
- 開發工具:編譯工具(javac.exe)和運行工具(java.exe)
- 想要開發一個全新的Java程式,必須安裝使用JDK
- 關系圖:

Java運行的記憶體分配
| 各部分名稱 | 作用 |
|---|---|
| 堆疊(Stack) | 存盤方法中的區域變數(方法的引數或方法體內部的變數);方法的運行程序一定在堆疊中;一旦超出作用域,立刻從堆疊記憶體中消失 |
| 堆(Heap) | 凡是new關鍵字創建的新物件,都存在于堆中;堆記憶體中每個物件都有一個地址值(16進制);堆記憶體中的資料,都有默認值(如整數默認值為0等) |
| 方法區(Method Area) | 存盤.class相關的資料,包含方法的資訊; |
| 本地方法堆疊(Native Method Stack) | 與作業系統相關; |
| 暫存器(pc Register) | 與CPU相關; |
Hello,World!
package 基礎;
// 單行注釋
/*多行注釋
* public class 均為關鍵字,其后為定義的類名,其必須保持與該檔案名完全一致,
* 類是Java當中所有源代碼的基本組織單位,
* public static void 為固定寫法,意為程式入口main方法,
* System.out.println 表示列印到控制臺,
* */
public class Demo01_HelloWorld { // 單行注釋
public static void main(String[] args) {
System.out.println("Hello,world!");
}
}
識別符號
package 基礎;
public class Demo02_識別符號 {
/*識別符號的命名規則
* 1. 可以使用英文字母(區分大小寫),0-9數字,$(美元符號),_(下劃線)
* 2. 不能以數字開頭
* 3. 識別符號不能是關鍵字
*
* 命名規范
* 1. 類名: 大駝峰 (HelloWorldClass)
* 2. 變數名: 小駝峰 (helloWorld)
* 3. 方法名: 同變數名
* */
}
常量
package 基礎;
public class Demo03_常量 {
/*常量的分類
* 1. 字串常量:雙引號參考的部分,如:"abc", "字串"
* 2. 整數常量: 沒有引號的整數,如: 100,200, -250
* 3. 浮點數常量: 沒有引號的小數, 如: 2.5, 3.14, 2.56
* 4. 字符常量: 單引號參考的單個字符,如:'A', 'b', '字'
* 5. 布爾常量: 僅兩種: true false
* 6. 空常量: 表示沒有任何資料: null
* */
public static void main(String[] args) {
// 字串常量:
System.out.println("abc");
System.out.println("");
// 整數常量:
System.out.println(30);
System.out.println(-5);
// 浮點數常量:
System.out.println(3.15);
System.out.println(-2.5);
// 字符常量:
System.out.println('A');
// System.out.println(''); 報錯,有且必須有一個字符,
// System.out.println('AC'); 報錯
// 布爾常量:
System.out.println(true);
System.out.println(false);
// 空常量:
// System.out.println(null); 報錯,空常量不能直接列印輸出,
}
}
資料型別
package 基礎;
public class Demo04_資料型別 {
/*資料型別分類: 基本資料型別、參考資料型別
* 基本資料型別:
* 1.整數型:byte short int(默認) long
* 占用位元組數 1 2 4 8
* 2.浮點型: float double(默認)
* 4 8
* 3.字符型: char
* 2
* 4.布爾型: boolean
* 1
*
*
* 參考資料型別:
* 1.字串
* 2.陣列
* 3.類
* 4.介面
* 5.Lambda
* ......
*
*
* 注意:
* 1. 字串是參考資料型別,
* 2. 浮點型可能只是一個近似值,并非精確的值,
* 3. 資料范圍和所占位元組數不一定相關:float(4位元組)資料范圍比long(8位元組)范圍更大,
* 4. 浮點數當中默認的型別是double,如果需要使用float型別,需要加上后綴F,
* 如果是整數,默認是int,需要使用long型別,需要加上后綴L,
* */
}
變數
package 基礎;
public class Demo05_變數 {
/*變數:程式運行期間,可以發生改變的量,
*
* 創建一個變數的格式:
* 1.資料型別 變數名稱; // 創建了一個變數
* 變數名稱 = 資料值; // 賦值,將右邊的資料值,賦值交給左邊的變數
* 2.資料型別 變數名稱 = 資料值; // 創建變數并賦值
*
* 使用變數時的注意事項:
* 1.如果創建多個變數,那么變數之間的名稱不可以重復,
* 2.對于float和long型別來說,字母后綴F和L不要省略,
* 3.如果使用byte或short型別的變數,右側的資料值不能超過左側型別的范圍,
* 4.沒有進行賦值的變數,不能直接使用,一定要賦值之后,才能使用,
* 5.變數使用不能超過作用域的范圍,
* 【作用域】: 從定義變數的開始,直到所屬的代碼塊結束,即大括號結束位置,
* 6.可以通過一個陳述句,創建多個變數,但不建議,
* */
public static void main(String[] args) {
int num1;
num1 = 10;
System.out.println(num1);
int num2 = 20;
System.out.println(num2);
// 修改num1的值
num1 = 30;
System.out.println(num1);
byte by1 = 30;
System.out.println(by1);
// byte by2 = 400; byte的范圍: -128 ~ 127
// 注意:右側數值的范圍不能超過左側資料型別的取值范圍,
short sh1 = 50;
long lo1 = 50;
float fl1 = 2.5F;
double do1 = 1.2;
char ch1 = 'A';
boolean bool1 = true;
// int a = 10;
// int b = 20;
// int c = 30;
int a, b, c;
a = 10;
b = 20;
c = 30;
int x = 100, y = 200, z = 300;
}
}
資料型別轉換
package 基礎;
public class Demo06_資料型別轉換 {
/*
*當資料型別不同時,會發生資料型別轉換,分為兩種:
* 自動型別轉換:
* 1. 特點: 代碼不需要進行特殊處理,自動完成轉換,
* 2. 規則: 資料范圍從小到大,
*
* 強制型別轉換:
* 1. 特點: 代碼需要進行特殊的格式處理,不能自動完成轉換,
* 2. 格式: 范圍小的型別 范圍小的變數名 = (范圍小的型別)范圍大的資料;
* 如: int num = (int)100L;
* 注意事項:
* 1. 強制型別轉換不推薦使用,因為可能發生精度損失或資料溢位,
* 2. byte/short/char 這三種型別都可以發生數學運算,如:+
* 3. byte/short/char 在發生數學運算時,**都會首先被提升為int型別**,再參與計算,
* 4. boolean型別不能發生資料型別轉換,
* */
public static void main(String[] args) {
System.out.println(1024); // 整數,默認為int
System.out.println(3.14); // 浮點數,默認double
long num1 = 100L;
long num2 = 100;
System.out.println(num1); // 100
System.out.println(num2); // 100
//如上,加不加L都會輸出100,其中發生了資料型別轉換,
/*
左邊為long型別,右邊默認為int型別,等號賦值,將右側的int常量賦值給了左側的
變數long型別進行存盤,由于 int --> long 符合了資料范圍由小到大的要求,自動型別轉換,
*/
double dou1 = 2.5F;
System.out.println(dou1);
// float --> double 符合由小到大,發生自動型別轉換,
float fl1 = 3L;
// long --> float 符合由小到大,發生自動型別轉換,
// 強制型別轉換:
// int number1 = 100L;
// 直接報錯;long --> int 不是由小到大的范圍關系,
// 不能發生自動型別轉換,需要強制型別轉換:
int number1 = (int)100L;
System.out.println(number1);
// long 強制轉換為 int型別,發生資料溢位,
int number2 = (int)6000000000L;
System.out.println(number2); // 1705032704
// double 強制轉換為 int,發生資料精度缺失,
int number3= (int)3.99;
System.out.println(number3); // 3
// A字符被當做65進行處理,
char cha1 = 'A';
System.out.println(cha1 + 1); // 66
// 計算機底層會用一個數字(二進制)來代表字符'A',即65
// 一旦char型別的資料進行了數學運算,則會按一定的規則翻譯為數字,
/*注意事項:
* 1. 對于byte/short/char三種型別來說,如果右側賦值的數值沒有超過左側資料型別范圍,javac編譯器會自動
* 隱含的進行強制型別轉化:(byte),(short),(char)
* 2. 給變數進行賦值的時候,如果右側的運算式中全部都是常量,沒有任何變數時,
* 編譯器javac會直接將若干個常量進行計算得到結果后,賦值給左側變數,如下例:
* short result2 = 5 + 8; 等價于: short results2 = 13;
* 此程序成為“編譯器的常量優化“
* 但是一旦有變數參與,不在進行常量優化,
* */
byte byteNum1 = /*(byte)*/30; // 等價于 byte byteNum1 = (byte)30;
System.out.println(byteNum1);
short s1 = 5;
short s2 = 8;
// short result1 = s1 + s2; //報錯,左側需要是int資料型別
short result2 = 5 + 8;
System.out.println(result2);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353346.html
標籤:其他
