1. 程式人生 > 其它 >Java基礎語法01——變數與運算子

Java基礎語法01——變數與運算子

Java基礎語法01——變數與運算子

本文是對Java基礎語法的第一部分的學習,包括註釋;識別符號的命名規則與規範;變數的資料型別分類以及轉換;以及六種運算子(算術、賦值、比較、邏輯、三元和位運算子)。

註釋(commment)

書寫註釋是一種良好的習慣,註釋是寫給人看的,並不會在程式碼執行時展示出來。註釋主要分為以下三類:單行註釋、多行註釋、文件註釋

  1. 單行註釋:一行,格式://

  2. 多行註釋:一段,格式:/* 註釋文字 */

  3. 文件註釋:是專門為了用javadoc工具自動生成文件而寫的註釋,它是一種帶有特殊功能的註釋。

    ​ 格式:/** 文字 */ (這一部分還有很多需要擴充套件學習的地f方)

識別符號

identifier在Java中,有很多需要自己起名字的地方,而這些就被稱為識別符號。

用來命名:類名、變數名、方法名、包名、介面名、常量名等。

  • 識別符號命名規則:【必須遵循,否則會報錯】

    1. 首字母只能以英文字母大小寫、$、下劃線(_)開始
    2. 首字母之後可以是英文字母大小寫、$、下劃線(_)或數字的任意組合
    3. 識別符號的命名是大小寫敏感的
    4. 不能使用關鍵字(被java語言賦予了特殊含義,用作專門用途的字串,所有字母全部是小寫的),但可以包含
    5. 可以使用中文命名,但是一般不建議使用
  • Java識別符號的命名規範:【非必須遵守,但是一種良好的程式碼習慣】

    1. 類名、介面名:多單片語成時,每個單詞的首字母大寫:XxxYyyZzz
    2. 變數名、方法名:首個單詞全部小寫,其餘單詞首字母大寫:xxxYyyZzz
    3. 包名:所有字母都小寫:xxxyyyzzz
    4. 常量名:所有字母都大寫且每個單詞用下劃線連線:XXX_YYY_ZZZ
  • 合法識別符號舉例:age、$salary、_value、__1_value

  • 非法識別符號舉例:123abc、-salary

變數

  • Java是一種強型別語言,即所有的變數都必須嚴格符合規定,所有變數都必須先定義再使用
  • 變數的定義格式:資料型別 變數名 = 值;
  • 變數只在它的作用域內有效,一般作用域是{}
  • 在一個作用域內不能宣告重名的多個變數

資料型別

資料型別分為基本資料型別和引用資料型別兩種

  • 整數型別:byte(1位元組=8bit)、short(2位元組)、int(4位元組)、long(8位元組)

​ byte範圍:-128~127

​ 定義long型別時,變數的值後要加L或l,例如:long l = 1000000L

​ 整數型別常量預設為int型

  • 浮點型別:float(4位元組,但其表示的數範圍比long大)、double(8位元組)

​ 定義float型別時,變數的值後要加F或f,例如:float f = 100.1f

​ 浮點型別常量預設為double型

  • 字元型:char(1字元=2位元組)

​ 宣告char型別時,使用一對單引號(‘ ’)進行賦值,只能對一個字元進行賦值

​ 表示方法:(1)表示一個字元(2)轉義字元{\n——換行符,\t——製表符}(3)使Unicode字符集表 示字元{eg:\u0043——C}

  • 布林型別:boolean,只有true\false兩個值,常常用在條件判斷和迴圈結構中

  • 拓展:\\n執行時會輸出\n(不再表示換行的意義);"\"可以將符號變成普通的字元

型別轉換

  • 首先知道一下基本資料型別容量大小的順序:byte、short、char——>int——>long——>float——>double(順序由低容量到高容量)(此處容量大小,指的是型別的資料的範圍大小)
  • 型別轉換有兩種型別:自動轉換、強制轉換(注意:不包括布林型別)
    1. 自動轉換:低——高
    2. 強制轉換:高——低,需使用強轉符:(強轉型別)變數名 【可能導致精度損失】
    3. 舉例:
