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();//讀入一整行
        • 字元串賦值所賦予的是兩方共同管理這個字元串,並不是內容
        • 字元串判斷的話只會判斷是否是指向同一個字元串,如需比較內容,需要使用equals()
        • 字元串操作
          • 字元串是對象,對它的所有操作都是通過”.”這個運算符來進行的
            • 它表示對.左邊的這個字元串做右邊的那個操作
            • 這裡的字元串可以是變數也可以是常量
            • Strings大小的比較
              • 兩個字元串可以比較大小:
                • s1.compareTo(s2)
                  • 如果s1比s2小,那麼結果是負的;如果s1和s2相等,那麼結果是0;如果s1比s2大,那麼結果是正的
                • compareToIgnoreCase可以不區分大小寫地來比較大小
            • 獲得String的長度
              • 用length()函數

                    

            • 訪問String里的字元
              • s.charAt(index)
                • 返回在index上的單個字元
                • index的範圍是0到length()-1
                • 第一個字元的index是0,和數組一樣
                • 但是不能用for-each循環來遍歷字元串
            • 得到子串
              • s.substring(n)

              • 得到從n號位置到末尾的全部內容

              • s.substring(b,e)

                • 得到從b號位置到e號位置之前的內容
  • 加減完後就會變成整數類型,需要重新進行強制類型轉換才能變成字元類型

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

    • 右移
    1. 帶符號右移
      • “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 ( 初始化; 條件; 單步動作){

}

  1. 第一部分是一個初始化,可以定義一個新的變數:int count=10或者直接賦值:i=10。
  2. 第二個部分是循環維持的條件。這個條件是先驗的,與while循環一樣,進入循環之前,首先要檢驗條件是否滿足,條件滿足才執行循環;條件不滿足就結束循環。
  3. 第三部分是步進,即每輪執行了循環體之後,必須執行的表達式。通常我們在這裡改變循環變數,進行加或減的操作。

註:循環控制變數i只在循環里被使用了,在循環外面它沒有任何用處。因此,我們可以把變數i的定義寫到for語句裡面去。

for中的每一個表達式都是可以省略的for(;條件;) == while(條件)

4.   break&continue

  • break:跳出循環
  • continue:跳過循環這一輪剩下的語句進入下一輪
  • 在循環前可以放一個標號來表示循環:
    • label:
  • 帶標號的break和continue對那個循環起作用

數組

  1. 數組的定義

一維數組的聲明方式:

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的長度(元素個數);

 

函數

  1. 函數的定義與調用

Java的函數必須定義在類的內部,成為類的成員。定義一個函數,要像這樣寫:

<返回類型> <方法名稱>(<參數表>) {

<方法體>

}

返回類型是這個函數運行結束時要返回給調用者的數據的類型,函數可以返回基本數據類型、對象或者void。返回void表示這個函數不返回任何值。函數名稱是一個Java名字,一樣要遵循和變數一樣的命名規則。參數表是0個或1個或多個參數定義,用逗號 ‘ , ‘ 分隔。

在這個階段,我們要在所有的函數的返回類型前面加上關鍵字「static」。static表示這個函數屬於這個類,而不屬於這個類的任何對象,因此我們才可以不製造這個類的對象,而直接從main()函數中調用它。

當一個函數被調用時,程式就轉到這個函數中去運行,函數體里的語句就一條一條地被調用。一旦函數運行結束,就又回到調用它的地方去繼續運行。