經常使用API - 包裝類、System類

包裝類

概述

Java提供了兩個類型系統,基本類型與引用類型,使用基本類型在於效率。java

然而不少狀況,會建立對象使用,由於對象能夠作更多的功能。數組

若是想要咱們的基本類型像對象同樣操做,就能夠使用基本類型對應的包裝類。以下:安全

基本類型 對應的包裝類
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

裝箱與拆箱

基本類型與對應的包裝類對象之間,來回轉換的過程稱爲」裝箱「與」拆箱「:ide

  • 裝箱:基本類型 --> 對應的包裝類對象。函數

  • 拆箱:包裝類對象 --> 對應的基本類型。性能

用Integer與 int爲例:(看懂代碼便可)code

基本數值---->包裝對象orm

Integer i = new Integer(4);//使用構造函數函數
Integer iii = Integer.valueOf(4);//使用包裝類中的valueOf方法

包裝對象---->基本數值對象

int num = i.intValue();

自動裝箱與自動拆箱

因爲咱們常常要作基本類型與包裝類之間的轉換,從Java 5(JDK 1.5)開始,繼承

基本類型與包裝類的裝箱、拆箱動做能夠自動完成。例如:

package com;

/**
 * 自動裝箱和拆箱:基本類型的數據和包裝類之間能夠自動的互相轉換
 *
 */
public class IntegerTest {
    public static void main(String[] args) {
        // 自動裝箱,直接把int類型的整數賦值給包裝類
        Integer i = 1; //至關於 Integer i = new Integer(1);


        // 自動拆箱:i是包裝類,沒法直接參與運算,能夠自動轉爲基本類型再進行計算
        // i = i + 2 至關於 i = i.intValue() + 2
        // 計算出結果後又自動裝箱
        i = i +2;
        System.out.println(i);
    }
}

基本類型與字符串之間的轉換

基本類型轉換爲String

基本類型轉換String總共有三種方式,查看課後資料能夠得知,這裏只講最簡單的一種方式:

  1. 直接拼接空串,遇到串以後的數據都當成字符串拼接,以前的數據正常運算。好比

    "" + 1 + 2 + 3  // 獲得123
    1 + 2 + "" + 3  // 得 33
    1 + 2 + 3 + ""  // 得 6
  2. 調用String的valueOf方法

    int num = 123;
    String str = String.valueOf(num);
    System.out.println(str);
  3. 轉換成封裝類調用toString方法

    Integer num = 6;
    String str = num.toString();
    System.out.println(str);
基本類型直接與」」相鏈接便可;如:34 + ""

String轉換成對應的基本類型

除了Character類以外,其餘全部包裝類都具備parseXxx靜態方法能夠將字符串參數轉換爲對應的基本類型:

  • public static byte parseByte(String s):將字符串參數轉換爲對應的byte基本類型。
  • public static short parseShort(String s):將字符串參數轉換爲對應的short基本類型。
  • public static int parseInt(String s):將字符串參數轉換爲對應的int基本類型。
  • public static long parseLong(String s):將字符串參數轉換爲對應的long基本類型。
  • public static float parseFloat(String s):將字符串參數轉換爲對應的float基本類型。
  • public static double parseDouble(String s):將字符串參數轉換爲對應的double基本類型。
  • public static boolean parseBoolean(String s):將字符串參數轉換爲對應的boolean基本類型。

代碼使用(僅以Integer類的靜態方法parseXxx爲例)如:

public class IntegerParse {
    public static void main(String[] args) {
        int num = Integer.parseInt("100");
    }
}

注意:若是字符串參數的內容沒法正確轉換爲對應的基本類型,則會拋出java.lang.NumberFormatException異常。

System類

java.lang.System類中提供了大量的靜態方法,能夠獲取與系統相關的信息或系統級操做。它不能被實例化。

System 類中,有標準輸入、標準輸出和錯誤輸出流;

對外部定義的屬性和環境變量的訪問;加載文件和庫的方法;

還有快速複製數組的一部分的實用方法。

字段摘要