//強轉型別舉例
public class Demo01{
    public static void main(String[] args){
        double d1 = 129.4;
        int i1 = (int)d1;//將double型強轉為int型
        System.out.println(i1);//執行結果為129
    }
}
//自動提升型別舉例
public class Demo02{
    public static void main(String[] args){
        byte b1 = 12;
        char c1 = 'a';
        int i1 = 129;
        
        int i2 = b1 + c1;//byte\char\short互相做運算或自身做運算時,都將自動轉換成int型別
        int i3 = b1 + i1;//當容量大的和容量小的做運算時,結果為容量大的型別
        System.out.println(i2);//int型——12+97
        System.out.println(i3);//int型——12+129
    }
}

拓展1——String字串型別

  • 屬於引用資料型別
  • 宣告String型別時,使用一對雙引號,表示字串
  • String型別可以與其他8中基本型別做運算,且只能是連線運算:+,運算結果仍為String型別

拓展2——不同進位制間的轉換(瞭解)

所有數字在計算機底層都以二進位制存在

二進位制(以0b或0B開頭)、十進位制、八進位制(以0開頭)、十六進位制(以0x或0X開頭,用0-9及A-F[16]表示)

public class Test1{
    public static void main(String[] args){
        int num1 = 0b110;//二進位制???為啥這條執行不了???
        int num2 = 123;//十進位制
        int num3 = 0127;//八進位制
        int num4 = 0x123A;//十六進位制
        System.out.println("num1 = " + num1);
        System.out.println("num2 = " + num2);
        System.out.println("num3 = " + num3);
        System.out.println("num4 = " + num4);
    }
}

運算子

算術運算子

算術運算子包括正負號(+、-)、加減乘除(+、-、*、/)、取模(取餘)(%)、++(前++、後++)、--(前--、後--)

通過下面的程式程式碼解釋相關的運算(正負號和加減乘比較簡單就不說了):

  • //除法運算
    public class Demo01{
        public static void main(String[] args){
            int num1 = 12;
            int num2 = 7;
            int num3 = num1 / num2;
            System.out.println("num3 = " + num3);//1
            
            double num4 = num1/num2;//自動型別提升為double
            System.out.println("num4 = " + num4);//1.0
            
            double num5 = num1/num2+0.0;
            System.out.println("num5 = " + num5);//1.0
            
            double num6 = num1/(num2+0.0);
            System.out.println("num6 = " + num6);//1.714...(除不盡)
        }
    }
    //掌握住基本資料型別運算的本質
    
  • //取餘運算
    public class Domo02{
        public static void main(String[] args){
            int i1 = 12;
            int i2 = 5;
            System.out.println("i1%i2 = " + i1%i2);//2
            
            int ii1 = -12;
            int ii2 = 5;
            System.out.println("ii1%ii2 = " + ii1%ii2);//-2
            
            int iii1 = 12;
            int iii2 = -5;
            System.out.println("iii1%iii2 = " + iii1%iii2);//2
            
            int iiii1 = -12;
            int iiii2 = -5;
            System.out.println("iiii1%iiii2 = " + iiii1%iiii2);//-2
            //取模結果的符號於被取模數相同
        }
    }
    
  • //前++(--):先自增(減)1.後做運算
    //後++(--):先做運算,後自增(減)1
    public class Demo03{
        public static void main(String[] args){
            int a = 5;
            int b = ++a;
            System.out.println("a="+a+",b="+b);//a=6,b=6
            
            b = a++;
            System.out.println("a="+a+",b="+b);//a=7,b=6
            
            b = --a;
            System.out.println("a="+a+",b="+b);//a=6,b=6
            
            b = a--;
            System.out.println("a="+a+",b="+b);//a=5,b=6
        }
    }
    //自增運算不改變 變數的資料型別
    

