javaSE小知識點
var
關鍵字
var sb = new StringBuilder();//自動推斷sb的型別
public class Main {
public static void main(String[] args) {
String s = """ //java13
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC
""";
System.out.println(s);
}
輸出不換行
package com.bi;
public class Main {
public static void main(String[] args) {
System.out.print("A,");
System.out.print("B,");
System.out.print("C.\teee\n");\\不換行
}
}
格式化輸出
public class Main {
public static void main(String[] args) {
double d = 3.1415926;
System.out.printf("%.2f\n", d); // 顯示兩位小數3.14
System.out.printf("%.4f\n", d); // 顯示4位小數3.1416
}
}
輸入
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 建立Scanner物件
System.out.print("Input your name: "); // 列印提示
String name = scanner.nextLine(); // 讀取一行輸入並獲取字串
System.out.print("Input your age: "); // 列印提示
int age = scanner.nextInt(); // 讀取一行輸入並獲取整數
System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化輸出
}
}
判斷引用型別是否相等
判斷值型別的變數是否相等,可以使用==
運算子。但是,判斷引用型別的變數是否相等,==
表示引用是否相等,或者說,是否指向同一個物件。要判斷引用型別的變數內容是否相等,必須使用equals()
方法。
switch
-
java12增加表示式
public class Main {
public static void main(String[] args) {
String fruit = "apple";
switch (fruit) {
case "apple" -> System.out.println("Selected apple");
case "pear" -> System.out.println("Selected pear");
case "mango" -> {
System.out.println("Selected mango");
System.out.println("Good choice!");
}
default -> System.out.println("No fruit selected");
}
}
}
-
利用switch表示式會返回值給變數賦值
public class Main {
public static void main(String[] args) {
String fruit = "apple";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> 0;
}; // 注意賦值語句要以;結束
System.out.println("opt = " + opt);
}
}
-
如果需要複雜的語句,我們也可以寫很多語句,放到
{...}
裡,然後,用yield
返回一個值作為switch
語句的返回值:
public class Main {
public static void main(String[] args) {
String fruit = "orange";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> {
int code = fruit.hashCode();
yield code; // switch語句返回值
}
};
System.out.println("opt = " + opt);
}
}
-
switch
的計算結果必須是整型、字串或列舉型別;
變數應該把訪問範圍縮到最小的原則。
for each迴圈
for each
迴圈能夠遍歷所有可迭代的資料型別,如List,陣列、Map等。無法拿到索引
public class Main { public static void main(String[] args) { int[] ns = { 1, 4, 9, 16, 25 }; for (int n : ns) { System.out.println(n); } } }
陣列列印、排序
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] ns = { 1, 1, 2, 3, 5, 8 }; System.out.println(Arrays.toString(ns)); } }
可變引數
class Group { private String[] names; public void setNames(String... names) {//傳空可以,無法傳null this.names = names; } }
呼叫時:
Group g = new Group(); g.setNames("Xiao Ming", "Xiao Hong", "Xiao Jun"); // 傳入3個String g.setNames("Xiao Ming", "Xiao Hong"); // 傳入2個String g.setNames("Xiao Ming"); // 傳入1個String g.setNames(); // 傳入0個String
構造方法
-
沒有在構造方法中初始化欄位時,引用型別的欄位預設是
null
,數值型別的欄位用預設值,int和boolean
的預設值分別是0、false
。 -
建立物件例項時,按照如下順序: 1. 先初始化欄位,例如,
int age = 10;
表示欄位初始化為10
,double salary;
表示欄位預設初始化為0
,String name;
表示引用型別欄位預設初始化為null
; 2. 執行構造方法的程式碼進行初始化。 -
多構造方法,一個構造方法可以複用其他構造方法,通過this關鍵字。
class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name) { this(name, 18); // 呼叫另一個構造方法Person(String, int) } public Person() { this("Unnamed"); // 呼叫另一個構造方法Person(String) } }
super
-
子類引用父類的欄位時,可以用
super.fieldName
。 -
任何
class
的構造方法,第一行語句必須是呼叫父類的構造方法。如果沒有明確地呼叫父類的構造方法,編譯器會幫我們自動加一句super();
final
-
只要某個class沒有
final
修飾符,那麼任何類都可以從該class繼承即不允許子類繼承。 -
如果一個父類不允許子類對它的某個方法進行覆寫,可以把該方法標記為
final
。用final
修飾的方法不能被Override
。 -
被final修飾的變數或引用不允許再賦值。
-
對於一個類的例項欄位,同樣可以用
final
修飾。用final
修飾的欄位在初始化後不能被修改。
轉型
-
向上轉型:把一個子類型別安全地變為父類型別的賦值(upcasting),轉型後只能呼叫父類的方法,如果子類覆蓋了父類的方法,則呼叫子類的方法,對於只有子類才有的方法,通過父類的引用將無法呼叫。
-
向下轉型:把一個父類型別強制轉型為子類型別,就是向下轉型(downcasting)。只用父類引用真實指向的是子類,才能向下轉型,否則會失敗,會報
ClassCastException
。 -
instanceof
操作符,可以先判斷一個例項究竟是不是某種型別。
多型
在繼承關係中,子類如果定義了一個與父類方法簽名完全相同的方法,被稱為覆寫(Override)。
Override和Overload不同的是,如果方法簽名如果不同,就是Overload,Overload方法是一個新方法;如果方法簽名相同,並且返回值也相同,就是Override
。
Java的例項方法呼叫是基於執行時的實際型別的動態呼叫,而非變數的宣告型別。
這個非常重要的特性在面向物件程式設計中稱之為多型。它的英文拼寫非常複雜:Polymorphic。
多型是指,針對某個型別的方法呼叫,其真正執行的方法取決於執行時期實際型別的方法。