java學習筆記

◆◇dear丶妖孽╮ゞ發表於2021-04-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
    • 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

    • 右移
    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()函式中呼叫它。

當一個函式被呼叫時,程式就轉到這個函式中去執行,函式體裡的語句就一條一條地被呼叫。一旦函式執行結束,就又回到呼叫它的地方去繼續執行。

 

相關文章