文章目錄
常用類
包裝類
基本介紹
包裝類位於java.lang
包,用法類似;
基本數據類型與包裝類的對應關係:
基本數據類型 | 包裝類 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
由於包裝類的常用方法類似,此處拿Integer舉例;
數字相關的包裝類都繼承了Number類;Byte,Short,Integer,Long,Float,Double等。
常用方法示例:
public class TestInteger {
public static void main(String[] args) {
//1.基本數據類型轉成包裝類對象
Integer a = new Integer(1);
Integer b = Integer.valueOf(2);
//2.包裝類對象轉成基本數據類型
int c = b.intValue();
double d = b.doubleValue();
//3.字符串轉成包裝類對象
Integer e = new Integer("8888");
//4.包裝類對象轉成字符串
String f = e.toString();
//5.包裝類中的常量
System.out.println("Integer中最大值:"+Integer.MAX_VALUE);
System.out.println("Size:"+Integer.SIZE);
}
}
自動裝箱和拆箱
// 自動裝箱
Integer a = 2;//相當於 Integer a = Integer.valueOf(2);
// 自動拆箱
int b = a; //編譯器自動轉爲:int b = a.intValue();
- 緩存問題:緩存[-128,127]之間的數字,系統初始化時創建的一個緩存數組;
Integer a = 124;
Integer b = 124;
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true
Integer c = 128;
Integer d = 128;
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true
String
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
- String類是不可變字符序列;
- 判斷String對象值是否相等使用equals()方法
常用方法
方法 | 解釋說明 |
---|---|
char charAt(int index) | 返回字符串中索引爲index的字符,索引範圍(0,lenth()-1); |
boolean equals(Object anObject) | 如果字符串與anObject相等,返回true;否則返回false; |
boolean equalsIgnoreCase(String other) | 判斷字符串是否相等(忽略大小寫); |
int indexOf(String str) | 返回從頭開始查找的第一個子字符串str在字符串中的索引位置。如果未找到子字符串str,則返回-1; |
int lastIndexOf() | 返回從末尾開始查找的第一個子字符串str在字符串中的索引位置。如果未找到子字符串str,則返回-1; |
int length() | 返回字符串的長度; |
String replace(char oldChar,char new Char) | 返回一個新串,它是通過用newChar替換此字符串中出現的所有oldChar而生成的; |
boolean startsWith(String prefix) | 如果字符串以prefix開始,則返回true; |
boolean endsWith(String prefix) | 如果字符串以prefix結尾,則返回true; |
String substring(int beginIndex) | 返回一個新字符串,該串包含從原始字符串beginIndex到串尾; |
String substring(int beginIndex, int endIndex) | 返回一個新字符串,該串包含從原始字符串beginIndex到串尾或endIndex-1的所有字符; |
String toLowerCase() | 返回一個新字符串,該串將原始字符串中的所有大寫字母改成小寫字母; |
String toUpperCase() | 返回一個新字符串,該串將原始字符串中的所有小寫字母改成大寫字母; |
String trim() | 返回一個新字符串,該串刪除了原始字符串頭部和尾部的空格 |
StringBuilder和StringBuffer
StringBuilder和StringBuffer共同的父類AbstractStringBuilder
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
}
- StringBuilder和StringBuffer是可變字符序列;
- StringBuffer JDK1.0版本提供的類,線程安全,做線程同步檢查,效率較低;
- StringBuilder JDK1.5版本提供的類,線程不安全,不做線程同步檢查,因此效率較高,常用;
常用方法
方法 | 解釋說明 |
---|---|
public StringBuilder append(…) | 重載的方法,可以爲StringBuilder對象添加字符序列,仍然返回自身對象; |
public StringBuilder delete(int start,int end) | 可以刪除從start到end-1爲止的一段字符串序列,仍然返回自身對象; |
public StringBuilder deleteCharAt(int index) | 移除此序列索引爲index的字符,仍然返回自身對象; |
public StringBuilder insert(…) | 重載的方法,可以爲StringBuilder對象在指定位置插入字符序列,仍然返回自身對象; |
public StringBuilder reverse() | 將字符串序列逆序,仍然返回自身對象; |
public String toString() | 返回此序列中數據的字符串表示形式; |
public void setCharAt(int index,char c) | 將c替換到原字符序列索引爲index的位置; |
indexOf(),substring(),length(),charAt() | 類似String類中的方法; |
時間處理相關類
-
以1970年1月1日 00:00:00定爲基準時間,度量單位爲毫秒(千分之一秒)
-
用long類型的變量保存時間;
-
獲得現在時刻的“時刻數值”,
long now = System.currentTimeMillis();
Date
public class Date
implements java.io.Serializable, Cloneable, Comparable<Date>
{
public Date() {
this(System.currentTimeMillis());
}
}
- Date的構造方法返回了當前時間的毫秒值,說明新創建的Date對象的時間爲當前時間;
- Date帶參構造,參數是一個毫秒數,表示從基準時間過了參數毫秒值的時間;
- boolean after(Date when) 判斷此時間是否在指定時間之後;
- boolean before(Date when) 判斷此時間是否在指定時間之前;
- boolean equals(Date when)判斷兩個日期的相等性;
- long getTime() 返回自基準時間到該Date對象時間所經過的毫秒數;
- String toString() 把Date對象轉換成java源碼中設定格式的字符串輸出;
DateFormat
- 把時間對象轉化成指定格式的字符串,反之,把指定格式的字符串轉化成時間對象;
- DateFormat是一個抽象類,一般使用它的子類SimpleDateFormat類來實現
方法:
方法 | 解釋說明 |
---|---|
public String format(Date date) | 返回將date轉化爲指定格式的字符串; |
public Date parse(String str) | 將指定格式的字符串轉化爲Date對象並返回; |
//把時間對象轉成字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String str = df.format(date);
//把字符串裝成時間對象
Date date = df.parse("2019-9-9 11:11:11"); //需要捕獲異常
其他格式化字符:SimpleDateFormat
比如 D 表示當前時間是當前年份的第多少天
Calendar
- Calendar類是一個抽象類,爲我們提供了關於日期計算的相關功能,比如:年月日時分秒的展示和計算;
- GregorianCalendar是Calendar的一個具體子類,提供了世界上大多數國家/地區使用的標準日曆系統;
- 注意:0-11表示對應的月份,0是1月,11代表12月;
- 1-7表示星期,1是星期日,7代表星期六
方法:
- get(param):根據傳的參數,獲得對應的日期屬性;
- set(params):根據參數,給日期對象設置日期屬性;
- add(params):根據參數,進行日期的計算;
- Date getTime():轉化成一個時間類對象;
- Calender setTime(Date date):將時間類對象轉化爲日期類;
可視化日曆程序
String str = "2020-2-29"; //平年天數超出不做判斷
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str); // 有異常
Calendar c = new GregorianCalendar();
c.setTime(date);
int today = c.get(Calendar.DAY_OF_MONTH);// 保存當前日期爲哪一天
System.out.println(" 日\t一\t二\t三\t四\t五\t六");
c.set(Calendar.DAY_OF_MONTH, 1); // 從當前月的第一天開始
// 計算出當前月的第一天是周幾
for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print("\t");
}
int days = c.getActualMaximum(Calendar.DATE); // 當前月一共有多少天
for (int i = 1; i <= days; i++) {
if (i == today) // 如果是今天,則在日期後面加上*
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
else
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
// 週六換行
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
Math
- abs :絕對值
- sqrt :平方根
- pow(double a, double b) :a的b次冪
- max,min :最大最小值
- ceil(double a) :大於a的最小整數
- floor(double a) :小於a的最大整數
- random() :返回0.0到1.0的隨機數
- long round(double a) :double類型的數據a轉成long型(四捨五入)
Random
專門用於生成隨機數的類;
Random rand = new Random();
// 隨機生成[0,1)之間的double類型的數據
System.out.println(rand.nextDouble());
// 隨機生成int類型允許範圍之內的整型數據
System.out.println(rand.nextInt());
// 隨機生成[0,1)之間的float類型的數據
System.out.println(rand.nextFloat());
// 隨機生成false或者true
System.out.println(rand.nextBoolean());
// 隨機生成[0,10)之間的int類型的數據
System.out.println(rand.nextInt(10));
// 隨機生成[20,30)之間的int類型的數據
System.out.println(20 + rand.nextInt(10));
// 隨機生成[20,30)之間的int類型的數據(此種方法計算較爲複雜)
System.out.print(20 + (int) (rand.nextDouble() * 10));
File
- java.io.File類:代表文件和目錄;
- 構造方法:傳入一個目錄地址;
File f = new File("d:\\a.txt");
//File f = new File("d:/a.txt");
常用方法:
方法 | 說明 |
---|---|
public boolean exists() | 判斷File是否存在 |
public boolean isDirectory() | 判斷File是否爲目錄 |
public boolean isFile() | 判斷File是否爲文件 |
public long lastMidified() | 返回File最後修改時間 |
public long length() | 返回File大小 |
public String getName() | 返回文件名 |
public String getPath() | 返回文件的目錄路徑 |
創建新目錄:
File f = new File("d:/電影/華語/大陸");
boolean flag = f.mkdir(); // false 目錄結構中有一個不存在,則不會創建整個目錄樹
boolean flag = f.mkdirs(); //創建整個目錄樹
遞歸遍歷目錄樹結構:
public static void main(String[] args) {
File f = new File("D:\\2345\\Downloads");
printFile(f,0);
}
static void printFile(File file, int level){
//輸出層數
for(int i=0;i<level;i++){
System.out.print("-");
}
System.out.println(file.getName());
if(file.isDirectory()){
File[] files = file.listFiles();
for(File temp: files){
printFile(temp,level+1);
}
}
}
枚舉
-
JDK1.5引入了枚舉類型,枚舉類型的定義包括枚舉聲明和枚舉體。
enum 枚舉名{ 枚舉體(常量列表) }
-
枚舉體就是放置一些常量;
-
枚舉類型隱性地繼承自java.lang.Enum。
-
枚舉實質上還是類,而每個被枚舉的成員實質就是一個枚舉類型的實例,他們默認都是public static final修飾的,提議直接通過枚舉類型名使用它們;
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
public class TestEnum {
public static void main(String[] args) {
Season a = Season.AUTUMN;
switch(a){
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}