1、Java的包裝類
基本數據類型我們都很熟悉沸久,例如:int季眷、float、double卷胯、boolean子刮、char等,基本數據類型不具備對象的特征窑睁,不能調用方法挺峡,一般能實現的功能比較簡單,為了讓基本數據類型也具備對象的特性卵慰,Java為每個數據類型都提供了一個包裝類沙郭,這樣我們就可以像操作對象一樣,操作這些基本數據類型了
常見的包裝類和基本類型對應關系如下:
包裝類主要提供了兩類方法:
1裳朋、進行多個類型之間的轉換
2病线、將字符串和本類型及包裝類相互轉換
比如下面代碼:
1 int i = 2;
2 Integer m = new Integer(5);
3 Integer n = new Integer("8");
第一行是用基本類型定義了整型變量i吓著,第二行是利用int包裝類定義了int對象m,雖然賦值為整型的5送挑,但是現在會將基本類型轉換為包裝類中的5
第三行初始化值為字符串類型的"8"绑莺,但是會被包裝類轉換成整數類型,這就是包裝類的基本使用方法
每個包裝類都可以和其他類進行轉換惕耕,比如Integer包裝類纺裁,轉換的對應關系如下:
根據轉換的對應關系,可以寫一個簡單的實例如下:
1 public class HelloWorld {
2? ? public static void main(String[] args) {
3?
4? ? ? ? ? int score1 = 86;
5? ? ? ? ?
6? ? ? ? ? // 創(chuàng)建Integer包裝類對象司澎,表示變量score1的值
7? ? ? ? ? Integer score2=new Integer(score1);
8? ? ? ? ?
9? ? ? ? ? // 將Integer包裝類轉換為double類型
10? ? ? ? ? double score3=score2.doubleValue();
11? ? ? ? ?
12? ? ? ? ? // 將Integer包裝類轉換為float類型
13? ? ? ? ? float score4=score2.floatValue();
14? ? ? ? ?
15? ? ? ? ? // 將Integer包裝類轉換為int類型
16? ? ? ? ? int score5 =score2.intValue();
17?
18? ? ? ? ? System.out.println("Integer包裝類:" + score2);
19? ? ? ? ? System.out.println("double類型:" + score3);
20? ? ? ? ? System.out.println("float類型:" + score4);
21? ? ? ? ? System.out.println("int類型:" + score5);
22? ? ? }
23? }
通過這個簡單的包裝類轉換程序欺缘,可以看出包裝類轉換為各種基本數據類型也是很方便的
那么基本類型怎么轉換為包裝類的對象呢?其實前面三行代碼已經體現了挤安,只不過不太完全谚殊,基本類型轉換為包裝類可以理解為一個裝箱的過程,裝箱有兩種方式:手動裝箱和自動裝箱蛤铜,那么同理包裝類轉換為基本類型叫做拆箱嫩絮,同樣分為:手動拆箱和自動拆箱,上面的例子就是一個手動拆箱的例子围肥,
那么其中自動裝箱和自動拆箱剿干,都是編譯器根據數據類型自動完成了轉換,簡單的代碼如下:
1 public class HelloWorld {
2? ? ? public static void main(String[] args) {
3? ? ? ? ? double a = 91.5;
4? ? ? ? ?
5? ? ? ? ? // double類型手動裝箱
6? ? ? ? ? Double b = new Double(a);? ?
7? ? ? ? ?
8? ? ? ? ? // double類型自動裝箱
9? ? ? ? ? Double c = a;?
10?
11? ? ? ? ? System.out.println("裝箱后的結果為:" + b + "和" + c);
12?
13? ? ? ? ? Double d = new Double(87.0);
14? ? ? ? ?
15? ? ? ? ? // Double包裝類對象手動拆箱
16? ? ? ? ? double e = d.doubleValue();
17? ? ? ? ?
18? ? ? ? ? //Double包裝類對象自動拆箱
19? ? ? ? ? double f = d;
20? ? ? ? ?
21? ? ? ? ? System.out.println("拆箱后的結果為:" + e + "和" + f);
22? ? ? }
23? }
例子很簡單穆刻,對每一個數據類型分別完成了自動和手動兩個操作置尔,所以b和c的值是一樣的,e和f的值是一樣的
除了基本數據類型的包裝轉換之外蛹批,基本類型和字符串之間也可以進行轉換
比如一個基本類型:int a = 30;有3中方式轉換為字符串對象:
1撰洗、使用包裝類的toString方法篮愉,String str1 = Integer.toString(a);
2腐芍、使用String類的valueOf方法,String str2 = String.valueOf(a);
3试躏、用一個空字符串加上基本類型猪勇,系統(tǒng)會將基本類型轉換為字符串類型,String str3 = a + "";
反過來颠蕴,定義:String str = "18";將一個字符串類型轉換為基本類型有以下兩種方法:
1泣刹、調用包裝類的parseXxx靜態(tài)方法,int b = Integer.parseInt(str);
2犀被、調用包裝類的valueOf方法椅您,完成自動拆箱,int c = Integer.valueOf(str);
其他類型轉換也是一樣寡键,替換里面的類型即可掀泳,下面是一個簡單的例子:
1 public class HelloWorld {
2? ? ? public static void main(String[] args) {
3? ? ? ? ?
4? ? ? ? ? double m = 78.5;
5? ? ? ? ? //將基本類型轉換為字符串
6? ? ? ? ? String str1 = Double.toString(m);
7? ? ? ? ?
8? ? ? ? ? System.out.println("m 轉換為String型后與整數20的求和結果為: "+(str1+20));
9? ? ? ? ?
10? ? ? ? ? String str = "180.20";
11? ? ? ? ? // 將字符串轉換為基本類型
12? ? ? ? ? Double a = Double.valueOf(str);
13? ? ?
14? ? ? ? ? System.out.println("str 轉換為double型后與整數20的求和結果為: "+(a+20));
15? ? ? }
16? }
這個例子實現了兩次轉換,所以str1+20應該輸出:78.520,a+20應該輸出:200.20员舵,前者結果是字符串類型脑沿,后者結果是基本的浮點數類型
2、Java日期時間處理
程序開發(fā)中马僻,時間處理必不可少庄拇,這些內容相對簡單一些,會使用一些固定的類即可
首先韭邓,我們可以使用java.util包中的Date類來獲取時間措近,方法如下:
1 Date d = new Date();
2 System.out.println(d);
這樣是最簡單的方法了,但是輸出格式可能不太適合我們:Mon Sep 21 21:46:13 CST 2015
所以我們需要進行簡單的修飾女淑,那么這時需要java.text包中的SimpleDateFormat類中的format方法對文本進行格式化熄诡,代碼如下:
1 Date d = new Date();
2 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
3 String today = sdf.format(d);
4 System.out.println(today);
這樣就輸出了我們常用的時間:2015-09-21 21:51:39,另外格式我們也可以按照我們的需要定義
反過來呢诗力,我們還可以把文本變成默認的時間格式凰浮,這用到了SimpleDateFormat類中的parse方法,但是這個方法可能會出現異常苇本,所以需要java.text中的異常類ParseException類進行異常處理袜茧,看一個小實例:
1 import java.text.ParseException;
2 import java.text.SimpleDateFormat;
3 import java.util.Date;
4?
5 public class HelloWorld {
6? ? ?
7? ? ? public static void main(String[] args) throws ParseException {
8? ? ? ? ?
9? ? ? ? ? // 使用format()方法將日期轉換為指定格式的文本
10? ? ? ? ? SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
11? ? ? ? ? SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
12? ? ? ? ? SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
13? ? ? ? ?
14? ? ? ? ? // 創(chuàng)建Date對象,表示當前時間
15? ? ? ? ? Date now = new Date();
16? ? ? ? ?
17? ? ? ? ? // 調用format()方法瓣窄,將日期轉換為字符串并輸出
18? ? ? ? ? System.out.println(sdf1.format(now));
19? ? ? ? ? System.out.println(sdf2.format(now));
20? ? ? ? ? System.out.println(sdf3.format(now));
21?
22? ? ? ? ? // 使用parse()方法將文本轉換為日期
23? ? ? ? ? String d = "2015-9-21 21:56:36";
24? ? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
25? ? ? ? ?
26? ? ? ? ? // 調用parse()方法笛厦,將字符串轉換為日期
27? ? ? ? ? Date date = sdf.parse(d);
28? ? ? ? ?
29? ? ? ? ? System.out.println(date);
30? ? ? }
31? }
例子很簡單,實現了時間格式化俺夕,文本到日期的轉換
另外在java.util包中還有一個時間處理的Calendar類裳凸,因為Date類中的本身的設計方法,遭到了眾多批評劝贸,所以推薦使用Calendar類來處理時間姨谷,Calendar類是一個抽象類,可以通過調用getInstance靜態(tài)方法獲得Calendar的一個對象映九,此對象默認由當前時間進行初始化梦湘,直接來一個簡單的實例:
1 package com.imooc.collection;
2
3 import java.util.Calendar;
4
5 public class DateAction {
6
7? ? public static void main(String[] args) {
8? ? ? ? Calendar c = Calendar.getInstance();? ? //實例化Calendar對象
9? ? ? ? int year = c.get(Calendar.YEAR);? ? //通過get方法獲得當前年
10? ? ? ? int month = c.get(Calendar.MONTH) + 1;? ? //月份0-11,需要加1
11? ? ? ? int day = c.get(Calendar.DAY_OF_MONTH);? ? //日期
12? ? ? ? int hour = c.get(Calendar.HOUR_OF_DAY);? ? //獲取小時
13? ? ? ? int minute = c.get(Calendar.MINUTE);? ? //獲取分鐘
14? ? ? ? int second = c.get(Calendar.SECOND);? ? //獲取秒數
15? ? ? ? System.out.println("當前時間:" + year + "年" + month + "月" + day + "日" + "? " + hour +
16? ? ? ? ? ? ? ? ":" + minute + ":" + second);
17? ? }
18
19 }
這樣就打印出結果了:當前時間:2015年9月21日 ? 22:12:13
Calendar還提供了getTime方法件甥,用來獲取Date對象捌议,實現Calendar和Date對象的互轉,還可以用getTimeInMillis獲得1970年01月01日0時0分0秒引有,到當前時間的毫秒數瓣颅,大約是Unix時間戳的1000倍
簡單代碼如下:
1 Date date = c.getTime();? ? //對象轉換
2 Long time = c.getTimeInMillis();? ? //獲取至現在的毫秒數
3 System.out.println("當前時間:" + date);
4 System.out.println("當前毫秒數:" + time);
這樣就實現了轉換
3、Java數學運算Math類
Math類也是Java中做運算常用的類譬正,在java.lang包中宫补,這個系統(tǒng)會自動導入僻孝,這里簡單的記錄一下,常用的方法:
直接看一個簡單的實例:
1 public class MathAction {
2
3? ? public static void main(String[] args) {
4? ? ? ? double a = 12.86;
5? ? ? ? int b = (int) a;? ? //強制類型轉換
6? ? ? ? System.out.println("強制類型轉換:" + b);
7? ? ? ? long c = Math.round(a);? ? //四舍五入
8? ? ? ? System.out.println("四舍五入:" + c);
9? ? ? ? double d = Math.floor(a);? ? //返回小于參數a的最大整數
10? ? ? ? System.out.println("小于a的最大整數:" + d);
11? ? ? ? double e = Math.ceil(a);? ? //返回大于參數a的最小整數
12? ? ? ? System.out.println("大于a的最小整數:" + e);
13? ? ? ? double x = Math.random();? ? //產生[0,1)區(qū)間內的隨機浮點數
14? ? ? ? System.out.println("默認隨機數:" + x);
15? ? ? ? int y = (int) (Math.random()*99);? ? //產生[0,99)區(qū)間內的隨機整數
16? ? ? ? System.out.println("0-99之間的隨機整數(不包括99):" + y);
17
18? ? }
19
20 }
很容易理解的例子守谓,效果如下:
4Java File類
createNewFile()在指定位置創(chuàng)建一個空文件穿铆,成功就返回true,如果已存在就不創(chuàng)建斋荞,然后返回false荞雏。
mkdir() ?在指定位置創(chuàng)建一個單級文件夾。
mkdirs() ?在指定位置創(chuàng)建一個多級文件夾平酿。
renameTo(File dest)如果目標文件與源文件是在同一個路徑下凤优,那么renameTo的作用是重命名, 如果目標文件與源文件不是在同一個路徑下蜈彼,那么renameTo的作用就是剪切筑辨,而且還不能操作文件夾。
刪除:
delete() ?刪除文件或者一個空文件夾幸逆,不能刪除非空文件夾棍辕,馬上刪除文件,返回一個布爾值还绘。
deleteOnExit()jvm退出時刪除文件或者文件夾楚昭,用于刪除臨時文件,無返回值拍顷。
判斷:
exists() ?文件或文件夾是否存在抚太。
isFile() ?是否是一個文件,如果不存在昔案,則始終為false尿贫。
isDirectory() ?是否是一個目錄,如果不存在踏揣,則始終為false庆亡。
isHidden() ?是否是一個隱藏的文件或是否是隱藏的目錄。
isAbsolute() ?測試此抽象路徑名是否為絕對路徑名呼伸。
獲壬砑健:
getName() ?獲取文件或文件夾的名稱,不包含上級路徑括享。
getAbsolutePath()獲取文件的絕對路徑,與文件是否存在沒關系
length() ?獲取文件的大姓浯佟(字節(jié)數)铃辖,如果文件不存在則返回0L,如果是文件夾也返回0L猪叙。
getParent() ?返回此抽象路徑名父目錄的路徑名字符串娇斩;如果此路徑名沒有指定父目錄,則返回null。
lastModified()獲取最后一次被修改的時間氨菇。
文件夾相關:
static File[] listRoots()列出所有的根目錄(Window中就是所有系統(tǒng)的盤符)
list() ?返回目錄下的文件或者目錄名假哎,包含隱藏文件。對于文件這樣操作會返回null歉嗓。
listFiles() ?返回目錄下的文件或者目錄對象(File類實例)丰介,包含隱藏文件。對于文件這樣操作會返回null鉴分。
list(FilenameFilter filter)返回指定當前目錄中符合過濾條件的子文件或子目錄哮幢。對于文件這樣操作會返回null。
listFiles(FilenameFilter filter)返回指定當前目錄中符合過濾條件的子文件或子目錄志珍。對于文件這樣操作會返回null橙垢。
? ?publicclass FileMethod {
? ? publicstaticvoidmain(String[] args)throws IOException {
? ? ? ? //創(chuàng)建方法/*? ? ? ? @SuppressWarnings("unused")
? ? ? ? File file = new File("F:\\a.txt");
? ? ? ? //System.out.println("創(chuàng)建成功了嗎?"+file.createNewFile());
? ? ? ? //System.out.println("單級文件夾創(chuàng)建成功了嗎伦糯?"+file.mkdir());
? ? ? ? //System.out.println("多級文件夾創(chuàng)建成功了嗎柜某?"+file.mkdirs());
? ? ? ? //File dest = new File("F:\\電影\\c.txt");
? ? ? ? //System.out.println("重命名成功了嗎?"+file.renameTo(dest));*//*? ? ? //刪除方法
? ? ? ? File file = new File("F:\\電影");
? ? ? ? System.out.println("刪除成功了嗎敛纲?"+file.delete());
? ? ? ? file.deleteOnExit();*///判斷方法/*? ? ? ? File file = new File("F:\\a.txt");
? ? ? ? System.out.println("文件或者文件夾存在嗎莺琳?"+file.exists());
? ? ? ? System.out.println("是一個文件嗎?"+file.isFile());
? ? ? ? System.out.println("是一個文件夾嗎载慈?"+file.isDirectory());
? ? ? ? System.out.println("是隱藏文件嗎惭等?"+file.isHidden());
? ? ? ? System.out.println("此路徑是絕對路徑名?"+file.isAbsolute());*///獲取方法/*? ? ? ? File file = new File("f:\\a.txt");
? ? ? ? System.out.println("文件或者文件夾得名稱是:"+file.getName());
? ? ? ? System.out.println("絕對路徑是:"+file.getPath());
? ? ? ? System.out.println("絕對路徑是:"+file.getAbsolutePath());
? ? ? ? System.out.println("文件大小是(以字節(jié)為單位):"+file.length());
? ? ? ? System.out.println("父路徑是"+file.getParent());
? ? ? ? //使用日期類與日期格式化類進行獲取規(guī)定的時間
? ? ? ? long? lastmodified= file.lastModified();
? ? ? ? Date data = new Date(lastmodified);
? ? ? ? SimpleDateFormat simpledataformat = new SimpleDateFormat("YY年MM月DD日 HH:mm:ss");
? ? ? ? System.out.println("最后一次修改的時間是:"+simpledataformat.format(data));*///文件或者文件夾的方法? ? ? ? File[] file = File.listRoots();
? ? ? ? System.out.println("所有的盤符是:");
? ? ? ? for(File item : file){
? ? ? ? ? ? System.out.println("\t"+item);
? ? ? ? }
? ? ? ? File filename =newFile("F:\\Java workspace\\Java");
? ? ? ? String[] name = filename.list();
? ? ? ? System.out.println("指定文件夾下的文件或者文件夾有:");
? ? ? ? for(String item : name){
? ? ? ? ? ? System.out.println("\t"+item);
? ? ? ? }
? ? ? ? File[] f = filename.listFiles();
? ? ? ? System.out.println("獲得該路徑下的文件或文件夾是:");
? ? ? ? for(File item : f){
? ? ? ? ? ? System.out.println("\t"+item.getName());? ? ? ? ? ? }? ? ? ? }}