Java基礎知識篇02——Java基本語法

白夜的白發表於2024-03-15

一、資料型別

定義:

就是用了儲存資料的一個型別,一種資料型別,只能儲存該型別資料值

作用:

  1. 只有瞭解資料型別,才能選擇合適的型別存放資料,才能更好的利用計算機硬體資源(記憶體和硬碟等)。
  2. 不同的資料型別存放資料大小是不同的。
  3. 資料型別的使用方式就是用來宣告一個變數,裝資料的。

01

常用的整數型別是 int 和 long,byte 和 short 基本不用,常用的小數型別是 double,float 基本不用 ,因為 double 是不精確的,在實際開發中表示精確的小數我們使用 BigDecimal 類。

02

計算機儲存資料:儲存在硬碟【磁碟】,硬碟中的方式都是用的二進位制資料的方式進行儲存 01010101010101010101010101010101

計算機底層本質儲存的資料形式就是二進位制資料:例如 0101010101010101

1.1、基本資料型別

1.1.1、整型:

整數型別包含:byte、short、int、long

整數的預設型別為:int

03

為什麼需要整數有四種型別?

因為不同的資料型別,佔用的記憶體空間不一樣,能夠儲存的值範圍也就不一樣

注意事項:

  1. byte的範圍大小 [-128,127]
  2. long賦值時,因為整數預設是int型別,要轉換為long型別的值,後面加上lL【建議寫大寫L】
  3. 如果超過了long的範圍,用BigInteger的類來存放其值【後面學習】
  4. 同一個整數可以使用不同的進製表示

1.1.2、浮點型:

浮點數型別包括:float、double

浮點數預設型別為:double

浮點數可以理解位表示的小數;

04

注意事項:

  1. 直接賦值給float型別,需要加上Ff,因為預設型別都為double。

  2. 精度損失,如double d = 1.0 表示的是無限接近於1.0的一個小數,而不是真正的1.0。如果需要精確的表示一個小數,可以使用後面學到的BigDecimal。

  3. 單精度雙精度區別:

    3.1對於單精度浮點數,執行速度相比double更快,佔記憶體更小,

    3.2但是當數值非常大或者非常小的時候會變得不精確。

    3.3雙精度比單精度表示的位數大 精確的位數多,簡單地說, float表示的小數點位數少。

    3.4最近幾天建議用double型別,而實際開發用BigDecimal型別表示小數。

1.1.3、字元型別:

05

單引號引起來的一個符號就是字元資料。例如:'a'

使用方式

  1. 'a'、’1’、’好’等最常用。
  2. 使用一個數字表示字元,參考下圖中ASCII碼錶[字元編碼]。關於ASCII碼錶請百度瞭解。
char c = 65;// 表示 ‘A’這個字元
//16進製表示一個字元
char c = '\u0041';// 十六進位制的0041,是十進位制的65,在字符集中對應的是A字元
  1. 特殊字元使用

    \r 表示回車符;

    \n 表示換行符;

    \t 表示相當於Table鍵製表符,;

    \b表示退格鍵,相當於Back Space鍵;

    \’表示單引號;

    \” 表示雙引號;

    \ 表示一個斜槓\。

注意:因為系統差異性,在不同的系統中 ,有時候\r起作用,有時候\n起作用。所以,一般建議:\r\n 連用,這樣可以在任意系統中都可以換行。

06

1.1.4、布林型別

07

只有兩個值:true、false,不能使用:0和1表示。

位數佔1位

1.2、引用資料型別

除了基本型別以外,幾乎所有的其他型別都是引用型別。

如:java自帶的類、我們自定義的類、介面、列舉、陣列等都屬於引用資料型別。

  1. 類 class2
  2. 介面 interface
  3. 列舉 enum
  4. 抽象類 abstract class
  5. 陣列 資料型別[]

String 類是java中一種自帶的引用資料型別,表示字串資料。

//使用雙引號 包含字元內容。
String  s = "你好";
System.out.println(s);// 你好

二、基礎語法和變數

2.1、基礎語法

命名規範:

  1. 一般不建議使用$下劃線_作為起始符號

  2. 見名知意:一般來說都是取一些有意義的單詞。例如,age表示年齡

  3. 類名首字母必須大駝峰。大駝峰:首字母大寫,後面每個單詞首字母大寫。

    例如:使用者管理類 : UserManagement 大駝峰

  4. 方法名、變數名小駝峰。小駝峰:首字母小寫,後面每個單詞首字母大寫

    使用者名稱(成員)變數 : userName 小駝峰

    獲取使用者名稱方法 : getUserName() 小駝峰

  5. 不要以java中關鍵字、保留字、jdk中存在的類 命名

註釋:

單行註釋: 語法:// 
一般寫在main(或者其他)方法內部

