編碼 ASCII--0~127 65-A 97-a 西歐碼表 ISO-8859-1 0-255 1個位元組 gb2312 0-65535 gbk 2個位元組 Unicode編碼體系 utf-8 3個位元組 中 f bit位 Byte位元組 1Byte = 8bit 1KB=1024B MB GB TB PB ...
編碼
ASCII--0~127 65-A 97-a
西歐碼表---ISO-8859-1---0-255---1個位元組
gb2312----0-65535---gbk---2個位元組
Unicode編碼體系---utf-8---3個位元組
中 f
bit位 Byte位元組 1Byte = 8bit 1KB=1024B MB GB TB PB---電腦中存儲單位
常量
整數常量---所有的整數 3,99,107
小數常量---所有的小數 3.5 100.9
字元常量---用單引號將一個字母、數字、符號標識起來 ‘a’ ‘=’ ‘ ’
字元串常量---用雙引號將一個或者多個字元標識起來 “abc” “234” “q2” “”
布爾常量---用於表示邏輯值---true/false
空常量---null
5-整數, 5.0-小數 ‘5’-字元 “5”-字元串 ‘5.0’-寫法錯誤 “5.0”-字元串
進位
二進位:滿二進一,0~1 1+1=10 0b10011 0b0011,從JDK1.7開始,允許以0b作為開頭來標識一個數字是一個二進位數字
八進位:滿八進一,0~7, 7+1=10 要求必須以0作為開頭 06 015
十進位:滿十進一,0~9
十六進位:滿十六進一,0~9,,A~F,9+1=A f+1=10 要求以0x作為開頭 0x5 0xad
進位的轉換
十進位轉換成二進位:不斷除以2取餘,然後將餘數倒排
二進位轉換成十進位:從低位次起,按位次乘以2的位次次冪,然後求和
二進位轉換成八進位:從低位次起,每三位劃分為一組,不足三位補0,產生一位八進位數字,將這些數字按序排列即可
八進位轉換成二進位:一變三---一位八進位數字產生三位二進位數字
二進位轉換成十六進位:四變一的過程
變數
System.out.println(i);
int i = 5;---不行---變數必須先聲明在使用
int i;
System.out.println(i);---不行----變數在使用之前必須先初始化
數據類型
基本數據類型
數值型
整數型
byte---位元組型---1個位元組--- -2^7~2^7-1 --- -128~127
byte b = 5; byte b2 = -128;
short---短整型---2個位元組--- -2^15~2^15-1 --- -32768~32767
short s = 54; short s = -900;
int---整型---4個位元組--- -2^31~2^31-1
int i = 100000;
int j = 100_000_000;--從JDK1.7開始是允許的。在編譯的時候會自動忽略這些_ -> int j = 100000000;
int i = 00001111;---八進位
Java中整數預設類型就是int
long---長整型---8個位元組--- -2^63~2^63-1---以L作為結尾標識這個數字是一個long類型的數字
long l = 3L;
浮點型
float---單精度---4個位元組---必須以f作為結尾
float f = 3.2f;
double---雙精度---8個位元組
Java中小數預設是double類型
double d = 3.5;
double d = 4.6D;---可以
double d = 3.9e4; //是十進位的科學計數法
double d = 0x3p2; //是十六進位的科學計數法 -> 12
字元型
char---2個位元組--- 0 ~65535
char c = ‘a’;
char c = ‘中’;
布爾型
boolean---true/false
boolean b = false;
引用數據類型
類---class 介面---interface 數組---[]
數據類型的轉換
隱式轉換/自動類型轉換
byte b = 100;
int i = b;
long l = 63;---可以---當整數的值在int類型的範圍內的時候,可以不用添加L這個結尾
規律一:小的類型可以轉化為大的類型---byte->short->int->long float->double
int i = 5;
float f = i;
long l = 6;
float f = l;
規律二:整數可以轉化為小數,但是可能產生精度損失
char c = ‘a’;
int i = c;
規律三:字元型可以轉化為整型
short s = ‘a’;---可以
char c = 100;---可以
char c = ‘a’;
short s = c;---不可以
定義了char類型的變數c,存儲的數據是一個字元,不需要檢查具體的字元編碼,當賦值給short類型的時候,short需要檢查這個字元對應的編碼是否在short類型的取值範圍內,這個時候無法確定這個字元對應的具體編碼,由於short類型的取值範圍和char類型沒有完全重合,為了防止出現超過範圍的情況,不允許賦值。
short s = 97;
char c = s;--不可以
顯式轉換/強制類型轉換
long l = 54;
int i = (int)l;
double d = 3.5;
int i = (int)d;---小數強轉成整數的時候,小數部分直接捨棄
double類型不能精確存儲小數
Hexadecimal--十六進位
Decimal--十進位
Octal---八進位
Binary--二進位
運算符
算術運算符
+加 -減 *乘 /除 %取模 ++自增 --自減 +字元串拼接
int i = 5210 / 1000 * 1000;--->i = 5000;
註意:
1. 整數運算完成之後結果一定是整數
2. 整數除以0的時候,編譯通過,運行報錯---ArimeticException---算術異常
3. 小數除以0的結果是Infinity
4. 0/0.0的結果是NaN---Not a Number---非數字
5. byte/short類型在運算的時候會自動提升為int類型
%取餘運算
-5%3=-2 -4%3=-1 -3%7=-3
5%-3=2 7%-2=1 2%-8=2
-5%-3=-2 -9%-3=0
對於負數的取餘,先按照正數的取餘運算,看取餘符號左邊的數字的符號,如果左邊是負數,那麼結果就是負數
5%1.2=0.2 6%1.3=0.8
4.3%1.4=0.1
++/--
對於++在原來的基礎上自增1
int i = 5;
int j = ++i;---> i自增1,然後將i的值賦值給j---先自增,再運算
int j = i++;--->先獲取i的值5,i自增變成6,然後將獲取的值5賦值給j---先運算,再自增
int i = 3;
int j = ++i * 2;-> j = 8;
int j = i++ * 2;->j = 6
int i = 6;
int j = i++ + ++i;->i = 8; j = 14;
int j = ++i + i++;->i = 8; j = 14
byte b = 5;
b++;---JVM在底層會對結果進行強制類型轉換,將結果再轉換為byte類型
char c = ‘a’;
System.out.println(c + 4);--可以
char c2 = ‘d’;
System.out.println(c + c2);---提升為int類型之後再進行運算
+ 字元串拼接運算
“a” + “b”---> “ab”
“a” + 3---> “a3”
“a” + true-> “atrue”
2 + 4 + “f”-> “6f”
“f” + 2 + 4-> “f24”
賦值運算符
= += -= *= /= %= &= |= ^= <<= >>= >>>= ~=
int i= 5;
i += 3; -> i = i + 3; -> i = 8;
i -= 2;-> i = i - 2;-> i = 3;
int j;
j += 4;---不行
int i = 5;
i += i -= i *= 5;--> i = -15;
i = 5 + ( 5 - (5 * 5)) ;
i += i -= i *= ++i;--->i = -20;
i += i*= i-= (i++ + --i);---> i = -20;
i = 5 + ( 5 * (5 - (5 + 5)));
byte b = 5;
b += 3;---可以
byte b = 125;
b += 3;---可以--- -128
比較/關係運算符
==相等 !=不等 > < >= <= instanceof
3 == 4;-> false
instanceof---判斷對象與類的關係的--只能用於引用數據類型
String s = “abd”;
System.out.println(s instanceof String);---true
System.out.println(“def” instanceof String);---true
邏輯運算符
用於運算邏輯值
&與 |或 !非 ^異或 &&短路與 ||短路或
true&true=true true&false=false false&true=false false&false=false
true|true=true true|false=true false|true=true false|false=false
!true=false !false=true
true^true=false true^false=true false^true=true false^false=false
對於&&,如果前一個表達式的值為false,那麼就能確定整個表達式的值為false,&&後邊的運算就不再進行了
三元/三目/條件運算符
邏輯值?表達式1:表達式2
如果邏輯值為true,執行表達式1;反之執行表達式2
int i = 5, j = 7;
i > j ? System.out.println(i): System.out.println(j);---不行!三元運算符運算完成之後必須有結果!
double d = i > j ? i * 2.5 : j;---兩個表達式的返回值類型要麼一致,要麼相容
從控制台獲取數據
import java.util.Scanner; //寫在package之下,class 之上
Scanner s = new Scanner(System.in);
int i = s.nextInt();
double d = s.nextDouble();
String str = s.nextLine();
String str2 = s.next();