1. 程式人生 > 實用技巧 >【筆記】Java語法

【筆記】Java語法

Java語法

兜兜轉轉,又繞回到Java了。

最近在學習Java,其實以前也學過,但是技術發展太快了,Java都出到14了。。是時候該更新一下知識體繫了。

然後看的是網上好評如潮的《Java核心技術 卷Ⅰ》和《Java程式設計思想》。

不過,我感覺這兩本書都有點長篇大論,比較適合初學者看,不適合複習。。

這兩本書看過幾頁後,如果不做筆記,基本等於看了個寂寞。

然後也因為現在的Java,知識點還挺多的,所以把一些知識點記錄下來。

總共分兩篇,這篇記錄Java的語法,下一篇記錄Java常用的類庫

不打算寫得過於詳細,詳細內容還是直接看書吧,這兩篇文章當作綱要來用。


註釋

點選檢視詳情
// 行註釋
// 這是一行註釋 // 塊註釋
/*
這是一塊註釋
這是一塊註釋
這是一塊註釋
*/ // 檔案註釋
/**
* 這是一個檔案註釋
* 這是一個檔案註釋
* 這是一個檔案註釋
*/

修飾符

點選檢視詳情
  • 訪問控制

    • public
    • protected (子類或包內)
    • private
    • default (包內)
  • static
    • 靜態初始化程式碼塊
    • 靜態欄位
    • 靜態方法
    • 巢狀類
  • final
    • 常量
    • 常欄位
    • 最終方法
    • 最終類
  • abstract
    • 抽象方法
    • 抽象類
  • default
    • 預設方法
  • synchronized
    • 同步程式碼塊
    • 同步方法
  • volatile
    • 共享欄位
  • transient
    • 非序列化欄位
  • strictfp
    • 嚴格浮點方法
    • 嚴格浮點類
  • native
    • 原生方法

基本資料型別

點選檢視詳情
// 布林
boolean x = false; boolean[] a = {true}; // 整數
byte x = 0;
short x = 0;
int x = 0;
long x = 0L; int[] a = {1_2345_6789, 0B0_1111_1111, 0X0_FFFF_FFFF}; // 浮點數
float x = 0.0F;
double x = 0.0; double[] a = {3.14, 1.0E5, 0X1.0P-5}; // 字元
char x = '\0'; char[] a = {'A', '"', '\s', '\n', '\uFFFF'}; // 字串
String x = null; String[] a = {"", "Hello!", """
<html>
<header></header>
<body>
<div>"lalala"</div>
</body>
</html>
"""}; // 引用
Object x = null;

陣列

點選檢視詳情
var a = new int[5];
var a = new int[]{1, 3, 5, 7, 9};
int[] a = {1, 3, 5, 7, 9};

列舉

點選檢視詳情
enum A{
A0,
A1,
A2,
}

型別轉換

點選檢視詳情
char -> int
byte -> short -> int -> long
float -> double int ~> float
int -> double
long ~> float
long ~> double any -> Object

運運算元

點選檢視詳情
// 型別轉換
(type)x // 符號
+x
-x // 自加、自減
++x
--x
x++
x-- // 算術
x+y
x-y
x*y
x/y
x%y // 移位
x<<y
x>>y
x>>>y // 按位
~x
x|y
x&y
x^y // 比較
x==y
x!=y
x<y
x>y
x<=y
x>=y // 邏輯
!x
x||y
x&&y // 條件
c?vt:vf // 賦值
x = y // 算術賦值
x += y
x -= y
x *= y
x /= y
x %= y // 移位賦值
x <<= y
x >>= y
x >>>= y // 按位賦值
x |= y
x &= y
x ^= y // 例項
obj instanceof type x // switch
var r = switch(x){
case k00, k01 -> v0;
case k1 -> v1;
case k2 -> {
s2;
yield v2;
}
default -> v;
};

控制流程

點選檢視詳情
// if-else
if(c0){
s0;
}else if(c1){
s1;
}else{
s2;
} // switch
switch(x){
case k00, k01 -> s0;
case k1 -> s1;
case k2 -> {
s2;
};
default -> s;
} // while
while(c){
s;
} // do-while
do{
s;
}while(c); // for
for(sb; c; sa){
s;
} // foreach
for(x: it){
s;
} // other
continue;
break;
break label;
return;
return obj;

面向物件

點選檢視詳情
  • 繼承 (is-a)
  • 聚合 (has-a)
  • 依賴 (uses-a)
// 類
class A extends B implements C, D{
} // 抽象類
abstract class A{
public abstract void m();
} // 介面
interface A{
void m0();
default void m1(){
s;
}
} // 巢狀類
class A{
public static class B{
}
} // 內部類
class A{
public class B{
}
} // 區域性類
class A{
public void m(){
class B{
}
}
} // 匿名類
interface A{
}
class B{
public void m(){
var x = new A(){
};
}
}

泛型

點選檢視詳情
// 泛型方法
class A{
public <T> void m(){
s;
}
} // 泛型類
class A<T>{
} // 泛型上界
<T extends A> // 泛型下界
<T super A> // 泛型萬用字元
<?>
<? extends A>
<? super A>

函式式

點選檢視詳情
// 函式式介面
interface A{
void m();
} // lambda表示式
() -> {
s;
}; // 方法引用
A::m // 構造器引用
A::new

註解

點選檢視詳情
  • 內建元註解

    • @Retention
    • @Target
    • @Inherited
    • @Repeatable
    • @Documented
    • @Native
  • 內建註解
    • @Override
    • @Deprecated
    • @SuppressWarnings
    • @SafeVarargs
    • @FunctionalInterface
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@interface A{
public int id() default 0;
public String desc() default "";
}

異常處理

點選檢視詳情
  • Throwable

    • Error (非檢查型)
    • Exception
      • RuntimeException (非檢查型)
      • IOException (檢查型)
      • ... (檢查型)
// 丟擲異常
class A{
public void m() throws Exception{
throw new Exception();
}
} // 捕獲異常
// try-catch-finally
try{
s0;
}catch(x){
s1;
}finally{
s2;
} // try-with-resources
try(rsc){
s0;
}catch(x){
s1;
}finally{
s2;
}

斷言

點選檢視詳情
assert c;
assert c: x;