字段摘要 描述
static PrintStream err 「標準」錯誤輸出流。
static InputStream in 「標準」輸入流。
static PrintStream out 「標準」輸出流。

方法摘要

方法 描述
static long currentTimeMillis() 返回以毫秒爲單位的當前時間。
static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
從指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束。
static String clearProperty(String key) 移除指定鍵指示的系統屬性。
static Console console() 返回與當前 Java 虛擬機關聯的惟一 Console 對象(若是有)。
static void exit(int status) 終止當前正在運行的 Java 虛擬機。
static void gc() 運行垃圾回收器。
static Map<String,String> getenv() 返回一個不能修改的當前系統環境的字符串映射視圖。
static String getenv(String name) 獲取指定的環境變量值。
static Properties getProperties() 肯定當前的系統屬性。
static String getProperty(String key) 獲取指定鍵指示的系統屬性。
static String getProperty(String key, String def) 獲取用指定鍵描述的系統屬性。
static SecurityManager getSecurityManager() 獲取系統安全接口。
static int identityHashCode(Object x) 返回給定對象的哈希碼,該代碼與默認的方法 hashCode() 返回的代碼同樣,不管給定對象的類是否重寫 hashCode()。
static Channel inheritedChannel() 返回從建立此 Java 虛擬機的實體中繼承的信道。
static void load(String filename) 從做爲動態庫的本地文件系統中以指定的文件名加載代碼文件。
static void loadLibrary(String libname) 加載由 libname 參數指定的系統庫。
static String mapLibraryName(String libname) 將一個庫名稱映射到特定於平臺的、表示本機庫的字符串中。
static long nanoTime() 返回最準確的可用系統計時器的當前值,以毫微秒爲單位。
static void runFinalization() 運行處於掛起終止狀態的全部對象的終止方法。
static void setErr(PrintStream err) 從新分配「標準」錯誤輸出流。
static void setIn(InputStream in) 從新分配「標準」輸入流。
static void setOut(PrintStream out) 從新分配「標準」輸出流。
static void setProperties(Properties props) 將系統屬性設置爲 Properties 參數。
static String setProperty(String key, String value) 設置指定鍵指示的系統屬性。
static void setSecurityManager(SecurityManager s) 設置系統安全性。

在System類的API文檔中,經常使用的方法有:

  • public static long currentTimeMillis():返回以毫秒爲單位的當前時間。

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    將數組中指定的數據拷貝到另外一個數組中。

currentTimeMillis方法

實際上,currentTimeMillis方法就是 獲取當前系統時間與1970年01月01日00:00點之間的毫秒差值

package com;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SystemTest {
    public static void main(String[] args) {
        
        //獲取當前時間毫秒值
        long ms = System.currentTimeMillis();
        System.out.println("當前時間戳:" + ms);
        Date date = new Date(ms);
        System.out.println("默認日期格式:" + date);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("指定日期格式:" + simpleDateFormat.format(date));
    }
}

練習

驗證for循環打印數字1-9999所須要使用的時間(毫秒)

public class SystemTest1 {
    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));
    }
}

arraycopy方法

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    將數組中指定的數據拷貝到另外一個數組中。

數組的拷貝動做是系統級的,性能很高。System.arraycopy方法具備5個參數,含義分別爲:

參數名稱 參數類型 參數含義
src Object 源數組
srcPos int 源數組索引發始位置
dest Object 目標數組
destPos int 目標數組索引發始位置
length int 複製元素個數

練習

將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]

import java.util.Arrays;

/**
 * 將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 class SystemPractise {
    public static void main(String[] args) {
        int[] src = {1, 2, 3, 4, 5};
        int[] dest = {5, 6, 7, 8, 9};

        System.out.println("複製以前:");
        System.out.println(Arrays.toString(src));
        System.out.println(Arrays.toString(dest));

        System.arraycopy(src,0,dest,0,3);
        System.out.println("複製以後:");
        System.out.println(Arrays.toString(src));
        System.out.println(Arrays.toString(dest));
    }
}
相關文章
相關標籤/搜索