Java學習筆記
- 2021 年 4 月 23 日
- 筆記
Java數據類型劃分
Java中定義了四類/八種基本數據類型:
1、邏輯型——boolean
- boolean類型適用於邏輯運算,一般用於程式流程式控制制
- boolean類型數據只允許取值true或false,不可以0或非0的整數替代false和true。
- 關係運算的結果是一個邏輯值,true或false。這個值可以保存在一個對應的邏輯類型的變數中,這樣的變數類型是boolean
- 布爾(Boolean)是為了紀念George Boole對邏輯計算的貢獻
- boolean flag = true;
- boolean tooHigh,tooSmall,tooRough;
- boolean done = false;
2、字元型——char
- char型數據用來表示通常意義上「字元」
- 字元常量使用單引號括起來的單個字元
- 可以用一個整數代表一個char變數的值
char c1=65 等價於 char c1=『A』;
- Java字元採用Unicode編碼,每個字元佔兩個位元組(16位),因而可用十六進位編碼形式表示
- 字母和數字在Unicode表中是順序排列的,大寫字母和小寫字母是分開排列的,並不在一起
- 逃逸字元
- 用來表達無法列印出來的控制字元或特殊字元,它由一個反斜杠「\」開頭,後面跟上另一個字元,這兩個字元合起來,組成了一個字元
- Java語言中還允許使用轉義字元『\』來將其後的字元轉變為其它的含義
\n(換行) ,\b(退格) ,\t(到下一個表格位,水平製表,即加一個Tab),
\’(單引號),\”(雙引號),\\(一個反斜線)
- char與String(字元串)
String不是基本數據類型,而是一個類,字元引在「 」內
- 字元串String
- String是一個類,String的變數是對象的管理者而並非所有者
- 就像數組變數是數組的管理者而並非所有者一樣
- 創建字元串
- String s = new String(“a string”)//創建了一個String的對象
- 用”a string”初始化這個對象
- 創建管理這個對象的變數s
- 讓s管理這個對象
- 初始化字元串變數
- String s = “hello”;
- 編譯器幫你你創建一個String類的對象交給s來管理
- 字元串連接
- 用加號(+)可以連接兩個字元串
- “hello”+”world”——>”helloworld”
- 當這個+的一邊是字元串,而另一邊不是是,會將另一邊表達為字元串然後做連接
- “I’m”+18——>”I’m 18”
- I+2+”age”——>”3age”
- “age”+I+2——>”age12”
- 用加號(+)可以連接兩個字元串
- 輸入字元串
- in.next();//讀入一個單詞,單詞的標誌是空格
- 空格包括空格、tab和換行
- in.nextLine();//讀入一整行
- in.next();//讀入一個單詞,單詞的標誌是空格
- 字元串賦值所賦予的是兩方共同管理這個字元串,並不是內容
- 字元串判斷的話只會判斷是否是指向同一個字元串,如需比較內容,需要使用equals()
- 字元串操作
- 字元串是對象,對它的所有操作都是通過”.”這個運算符來進行的
- 它表示對.左邊的這個字元串做右邊的那個操作
- 這裡的字元串可以是變數也可以是常量
- Strings大小的比較
- 兩個字元串可以比較大小:
- s1.compareTo(s2)
- 如果s1比s2小,那麼結果是負的;如果s1和s2相等,那麼結果是0;如果s1比s2大,那麼結果是正的
- compareToIgnoreCase可以不區分大小寫地來比較大小
- s1.compareTo(s2)
- 兩個字元串可以比較大小:
- 獲得String的長度
- 用length()函數
- 字元串是對象,對它的所有操作都是通過”.”這個運算符來進行的
-
-
-
-
-
- 訪問String里的字元
- s.charAt(index)
- 返回在index上的單個字元
- index的範圍是0到length()-1
- 第一個字元的index是0,和數組一樣
- 但是不能用for-each循環來遍歷字元串
- s.charAt(index)
- 得到子串
-
s.substring(n)
-
得到從n號位置到末尾的全部內容
-
s.substring(b,e)
- 得到從b號位置到e號位置之前的內容
-
- 訪問String里的字元
-
-
-
-
- 加減完後就會變成整數類型,需要重新進行強制類型轉換才能變成字元類型
3、整數型——byte,short,int,long
- Java語言整型變數的三種表現形式:
- 十進位整數,如12,-314,0
- 八進位整數,要求以0開頭,如016 → 輸出為14
- 十六進位數,要求0x或0x開頭,如0x12
- Java語言的整數型常量默認為int型
- 聲明long型常量可以加『l』或『L』,如: long I = 3L;
-
4、浮點型——float,double
Java浮點類型有固定的表述範圍和欄位長度
- Java浮點類型常量有兩種表示形式
- 十進位數形式,必須含有小數點,例如:
3.14 |
314.0 |
0.314 |
float a = 52; 是整數的話可以沒有小數點,但輸出時會自動加上小數點
-
- 科學計數法形式,如:
3.14e |
3.14E2 |
314E-2 |
- Java浮點型常量默認為double型,如要聲明一個常量為float,則需在數字後面加f或F,如:
double d=3.14;
float f=3.14f;
答案:ADF
5. 包裹類型
對於基本數據類型,Java提供了對應的包裹(wrap)類型。這些包裹類型將一個基本數據類型的數據轉換成對象的形式,從而使得它們可以像對象一樣參與運算和傳遞。下表列出了基本數據類型所對應的包裹類型:
基本類型 |
包裹類型 |
boolean |
Boolean |
char |
Character |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
我們看到,除了int和char以外,包裹類型就是把基本類型的名字的第一個字母大寫。在Java的系統類庫中,所有第一個字母大寫的,都是類的名字。所以在編輯程式的時候,一定要小心大小寫,以免一不小心犯錯。
- 用處
獲得該類型的最大最小值
-
- Integer.MIN_VALUE
- Integer.MAX_VALUE
- 運算符
- 當需要讓一個類或對象做事情的時候,用 . 運算符
- a.length
- Integer.MAX_VALUE
-
- 當需要讓一個類或對象做事情的時候,用 . 運算符
6. 數值類型之間的轉換
- 整數/小數類型之內,較短類型的值可以直接賦給較長的類型。
- 整數值可以直接賦值給小數類型。
- 強制類型轉換—除以上情況外不同類型之間賦值均需做強制類型轉換。
7. Java引用類型
- Java語言中除8種基本數據類型以外的數據類型成為引用類型
- 引用le’xii’n’g’shu’ju’yi’dui’xiang’de’xing’shi’cun’zai引用類型數據以對象的形式存在
- 引用類型變數的值是某個對象的地址,而不是對象本身
- 聲明引用類型變數時,系統只為該變數分配引用空間,並未創建一個具體的對象
- Person p1=new Person();
- person p1; //創建一個引用類型的變數,準備指向一個Person類的對象
- p1=new Person(); //調用構造方法創建對象,並使p1指向該對象
8. 基本類型的默認值
Java類的成員變數默認初始化原則
Java變數分類
- 變數用於記錄數值可變的依據
- 按所屬的數據類型劃分:
- 基本數據類型變數
- 引用數據類型變數
- 按被聲明的位置劃分:
- 局部變數:方向或語句塊內部定義的變數
- 聲明語法格式:
- 局部變數:方向或語句塊內部定義的變數
變數類型 變數名1[=值1][,變數名2[=值2]…]
-
- 成員變數(屬性):方法外部、類的內部定義的變數
- Java變數使用前必須先聲明和初始化(賦初值)
- 變數作用域
- 局部變數的作用域就是它所在的方法或者語句塊
- 在程式調用方法(進入語句塊)時,局部變數才被創建並可用,隨方法(語句塊)的退出,局部變數將被銷毀
- 變數的作用域是從定義的地方開始,到包含它的最小模組結束。
- 在變數的作用域之內不允許有其他同名的變數。
- 成員變數依附於對象存在,具有與對象的相同的生存期和作用域。
- 變數作用域舉例:
運算符
-
- 算數運算符:+,–,*,/,%,++(自加),–(自減)
- 關係運算符:>,<,>=,<=,==,!=
- 布爾邏輯運算符:!,&,|,^, &&,||
- 位運算符:&,|,^,~,>>,<<,>>>
- 賦值運算符:=
- 擴展賦值運算符:+=,-=,*=,/=
- 字元串連接運算符:+
- 運算符優先順序
優先順序 |
運算符 |
類 |
綜合性 |
1 |
() |
括弧運算符 |
由左至右 |
1 |
[] |
方括弧運算符 |
由左至右 |
2 |
!、+(正號)、-(負號) |
一元運算符 |
由右至左 |
2 |
~ |
位邏輯運算符 |
由右至左 |
2 |
++、– |
遞增與遞減運算符 |
由右至左 |
3 |
*、/、% |
算術運算符 |
由左至右 |
4 |
+、- |
算術運算符 |
由左至右 |
5 |
<<、>> |
位左移、右移運算符 |
由左至右 |
6 |
>、>=、<、<= |
關係運算符 |
由左至右 |
7 |
==、!= |
關係運算符 |
由左至右 |
8 |
&(位運算符AND) |
位邏輯運算符 |
由左至右 |
9 |
^(位運算符號XOR) |
位邏輯運算符 |
由左至右 |
10 |
|(位運算符號OR) |
位邏輯運算符 |
由左至右 |
11 |
&& |
邏輯運算符 |
由左至右 |
12 |
|| |
邏輯運算符 |
由左至右 |
13 |
?: |
條件運算符 |
由右至左 |
14 |
= |
賦值運算符 |
由右至左 |
-
- 邏輯運算符-操作數為邏輯類型
- 邏輯運算符功能
- 邏輯運算符-操作數為邏輯類型
!—— 邏輯非 & —— 邏輯與(位運算) | —— 邏輯或(位運算)
^ —— 邏輯異或 && —— 短路與 || —— 短路或
-
- 邏輯運算符功能說明:
-
- 短路邏輯運算符應用
&& —— 第一個操作數為假則不判斷第二個操作數
|| —— 第一個操作數為真則不判斷第二個操作數
-
- 關係和邏輯操作符返回boolean結果——true、false。
註:與C/C++不同,在Java中,0不能解釋為false,非0不能解釋為true。
- 位運算符–操作數為整數
- 位運算符功能
~——取反 &——按位與 |——按位或 ^——按位異或
-
- 位運算符功能說明:對二進位進行運算
- 移位運算符–操作數為整型
- 左移
- “a<<b;”將二進位形式的a逐位右移b位,最高位空出的b位補原來的符號位;
- 左移
例:00000101<<3=00101000
-
- 右移
-
- 帶符號右移
-
-
- “a>>b;”將二進位形式的a逐位右移b位,最高位空出的b位補原來的符號位
-
例:11111011>>3=11111111
2.無符號右移
-
-
- “a>>>b;”將二進位形式的a逐位右移b位,最高位空出的b位補0。
-
例:11111011>>>3=00011111
-
- 位運算符性質
- 適用數據類型:byte、short、char、int、long,對低於int型的操作數將先自動轉換為int型(32位)再位移。
- 將a左移x位相當於乘以2^x,16<<2返回16*2²=64.
- 將a帶符號右移x位相當於除以2^x,-256>>4返回-256/2⁴=-16
- 位運算符性質
- 補充:數據的補碼
補碼:正數與原碼相同,負數按位取反,末位加1
- 賦值運算符 =
- 當「=」兩側的數據類型不一致時,可以使用默認類型轉換(變數能自動升級到更長的形式,如int值總可以賦給long變數)或強制類型轉換原則進行處理
double z=12.414f;
long l=100; //默認類型轉換
int smallval=99L; //非法
int i=(int)l; //強制類型轉換
-
- 特例:可以將整型常量直接賦值給byte,short,char等類型變數,而不需要進行強制類型轉換,只要不超過其表數範圍
byte b=12; //合法
byte b=4096; //非法
math類
- math類是java中進行數學運算的一個類
- abs:計算絕對值
- pow:計算冪次
- random:給出隨機數
- round:進行四捨五入
表達式
- 表達式是符合一定語法規則的運算符和操作數的序列
a
5.0 + a
(a-b)*c-4
i<30 && i%10!=0
- 表達式的類型和值
- 對表達式中操作數進行運算得到的結果成為表達式的值
- 表達式的值的數據類型即為表達式的類型
- 表達式的運算順序
- 首先應按照運算符的優先順序從高到低的順序進行
- 優先順序相同的運算符按照事先約定的結合方向進行
char類型相加時變為int類型相加
輸入
- 用Scanner類可以用於讀取用戶在命令行輸入的各種基本類型數據:
- 布爾類型 nextBoolean()
- 位元組類型 nextByte()
- 短整型 nextShort()
- 整數類型 nextInt()
- 小數 nextFloat(),nextDouble()
- 字元串 next(),nextLine()
調試
- 可以在程式適當的地方插入輸出來顯示變數的呢
分支語句
- 分支語句實現程式流程式控制制的功能,即根據一定的條件有選擇地執行或跳過特定的語句。
- Java分支語句分類
- if-else語句
-
- switch語句
-
-
- switch(表達式)中表達式的返回值必須是下述幾種類型之一:int,byte,char,short;
- case子句中的值必須是常量,且所有case子句中的值應是不同的;
- default子句是任選的;
- break語句用來執行完一個case分支後使程式跳出switch語句塊
-
循環體
1. while循環
- while循環的意思就是:當條件滿足時,不斷地重複循環體內的語句。
- 循環執行之前判斷是否繼續循環,所以有可能循環一次也沒有被執行
- 條件成立是循環繼續的條件
小套路:如果要模擬運行一個很大次數的循環,可以模擬較少的循環次數,然後作出推斷。
2. do-while循環
- 在進入循環的時候不做檢查,而是在執行完一輪循環體的程式碼之後,再來檢查循環的條件是否滿足,如果滿足則繼續下一輪循環,不滿足則結束循環
do
{
<循環體語句>
}while(<循環條件>);
do-while循環和while循環很像,區別是在循環體執行結束的時候才來判斷條件。也就是說,無論如何,循環都會執行至少一遍,然後再來判斷條件。與while循環相同的是,條件滿足時執行循環,條件不滿足時結束循環。
3. for循環
- for循環像一個計數循環:設定一個計數器,初始化它,然後在計數器到達某值之前,重複執行循環體,而每執行一輪循環,計數器值以一定步進進行調整,比如加1或者減1
for ( i=0; i<5; i=i+1){
System.out.println(i);
}
for ( 初始化; 條件; 單步動作){
}
- 第一部分是一個初始化,可以定義一個新的變數:int count=10或者直接賦值:i=10。
- 第二個部分是循環維持的條件。這個條件是先驗的,與while循環一樣,進入循環之前,首先要檢驗條件是否滿足,條件滿足才執行循環;條件不滿足就結束循環。
- 第三部分是步進,即每輪執行了循環體之後,必須執行的表達式。通常我們在這裡改變循環變數,進行加或減的操作。
註:循環控制變數i只在循環里被使用了,在循環外面它沒有任何用處。因此,我們可以把變數i的定義寫到for語句裡面去。
for中的每一個表達式都是可以省略的for(;條件;) == while(條件)
4. break&continue
- break:跳出循環
- continue:跳過循環這一輪剩下的語句進入下一輪
- 在循環前可以放一個標號來表示循環:
- label:
- 帶標號的break和continue對那個循環起作用
數組
- 數組的定義
一維數組的聲明方式:
type var[] 或type[] var (推薦使用這種方式);
例如:int a[ ];
int[ ] a1;
double b[ ];
Mydate[ ] c; //對象數組,暫不用了解
註:Java語言中聲明數組時不能指定其長度(數組中元素的個數),例如:
int a[5]; //這是非法的
若要指定數組長度,應:a=new int[5];
2.數組的使用
定義並用運算符new為之分配空間後,才可以引用數組的中的每個元素
數組元素的引用方式:數組名[數組元素下標]
數組元素下標可以是整型變數或整型表達式。如a[3],b[i],c[6*i];
數組元素下標從0開始;長度為n的數組合法下標取值範圍:0~n-1;
如int a[]=new int[3];可以引用的數組元素為a[0]、a[1]、a[2]
每個數組都有一個屬性lenth指明它的長度,例如:a.length 指明數組a的長度(元素個數);
函數
- 函數的定義與調用
Java的函數必須定義在類的內部,成為類的成員。定義一個函數,要像這樣寫:
<返回類型> <方法名稱>(<參數表>) {
<方法體>
}
返回類型是這個函數運行結束時要返回給調用者的數據的類型,函數可以返回基本數據類型、對象或者void。返回void表示這個函數不返回任何值。函數名稱是一個Java名字,一樣要遵循和變數一樣的命名規則。參數表是0個或1個或多個參數定義,用逗號 ‘ , ‘ 分隔。
在這個階段,我們要在所有的函數的返回類型前面加上關鍵字「static」。static表示這個函數屬於這個類,而不屬於這個類的任何對象,因此我們才可以不製造這個類的對象,而直接從main()函數中調用它。
當一個函數被調用時,程式就轉到這個函數中去運行,函數體里的語句就一條一條地被調用。一旦函數運行結束,就又回到調用它的地方去繼續運行。