多行註釋: 語法:/* */
可以註釋多行內容,一般寫在main方法中,用來寫解題思路

多行註釋: 語法:/** */
這是文件註釋,寫在方法、類、成員變數上面

2.2、變數

概念:

​ 就是一個盒子(容器),用來裝資料的。同一時間只能裝一個資料。

變數是記憶體中的一個儲存區域,該區域有自己的名稱(變數名)和型別(資料型別),Java中每個變數必須先宣告,後使用, 該區域的資料可以在同一型別範圍內不斷變化

08

(變數可以理解為裝某種型別資料的容器,容器可以重複使用)

宣告變數:

int age;// 宣告一個int型別的變數age(年齡) 
//資料型別 變數名1 = 值1, 變數名2 = 值2, 變數名3 = 值3...;// 值和變數的型別必須相同
int age, age2, age3;	
//或者
int age = 1, age2 = 2, age3 = 3;

變數賦值:

//語法:變數名 = 值; =右邊的值,賦值給 =左邊的變數。注意:必須保證值和變數的資料型別一致
age = 23;// 將23賦值給變數age。注意:必須保證值23和變數age的資料型別一致

eg:

public class _02Var {
	public static void main(String[] args) {
	// ==================  int型別變數使用  =========================
		
	// 1. 宣告變數,語法:資料型別 變數名;  例如:int age;
	int score;// 宣告一個int型別變數score
	// 2. 變數賦值,語法:變數名 = 值
	score = 0;// 將int型別的值0透過=賦值給=左邊的變數score	
	// 直接列印輸出變數score
	System.out.println(score);	
	// 做運算(+,-,*,/....) score + 1
	score = score + 1;
	System.out.println(score);// 1	
	// 賦值給另外的變數
	int score2 = score;
	System.out.println(score2+","+score);// 1
	System.out.println(score);// 1
		
	// ========	String 字串型別(引用型別)	最常用【掌握】=========================
	// 1 宣告變數同時賦值,語法:資料型別 變數名 = 值;	
	String str = "abc";
	// 2. 變數取值:		語法:變數名;
	System.out.println(str);
	// +在字串中表示連線符號,也就是拼接符號
	str = str + "123";// 將String變數str中值abc取出來,然後透過+號拼接 123,重新賦值給 str
	// 重新列印str
	System.out.println(str);// abc123
	// +在字串出現之前,表示加法運算,字串之後表示拼接符號
	System.out.println(1 + 2 + "ab" + 1 + 2);// 3ab12
}

注意事項:

  1. 此處的資料型別可以是Java中支援的所有的資料型別!
  2. 資料型別限定了變數可以存值的型別
  3. 賦值使用的 = 號,從右往左賦值
  4. 規範寫法:= 兩邊都加上一個空格
  5. 變數一旦定義好了,可以反覆使用
  6. 變數只可以存一個值,下次存值會覆蓋上一次的值

三、資料型別的轉換

定義:

​ 將資料從一種格式或結構轉換為另一種格式或結構的過程

作用

  1. 節約記憶體空間 byte short int long
  2. 將一些型別轉換為專案所需要的型別

3.1、自動隱式轉換

定義:

​ 將小的資料型別轉換大的資料型別

09

注意事項

  1. 在Java中,boolean型別與所有其他7種型別都不能進行轉換。

  2. 其他 7種資料型別,它們之間都可以進行轉換,但是可能會存在精度損失或者其他一些變化。
    byte -> short -> int -> long-> float-> double

    char -> int -> long-> float-> double

    byte與char 不能自動轉換

    char與short不能自動轉換

    由於小數(浮點數) 的儲存方式,結構和整數不一樣,所以,float哪怕是4個位元組、

    long是8個位元組,表示範圍也大於long型別。知道就好無須深入研究。

    eg:

//1.
short s = 10;
int num = 20;
int n = num + s;
System.out.println(n);
//2.
int  num = 10;
double b = 10.01;
double  c = num + b;
System.out.println(c);
//3.char型別向更高長度型別(例如整型)轉換時,會轉換為對應的ASCII碼值,再做其他型別的自動轉換
char  c = 'A';
int num = 10;
int a = c + num;
System.out.println(a);
//4.特例:只看型別,不看值
/ 示例1:
int a = 129;
byte b = (byte)a;// 編譯器只看容器不看值
System.out.println(b);// 結果為-127
// 示例2:
byte b = 100;// 可以自動轉換
float f = 1.3;// 不能自動轉換
int a = 2147483647;
a = a + 1;
System.out.println(a);// 結果為-2147483648

3.2、強制轉換

定義:

​ 將大資料型別轉為小資料型別

語法:

小資料型別 變數名 = (小資料型別)大型別值/大型別變數名

注意事項

