### 1.包裝類
大家對基本數據類型都非常熟悉,例如 int、float、double、boolean、char 等。基本數據類型是不具備對象的特性,比如基本類型不能調用方法、功能簡單。。。,為了讓基本數據類型也具備對象的特性, Java 為每個基本數據類型都提供了一個包裝類,這樣我們就可以像操作對象那樣來操作基本數據類型。?
基本類型和包裝類之間的對應關系:

包裝類主要提供了兩大類方法:
? ??1. 將本類型和其他基本類型進行轉換的方法
? ??2. 將字符串和本類型及包裝類互相轉換的方法
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
// 定義int類型變量,值為100
int num = 100;
// 創建Integer包裝類對象,表示變量num的值
Integer integer=new Integer(num);
// 將Integer包裝類轉換為double類型
double num2 = integer.doubleValue();
// 將Integer包裝類轉換為float類型
float num3 = integer.floatValue();
// 將Integer包裝類轉換為int類型
int num4 = integer.intValue();
System.out.println("Integer包裝類:" + integer);
System.out.println("double類型:" + num2);
System.out.println("float類型:" + num3);
System.out.println("int類型:" + num4);
}
}
~~~
### 2.Java 中基本類型和包裝類之間的轉換
基本類型和包裝類之間經常需要互相轉換,以 Integer 為例:
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
// 定義Integer包裝類對象
Integer a = new Integer(3);
// 將對象和基本數據類型進行運算
int b = a + 5;
System.out.println("b->"+b);
}
}
~~~
在 JDK1.5 引入自動裝箱和拆箱的機制后,包裝類和基本類型之間的轉換就更加輕松便利了。
那什么是裝箱和拆箱呢?我們分別來看下
裝箱:把基本類型轉換成包裝類,使其具有對象的性質,又可分為手動裝箱和自動裝箱
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
// 定義一個int基本類型值
int num = 14;
// 手動裝箱
Integer x = new Integer(num);
// 自動裝箱
Integer y = num;
System.out.println("x->"+x+" y->"+y);
}
}
~~~
拆箱:和裝箱相反,把包裝類對象轉換成基本類型的值,又可分為手動拆箱和自動拆箱
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
// 定義一個Integer包裝類
Integer integer = new Integer(8);
// 手動拆箱
int x = integer.intValue();
// 自動拆箱
int y = integer;
System.out.println("x->"+x+" y->"+y);
}
}
~~~
### 3.Java 中基本類型和字符串之間的轉換
在程序開發中,我們經常需要在基本數據類型和字符串之間進行轉換。
基本類型轉換為字符串有三種方法:
(1)使用包裝類的 toString() 方法
(2)使用String類的 valueOf() 方法
(3)用一個空字符串加上基本類型,得到的就是基本類型數據對應的字符串
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
int num = 102;
// 使用包裝類的 toString() 方法
String str1 = Integer.toString(num);
// 使用String類的 valueOf() 方法
String str2 = String.valueOf(num);
// 用一個空字符串加上基本類型,得到的就是基本類型數據對應的字符串
String str3 = num + "";
}
}
~~~
將字符串轉換成基本類型有兩種方法:
(1)調用包裝類的 parseXxx 靜態方法
(2)調用包裝類的 valueOf() 方法轉換為基本類型的包裝類,會自動拆箱
~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
String str = "150";
// 調用包裝類的 parseXxx 靜態方法
int num1 = Integer.parseInt(str);
// 調用包裝類的 valueOf() 方法轉換為基本類型的包裝類
int num2 = Integer.valueOf(str);
}
}
~~~
### 4.使用 Date 和 SimpleDateFormat 類表示時間
在程序開發中,經常需要處理日期和時間的相關數據,此時我們可以使用 java.util 包中的 Date 類。這個類最主要的作用就是獲取當前時間,我們來看下 Date 類的使用:
~~~
package com.qunar.test;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) {
// 使用默認構建方法創建Date對象
Date date = new Date();
// 輸出Date對象
System.out.println(date);
}
}
~~~
使用 Date 類的默認無參構造方法創建出的對象就代表當前時間,我們可以直接輸出 Date 對象顯示當前的時間,顯示的結果如下:
Sun?Dec?20?11:20:25?CST?2015??
從上面的輸出結果中,我們發現,默認的時間格式不是很友好,與我們日常看到的日期格式不太一樣,如果想要按指定的格式進行顯示,如 2015-12-20 11:20:25 ,那該怎么做呢?
可以使用java.text 包中的?SimpleDateFormat?來對日期時間進行格式化,如可以將日期轉換為指定格式的文本,也可將文本轉換為日期。
(1) 使用 format() 方法將日期轉換為指定格式的文本
~~~
package com.qunar.test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) {
// 使用默認構建方法創建Date對象
Date date = new Date();
// 創建SimpleDateFormat對象,指定日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 調用format()方法,格式化時間,轉換為指定格式字符串
String today = sdf.format(date);
// 輸出轉換后的日期
System.out.println(today);
}
}
~~~
代碼中的 “yyyy-MM-dd HH:mm:ss” 為預定義字符串, yyyy 表示四位年, MM 表示兩位月份, dd 表示兩位日期, HH 表示小時(使用24小時制), mm 表示分鐘, ss 表示秒,這樣就指定了轉換的目標格式,最后調用 format() 方法將時間轉換為指定的格式的字符串。
輸出結果:
2015-12-20?11:36:45??
(2)使用 parse() 方法將文本轉換為日期
~~~
package com.qunar.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) throws ParseException {
// 創建日期格式的字符串
String today = "2015年12月20日 12:19:40";
// 創建SimpleDateFormat對象,指定日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 調用parse()方法,將字符串轉換為日期
Date date = sdf.parse(today);
// 輸出轉換后的日期
System.out.println(date);
}
}
~~~
代碼中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,調用 parse() 方法將文本轉換為日期。
運行結果:?
Sun?Dec?20?12:19:40?CST?2015??
注意:
1、 調用 SimpleDateFormat 對象的 parse() 方法時可能會出現轉換異常,即 ParseException ,因此需要進行異常處理
2、 使用 Date 類時需要導入 java.util 包,使用 SimpleDateFormat 時需要導入 java.text 包
案例:
~~~
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) throws ParseException {
// 使用format()方法將日期轉換為指定格式的文本
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 創建Date對象,表示當前時間
Date now = new Date();
// 調用format()方法,將日期轉換為字符串并輸出
System.out.println(sdf1.format(now));
System.out.println(sdf2.format(now));
System.out.println(sdf3.format(now));
// 使用parse()方法將文本轉換為日期
String d = "2014-6-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 調用parse()方法,將字符串轉換為日期
Date date = sdf.parse(d);
System.out.println(date);
}
}
~~~
### 5.Calendar 類的應用
Date 類最主要的作用就是獲得當前時間,同時這個類里面也具有設置時間以及一些其他的功能,但是由于本身設計的問題,這些方法卻遭到眾多批評,不建議使用,更推薦使用 Calendar 類進行時間和日期的處理。
java.util.Calendar 類是一個抽象類,可以通過調用 getInstance() 靜態方法獲取一個 Calendar 對象,此對象已由當前日期時間初始化,即默認代表當前時間,如 Calendar c = Calendar.getInstance();
那么如何使用 Calendar 獲取年、月、日、時間等信息呢?我們來看下面的代碼:
~~~
package com.qunar.test;
import java.util.Calendar;
public class HelloWorld {
public static void main(String[] args) {
// 抽象類 通過調用 getInstance() 靜態方法獲取一個 Calendar 對象
Calendar calendar = Calendar.getInstance();
// 年
int year = calendar.get(Calendar.YEAR);
// 月
int month = calendar.get(Calendar.MONTH);
// 日
int day = calendar.get(Calendar.DAY_OF_MONTH);
// 時
int hour = calendar.get(Calendar.HOUR_OF_DAY);
// 分
int minute = calendar.get(Calendar.MINUTE);
// 秒
int second = calendar.get(Calendar.SECOND);
System.out.println("當前時間:"+year+"年"+month+"月"+day+"日 "+hour+":"+minute+":"+second);
}
}
~~~
其中,調用 Calendar 類的 getInstance() 方法獲取一個實例,然后通過調用 get() 方法獲取日期時間信息,參數為需要獲得的字段的值, Calendar.Year 等為 Calendar 類中定義的靜態常量。
運行結果:
當前時間:2015年11月20日??13:13:23??
Calendar 類提供了 getTime() 方法,用來獲取 Date 對象,完成 Calendar 和 Date 的轉換,還可通過 getTimeInMillis() 方法,獲取此 Calendar 的時間值,以毫秒為單位。如下所示:
~~~
package com.qunar.test;
import java.util.Calendar;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) {
// 抽象類 通過調用 getInstance() 靜態方法獲取一個 Calendar 對象
Calendar calendar = Calendar.getInstance();
// Calendar 對象轉換為Date對象
Date date = calendar.getTime();
// 獲取當前毫秒數
Long time = calendar.getTimeInMillis();
System.out.println("當前時間:"+date);
System.out.println("當前毫秒數:"+time);
}
}
~~~
運行結果:
當前時間:Sun?Dec?20?13:17:13?CST?2015
當前毫秒數:1450588633247??
### 6.使用 Math 類操作數據
Math 類位于 java.lang 包中,包含用于執行基本數學運算的方法, Math 類的所有方法都是靜態方法,所以使用該類中的方法時,可以直接使用類名.方法名,如: Math.round();
常用的方法:

