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 |
-
- double d=3.14;Java浮點型常量預設為double型,如要宣告一個常量為float,則需在數字後面加f或F,如:
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()函式中呼叫它。
當一個函式被呼叫時,程式就轉到這個函式中去執行,函式體裡的語句就一條一條地被呼叫。一旦函式執行結束,就又回到呼叫它的地方去繼續執行。