  1. 高轉低會導致精度丟失,有資料的溢位風險。溢位的時候,會以二進位制進位。
  2. 實際開發中:應該要知道被強制轉換的資料,是在一個已知的範圍。
  3. int型別的具體的值,向byte、short、char型別轉換的時候,值只要在其表示範圍內,都會隱式轉換。
  4. 編譯只看型別不看值

eg:

int i1 = 123;
int i2 = 456;
float f1 = (float)((i1 + i2) * 1.2);// 型別大的轉換為型別小的時,要加上強制轉換符

short i = 99;
char c = (char)i;
System.out.println(c);  

byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1 + b2); // byte,short,char在計算時首先轉換為int,大型別(int)轉換為小型別的(byte)時要加強制轉換

byte t = 127;// 不報錯
int a = 127;
// 需要強制轉換才不報錯:編譯器只看型別,不看值
byte b = (byte)a;
System.out.println(b); // 結果為 127
/**
*	4. 型別轉換:(掌握)
  		byte  short(char)  int  long  float(單精度)  double(雙精度) (只有數值型別才能相互轉換)
  		----------------從左到右精度越來越高-------------------->
  1. 小轉大,都是可以隱式轉換  (從左到右) 
  2. 大轉小,必須強制轉換  (從右到左)	強制轉換有資料的溢位風險。溢位的時候,會以二進位制進位
  	強制轉換語法:
  		小的資料型別 小的變數 = (小的資料型別)大的變數/值;		    		
  	當int型別的具體的值,向byte、short、char型別轉換的時候,值只要在其表示範圍內,都會隱式轉換	  
 */
public class _03TypeChange {
    public static void main(String[] args) {
        // 1. 小轉大,都是可以隱式轉換  (從左到右)
        byte byt = 1;// 宣告一個byte型別變數byt 賦值1
        short s = byt;// 宣告一個short型別變數s 賦值一個byte型別變數byt
        int i = s;// 宣告一個int型別變數i 賦值一個short型別變數s
        long lon = i;// 宣告一個long型別變數lon 賦值一個int型別變數i
        float f = lon;// 宣告一個float型別變數f 賦值一個long型別變數lon
        double doub = f;// 宣告一個double型別變數doub 賦值一個float型別變數f	
        // 2. 大轉小,必須強制轉換  (從右到左)	強制轉換有資料的溢位風險。溢位的時候,會以二進位制進位
        // 強制轉換語法:小的資料型別 小的變數 = (小的資料型別)大的變數/值;
        float f2 = (float)doub;// 宣告一個float型別變數f2,賦值為一個強制轉換的double型別變數 doub
        long lon2 = (long)f2;
        byte byt2 = (byte)128;// 128是int型別,強制轉換有可能發生溢位,溢位時會以二進位制進位
        System.out.println(byt2);// -128
        int a = 1;
    //	byte byt3 = a;// 報錯,int型別a值是1,因為在編譯期程式只看右邊的資料型別,而不看變數中的值
        byte byt4 = 1;// 不報錯
    }
}

4.3、表示式示例

四、運算子

4.1、算術運算子

算數運算(Arithmetic Operation)

+ :加號。只有String字串參與的加法運算,才有拼接功能,在String之前,表示加法 運算,之後,才表示連線

-:減號。

*****:乘號。

/:除號。不能除0

%:模(也叫取餘)相當於求餘數。例如:10 % 3 ,表示求10除3的餘數,結果是1

作用:1. 求餘數 2. 找一個數的倍數 3. 可以拆分一個多位的數字

eg:

public class _05ArithmeticOperation {
	public static void main(String[] args) {
        System.out.println("============= 除法 / ==============");
        System.out.println(10 / 1);// 10
        System.out.println(10 / 2);// 5
        System.out.println(10 / 3);// 3
        System.out.println(10 / 4);// 2
        System.out.println(10 / 5);// 2
        System.out.println(10 / 6);// 1
        System.out.println(10 / 7);// 1
        System.out.println(10 / 8);// 1
        System.out.println(10 / 9);// 1
        System.out.println(10 / 10);// 1
        System.out.println(10 / 11);// 0
    	//System.out.println(10 / 0);// ArithmeticException算術異常		
		System.out.println("============= 特殊情況 ==============");	
        /*
         * 特殊情況:【瞭解】
             1) 10/3 =3; 
             2) 10.0/3=3.33333…
             3) 0/0
             4) 0.0/0.0  
             結果是NaN ,任何的NaN都不等於自己(面試題)not a number不是一個數字
             5) 1.0/0.0   結果:Infinity,表示無窮大
         */
        System.out.println(10.0 / 3); 
        System.out.println(0.0 / 0.0);// NaN
        System.out.println(1.0 / 0.0);// Infinity表示無窮大
        System.out.println("============== % 模(取餘) ==============");
        System.out.println(10 % 1);// 0
        System.out.println(10 % 2);// 0
        System.out.println(10 % 3);// 1
        System.out.println(10 % 4);// 2
        System.out.println(10 % 5);// 0
        System.out.println(10 % 6);// 4
        System.out.println(10 % 7);// 3
        System.out.println(10 % 8);// 2
        System.out.println(10 % 9);// 1
        System.out.println(10 % 10);// 0
        System.out.println(10 % 11);// 10
    	//System.out.println(10 % 0);// ArithmeticException算術異常
        // 請求出個十百位的值  / % 
        int a = 127;
        // 求個位 
        int ge = a % 10;
        // 求十位 
        int shi = a / 10 % 10;
        // 求百位 
        int bai = a / 100;
        System.out.println(ge + " : " + shi + " : " + bai);
	}
}

