Java是一種優秀的程序設計語言,它具有令人賞心悅目的語法和易于理解的語義。不僅如此,Java還是一個有一系列計算機軟件和規范形成的技術體系,這個技術體系提供了完整的用于軟件開發和 跨平臺部署的支持環境,并廣泛應用于嵌入式系統、移動終端、企業服務器、大型機等各種場合。
(一).數據結構與變量
首先Java的數據結構與變量中的知識主要包括字面常量,數據類型和變量三部分,接下來我們來一一了解。
1.1.字面常量
字面常量其實就和我們c語言中的字面常量相同,指的是,System.out.println("hello world");這段輸出語句中的hello world,即是常量即程序運行期間,固定不變的量稱為常量。
例如:
這里面的20,3.14,hello world,A,true,false都是字面常量,根據上面這些例子我們就可以給字面常量分類,有:
?1. 字符串常量:由""括起來的,比如“12345”、“hello”、“你好”。
2. 整形常量:程序中直接寫的數字(注意沒有小數點),比如:100、1000
3. 浮點數常量:程序中直接寫的小數,比如:3.14、0.49
4. 字符常量:由 單引號 括起來的當個字符,比如:‘A’、‘1’
5. 布爾常量:只有兩種true和false
6. 空常量:null
以上就是關于字面常量的內容,下面我們來了解數據類型的知識。
1.2.數據類型
Java中數據類型分為基本數據類型和引用數據類型兩種。
基本數據類型:整型,字符型,浮點型,布爾型。
種類:八種
注意:?
1.不論是在16位系統還是32位系統,int都占用4個字節,long都占8個字節
2.整形和浮點型都是帶有符號的
3.整型默認為int型,浮點型默認為double
4.字符串屬于引用類型,該中類型后序介紹。
以上就是關于數據結構的知識下面我們來了解關于變量的知識。
1.3.變量
在Java中我們除了有一些不變的字面常量,當然還有可變的量,這些在Java中稱之為變量,數據類型就是用來定義不同種類變量的。
語法結構:
數據類型? ?變量名=初始值;
例如:
這些等等都是數據結構變量。介紹完變量的概念之后我們來了解關于具體的幾種變量。
1.3.1.整型變量
1.3.1.1整型變量
整型變量是int類型定義的變量,具體代碼形式如下:
總結注意:
1. int不論在何種系統下都是4個字節
2. 推薦使用方式一定義,如果沒有合適的初始值,可以設置為0
3. 在給變量設置初始值時,值不能超過int的表示范圍,否則會導致溢出
4. 變量在使用之前必須要賦初值,否則編譯報錯
5. int的包裝類型為 Integer?
1.3.1.2.長整型變量
長整形變量指的是用long類型來定義的變量,具體代碼形式如下:
?注意事項:
1. 長整型變量的初始值后加L或者l,推薦加L
2. 長整型不論在那個系統下都占8個字節
3. 長整型的表示范圍為: 見上圖
4. long的包裝類型為Long
1.3.1.3.短整型變量
短整型就是指的是short類型定義的變量,具體代碼如下:
下面箭頭指向的時short類型的范圍。
注意事項:
1. short在任何系統下都占2個字節
2. short的表示范圍為:-32768 ~ 32767
3. 使用時注意不要超過范圍(一般使用比較少)
4. short的包裝類型為Short?
1.3.1.4字節型變量
字節型變量指的是被byte定義的變量,具體代碼如下:
注意事項:
1. byte在任何系統下都占1個字節
2. byte的范圍是:-128 ~ 127
3. 字節的包裝類型為Byte
?思考我們為什么要定義四種不同的整型變量?
我們可以聯想到我們買衣服時要挑選不同尺寸的衣服才能讓衣服和人的尺寸剛好合適,同樣整型變量也是如此,我們定義不同的整型變量這樣我們就可以不浪費資源和空間。
1.3.2.浮點型變量
1.3.2.1.雙精度浮點型
雙精度浮點型指的是被double修飾的變量。具體代碼形式如下:
這里左下角大家知道為什么是這個?以下注意事項會告訴大家答案
注意事項:
1. double在任何系統下都占8個字節
2. 浮點數與整數在內存中的存儲方式不同,不能單純使用 的形式來計算
3. double的包裝類型為Double
4. double 類型的內存布局遵守 IEEE 754 標準(和C語言一樣), 嘗試使用有限的內存空間表示可能無限的小數, 勢 必會存在一定的精度誤差,因此浮點數是個近似值,并不是精確值。
1.3.2.2.單精度浮點型
float 類型在 Java 中占四個字節, 同樣遵守 IEEE 754 標準. 由于表示的數據精度范圍較小, 一般在工程上用到浮點數 都優先考慮 double, 不太推薦使用 float. float的包裝類型為Float。
1.3.3.字符型變量
?注意事項:
1. Java 中使用 單引號 + 單個字母 的形式表示字符字面值.
2. 計算機中的字符本質上是一個整數. 在 C 語言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此 一個字符占用兩個字節, 表示的字符種類更多, 包括中文.
3. char的包裝類型為Character。
1.3.4.布爾型變量
布爾變量可能大家聽起來很陌生,但是它真的無時無刻都與我們息息相關,比如當聽到有人彩票中了幾百萬,我們可能會想真的假的?比爾變量就是表示真假的一個條件語句變量。例如:
注意事項:?
1. boolean 類型的變量只有兩種取值, true 表示真, false 表示假.
2. Java 的 boolean 類型和 int 不能相互轉換, 不存在 1 表示 true, 0 表示 false 這樣的用法.
3. Java虛擬機規范中,并沒有明確規定boolean占幾個字節,也沒有專門用來處理boolean的字節碼指令,在 Oracle公司的虛擬機實現中,boolean占1個字節。
4. boolean的包裝類型為Boolean。
1.4.類型轉換
Java 作為一個強類型編程語言, 當不同類型之間的變量相互賦值的時候, 會有教嚴格的校驗.
例如:
?這里面就體現了Java語言的嚴格性,int類型的可以給long類型的變量賦值,而long類型的變量不可以給int類型的變量賦值,這是為什么呢?我們可以通過以下的學習來了解。
在Java中,當參與運算數據類型不一致時,就會進行類型轉換。Java中類型轉換主要分為兩類:自動類型轉換(隱 式) 和 強制類型轉換(顯式)。
自動類型轉換:代碼不需要經過任何處理,在代碼編譯時,編譯器會自動進行處理。特點:數據范圍小的轉為數 據范圍大的時會自動進行。
例如:
類型相同時范圍小的變量會自動轉化為范圍大的值在進行賦值等操作,但范圍大的變量不能直接向范圍小的變量進行賦值等操作。
強制類型轉換:當進行操作時,代碼需要經過一定的格式處理,不能自動完成。特點:數據范圍大的到數據范圍小的。
例如:
?注意事項:
1. 不同數字類型的變量之間賦值, 表示范圍更小的類型能隱式轉換成范圍較大的類型
2. 如果需要把范圍大的類型賦值給范圍小的, 需要強制類型轉換, 但是可能精度丟失
3. 將一個字面值常量進行賦值的時候, Java 會自動針對數字范圍進行檢查
4. 強制類型轉換不一定能成功,不相干的類型不能互相轉換
1.5.類型提升
不同類型的數據之間相互運算時,數據類型小的會被提升到數據類型大的。
int與long之間:int會被提升為long類型
byte與byte之間:
正確寫法:?
?
int 轉成 String:
?
String 轉成 int:
?
以上就是關于數據類型與變量的全部內容。?
(二).運算符
運算符想必大家應該都十分熟悉了吧,但這篇文章中我們要來了解在Java中運算符是怎么用的。
2.1.算術運算符
2.1.1基本四則運算符:加減乘除模(+ - * / %)
?注意:
1.都是二元運算符,使用時必須要有左右兩個操作數
2.int / int 結果還是int類型,而且會向下取整,例如:
3.做除法和取模時,右操作數不能為0。
4.?% 不僅可以對整型取模,也可以對double類型取模,但是沒有意義,一般都是對整型取模的
5.兩側操作數類型不一致時,向類型大的提升
2.1.2.增量運算符 += -= *= %=
增量運算符其實就是一個式子的簡寫例如:a+=b;其實實際上就是a=a+b;故增量運算符我們可以總結為以下代碼,
public static void main(String[] args) {int a = 1;a += 2; // 相當于 a = a + 2System.out.println(a); // 輸出3a -= 1; // 相當于 a = a - 1System.out.println(a); // 輸出2a *= 3; // 相當于 a = a * 3System.out.println(a); // 輸出6a /= 3; // 相當于 a = a / 3System.out.println(a); // 輸出2a %= 3; // 相當于 a = a % 2System.out.println(a); // 輸出2}
?注意:只有變量才能使用該運算符,常量不能使用。
2.1.3.3. 自增/自減運算符 ++ --
++是給變量的值+1,--是給變量的值-1。
int a = 1;
a++; // 后置++ 表示給a的值加1,此時a的值為2
System.out.println(a++); // 注意:后置++是先使用變量原來值,表示式結束時給變量+1,因此輸出2
System.out.println(a); // 輸出3
++a; // 前置++ 表示給a的值加1
System.out.println(++a); // 注意:前置++是先給變量+1,然后使用變量中的值,因此輸出5
System.out.println(a); // 輸出5
// --操作符給操作-1,與++含義類似
注意:
1.如果單獨使用,【前置++】和【后置++】沒有任何區別
2.如果混合使用,【前置++】先+1,然后使用變量+1之后的值,【后置++】先使用變量原來的值,表達式 結束時給變量+1
3.只有變量才能使用自增/自減運算符,常量不能使用,因為常量不允許被修改?
2.2.關系運算符
關系運算符主要有六個: == != < > = ,其計算結果是 true 或者 false 。代碼總結如下:
int a = 10;
int b = 20;
// 注意:在Java中 = 表示賦值,要與數學中的含義區分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
?注意:當需要多次判斷時,不能連著寫,比如:3 < a < 5,Java程序與數學中是有區別的
2.3.邏輯運算符
邏輯運算符主要有三個: && || ! ,運算結果都是 boolean類型。
1.邏輯與 &&
邏輯與運算我們可以總結為一句話來概括就是左右兩個表達式同時為真時結果為真,當兩個表達式有一個為假或者同時為假的三種情況時,結果為假。
例如:
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左為真 且 右為真 則結果為真
System.out.println(a == 1 && b > 100); // 左為真 但 右為假 則結果為假
System.out.println(a > 100 && b == 2); // 左為假 但 右為真 則結果為假
System.out.println(a > 100 && b > 100); // 左為假 且 右為假 則結果為假
?2.邏輯 ||
邏輯或運算我們也可以用一句話來概括就是符號左右兩個表達式當有一個為真或兩個都為真的三種情況時結果為真,當左右兩個表達式都為假的時候結果為假。
例如:
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左為真 且 右為真 則結果為真
System.out.println(a == 1 || b > 100); // 左為真 但 右為假 則結果也為真
System.out.println(a > 100 || b == 2); // 左為假 但 右為真 則結果也為真
System.out.println(a > 100 || b > 100); // 左為假 且 右為假 則結果為假
?3. 邏輯非 !
邏輯非其實就是假的非就是真,真的非就是假。
int a = 1;
System.out.println(!(a == 1)); // a == 1 為true,取個非就是false
System.out.println(!(a != 1)); // a != 1 為false,取個非就是true
2.4.位運算符
Java 中數據存儲的最小單位是字節,而數據操作的最小單位是比特位. 字節是最小的存儲單位,每個字節是由8個二 進制比特位組成的,多個字節組合在一起可以表示各種不同的數據。
位運算符主要有四個: & | ~ ^ ,除 ~ 是一元運算符外,其余都是二元運算符。
位操作表示 按二進制位運算. 計算機中都是使用二進制來表示數據的(01構成的序列), 按位運算就是在按照二進制位 的每一位依次進行計算.
1. 按位與 &: 如果兩個二進制位都是 1, 則結果為 1, 否則結果為 0.
int a = 10;
int b = 20;
System.out.println(a & b)
?
?2. 按位或 |: 如果兩個二進制位都是 0, 則結果為 0, 否則結果為 1.
3.按位取反 ~: 如果該位為 0 則轉為 1, 如果該位為 1 則轉為 0
4. 按位異或 ^: 如果兩個數字的二進制位相同, 則結果為 0, 相異則結果為 1.
2.5.移位運算
這里的移位為算符是<< >> >>>,這三個分別是左移,右移,無符號右移,
例如:左移
?這里我們有一個訣竅就是怎樣計算發生移位之后的值,就是結果=原本值*2^移動的位數。
右移:
?右移的結果值就是n/2^x,就是結果=原本值/2^移動的位數。
這里還有一個特殊的無符號右移,
和右移最大的區別就是無符號右移右移之后最高位添零,而右移是右移后最高位添加符號位。?
2.6.條件運算符
這里的條件運算符實際上用我們的話來說就是三目運算符,形式如下:
表達式1 ? 表達式2 : 表達式3
當 表達式1 的值為 true 時, 整個表達式的值為 表達式2 的值;
當 表達式1 的值為 false 時, 整個表達式的值為 表達式3 的值.
注意:
1.表達式2和表達式3的結果要是同類型的,除非能發生類型隱式類型轉換
2.表達式不能單獨存在,其產生的結果必須要被使用。
2.7.運算符的優先級
在一條表達式中,各個運算符可以混合起來進行運算,但是運算符的優先級不同,比如:* 和 / 的優先級要高于 + 和 - ,有些情況下稍不注意,可能就會造成很大的麻煩。
例如:
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);
?上述表達式中,由于 + 的優先級要高于 >> , 因此a先和b-a的結果做加法,整體為20,最后再進行右移,因此結果 為10。
注意:運算符之間是有優先級的. 具體的規則我們不必記憶. 在可能存在歧義的代碼中加上括號即可.
(三).程序邏輯控制??
3.1.順序結構
順序結構簡而言之就是按照順序一行一行的寫代碼,
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 運行結果
aaa
bbb
ccc
代碼的順序改變,運行結果也隨之而改變。?
3.2.分支結構
3.2.1.if語句
語法格式1:
語法格式2:?
語法格式3:?
3.2.2. switch 語句
基本語法:
switch(表達式){
case 常量值1:{
語句1;
[break;]
}
case 常量值2:{
語句2;
[break;]
...
default:{
內容都不滿足時執行語句;
[break;]
}
}
執行流程:?
1. 先計算表達式的值
2. 和case依次比較,一旦有響應的匹配就執行該項下的語句,直到遇到break時結束
3. 當表達式的值沒有與所列項匹配時,執行default
注意以下一個例子:
注意事項:?
1.多個case后的常量值不可以重復
2.switch的括號內只能是以下類型的表達式:
基本類型:byte、char、short、int,注意不能是long類型
引用類型:String常量串、枚舉類型
3.break 不要遺漏, 否則會失去 "多分支選擇" 的效果
4.switch 不能表達復雜的條件
3.3.循環結構
3.3.1 while 循環
基本語法格式:
?循環條件為 true, 則執行循環語句; 否則結束循環.
例如:打印1-10的數字
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
打印數字5的階乘
public static void main(String[] args) {int num=1;int n=1;while(n<=5){num*=n;n++;}System.out.println(num);}
等等很多的這種例子。?
?注意事項:
1. 和 if 類似, while 下面的語句可以不寫 { } , 但是不寫的時候只能支持一條語句. 建議還是加上 { } 2. 和 if 類似, while 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, while 后面不要多寫 分號, 否則可能導致循環不能正確執行.
3.3.2break
break的功能是讓循環提前結束。
例如:
這里當出現了圖中要求的數字的時候程序遇到break就會跳出循環。
3.3.3.?continue
continue 的功能是跳過這次循環, 立即進入下次循環.
例如:找到 100 - 200 中所有 3 的倍數
3.3.4for循環
基本語法:
?表達式1: 用于初始化循環變量初始值設置,在循環最開始時執行,且只執行一次
表達式2: 循環條件,滿則循環繼續,否則循環結束
表達式3: 循環變量更新方式
執行過程:
①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②為false,循環結束。
例如:打印1-100的和
public static void main(String[] args) {int sum=0;for(int i=1;i<=100;i++){sum+=i;}System.out.println(sum);}
等等很多地方都會用到for循環的。
注意事項:??
1. 和 if 類似, for 下面的語句可以不寫 { } , 但是不寫的時候只能支持一條語句. 建議還是加上 { }
2. 和 if 類似, for 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, for 后面不要多寫 分號, 否則可能導致循環不能正確執行.
4. 和while循環一樣,結束單趟循環用continue,結束整個循環用break
3.4輸入輸出
Java中的輸入和輸出和其他語言的輸入輸出不一樣,接下來讓我們看看具體是怎么樣的。
3.4.1輸出到控制臺
基本語法:
System.out.println(msg); // 輸出一個字符串, 帶換行
System.out.print(msg); // 輸出一個字符串, 不帶換行
System.out.printf(format, msg); // 格式化輸出
1.println 輸出的內容自帶 \n, print 不帶 \n
2.printf 的格式化輸出方式和 C 語言的 printf 是基本一致的.
3.4.2從鍵盤輸入
使用 Scanner 讀取字符串/整數/浮點數
例如:
好了以上就是我與大家分享的內容,望各位指出小編的不足之處我一定會積極改正的。