1. 程式人生 > 其它 >java筆記-基本語法

java筆記-基本語法

二 Java 基本語法

1.關鍵字和保留字

1.1關鍵字

1.1.1 import

J2SE 1.4 開始,Java 編譯器不再支援 import 進未命包名的類、介面

1.1.2定義資料型別:

​ class interface enum byte short int long float double char boolean void

1.1.3定義流程控制

​ if else switch case default while do for break continue return

1.1.4定義訪問控制權限

​ private protected public

1.1.5 true false null

​ true false null

1.2保留字

​ goto const(命名的時候要避開)

2.識別符號 Identifier

2.1命令規則:

​ a-z,A-Z 0-9 _ $

​ 數字不能開頭

​ 不能用關鍵字 保留字 空格

​ 嚴格區分大小,長度不限制

2.2命名規範

​ 包名:多單片語成時,全小寫

​ 類名,介面名:多單片語成時,大駝峰XxxYyyZzz

​ 變數名,方法名:多單片語成時,小駝峰:xxxYyyZzz

​ 常量名:所有字母都大寫,且單詞之間有下劃線,XXX_YYY_ZZZ

3.變數

​ 資料型別 變數名 = 變數值;

3.1 基本資料型別

  1. 整型

    byte 1位元組 -128~127
    short 2位元組
    int 4位元組 -231~231-1(約21億)
    long 必須以L或l結尾 8位元組
    long t1=12; //不報錯,因為自動型別轉換
    long t2= 11294423234342; //報錯,
    
    byte b=12; //
    byte b1=b+1; // 編譯失敗,因為1是int型
    float f=12.3;
    float f1=f+213.3; // 編譯失敗,因為213.3是double型
    
  2. 浮點型

    float 宣告必須以F f結尾 4位元組 -3.403E38 ~ 3.403E38 尾數精確到7位
    double(預設) 4位元組 -1.798E308 ~ 1.798E308 不僅表示範圍大,而且精度高
float f=12.34; //錯誤,型別錯誤,12.34預設為double
  1. 字元 轉義字元**

    一個字元兩個位元組,包含三種形式

    a. char c = ‘中’;

    b. 直接使用unicode值來表示一個字元常量: '\uXXXX' 如'\u000a'表示'\n'

    c. 轉義字元 '\n' '\t'

  2. Boolean

    true 和false C語言中使用01,C語言要用True和False需要先引用包

3.2 引用資料型別

​ class (字串輸入類)

​ interface

​ 陣列 [ ]

3.3 引申:編碼問題:

​ 不同的底層的01序列定義為不同的字元

​ 但是所有編碼格式對英文的編碼好像都是固定的????

ASCII編碼

​ 7位二進位制->128種狀態 ,佔用一個位元組的大小,第一位規定為0 不同國家的ASCII編碼不一樣,就會亂碼

Unicode編碼

​ 統一全世界所有的符號,所以unicode沒有亂碼問題

​ 但是,unicode定長,英文字母編碼只需要1位元組就可以,導致前面的0的浪費,

​ 二是無法區分unicode和ASCII

UTF-8(Unicode的一種實現方式)

​ 變長編碼,1-6位元組,根據不同符號而變化位元組長度

​ 規則:

​ 單位元組的UTF-8編碼,最高位為0,其餘7位進行編碼(等同於ASCII)

​ 對於n位元組編碼,

​ 第一個位元組的前n位為1,第一個位元組的n+1位為0,剩餘位進行資訊的編碼

​ 剩餘位元組,最高位兩位都是10,剩餘6位進行資訊編碼

命令列亂碼問題

​ 使用utf-8編碼,在命令列執行,中文的字串會亂碼,但使用ASCII編碼就不會

​ 原因,命令列預設使用GBK編碼格式,對程式碼進行解碼,中文就會亂碼

​ 但是使用ASCII編碼儲存,其實中文系統使用的還是GBK(英文系統才會用ASC),所以沒問題

3.4引申:String字串

​ String不是基本資料型別,他是個類

​ String可以和8種基本資料型別做運算,且運算只能是連線運算 +

int num =1001;
String str="num";
String info = str+ num;//"num1001"
char c = 'a';
System.out.println(c + num + str);//1098num
System.out.println(c + str + num);//anum1001
System.out.println(c + (num + str));// a1001num
System.out.println(str + num + c);// num1001a

3.5 型別轉換

1.自動型別轉換(提升)

byte b=2;
int a=b;
long c=a;
float d=c; //自動補一個.0
double e=d;

​ byte/short/char --> int --> long --> float --> long

​ 這三個做運算後起步就得是int

2.強制型別轉換

​ 自動轉換的逆運算

​ 情況1,沒有溢位

​ 截斷操作,絕對不是四捨五入!!!

double d=10.0;
int x=(int)d; 

​ 情況2:溢位了

​ 出錯

int i=102;
byte b=(byte)i;//b = -128

3.6 進位制轉換

​ 二進位制,以0b或者0B開頭

​ 八進位制:以數字0開頭

​ 十進位制

​ 十六進位制:以0x或0X開頭

4.運算子

4.1算數運算子

​ + - * / % ++ ++ -- -- +字串連線

4.2賦值運算子

​ = += -= *= /= %=

4.3 比較運算子

​ == != <= >=

4.4 邏輯運算子

​ &與 | 或 ! 非 && 短路與 前面為假就不執行後面的了 || 短路或 ^ 異或 倆不一樣為真

4.4. 位運算子

​ <<左移乘2 >>右移除以2 >>> 無符號右移 & 6&3=7 按位與 | ^ ~

4.5 三元運算子

三元運算子和二元運算一樣,也要統一型別,做自動提升

Object o= true ? new Integer(1) : new Integer(2.0);
sout(0) //1.0   

5.流程控制

​ 略

5.1引申:Scanner宣告

import java.util.Scanner;

Scanner scan = new Scanner(System.in);
int num = scan.nextInt();

5.2 break和continue

label:for(){
	for(){
		pass;
		break label;//結束的是外圈迴圈
        continue label;//同上
	}
}