一、java基礎補充
1.java執行流程
- 原始檔由編譯器編譯成位元組碼(ByteCode),也就是.class檔案
- 位元組碼由java虛擬機器解釋執行
通過命令列操作java程式:
javac test.java
java test
使用萬用字元編譯:
javac test*.java
帶有test字首的原始檔都會被編譯
2.八大基本型別
2.1儲存特性
-
整型
型別 儲存 int 4位元組 short 2位元組 long 8位元組 byte 1位元組 長整型會有l或L為字尾,如5000000L
十六進位制字首0x或0X
二進位制字首0b或0B
-
浮點型別
型別 儲存 float 4位元組 double 8位元組 float字尾f或F,沒有後綴預設為double
-
三個特殊浮點數
Double.POSITIVE_INFINITY:正無窮
Double.NEGATIVE_INFINITY:負無窮
Double.NaN:非數值
不能通過==判等,只能通過靜態方法Double.isNaN()
-
-
char型別
表示單個字元,可表示為十六進位制值
-
boolean型別
只有兩個值:true,false
不能與整型相互轉換
2.2型別轉換
小型別轉換為大型別,整型轉浮點
例如二元運算時,有double型別優先轉換double,否則轉換float,再否則...
3.變數
從java 10開始,出現了var關鍵字,可通過變數值自動識別變數型別
注意:只能是方法中的區域性變數
var a=12; //a is an int
var str="hhhh"; //str is a String
3.1常量
使用final
關鍵字
final
:不允許賦值之後再修改
static final
:可以在多個地方直接引用
3.2列舉型別
定義一個集合
enum Size{big,small}; //定義列舉型別Size
Size s=Size.big; //為列舉變數賦值
列舉型別只能賦集合中的值或者null
3.3運算子
-
三元運算子
x<y?x:y //若x<y,取x,否則取y
-
位運算
與:& 或:| 非:~ 異或:^ 左移:<< 右移,高位補符號位:>> 高位補0右移:>>>
位運算,顧名思義就是把數值轉換為二進位制按位進行操作
4.字串
4.1字串
String str0="Hello";
String str1=str0.substring(0,3);//str1="Hel"
4.2拼接
通過+
進行拼接字串
4.3不可變字串
String物件是不可變的
所謂的修改String物件實際上是new了一個新的String物件並指向他
4.4檢查字串是否相等
使用.euqals()判等
"Hello".equals(str)
4.5空串與null
空串是長度為0的串,“”
空串並非null,null是未被初始化的串
4.6碼點
Java字串由char序列組成
char是一個UTF-16的程式碼單元,表示Unicode碼點
問題:有的Unicode字元需要不止一個程式碼單元表示
相關方法:CodePoint
4.6高效構建字串
StringBuilder類
為何高效:避免了每次修改都new一個新的String物件,修改都是再容器裡進行,只有最後生成時才new一個字串
常用方法:
builder.append();//追加字串
String str = builder.toString();//生成字串
5.輸入輸出
5.1輸入
標準輸入流:System.in
首先需要一個Scanner
Scanner in = new Scanner(System.in);
String name = in.nextLine(); //讀取一行
幾種常用方法區別:
nextLine(); //遇到回車結束
next(); //遇到空格結束
nextInt(); //讀取整數
hasNext(); //檢測是否還有輸入
5.2輸出
格式化輸出,可以用佔位符替換輸出
相應的佔位符要用時查表
5.3檔案輸入輸出
-
用Scanner讀取檔案
Scanner in = new Scanner(Path.of("123.txt"),StandardCharsets.UTF_8); //指定路徑和字符集
-
寫入檔案
需要PrintWriter物件
PrintWriter out = new PrintWriter("123.txt",StandardCharsets.UTF_8);
6.陣列
6.1一維陣列
//以下幾種建立都是可以的
int[] a = new int[100];
int a = {1,2,3};
int a = {1,2,3,};
可以用以下方法拷貝
int a = Arrays.copyOf(b,b.length);
可以通過foreach語法遍歷
for(int b : a){
...
}//b會遍歷a
6.2多維陣列
Java沒有真正意義上的多維陣列,實際上只有陣列的陣列
所有陣列可以是不規則的
//建立方式
int[][] two = new int[100][50];
int[][] two = {
{1,2,3},
{4,5,6,7}
};