賦值運算子

賦值運算子號:=

擴充套件賦值運算子:+=、-=、*= 、/=、%=

//+=(其餘的類似)
public class Demo04{
    public static void main(String[] args){
        int i1 = 7;
        i1 += 2;//相當於i1=i1+2
        System.out.println(i1);//9
        
        short i2 = 7;
        //i2 = i2 + 2;//編譯失敗,因為資料型別
        i2 += 2;//結論:不會改變變數的資料型別
        System.out.println(i2);//9
        
        int i3 = 1;
        i3 *= 0.2;//i3=i3*0.2(注意資料型別是整型的)
        System.out.println(i3);//0
        i3 += 1;//i3=i3+1
        System.out.println(i3);//1
    }
}
/*
1. 在開發中,使得整數+2的方法:
	num=num+2;
	num+=2;(推薦)
2. 在開發中,使得整數+1的方法:
	num=num+1;
	num+=1;
	num++;(推薦)
*/

比較運算子

比較運算子:==、!=、<、>、<=、>=、instanceof

比較運算子的結果都是布林型別:true或false

//注意區分好==和=
public class Demo05{
    public static void main(String[] args){
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b2 == b1);//false
        System.out.println(b2 = b1);//true
    }
}

邏輯運算子

  • 邏輯運算子:&(邏輯與)、&&(短路與)、|(邏輯或)、||(短路或)、!(邏輯非)、^(邏輯異或)
  • 邏輯運算子兩邊操作的都是布林型別的變數
  • 區分:&和&&(二者的運算結果相同,只是執行過程不同)【|、||的區分類似】

​ &:左右兩邊都執行

​ &&:如果左邊的值可以判斷出整體的值,那麼右邊的就不再執行

//舉例說明兩者區別
public class Demo05{
	public static void main(String[] args) {
		boolean b1=false;
		int n1 =10;
		if(b1 & (n1++ >0)){
			System.out.println("我在北京");
		}else{
			System.out.println("我在南京");
				}
		System.out.println("n1=" + n1);
		//我在南京
          n1=11
		boolean b2=false;
		int n2 =10;
		if(b2 && (n2++ >0)){
			System.out.println("我在北京");
		}else{
			System.out.println("我在南京");
				}
		System.out.println("n2=" + n2);
        //我在南京
          n1=10
	}
}

位運算子

(瞭解即可,平時用到的不太多)

  • 位運算子:<<(左移)、>>(右移)、>>>(無符號右移)、&(與)、|(或)、^(異或)、~(取反)

  • 位運算子運算的是整數的二進位制,操作的是整數

  • 左移<<:將整數的二進位制數整體向左移,在空缺位補0【規律:<<n(左移n位) = 相當於原數乘2^n】

    右移>>:將整數的二進位制數整體向右移,如果原整數為正數,則在空缺位補0;若為負數,則補1【規律:<<n(右移n位) = 相當於原數除以2^n】

    無符號右移>>>:右移,補0

  • 與運算&:12&5——寫成二進位制——只有都是1才1,其餘情況是0——結果:4

    ​ 00001100——12

    ​ 00000101——5

    ​ 00000100——4

    或運算|:12|5——寫成二進位制——只要有一個1就是1——結果:13

    ​ 00001100——12

    ​ 00000101——5

    ​ 00001101——13

    異或運算:125——寫成二進位制——兩者不相同就是1——結果:9

    ​ 00001100——12

    ​ 00000101——5

    ​ 00001001——9

    取反運算12——寫成二進位制——包括最高位按位取反

    ​ 00001100——12

    ​ 11110011—— -13

三元運算子

  • 三元運算子結構:(條件表示式)?表示式1:表示式2

  • 注意幾點:條件表示式的結果須是布林型別

​ 若條件表示式的結果為true,則執行表示式1;若條件表示式的結果為false,則執行表示式2

​ 表示式1與表示式2的值要求可以統一為一個數據型別