常量的概述和使用
-
A:什么是常量
- 在程序執行的過程中其值不可以發生改變
-
B:Java中常量的分類
- 字面值常量
- 自定義常量(面向對象部分講)
-
C:字面值常量的分類(6種常量)
- 字符串常量 用雙引號括起來的內容
- 整數常量 所有整數(無限個)
- 小數常量所有小數
- 字符常量 用單引號括起來的內容,里面只能放單個數字,單個字母或單個符號
'10','ab'非法的。 - 布爾常量較為特殊,只有true和false
- 空常量 null(數組部分講解)
- 整數常量 所有整數(無限個)
- 字符串常量 用雙引號括起來的內容
-
D:案例演示
- 用輸出語句輸出各種常量。null不演示
class Demo1 {
public static void main(String[] args) {
//字符串常量
System.out.println("Hello World!");
//整數常量
System.out.println(100);
//小數常量
System.out.println(12.3); //默認是Double精度類型
//字符常量
System.out.println(' '); //單個數字,單個字母,或單個符號,一個也沒有不可以,超過也一個不可以。
//布爾常量
System.out.println(true); //true和false都是關鍵字
//null常量不演示,后續會詳細講
//在字符常量中'100','ab',''均為非法,只能單個,否則報錯未結束的字符串
}
}
進制概述和二,八,十六進制圖解
-
A:什么是進制
- 進制:就是進位制,是人們規定的一種進位方法。 對于任何一種進制--X進制,就表示某一位置上的數運算時是逢X進一位。二進制就是逢二進一,八進制是逢八進一,十進制是逢十進一,十六進制是逢十六進一。
- 例如一周有七天,七進制,一年有十二個月,十二進制
-
B:二進制的由來
- 其實二進制來源與中國,請看史料記載
- 18世紀德國數理哲學大師萊布尼茲從他的傳教士朋友鮑威特寄給他的拉丁文譯本《易經》中,讀到了八卦的組成結構,驚奇地發現其基本素數(0)(1),即《易經》的陰爻yao- -和__陽爻,其進位制就是二進制,并認為這是世界上數學進制中最先進的。20世紀被稱作第三次科技革命的重要標志之一的計算機的發明與應用,其運算模式正是二進制。它不但證明了萊布尼茲的原理是正確的,同時也證明了《易經》數理學是很了不起的。
-
C:八進制的由來
- 任何數據在計算機中都是以二進制的形式存在的。二進制早期由電信號開關演變而來。一個整數在內存中一樣也是二進制的,但是使用一大串的1或者0組成的數值進行使用很麻煩。
- 所以就想把一大串縮短點,將二進制中的三位用一位表示。這三位可以取到的最大值就是7.超過7就進位了,這就是八進制。
-
D:十六進制的由來
- 但是對于過長的二進制變成八進制還是較長,所以出現的用4個二進制位表示一位的情況,四個二進制位最大是15,這就是十六進制。
-
E:不同進制表現同一個數據的形式特點
- 進制越大,表現形式越短
不同進制數據的表現形式

二進制是所有進制的基礎。8421,2的次方數。
-
A:二進制的數據表現形式
- 由0,1組成。以0b(b可以大寫也可以小寫)開頭(JDK1.7版本可以表示二進制了)
-
B:八進制的數據表現形式
- 由0,1,…7組成。以0開頭
-
C:十進制的數據表現形式
- 由0,1,…9組成。整數默認是十進制的
-
D:十六進制的數據表現形式
- 由0,1,…9,a,b,c,d,e,f(大小寫均可)。以0x開頭
E:案例演示
class Demo2JinZhi {
public static void main(String[] args) {
//二進制,1.7版本前面加上0b表示二進制,b大寫小寫都可以
System.out.println(0b100);
//八進制
System.out.println(074);
//十進制
System.out.println(100);
//十六進制,10到15分別用a到f表示,大小寫都可以
System.out.println(0x3c);
// 0b1010101 052 0x52
}
}
* 輸出不同進制表現100的數據。
* 0b100 //二進制 0b開頭
* 0100 //八進制 0開頭
* 100 // 十進制
* 0x100 //16進制0x開頭
任意進制到十進制的轉換圖解
- A:任意進制到十進制的轉換原理
- 系數:就是每一位上的數據。
- 基數:X進制,基數就是X。
- 權:在右邊,從0開始編號,對應位上的編號即為該位的權。
- 結果:把系數*基數的權次冪相加即可。
- B:畫圖練習
- 二進制--十進制
- 八進制--十進制
- 十六進制--十進制

