傳智黑馬java基礎學習——day17(包裝類、System、Math、Arrays、大資料運算)

高數老師發表於2019-01-23

第17天常用API

今日內容介紹

  1. 基本型別包裝類
  2. System
  3. Math
  4. Arrays
  5. BigInteger
  6. BigDecimal

 

 

  1. 基本型別包裝類

大家回想下,在第二天我們學習Java中的基本資料型別時,說Java中有8種基本的資料型別,可是這些資料是基本資料,想對其進行復雜操作,變的很難。怎麼辦呢?

    1. 基本型別包裝類概述

在實際程式使用中,程式介面上使用者輸入的資料都是以字串型別進行儲存的。而程式開發中,我們需要把字串資料,根據需求轉換成指定的基本資料型別,如年齡需要轉換成int型別,考試成績需要轉換成double型別等。那麼,想實現字串與基本資料之間轉換怎麼辦呢?

Java中提供了相應的物件來解決該問題,基本資料型別物件包裝類:java將基本資料型別值封裝成了物件。封裝成物件有什麼好處?可以提供更多的操作基本數值的功能。

8種基本型別對應的包裝類如下:

其中需要注意int對應的是Integer,char對應的Character,其他6個都是基本型別首字母大寫即可。

基本資料型別物件包裝類特點:用於在基本資料和字串之間進行轉換。

  1. 將字串轉成基本型別:

parseXXX(String s);其中XXX表示基本型別,引數為可以轉成基本型別的字串,如果字串無法轉成基本型別,將會發生數字轉換的問題 NumberFormatException

System.out.println(Integer.parseInt("123") + 2);

//列印結果為 125

 

  1. 將基本數值轉成字串有3種方式:
  2. 基本型別直接與””相連線即可;34+""
  3. 呼叫String的valueOf方法;String.valueOf(34) ;

  1. 呼叫包裝類中的toString方法;Integer.toString(34) ;

    1. 基本型別和物件轉換

使用int型別與Integer物件轉換進行演示,其他基本型別轉換方式相同。

  1. 基本數值---->包裝物件

Integer i = new Integer(4);//使用建構函式函式

Integer ii = new Integer("4");//建構函式中可以傳遞一個數字字串

Integer iii = Integer.valueOf(4);//使用包裝類中的valueOf方法

Integer iiii = Integer.valueOf("4");//使用包裝類中的valueOf方法

 

  1. 包裝物件---->基本數值

int num = i.intValue();

    1. 自動裝箱拆箱

在需要的情況下,基本型別與包裝型別可以通用。有些時候我們必須使用引用資料型別時,可以傳入基本資料型別。

比如:

基本型別可以使用運算子直接進行計算,但是引用型別不可以。而基本型別包裝類作為引用型別的一種卻可以計算,原因在於,Java”偷偷地”自動地進行了物件向基本資料型別的轉換。

相對應的,引用資料型別變數的值必須是new出來的記憶體空間地址值,而我們可以將一個基本型別的值賦值給一個基本型別包裝類的引用。原因同樣在於Java又”偷偷地”自動地進行了基本資料型別向物件的轉換。

  1. 自動拆箱:物件轉成基本數值
  2. 自動裝箱:基本數值轉成物件

Integer i = 4;//自動裝箱。相當於Integer i = Integer.valueOf(4);

i = i + 5;//等號右邊:將i物件轉成基本數值(自動拆箱) i.intValue() + 5; 加法運算完成後,再次裝箱,把基本數值轉成物件。

 

  1. 自動裝箱(byte常量池)細節的演示

當數值在byte範圍之內時,進行自動裝箱,不會新建立物件空間而是使用醫來已有的空間。

Integer a = new Integer(3);

Integer b = new Integer(3);

System.out.println(a==b);//false

System.out.println(a.equals(b));//true

 

System.out.println("---------------------");

Integer x = 127;

Integer y = 127;

//在jdk1.5自動裝箱時,如果數值在byte範圍之內,不會新建立物件空間而是使用原來已有的空間。

System.out.println(x==y); //true

System.out.println(x.equals(y)); //true

  1. System類
    1. 概念

在API中System類介紹的比較簡單,我們給出定義,System中代表程式所在系統,提供了對應的一些系統屬性資訊,和系統操作。

System類不能手動建立物件,因為構造方法被private修飾,阻止外界建立物件。System類中的都是static方法,類名訪問即可。在JDK中,有許多這樣的類。

    1. 常用方法

  1. currentTimeMillis() 獲取當前系統時間與1970年01月01日00:00點之間的毫秒差值
  2. exit(int status) 用來結束正在執行的Java程式。引數傳入一個數字即可。通常傳入0記為正常狀態,其他為異常狀態
  3. gc() 用來執行JVM中的垃圾回收器,完成記憶體中垃圾的清除。
  4. getProperty(String key) 用來獲取指定(字串名稱)中所記錄的系統屬性資訊

  1. arraycopy方法,用來實現將源陣列部分元素複製到目標陣列的指定位置
    1. System類的方法練習
  2. 練習一:驗證for迴圈列印數字1-9999所需要使用的時間(毫秒)

