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 基本資料型別
-
整型
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型
-
浮點型
float 宣告必須以F f結尾 4位元組 -3.403E38 ~ 3.403E38 尾數精確到7位 double(預設) 4位元組 -1.798E308 ~ 1.798E308 不僅表示範圍大,而且精度高
float f=12.34; //錯誤,型別錯誤,12.34預設為double
-
字元 轉義字元**
一個字元兩個位元組,包含三種形式
a. char c = ‘中’;
b. 直接使用unicode值來表示一個字元常量: '\uXXXX' 如'\u000a'表示'\n'
c. 轉義字元 '\n' '\t'
-
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;//同上
}
}