注意去權次冪的時候,從0開始要數到系數的位置,從1開始的話,要少數一位。
十進制到任意進制的轉換圖解
- A:十進制到任意進制的轉換原理
- 除積倒取余
- B:畫圖練習
- 十進制--二進制
- 十進制--八進制
-
十進制--十六進制
jinzhi.png
快速的進制轉換法
- A:8421碼及特點
- 8421碼是中國大陸的叫法,8421碼是BCD代碼中最常用的一種。在這種編碼方式中每一位二值代碼的1都是代表一個固定數值,把每一位的1代表的十進制數加起來,得到的結果就是它所代表的十進制數碼。
- B:通過8421碼的方式進行二進制和十進制的相互轉換
- C:二進制到八進制的簡易方式
-
D:二進制到十六進制的簡易方式
8421ma-min.png
八進制數字 三個bit位為一組。
十六進制,四個bit位為一組。
一個字節占八個個bit位。
一個字,兩個字節,16個bit位置。
原碼反碼補碼
- A:為什么要講解有符號數據表示法
- 后面學習數據類型的時候,要學習強制類型轉換,如果不知道有原反補會看不懂結果
- B:有符號數據表示法的幾種方式
- 原碼
- 就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
- 通過一個字節,也就是8個二進制位表示+7和-7
- 0(符號位)0000111
- 1(符號位)0000111
- 反碼
- 正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
- 補碼
-
正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
YuanMaFanMaBuMa-min.png
在計算機系統里面,存儲采用的是原碼的形式,計算采用的都是補碼的形式,進行運算。
原碼->反碼->補碼
-
- 原碼
原碼反碼補碼的練習
- A:已知原碼求補碼(加一取反)
- 0b10110100
0b11001100
- 0b10110100
- B:已知補碼求原碼
-
0b11101110 (減1取反)
ob10010010
YuanMaBuMaLianxi-min.png
-
變量的概述及格式
- A:什么是變量
- 在程序執行的過程中,在某個范圍內其值可以發生改變的量(ex:數學的未知數)
- B:變量的定義格式
- 數據類型 變量名 = 變量值;
- C:為什么要定義變量
- 用來不斷的存放同一類型的常量,并可以重復使用
數據類型的概述和分類
-
A:為什么有數據類型
- Java語言是強類型語言,對于每一種數據都定義了明確的具體數據類型,在內存總分配了不同大小的內存空間
-
B:Java中數據類型的分類
- 基本數據類型
- 引用數據類型
- 面向對象部分講解
-
C:基本數據類型分類(4類8種)
- 整數型
- byte,short,int,long
- 浮點型
- float,double
- 字符型
- char
- 布爾型
- boolean
- 整數型
-
D:引用數據類型
類(class)、接口(interface)、數組([]).
class Demo1 {
public static void main(String[] args) {
//整數類型byte,short,int,long
/*
byte占的是1個字節 = 8個bit 0 1111111 = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127
1 1111111 = -127
1 0000000 取反
1 0000001 -127的補碼
1 0000000 -128的補碼
0 0000001 減去1
-------------
1 1111111
1 0000000 -128的原碼
byte取值范圍是-128到127 -128到-1 0到127 256個數
short占的2個字節 = 16個bit
int 占的4個字節 = 32個bit //int是整數類型的默認類型
long占的8個字節 = 64個bit
*/
//浮點類型 float和double
/*
float占的是4個字節 單精度
double占的是8個字節 雙精度 double是浮點數的默認類型
*/
//字符類型
/*
char占的兩個字節 0到65535之間
*/
//布爾類型
/*
布爾類型占幾個字節?
按照bit位算的話,應該占的是八分之一個字節
java中沒有明確布爾類的大小。
*/
}
}
?
?
?
定義不同數據類型的變量
- A:案例演示
- 定義不同基本數據類型的變量,并輸出
- 賦值時候注意float類型,long類型
class Demo2DateType {
public static void main(String[] args) {
//整數類型
byte b = 100;
short s = 1000;
int i = 10000;
long l = 123456789012345678L;
//System.out.println(12345+5432l);切記 如果想標識long類型的數,超過了int的取值范圍,需要在末尾
//加上L,最好是大寫,因為小寫的太像1這個數字;
//浮點類型
float f = 12.3f;
double d = 13.4d; //13.4后面的d可以省略,d可以是大寫也可以是小寫
//字符類型
char c1 = 'a';
char c2 = '0';
char c3 = '中';
//字符是否可以存儲中文?
//可以,java是unicode編碼,char類型占的兩個字節,而一個中文占的也是兩個字節
//System.out.println(c3);
//布爾類型
boolean b1 = true;
boolean b2 = false;
}
}
附上一個截圖,不同數據類型的取值范圍
整型的取值范圍默認是int,浮點型默認是double,所以當使用float單精度定義數據時候必須帶有f,數字過于大的話,需要在末尾帶有L(小寫容易混淆)。
使用變量的注意事項
- A:案例演示
- a:作用域問題
- 同一個區域不能使用相同的變量名
- b:初始化值問題
- 局部變量在使用之前必須賦值
- c:一條語句可以定義幾個變量
- int a,b,c...;
- a:作用域問題
class Demo3DateType {
public static void main(String[] args) { //作用域
int x = 10;
x = 20; //賦值將原來10覆蓋掉
//System.out.println(x);
int y; //變量在使用之前必須賦值
y = 30;
//System.out.println(y);
int a,b,c; //一條語句可以聲明多個變量
a = 10;
b = 20;
c = 30;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
數據類型轉換之隱式轉換
- A:案例演示
- a:int + int
- b:byte + int 的結果分別用byte和int類型接收,看效果
- B:Java中的默認轉換規則
-
C:畫圖解釋byte+int類型的問題
leixing-min.png
由于java中整型的數據默認是int類型,因此 short btye類型的數據和int類型的進行運算的時候,會被自動提升稱為int類型。
int和long等更高精度的數據運算時,會提升成為long等更高精度的數據類型,為了確保精度。
數據類型轉換之強制轉換
- A:強制轉換問題
- int a = 10;
- byte b = 20;
- b = a + b;
- B:強制轉換的格式
- b = (byte)(a + b);
- C:強制轉換的注意事項
- 如果超出了被賦值的數據類型的取值范圍得到的結果會與你期望的結果不同
class Demo4DateType {
public static void main(String[] args) {
/*int i = 100;
byte b = 50;
i = i + b; //自動類型提升(隱式轉換)
System.out.println(i);*/
//00000000 00000000 00000000 10010110 int類型的150
//10010110 用byte強轉150后的結果,運算中都是使用補碼
//0 1101010 106
//1 1101010 -106的原碼
//1 0010101 -106的反碼
//0 0000001 +1
//1 0010110 -106的補碼
int i = 100;
byte b = 50;
b = (byte)(i + b); //強制類型轉換
System.out.println(b);
byte b2 = (byte)300;
System.out.println(b2);
//00000000 00000000 00000001 00101100 300的二進制表現形式,本應該占32位
//00101100
}
}
面試題之變量相加和常量相加的區別
- A:案例演示
- 面試題:看下面的程序是否有問題,如果有問題,請指出并說明理由。
- byte b1 = 3;
- byte b2 = 4;
- byte b3 = b1 + b2;
- 從兩方面去回答這個題
- b1和b2是兩個變量,變量里面存儲的值都是變化的,所以在程序運行中JVM是無法判斷里面具體的值
- byte類型的變量在進行運算的時候,會自動類型提升為int類型
- byte b4 = 3 + 4;
- 3和4都是常量,java有常量優化機制,就是在編譯的的時候直接把3和4的結果賦值給b4了
//面試題(數據類型轉換)
class Demo5DateType {
public static void main(String[] args) {
byte b,b1,b2;
b1 = 3;
b2 = 4;
//b = b1 + b2; //b1和b2是兩個byte類型的變量,
//在進行運算的會自動類型提升為int類型
//b1和b2是兩個變量,jvm無法判斷里面具體的值
b = 3 + 4; //3和4是兩個常量,java有一個常量優化機制,在編譯直接講常量相加的結果算出并賦值
//這兩種哪種會報錯,為什么
System.out.println(b);
byte x = 100;
}
}
數據類型中補充的幾個小問題
-
A:在定義long或者float類型的變量的時候,需要在末尾跟上L和F;
- 因為默認的數據類型是int和double
- byte和short在定義的時候,他們接收的實際上是一個int類型值,越界就會報錯
-
B: Byte的值問題
byte b1 =127;
byte b2 =(byte)300; //損失精度
byte b4 =(byte)130; //損失精度,此外計算機在進行運算的時候,都是使用補碼
byte的取值范圍 -128~127;
-
C: 數據類型轉換之默認轉換
進行混合運算的時候,byte,short,char不會相互轉換,都會自動類型提升為int類型,其他類型進行混合運算的是小的數據類型提升為大的
byte,short,char -- int -- long -- float -- double
long: 8個字節
float:4個字節
IEEE754 國際制定的標準
4個字節是32個二進制位
1位是符號位 1是負數,0是正數
8位是指數位
00000000 11111111
0到255
1到254
每個指數位減去127
-126到127
23位是尾數位(無限接近1)
A:它們底層的存儲結構不同。
-
B:float表示的數據范圍比long的范圍要大
- long:2^63-1
- float:3.410^38 > 210^38 > 28^38 = 22338 = 2*2^114 > 2^63-1
-
D: java語言中的字符char可以存儲漢字嗎?為什么?
- 可以的,因為java語言采用的是Unicode編碼,unicode編碼中每個字符占用兩個字節
- 所以,java中的字符可以存儲一個中文漢子。
字符和字符串參與運算
-
A:案例演示
- System.out.println('a'); //a的acsII碼表 97
- System.out.println('a'+1);//輸出 98 提升成int類型
- System.out.println((char)('a'+1));//強轉輸出 b
- System.out.println((char)(98));//強轉輸出 b
- System.out.println((char)(100));//強轉輸出 ? 只用到了127位(Unicode)
通過看結果知道'a'的值是多少,由此引出ASCII碼表
-
B:ASCII碼表的概述
- 記住三個值:
- '0' 48
- 'A' 65
- 'a' 97
- 記住三個值:
-
C:案例演示
- System.out.println("hello"+'a'+1);//輸出:helloa1 任何數據用+與字符串連接最后都會產生新的字符串
- System.out.println('a'+1+"hello");//輸出: 98 hello
-
D:+在有字符串參與中被稱為字符串連接符
- System.out.println("5+5="+5+5);//輸出 5+5=55
- System.out.println(5+5+"=5+5");//輸出:10=5+5
char數據類型
- A:char c = 97;
- B:Java語言中的字符char可以存儲一個中文漢字嗎?為什么呢?
- 可以。因為Java語言采用的是Unicode編碼。Unicode編碼中的每個字符占用兩個字節。
- 所以,Java中的字符可以存儲一個中文漢字
算術運算符的基本用法
- A:什么是運算符
- B:運算符的分類
- C:算數運算符有哪些
- D:案例演示
- 算數運算符的基本用法
- 注意事項:
- a:整數相除只能得到整數。如果想得到小數,必須把數據變化為浮點數類型
- b:/獲取的是除法操作的商,%獲取的是除法操作的余數

//取模運算
class Demo7Operator {
public static void main(String[] args) {
//System.out.println(12 % 5); //取模運算就是取余數
//System.out.println(-3 % 5); //如果左邊絕對值小于右邊就是本身
//System.out.println(-10 % 5); //如果左邊絕對值是右邊的倍數時,結果為0
//System.out.println(13 % -5); //如果左邊的絕對值大于右邊,結果是余數,符號取決于左邊,右邊忽略不計
//System.out.println(3 % 2); //一個數模與2結果要么是0,要么是1,可以用來切換條件
int a = 100;
int b = 30;
System.out.println(a / b); //整數與整數運算結果肯定是整數,不能是小數 out : 3
}
}
算術運算符++和--的用法
- A:++,--運算符的作用
- 自加(++)自減(--)運算
- ++:自加。對原有的數據進行+1
- --:自減。對原有的數據進行-1
- B:案例演示
- a:單獨使用:
- 放在操作數的前面和后面效果一樣。(這種用法是我們比較常見的)
- b:參與運算使用:
- 放在操作數的前面,先自增或者自減,然后再參與運算。
- 放在操作數的后面,先參與運算,再自增或者自減。
- 同理a--
- a:單獨使用:
class Demo8Operator {
public static void main(String[] args) {
/*int a = 4;
//a++; //a++ 相當于a = a+1
//int b = a++; //如果++符號放在變量的后面,是先賦值,再自加
//無論賦值,還是運算,還是打印都是先將變量里的值拿出來,然后在自身+1
//System.out.println("b = " + b);
System.out.println(a++);// 輸出4
System.out.println(a);*/ //輸出 5
int a = 4;
++a; //a++和++a單獨寫沒有區別
//int b = ++a; //如果++符號放在變量的前面,是先自加,然后再賦值
//System.out.println("b = " + b);
System.out.println(a);
}
}
算術運算符++和--的練習
-
A:案例演示
請分別計算出a,b,c的值?
-
int a = 10;
int b = 10;
int c = 10;a = b++; //a = 10 b = 11 c = --a; //c = 9 a = 9 b = ++a; //b = 10 a = 10 a = c--; //a = 9 c = 8
-
B:案例演示
-
請分別計算出x,y的值?
int x = 4;
int y = (x++)+(++x)+(x*10);
?
代碼:
-
class Demo9Operator {
public static void main(String[] args) {
/*int a = 10;
int b = 10;
int c = 10;
a = b++; //a = 10 b = 11
System.out.println(a); //10
c = --a; //c = 9 a = 9
b = ++a; //b = 10 a = 10
a = c--; //a = 9 c = 8
System.out.println("=================================");
System.out.println(a); //9
System.out.println(b); //10
System.out.println(c); //8*/
int x = 4;
// 4 + 6 + 6 * 10 = 70
int y = (x++)+(++x)+(x*10);
System.out.println(x);
System.out.println(y);
}
}
賦值運算符的基本用法
A:賦值運算符有哪些
-
B:案例演示
- 賦值運算符的基本用法
-
注意事項:
-
a:基本的賦值運算符:=
- 把=右邊的數據賦值給左邊。
-
b:擴展的賦值運算符:+=,-=,*=,/=,%=
- += 把左邊和右邊做加法,然后賦值給左邊。
-
賦值運算符的面試題
- A:案例演示
- 面試題:看下面的程序是否有問題,如果有問題,請指出并說明理由。
- short s=1;s = s+1;
- short s=1;s+=1;
//面試題
class Demo10Operator {
public static void main(String[] args) {
int a = 10;
//a += 20; //a = a + 20;相當于將左右兩邊相加的結果再賦值給左邊,
//20 += a; //左邊一定是變量
a *= 20;
//System.out.println(a);
short s=1;
//s = s+1; //short類型與int類型進行運算會提升為int類型,結果是int類型,不能賦值給short類型
s+=1; // s = (short)(s + 1);+=號是一個賦值運算符,所以為了能夠保證賦值成功,會把int類型強轉為short類型
System.out.println(s);
}
}
關系運算符的基本用法及其注意事項
- A:關系運算符有哪些
- B:案例演示
- 關系運算符的基本用法
- 注意事項:
無論你的操作是簡單還是復雜,結果是boolean類型。
-
"=="不能寫成"="。
guanxi.png