public static void main(String[] args) {

     long start = System.currentTimeMillis();

for (int i=0; i<10000; i++) {

         System.out.println(i);

}

long end = System.currentTimeMillis();

System.out.println("共耗時毫秒:" + (end-start) );

}

 

  1. 練習二:將src陣列中前3個元素,複製到dest陣列的前3個位置上

複製元素前:src陣列元素[1,2,3,4,5],dest陣列元素[6,7,8,9,10]

複製元素後:src陣列元素[1,2,3,4,5],dest陣列元素[1,2,3,9,10]

public static void main(String[] args) {

int[] src = new int[]{1,2,3,4,5};

int[] dest = new int[]{6,7,8,9,10};

System.arraycopy( src, 0, dest, 0, 3);

程式碼執行後:兩個陣列中的元素髮生了變化

src陣列元素[1,2,3,4,5]

dest陣列元素[1,2,3,9,10]

}

 

  1. 練習三:迴圈生成100-999之間的的三位數並進行列印該數,當該數能被10整除時,結束執行的程式

public static void main(String[] args){

     Random random = new Random();

while(true){

    int number = random.nextInt(900)+100; //0-899 + 100

    if (nmumber % 10 == 0) {

        System.exit(0);

}

}

}

  1. Math類
    1. 概念

Math 類是包含用於執行基本數學運算的方法的數學工具類,如初等指數、對數、平方根和三角函式。

類似這樣的工具類,其所有方法均為靜態方法,並且一般不會建立物件。如System類

 

    1. 常用方法

  1. abs方法,結果都為正數

double d1 = Math.abs(-5); // d1的值為5

double d2 = Math.abs(5); // d2的值為5

  1. ceil方法,結果為比引數值大的最小整數的double值

double d1 = Math.ceil(3.3); //d1的值為 4.0

double d2 = Math.ceil(-3.3); //d2的值為 -3.0

double d3 = Math.ceil(5.1); // d3的值為 6.0

  1. floor方法,結果為比引數值小的最大整數的double值

double d1 = Math.floor(3.3); //d1的值為3.0

double d2 = Math.floor(-3.3); //d2的值為-4.0

double d3 = Math.floor(5.1); //d3的值為 5.0

  1. max方法,返回兩個引數值中較大的值

double d1 = Math.max(3.3, 5.5); //d1的值為5.5

double d2 = Math.max(-3.3, -5.5); //d2的值為-3.3

  1. min方法,返回兩個引數值中較小的值

double d1 = Math.min(3.3, 5.5); //d1的值為3.3

double d2 = Math.max(-3.3, -5.5); //d2的值為-5.5

  1. pow方法,返回第一個引數的第二個引數次冪的值

double d1 = Math.pow(2.0, 3.0); //d1的值為 8.0

double d2 = Math.pow(3.0, 3.0); //d2的值為27.0

  1. round方法,返回引數值四捨五入的結果

double d1 = Math.round(5.5); //d1的值為6.0

double d2 = Math.round(5.4); //d2的值為5.0

  1. random方法,產生一個大於等於0.0且小於1.0的double小數

double d1 = Math.random();

 

  1. Arrays類
    1. 概念

此類包含用來運算元組(比如排序和搜尋)的各種方法。需要注意,如果指定陣列引用為 null,則訪問此類中的方法都會丟擲空指標異常NullPointerException。

    1. 常用方法

  1. sort方法,用來對指定陣列中的元素進行排序(元素值從小到大進行排序)

//源arr陣列元素{1,5,9,3,7}, 進行排序後arr陣列元素為{1,3,5,7,9}

int[] arr = {1,5,9,3,7};

Arrays.sort( arr );

  1. toString方法,用來返回指定陣列元素內容的字串形式

int[] arr = {1,5,9,3,7};

String str = Arrays.toString(arr); // str的值為[1, 3, 5, 7, 9]

  1. binarySearch方法,在指定陣列中,查詢給定元素值出現的位置。若沒有查詢到,返回位置為-1。要求該陣列必須是個有序的陣列。

int[] arr = {1,3,4,5,6};

int index = Arrays.binarySearch(arr, 4); //index的值為2

int index2= Arrasy.binarySearch(arr, 2); //index2的值為-1

    1. Arrays類的方法練習
  1. 練習一:定義一個方法,接收一個陣列,陣列中儲存10個學生考試分數,該方法要求返回考試分數最低的後三名考試分數。

