java程式基礎
沒有特殊說明,我的所有學習筆記都是從廖老師那里摘抄過來的,侵刪
引言
兜兜轉轉到了大四,學過了C,C++,C#,Java,Python,學一門丟一門,到了最后還是要把Java撿起來,所以奉勸大家,面向物件還是要掌握一門,雖然Python好寫舒服,但是畢竟不能完全面向物件,也沒有那么多的應用場景,所以,奉勸看到本文的各位,還是提前學好C#或者Java,
Java程式的基本結構
每個Java程式只能有一個public修飾的類,并且該類的名字要和該Java程式檔案同名,
Java入口程式規定的方法必須是靜態方法,方法名必須為
main,括號內的引數必須是String陣列,
public static void main(String[] args) { // 方法名是main
// 方法代碼...
} // 方法定義結束
類名首字母大寫,方法名首字母小寫,
Java的每一行陳述句必須以分號結束,
特殊的多行注釋需要寫在類和方法的定義處,可以用于自動創建檔案,
/**
* 可以用來自動創建檔案的注釋
*
* @auther liaoxuefeng
*/
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
- Eclipse IDE提供了快捷鍵
Ctrl+Shift+F(macOS是?+?+F)幫助我們快速格式化代碼的功能,
變數和資料型別
Java中,變數分為兩種:基本型別的變數和參考型別的變數,
在Java中,變數必須先定義后使用,在定義變數的時候,可以給它一個初始值,
不寫初始值,就相當于給它指定了默認值,默認值總是
0,不同的資料型別占用的位元組數不一樣,
byte恰好就是一個位元組,而long和double需要8個位元組,
┌───┐
byte │ │
└───┘
┌───┬───┐
short │ │ │
└───┴───┘
┌───┬───┬───┬───┐
int │ │ │ │ │
└───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┐
long │ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘
┌───┬───┬───┬───┐
float │ │ │ │ │
└───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┐
double │ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘
┌───┬───┐
char │ │ │
└───┴───┘
在Java中的整形,和他們的取值范圍
- byte:-128 ~ 127
- short: -32768 ~ 32767
- int: -2147483648 ~ 2147483647
- long: -9223372036854775808 ~ 9223372036854775807
public class Main {
public static void main(String[] args) {
int i = 2147483647;
int i2 = -2147483648;
int i3 = 2_000_000_000; // 加下劃線更容易識別,而且不會有錯
int i4 = 0xff0000; // 十六進制表示的16711680
int i5 = 0b1000000000; // 二進制表示的512
long l = 9000000000000000000L; // long型的結尾需要加L
System.out.println(i3);
}
}
- 浮點型的數就是小數,因為小數用科學計數法表示的時候,小數點是可以“浮動”的
float f1 = 3.14f;
float f2 = 3.14e38f; // 科學計數法表示的3.14x10^38
double d = 1.79e308;
double d2 = -1.79e308;
double d3 = 4.9e-324; // 科學計數法表示的4.9x10^-324
布爾型別
boolean只有true和false兩個值,布爾型別總是關系運算的計算結果- Java語言對布爾型別的存盤并沒有做規定,因為理論上存盤布爾型別只需要1 bit,但是通常JVM內部會把
boolean表示為4位元組整數,
- Java語言對布爾型別的存盤并沒有做規定,因為理論上存盤布爾型別只需要1 bit,但是通常JVM內部會把
字符型別
char表示一個字符,Java的char型別除可表示標準的ASCII外,還可以表示一個Unicode字符,- 注意
char型別使用單引號',且僅有一個字符,要和雙引號"的字串型別區分開,
- 注意
定義變數的時候,如果加上
final修飾符,這個變數就變成了常量:
final double PI = 3.14; // PI是一個常量
double r = 5.0;
double area = PI * r * r;
PI = 300; // compile error!
常量在定義時進行初始化后就不可再次賦值,再次賦值會導致編譯錯誤,
var關鍵字
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();//型別的名字太長了
變數的作用范圍
- 而在陳述句塊中定義的變數,它有一個作用域,就是從定義處開始,到陳述句塊結束,
整數運算
遵循四則運算規則,可以使用任意嵌套的小括號
整數的數值表示不但是精確的,而且整數運算永遠是精確的,即使是除法也是精確的,因為兩個整數相除只能得到結果的整數部分:
求余運算使用
%整數的除法對于除數為0時運行時將報錯,但編譯不會報錯,
整數由于存在范圍限制,如果計算結果超出了范圍,就會產生
溢位,而溢位不會出錯,卻會得到一個奇怪的結果,自增/自減
- Java還提供了
++運算和--運算,它們可以對一個整數進行加1和減1的操作:
- Java還提供了
如果對一個負數進行右移,最高位的
1不動,結果仍然是一個負數:還有一種不帶符號的右移運算,使用
>>>,它的特點是符號位跟著動,因此,對一個負數進行>>>右移,它會變成正數,原因是最高位的1變成了0,對
byte和short型別進行移位時,會首先轉換為int再進行位移,仔細觀察可發現,左移實際上就是不斷地×2,右移實際上就是不斷地÷2,
位運算是按位進行與、或、非和異或的運算,
運算優先級
在Java的計算運算式中,運算優先級從高到低依次是:
()! ~ ++ --* / %+ -<< >> >>>&|+= -= *= /=型別自動提升與強制轉型
- 強制轉型使用
(型別) - 超出范圍的強制轉型會得到錯誤的結果,原因是轉型時,
int的兩個高位位元組直接被扔掉,僅保留了低位的兩個位元組, - 強制轉型的結果很可能是錯的,
- 應該選擇合適范圍的整型(
int或long),沒有必要為了節省記憶體而使用byte和short進行整數運算,
- 強制轉型使用
浮點數運算
浮點數運算和整數運算相比,只能進行加減乘除這些數值計算,不能做位運算和移位運算,
由于浮點數存在運算誤差,所以比較兩個浮點數是否相等常常會出現錯誤的結果,正確的比較方法是判斷兩個浮點數之差的絕對值是否小于一個很小的數:
整數運算在除數為
0時會報錯,而浮點數運算在除數為0時,不會報錯,但會回傳幾個特殊值:NaN表示Not a NumberInfinity表示無窮大-Infinity表示負無窮大
double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -Infinity
可以將浮點數強制轉型為整數,在轉型時,浮點數的小數部分會被丟掉,如果轉型后超過了整型能表示的最大范圍,將回傳整型的最大值,
如果要進行四舍五入,可以對浮點數加上0.5再強制轉型,
整型和浮點型運算時,整型會自動提升為浮點型,
布爾運算
- 布爾運算是一種關系運算,包括以下幾類:
-
- 比較運算子:
>,>=,<,<=,==,!=- 與運算
&& - 或運算
|| - 非運算
!
- 與運算
- 比較運算子:
- 優先級從高到低依次是:
!>,>=,<,<===,!=&&||
- 短路運算
- 布爾運算的一個重要的特點是短路運算,如果一個布爾運算的運算式能提前確定結果,則后續的計算不再執行,直接回傳結果,
- 三元符運算
b ? x : y,它根據第一個布爾運算式的結果,分別回傳后續兩個運算式之一的計算結果,
字符和字串
在Java中,字符和字串是兩個不同的型別,
- 基本型別的變數是“持有”某個數值,參考型別的變數是“指向”某個物件;
字符型別
- char型別是基本的資料型別
- 一個
char保存一個Unicode字符 - 轉義字符
\u+Unicode編碼來表示一個字符 - 因為Java在記憶體中總是使用Unicode表示字符,所以,一個英文字符和一個中文字符都用一個
char型別表示,它們都占用兩個位元組,要顯示一個字符的Unicode編碼,將char型別直接賦值給int型別即即可,
char c1 = 'a'
char c2 = '中'
int n1 = 'a'//65
int n2 = '中'//20013
// 注意是十六進制:
char c3 = '\u0041'; // 'A',因為十六進制0041 = 十進制65
char c4 = '\u4e2d'; // '中',因為十六進制4e2d = 十進制20013
字串型別
- String字串型別是參考型別
- 常見的轉義字符包括:
\"表示字符"\'表示字符'\\表示字符\\n表示換行符\r表示回車符\t表示Tab\u####表示一個Unicode編碼的字符
字串連接
- 使用
+連接任意字串和其他資料型別- 如果使用
+連接字串和其他型別,Java會自動將其他型別轉換為字串型別,再連接,
- 如果使用
- 使用
多行字串
- 從Java13開始,字串可以用
"""..."""表示多行字串
- 從Java13開始,字串可以用
不可變特性
- 字串
s變了嗎?其實變的不是字串,而是變數s的“指向” - 原來的
s還在,只是我們不能再通過s訪問
- 字串
空值null
String s1 = null; // s1是null
String s2; // 沒有賦初值值,s2也是null
String s3 = s1; // s3也是null
String s4 = ""; // s4指向空字串,不是null
陣列型別
Java的陣列有幾個特點:
- 陣列所有元素初始化為默認值,整型都是
0,浮點型是0.0,布爾型是false; - 陣列一旦創建后,大小就不可改變,
- 陣列是
參考型別 - 陣列元素可以是值型別(如int)或
參考型別(如String),但陣列本身是參考型別;
- 陣列所有元素初始化為默認值,整型都是
用
陣列變數.length獲取陣列大小
int[] ns = new int[] { 68, 79, 91, 85, 62 };//這樣可以不宣告陣列的大小
int[] ns = { 68, 79, 91, 85, 62 };//還可以進一步簡化為這樣
字串陣列
- 陣列本身是參考型別,其中的元素也是參考型別的字串型別,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36472.html
標籤:其他
上一篇:2019年終總結
下一篇:新手到站長的必經之路