4.2、自增自減運算子

++(加加)、--(減減)

注意事項:

  1. 自增自減只能夠用於變數,不能用於常量
  2. 自增自減運算的優先順序比其他算術運算子
  3. 一般用在迴圈語句中

使用要點:

  1. 把整個表示式看成是一個整體
  2. ++i 表示運算完再賦值,i++ 表示先賦值再運算

eg:

int i = 3;
        int a1 = i++ + i++ + i++;
        //i++=3 i=4 i++=4 i=5    i++=5 i=6 計算過程
        int b1 = ++i + ++i + ++i;
        //++i=7 i=7  ++i=8 i=8   ++i=9 i=9
        System.out.println("i = " + i); // 9
        System.out.println("a1 = " + a1); // 12
        System.out.println("b1 = " + b1); // 24

        int a2 = 1;
        int b2 = 2;
        // a++: 先賦值再自增	++a:先自增再賦值
        int c1 = a2++ + ++a2 + b2--;
        // a2++=1 a2=2  ++a2=3 a2=3 b2--=2 b2=1 c1=1+3+2
        int d1 = c1++ + c1-- + a2++ + ++b2;
        //  c1++=6 c1=7 c1--=7 c1=6 a2++=3 a2=4 ++ba=2 b2=2
        // a = ? b = ? c = ? d = ?
        System.out.println("a = " + a2);//4
        System.out.println("b = " + b2);//2
        System.out.println("c = " + c1);//6
        System.out.println("d = " + d1);//18

4.3、複合賦值運算子

賦值運算(Assignment Operation):是優先順序最低的一種運算,等 = 後邊的所有運算完畢後,才執行賦值運算。

+=(加等)、-=(減等)、=(乘等)、/=(除等)、=*(等於)

語法:

//+= 累加
int a = 5;
a += 5 => a = a+5

注意事項

  1. 從右到左,把符號右邊的值賦值到左邊的變數中
  2. 上面符號看成是一個整體: 例如 += 看成是一個符號,不要看成兩個。
  3. 賦值運算有強制轉換功能,可以避免型別提升.會有溢位風險
int i= 3;
i += 2;// 表示把2 累加到變數 i 中
i -= 1;
// 特例
short s = 3;
s += 2;		// 存在隱式轉換
short s = 3;
s = s + 2;	// 報錯,因為結果值是int,int不能自動轉換為short
public class _08AssignmentOperation {
	public static void main(String[] args) {
        int a = 1;
        a += 5;// 表示將變數a的值累加上5,相當於a = (int)(a + 5);
        System.out.println(a);// 6 

        byte b = 127;
        b += 1;// b += 1相當於 : b = (byte)(b + 1);
        System.out.println(b);// -128
    	//	b = b + 1;// 報錯, b + 1表示式結果是int型別
        a += 1 + 3 + 5;// 會先計算 += 右邊所有的運算,再執行 += 賦值運算
        System.out.println(a);
    }
}

4.4、比較運算子

**比較運算 **(Compare Operation) :結果一定是 boolean 型別

<(小於)、>(大於)、<=(小於等於)、>=(大於等於)

  • ==(等等於),比較基本型別,比較的是值是否相等 ;比較引用型別,比較的是值並且地址是否相等
  • !=(不等於),比較基本型別,比較的是值是否不相等 ;比較引用型別,比較的是值並且地址是否不相等

4.5、三目運算子

語法:
x ? y : z
描述:
x 一般為一個關係表示式。
如果 x 的值為 true,那麼就取 y 的值否則就取 z 的值。
eg:

bool resuilt=5>3?true:flase	

注意點:
凡使用if else的判斷,可以考慮使用三元表示式;y 的結果型別必須跟 z 的結果型別一致,並且也要跟整個三元表示式的結果型別一致

相關文章