public static int[] method(double[] arr){

    Arrays.sort(arr); //進行陣列元素排序(元素值從小到大進行排序)

    int[] result = new int[3]; //儲存後三名考試分數

    System.arraycopy(arr, 0, result, 0, 3);//把arr陣列前3個元素複製到result陣列中

return result;

}

  1. 大資料運算
    1. BigInteger

  java中long型為最大整數型別,對於超過long型的資料如何去表示呢.在Java的世界中,超過long型的整數已經不能被稱為整數了,它們被封裝成BigInteger物件.在BigInteger類中,實現四則運算都是方法來實現,並不是採用運算子.

  BigInteger類的構造方法:

 

 

  構造方法中,採用字串的形式給出整數

四則運算程式碼:

/

public static void main(String[] args) {

//大資料封裝為BigInteger物件

          BigInteger big1 = new BigInteger("12345678909876543210");

          BigInteger big2 = new BigInteger("98765432101234567890");

          //add實現加法運算

          BigInteger bigAdd = big1.add(big2);

          //subtract實現減法運算

          BigInteger bigSub = big1.subtract(big2);

          //multiply實現乘法運算

          BigInteger bigMul = big1.multiply(big2);

          //divide實現除法運算

          BigInteger bigDiv = big2.divide(big1);

}

    1. BigDecimal

  在程式中執行下列程式碼,會出現什麼問題?

    System.out.println(0.09 + 0.01);

    System.out.println(1.0 - 0.32);

    System.out.println(1.015 * 100);

    System.out.println(1.301 / 100);

 double和float型別在運算中很容易丟失精度,造成資料的不準確性,Java提供我們BigDecimal類可以實現浮點資料的高精度運算

   構造方法如下:

   

  建議浮點資料以字串形式給出,因為引數結果是可以預知的

  實現加法減法乘法程式碼如下:

public static void main(String[] args) {

  //大資料封裝為BigDecimal物件

          BigDecimal big1 = new BigDecimal("0.09");

          BigDecimal big2 = new BigDecimal("0.01");

          //add實現加法運算

          BigDecimal bigAdd = big1.add(big2);

          

          BigDecimal big3 = new BigDecimal("1.0");

          BigDecimal big4 = new BigDecimal("0.32");

          //subtract實現減法運算

          BigDecimal bigSub = big3.subtract(big4);

          

          BigDecimal big5 = new BigDecimal("1.105");

          BigDecimal big6 = new BigDecimal("100");

          //multiply實現乘法運算

          BigDecimal bigMul = big5.multiply(big6);

  對於浮點資料的除法運算,和整數不同,可能出現無限不迴圈小數,因此需要對所需要的位數進行保留和選擇舍入模式

  1. 總結
    1. 知識點總結
  1. 基本型別包裝類
  2. 8種基本型別對應的包裝類

基本型別 包裝類

byte Byte

short Short

int Integer

log Long

float Float

double Double

char Character

boolean Boolean

  1. 自動裝箱、自動拆箱
  2. 自動裝箱:基本數值轉成物件(int à Integer)
  3. 自動拆箱:物件轉成基本數值(Integer à int)
  4. 常用方法

public int parseInt(String str):把字串轉成基本型別int

public static String toString(int x):把基本型別int轉成字串

public static Integer valueOf(int x):把基本型別i字串轉成Integer物件

public int intValue():以 int型別返回該包裝類物件的值

 

  1. System類: 系統屬性資訊工具類
  2. public static long currentTimeMillis():獲取當前系統時間與1970年01月01日00:00點之間的毫秒差值
  3. public static void exit(int status):用來結束正在執行的Java程式。引數傳入一個數字即可。通常傳入0記為正常狀態,其他為異常狀態
  4. public static void gc():用來執行JVM中的垃圾回收器,完成記憶體中垃圾的清除。
  5. public static String getProperties():用來獲取指系統屬性資訊

 

  1. Arrays類:陣列操作工具類
  2. public static void sort方法,用來對指定陣列中的元素進行排序(元素值從小到大進行排序)
  3. public static String toString方法,用來返回指定陣列元素內容的字串形式
  4. public static void binarySearch方法,在指定陣列中,查詢給定元素值出現的位置。若沒有查詢到,返回位置為-插入點-1。要求該陣列必須是個有序的陣列

 

  1. Math類:數學運算工具類
  2. abs方法,結果都為正數
  3. ceil方法,結果為比引數值大的最小整數的double值
  4. floor方法,結果為比引數值小的最大整數的double值
  5. max方法,返回兩個引數值中較大的值
  6. min方法,返回兩個引數值中較小的值
  7. pow方法,返回第一個引數的第二個引數次冪的值
  8. round方法,返回引數值四捨五入的結果
  9. random方法,產生一個大於等於0.0且小於1.0的double小數

 

相關文章