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總共有三種方式,查看課後資料能夠得知,這裏只講最簡單的一種方式:
直接拼接空串,遇到串以後的數據都當成字符串拼接,以前的數據正常運算。好比
"" + 1 + 2 + 3 // 獲得123 1 + 2 + "" + 3 // 得 33 1 + 2 + 3 + "" // 得 6
調用String的valueOf方法
int num = 123; String str = String.valueOf(num); System.out.println(str);
轉換成封裝類調用toString方法
Integer num = 6; String str = num.toString(); System.out.println(str);
基本類型直接與」」相鏈接便可;如:34 + ""
除了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
異常。
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方法就是 獲取當前系統時間與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)); } }
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)); } }