~~~
package com.qunar.test;
public class HelloWorld {
public static void main(String[] args) {
// 定義一個double類型的變量
double num1 = 14.87;
// double類型變量強制類型轉換為int類型,去掉小數位
int num2 = (int)num1;
System.out.println("強制類型轉換:"+num2);
// 調用round()方法,四舍五入
long num3 = Math.round(num1);
System.out.println("四舍五入:"+num3);
// 調用floor()方法,小于參數的最大整數
double num4 = Math.floor(num1);
System.out.println("小于參數的最大整數:"+num4);
// 調用ceil()方法,大于參數的最小整數
double num5 = Math.ceil(num1);
System.out.println("大于參數的最小整數:"+num5);
// 調用random()方法,[0,1]之間的隨機浮點數
double num6 = Math.random();
System.out.println("[0,1]之間的隨機浮點數:"+num6);
// [0,99]之間的隨機整數
int num7 = (int)(Math.random()*99);
System.out.println("[0,99]之間的隨機整數:"+num7);
}
}
~~~
- 前言
- [Hibernate開發之路](1)Hibernate配置
- [Hibernate開發之路](2)Hibernate問題
- [Hibernate開發之路](3)基礎配置
- [Hibernate開發之路](4)ID生成策略
- [Hibernate開發之路](5)聯合主鍵
- [設計模式實踐之路](1)單例模式
- [Java]UDP通信的簡單例子
- [Java]套接字地址InetAddress講解
- [Java開發之路](1)final關鍵字
- [Java開發之路](2)Java字符串
- [Java開發之路](3)Java常用類
- [Java開發之路](4)String、StringBuffer與StringBuilder詳解
- [Java開發之路](5)異常詳解
- [Java開發之路](6)File類的使用
- [Java開發之路](7)RandomAccessFile類詳解
- [Java開發之路](8)輸入流和輸出流
- [Java開發之路](9)對象序列化與反序列化
- [Java開發之路](10)DOM解析XML文檔
- [Java開發之路](11)SAX解析XML文檔
- [Java開發之路](12)JDOM和DOM4J解析XML文檔
- [Java開發之路](14)反射機制
- [Java開發之路](15)注解
- [Java開發之路](16)學習log4j日志
- [Java開發之路](18)關于Class.getResource和ClassLoader.getResource的路徑問題
- [Java開發之路](19)Long緩存問題
- [Java開發之路](20)try-with-resource 異常聲明
- [Java開發之路](21)Comparator與Comparable
- [Java]Java工程師成神之路
- [細說Java](1)圖說字符串的不變性
- [細說Java](2)Java中字符串為什么是不可變的
- [細說Java](3)創建字符串是使用" "還是構造函數?