JAVA進階(03)常用類
阿新 • • 發佈:2018-11-28
一、包裝類
1、包裝類概述
- 8種基本型別對應8種包裝類,除了 Integer 和 Character 類以外,其他只是類名首字母大寫;
- 除了 Character 和 Boolean,其他都是數字型,繼承自 Number 類,重寫過 intValue()、longValue()、floatValue()、doubleValue() 方法,可以相互轉換;
- 包裝類的用途:物件陣列和集合操作;包裝物件包含方法可以為基本型別、包裝類和字串之間的轉換提供方便;
2、自動裝箱和拆箱
(1)自動裝箱:基本型別的資料處於需要物件的環境中時,會自動轉為物件
(2)自動拆箱:每當需要一個值時,物件會自動轉成基本資料型別
(3)實現:通過呼叫包裝類的 valueof()和 intValue()方法分別實現 裝 拆 箱,整個過程有編譯器自動完成
(4)程式碼:注意包裝類的空指標問題
Integer b = 23; // 自動裝箱
int a = new Integer(20); //自動拆箱
// 下面的問題我們需要注意:
Integer c = null;
int d = c; // 此處其實就是:c.intValue(),因此拋空指標異常。
3、包裝類快取問題
(1)包裝類在自動裝箱時為了提高效率,對於-128~127之間的值會進行快取處理
(2)快取的本質就是包裝類在載入時,自動建立這個範圍內的物件,後面用的話直接引用,不會在 new 物件
(3)超過範圍後,物件之間不能再使用==進行數值的比較,而是使用equals方法
二、String類
1、String 類概述
(1)String 類物件是不可變的Unicode字元序列(不可變物件),其內部的成員變數用 final 修飾,其值無法改變
(2)字串常量拼接時的優化
public class TestString2 { public static void main(String[] args) { //編譯器做了優化,直接在編譯的時候將字串進行拼接 String str1 = "hello" + " java";//相當於str1 = "hello java"; String str2 = "hello java"; System.out.println(str1 == str2);//true String str3 = "hello"; String str4 = " java"; //編譯的時候不知道變數中儲存的是什麼,所以沒辦法在編譯的時候優化 String str5 = str3 + str4; System.out.println(str2 == str5);//false } }
(3)常用方法總結:
- 這些方法會返回一個新的 String,而不改變原來 String 的值:concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()
- 提供查詢功能的有關方法: endsWith()、 startsWith()、 indexOf()、lastIndexOf()
- 提供比較功能的方法: equals()、equalsIgnoreCase()、compareTo()
- 其它方法: charAt() 、length()
2、StringBuffer和StringBuilder
(1)概念
- tringBuffer 和 StringBuilder 均代表可變的字元序列
- 都是抽象類 AbstractStringBuilder 的子類,方法幾乎一模一樣
- 二者內部字元陣列未用 final 修飾,是可變的
- 字串的多次拼接可以用這兩個類,多用於迴圈中,可以減少資源的浪費
(2)二者區別
- StringBuffer 執行緒安全, 效率較低
- StringBuilder 執行緒不安全,效率較高,建議採用該類;
(3)常用方法
- append(" ")
- delete(int start,int end)
- deleteCharAt(int index)
- insert(index," ")
- reverse()
- 此外還有:indexOf()、substring()、length()、charAt()等方法
三、時間類
1、毫秒值
- 把1970 年 1 月 1 日 00:00:00定為基準時間,每個度量單位是毫秒(1秒的千分之一);
- 毫秒值為 long 型:long now = System.currentTimeMillis();
2、date類
(1)構造器
- 空參:new Date() 時間預設當前時間
- 有參:new Date(100) 引數為毫秒值
(2)方法
- long getTime():得到時間的毫秒值
- 判斷時間前後:before、after、equals
- toString:格式化輸出
(3)說明:很多方法過時,現在一般用 calendar 類
3、DateFormat類和SimpleDateFormat類
(1)作用:實現字串和時間物件的相互轉換
// new 出 sdf 物件
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 將時間物件轉換成字串
System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
// 將符合指定格式的字串轉成成時間物件.字串格式需要和指定格式一致。
String time = "2007-10-7 20:15:30";
Date date = s1.parse(time);
(2)其他用途:獲取當前時間是今年第幾天
SimpleDateFormat s1 = new SimpleDateFormat("D");
String daytime = s1.format(new Date());
System.out.println(daytime);
4、calendar類
(1)概述
- Calendar 類是一個抽象類,提供日期計算的相關功能
- GregorianCalendar 是 Calendar 的一個具體子類
- 注意月份的表示,一月是0,二月是1,以此類推,12月是11
(2)方法
- calendar.get(Calendar.YEAR)
- set(Calendar.YEAR, 2999)
- add(Calendar.MONTH, -7)
- calendar3.getTime():日曆轉時間
- calendar4.setTime(new Date()):時間轉日曆
(3)某一月份日曆列印(練習)
(4)Clendar 類的常量
- Calendar.YEAR
- Calendar.MONTH
- Calendar.DAY_OF_MONTH
- Calendar.DATE
- Calendar.DAY_OF_WEEK
- Calendar.HOUR_OF_DAY
- Calendar.MINUTE
- Calendar.SECOND
四、Math類
1、常用方法
- abs 絕對值、sqrt 平方根、pow(double a, double b) a的b次冪、random() 返回 0.0 到 1.0 的隨機數
- ceil(double a) 大於a的最小整數、floor(double a) 小於a的最大整數、long round(double a) 四捨五入
2、關於隨機數
(1)Math.random():返回 0到 1的隨機數
(2)Random類:nextDouble()、nextInt(10)
(3)Math.random()底層呼叫的就是Random的nextDouble()方法
五、File類
1、基本用法
(1)說明: java.io.File類代表檔案和目錄,用於讀取檔案、生成檔案、刪除檔案、修改檔案的屬性
(2)構造方法
- public File(String pathname):有相對路徑和絕對路徑
(3)建立檔案
File f = new File("a.txt"); //相對路徑:預設放到user.dir目錄下面
f.createNewFile();//建立檔案
(4)建立目錄
- 一個目錄
File f2 = new File("d:/電影");
boolean flag = f2.mkdir(); //目錄結構中有一個不存在,則不會建立整個目錄樹
System.out.println(flag);//建立失敗
- 多個目錄
File f2 = new File("d:/電影/華語/大陸");
boolean flag = f2.mkdirs();//目錄結構中有一個不存在也沒關係;建立整個目錄樹
System.out.println(flag);//建立成功
(5)訪問屬性
2、遞迴遍歷目錄
/**
* 列印檔案資訊
* @param file 檔名稱
* @param level 層次數(實際就是:第幾次遞迴呼叫)
*/
static void printFile(File file, int level) {
//輸出層次數
for (int i = 0; i < level; i++) {
System.out.print("-");
}
//輸出檔名
System.out.println(file.getName());
//如果file是目錄,則獲取子檔案列表,並對每個子檔案進行相同的操作
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File temp : files) {
//遞迴呼叫該方法:注意等+1
printFile(temp, level + 1);
}
}
}
六、列舉類
1、概念
(1)定義格式
enum Season {
SPRING, SUMMER, AUTUMN, WINDER
}
(1)實質
- 列舉實質上還是類,而每個被列舉的成員實質就是一個列舉型別的例項,預設都是public static final修飾的,可以通過類名直接呼叫
2、使用
- 需要定義一組常量時,可以使用列舉型別
- 儘量不要使用列舉的高階特性,事實上高階特性都可以使用普通類來實現