1、Java 中的包裝類
相信各位小伙伴們對基本數(shù)據(jù)類型都非常熟悉尼摹,例如 int见芹、float、double蠢涝、boolean玄呛、char 等『投基本數(shù)據(jù)類型是不具備對象的特性的徘铝,比如基本類型不能調(diào)用方法、功能簡單。庭砍。场晶。混埠,為了讓基本數(shù)據(jù)類型也具備對象的特性怠缸, Java 為每個基本數(shù)據(jù)類型都提供了一個包裝類,這樣我們就可以像操作對象那樣來操作基本數(shù)據(jù)類型钳宪。
基本類型和包裝類之間的對應關(guān)系:
基本類型 | 對應的包裝類 |
---|---|
byte | Byte |
short | Short |
int | Interger |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包裝類主要提供了兩大類方法:
將本類型和其他基本類型進行轉(zhuǎn)換的方法
將字符串和本類型及包裝類互相轉(zhuǎn)換的方法
我們將在后面的小節(jié)逐步講解揭北,表著急哦~~
public class HelloWorld {
public static void main(String[] args) {
// 定義int類型變量,值為86
int score1 = 86;
// 創(chuàng)建Integer包裝類對象吏颖,表示變量score1的值
Integer score2=new Integer(score1);
// 將Integer包裝類轉(zhuǎn)換為double類型
double score3=score2.doubleValue();
// 將Integer包裝類轉(zhuǎn)換為float類型
float score4=score2.floatValue();
// 將Integer包裝類轉(zhuǎn)換為int類型
int score5 =score2.intValue();
System.out.println("Integer包裝類:" + score2);
System.out.println("double類型:" + score3);
System.out.println("float類型:" + score4);
System.out.println("int類型:" + score5);
}
}
2搔体、Java 中基本類型和包裝類之間的轉(zhuǎn)換
基本類型和包裝類之間經(jīng)常需要互相轉(zhuǎn)換,以 Integer 為例(其他幾個包裝類的操作雷同哦):
Integer a=new Tnterger(3);//定義Interger包裝類對象半醉,值為3
int b=a+5;//將對象和基本類型進行運算
在 JDK1.5 引入自動裝箱和拆箱的機制后疚俱,包裝類和基本類型之間的轉(zhuǎn)換就更加輕松便利了。
那什么是裝箱和拆箱呢缩多?我們分別來看下
裝箱:把基本類型轉(zhuǎn)換成包裝類呆奕,使其具有對象的性質(zhì),又可分為手動裝箱和自動裝箱
int i=10;//定義一個int基本類型值
Integer x=new Integer(i);//手動裝箱
Integer y =i;//自動裝箱
拆箱:和裝箱相反衬吆,把包裝類對象轉(zhuǎn)換成基本類型的值梁钾,又可分為手動拆箱和自動拆箱
Integer j=new Integer(8);//定義一個Integer包裝類對象,值為8
int m=j.intValue();//手動拆箱為int類型
int n=j;//自動拆箱為int類型
public class HelloWorld {
public static void main(String[] args) {
// 定義double類型變在 JDK1.5 引入自動裝箱和拆箱的機制后逊抡,包裝類和基本類型之間的轉(zhuǎn)換就更加輕松便利了姆泻。
那什么是裝箱和拆箱呢?我們分別來看下
裝箱:把基本類型轉(zhuǎn)換成包裝類冒嫡,使其具有對象的性質(zhì)拇勃,又可分為手動裝箱和自動裝箱量
double a = 91.5;
// 手動裝箱
Double b = new Double(a);
// 自動裝箱
Double c =a;
System.out.println("裝箱后的結(jié)果為:" + b + "和" + c);
// 定義一個Double包裝類對象,值為8
Double d = new Double(87.0);
// 手動拆箱
double e = d.doubleValue();
// 自動拆箱
double f =d ;
System.out.println("拆箱后的結(jié)果為:" + e + "和" + f);
}
}
3孝凌、Java 中基本類型和字符串之間的轉(zhuǎn)換
在程序開發(fā)中方咆,我們經(jīng)常需要在基本數(shù)據(jù)類型和字符串之間進行轉(zhuǎn)換。
其中胎许,基本類型轉(zhuǎn)換為字符串有三種方法:
1峻呛、 使用包裝類的 toString() 方法
2、使用String類的 valueOf() 方法
3辜窑、 用一個空字符串加上基本類型钩述,得到的就是基本類型數(shù)據(jù)對應的字符串
//將基本類型轉(zhuǎn)換為字符串
int c=10;
String str1=Integer.toString(c);//方法一
String str2=String.valueOf(c);//方法二
String str3=c+"";//方法三
再來看,將字符串轉(zhuǎn)換成基本類型有兩種方法:
1穆碎、 調(diào)用包裝類的 parseXxx 靜態(tài)方法
2牙勘、 調(diào)用包裝類的 valueOf() 方法轉(zhuǎn)換為基本類型的包裝類,會自動拆箱
//將字符串轉(zhuǎn)換為基本類型
String str="8";
int d=Integer.parseInt(str);方法一
int e=Integer.valueOf(str);方法二
PS:其他基本類型與字符串的相互轉(zhuǎn)化這里不再一一列出,方法都類似
public class HelloWorld {
public static void main(String[] args) {
double m = 78.5;
//將基本類型轉(zhuǎn)換為字符串
String str1 = Integer.toString(m) ;
System.out.println("m 轉(zhuǎn)換為String型后與整數(shù)20的求和結(jié)果為: "+(str1+20));
String str = "180.20";
// 將字符串轉(zhuǎn)換為基本類型
Double a = Integet.parseInt(str) ;
System.out.println("str 轉(zhuǎn)換為double型后與整數(shù)20的求和結(jié)果為: "+(a+20));
}
}
4方面、使用 Date 和 SimpleDateFormat 類表示時間
在程序開發(fā)中放钦,經(jīng)常需要處理日期和時間的相關(guān)數(shù)據(jù),此時我們可以使用 java.util 包中的 Date 類恭金。這個類最主要的作用就是獲取當前時間操禀,我們來看下 Date 類的使用:
Date d=new Date();//使用默認的構(gòu)造方法創(chuàng)建Date對象
System.out.println(d);//輸出Date對象
使用 Date 類的默認無參構(gòu)造方法創(chuàng)建出的對象就代表當前時間,我們可以直接輸出 Date 對象顯示當前的時間横腿,顯示的結(jié)果如下:
Wed Jun 11 09:22:30 CST 2014
其中颓屑, Wed 代表 Wednesday (星期三), Jun 代表 June (六月)耿焊, 11 代表 11 號揪惦, CST 代表 China Standard Time (中國標準時間,也就是北京時間罗侯,東八區(qū))器腋。
從上面的輸出結(jié)果中,我們發(fā)現(xiàn)钩杰,默認的時間格式不是很友好纫塌,與我們?nèi)粘?吹降娜掌诟袷讲惶粯影裆唬绻胍粗付ǖ母袷竭M行顯示护戳,如 2014-06-11 09:22:30 ,那該怎么做呢垂睬?
此時就到了 java.text 包中的 SimpleDateFormat 類大顯身手的時候了O被摹!可以使用 SimpleDateFormat 來對日期時間進行格式化驹饺,如可以將日期轉(zhuǎn)換為指定格式的文本钳枕,也可將文本轉(zhuǎn)換為日期。
-
使用 format() 方法將日期轉(zhuǎn)換為指定格式的文本
//創(chuàng)建Date對象赏壹,表示當前時間 Date d=new Date(); //創(chuàng)建SimpleDateFormat對象鱼炒,指定目標格式 SipleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //調(diào)用format()方法,格式化時間蝌借,轉(zhuǎn)換為指定格式字符串 String today=sdf.format(d); //輸出轉(zhuǎn)換后的字符串 System.out.println(today);
代碼中的 “yyyy-MM-dd HH:mm:ss” 為預定義字符串昔瞧, yyyy 表示四位年, MM 表示兩位月份菩佑, dd 表示兩位日期自晰, HH 表示小時(使用24小時制), mm 表示分鐘稍坯, ss 表示秒酬荞,這樣就指定了轉(zhuǎn)換的目標格式,最后調(diào)用 **format() 方法將時間轉(zhuǎn)換為指定的格式的字符串。
運行結(jié)果: 2014-06-11 09:55:48 **
- 使用 parse() 方法將文本轉(zhuǎn)換為日期
//創(chuàng)建日期格式的字符串
String day="2014年02月14日10:30:25";
//創(chuàng)建SimpleDateFormat df=new SimpleDateFormat("yyyy年MM月d日 HH:MM:ss");
//調(diào)用parse()方法混巧,將字符串轉(zhuǎn)換為日期
Date date=df.parse(day);
//輸出轉(zhuǎn)換后的時間
System.out.println("當前時間:"+date);
代碼中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式枪向,調(diào)用 **parse() **方法將文本轉(zhuǎn)換為日期。
運行結(jié)果:
當前時間:Fri Feb 14 10:30:25 CST 2014
一定要注意哦:
1咧党、 調(diào)用 SimpleDateFormat 對象的 parse() 方法時可能會出現(xiàn)轉(zhuǎn)換異常秘蛔,即 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()方法將日期轉(zhuǎn)換為指定格式的文本
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");
// 創(chuàng)建Date對象,表示當前時間
Date now=new Date();
// 調(diào)用format()方法聪舒,將日期轉(zhuǎn)換為字符串并輸出
System.out.println(sdf1.format(now));
System.out.println(sdf2.format(now));
System.out.println(sdf3.format(now));
// 使用parse()方法將文本轉(zhuǎn)換為日期
String d = "2014-6-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 調(diào)用parse()方法,將字符串轉(zhuǎn)換為日期
Date date =df.parse(day);
System.out.println(date);
}
}
5虐急、Calendar 類的應用
Date 類最主要的作用就是獲得當前時間箱残,同時這個類里面也具有設(shè)置時間以及一些其他的功能,但是由于本身設(shè)計的問題止吁,這些方法卻遭到眾多批評被辑,不建議使用,更推薦使用 Calendar 類進行時間和日期的處理敬惦。
java.util.Calendar 類是一個抽象類盼理,可以通過調(diào)用 getInstance()** **靜態(tài)方法獲取一個 Calendar 對象,此對象已由當前日期時間初始化俄删,即默認代表當前時間宏怔,如 Calendar c = Calendar.getInstance();
那么如何使用 Calendar 獲取年、月畴椰、日臊诊、時間等信息呢?我們來看下面的代碼:
Calendar c=Calendar,getInstance();//創(chuàng)建Calendar對象
int year=c.get(Calendar.YEAR);//獲取年
int month=c.get(Calendar.MONTH)+1;//獲取月份斜脂,0表示1月份
int day=c.get(Calendar.DAY_OF_MONTH);//獲取日期
int hour=c.get(Calendar.HOUR_OF_DAY);//獲取小時
int minute=c.get(Calendar.MINUTE);//獲取分鐘
int second=c.get(Calendar.SECOND);//獲取秒
System.out.println("當前時間:"+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
其中抓艳,調(diào)用 Calendar 類的 getInstance() 方法獲取一個實例,然后通過調(diào)用 get() 方法獲取日期時間信息帚戳,參數(shù)為需要獲得的字段的值玷或, Calendar.Year 等為 Calendar 類中定義的靜態(tài)常量。
運行結(jié)果:
當前時間:2014-6-11 11:13:50
Calendar 類提供了 getTime() 方法片任,用來獲取 Date 對象偏友,完成 Calendar 和 Date 的轉(zhuǎn)換,還可通過 getTimeInMillis() 方法蚂踊,獲取此 Calendar 的時間值约谈,以毫秒為單位。如下所示:
Date date=c.getTime();//將Canlendar對象轉(zhuǎn)換為Date對象
Long time=c.getTimeInMillis();//獲取當前毫秒數(shù)
System.out.println("當前時間:"+date);
System.out.println("當前毫秒數(shù):"+time);
運行結(jié)果:
當前時間:Wed Jun 11 11:26:59 CST 2014
當前毫秒數(shù):1402457219381
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class HelloWorld {
public static void main(String[] args) {
// 創(chuàng)建Canlendar對象
Calendar c = Calendar.getInstance();
// 將Calendar對象轉(zhuǎn)換為Date對象
Date date = c.getTime();
// 創(chuàng)建SimpleDateFormat對象,指定目標格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 將日期轉(zhuǎn)換為指定格式的字符串
String now = sdf.format(date);
System.out.println("當前時間:" + now);
}
}
6棱诱、使用 Math 類操作數(shù)據(jù)
Math 類位于 java.lang 包中泼橘,包含用于執(zhí)行基本數(shù)學運算的方法, Math 類的所有方法都是靜態(tài)方法迈勋,所以使用該類中的方法時炬灭,可以直接使用類名.方法名,如: Math.round();
常用的方法:
返回值 | 方法名 | 解釋 |
---|---|---|
long | round() | 返回四舍五入后的整數(shù) |
double | floor() | 返回小于參數(shù)的最大整數(shù) |
double | ccell() | 返回大于參數(shù)的最大整數(shù) |
double | random() | 返回[0,1)之間的隨機數(shù)浮點數(shù) |
double a=12.81;//定義一個double類型變量
int b=(int)a;//將double類型強制轉(zhuǎn)換為int類型靡菇,去掉小數(shù)位
System.out.println("強制類型轉(zhuǎn)換:"+b);
long c=Math.round(a);//調(diào)用round方法重归,進行四舍五入
System.out.println("四舍五入:"+c);
double d=Math.floor(a);//調(diào)用floor方法,返回小于參數(shù)的最大整數(shù)
System.out.println("floor:"+d);
double e=Math.ceil(a);//調(diào)用ceil方法厦凤,返回大于參數(shù)的最小整數(shù)
System.out.println("ceil:"+e);
double x=Math.random();//調(diào)用random方法鼻吮,產(chǎn)生[0,1)之間的隨機浮點數(shù)
System.out.println("隨機數(shù):"+x);
int y=(int)(Math.random()*99);//調(diào)用random方法,產(chǎn)生[0,99)之間的隨機z整數(shù)
System.out.println("產(chǎn)生[0,99)之間的隨機整數(shù):"+y);
運行結(jié)果:
強制類型轉(zhuǎn)換:12
四舍五入:13
floor:12.0
ceil:13.0
隨機數(shù):0.42585849456602687
產(chǎn)生[0,99)之間的隨機整數(shù):30
public class HelloWorld {
public static void main(String[] args) {
// 定義一個整型數(shù)組较鼓,長度為10
int[] nums =new int[10]
//通過循環(huán)給數(shù)組賦值
for (int i = 0; i < nums.length; i++) {
// 產(chǎn)生10以內(nèi)的隨機數(shù)
int x = Math.random();
nums[i] = x;// 為元素賦值
}
// 使用foreach循環(huán)輸出數(shù)組中的元素
for (int i = 0; i < nums.length; i++) {
System.out.print(num + " ");
}
}
}