【javase複習】## day6 常用API ##

總結一下常用API以及常用方法!有些java提供的類方法雖然多,但是經過歸類還是蠻容易去記憶和使用的,要弄清楚原理不要怕。比如之前就總是很弄不清byte[],int[],char[],String的關係。也不太清楚Date類還有calendar還有什麼dateformat到底啥是啥。。其實都不難,要勤做筆記多看兩遍就行了,其實還是用的少,所以只要弄清楚,到時候要用掃一眼API文檔就可以了。



Object類

這裏寫圖片描述

搞了半天最祖宗的Object類原來只有這麼幾個方法,除了重載的關於線程安全的方法之後幾乎少的可憐。重點掌握紅圈3個方法

1. toString()

返回一個對象的字符串表示,它的值等於:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

package cn;

class Person{

}
public class www {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p);
        System.out.println(p.toString());
        String s = new String("分神煩大叔");
        System.out.println(s);
    }
}

結果得

cn.Person@15db9742
cn.Person@15db9742
分神煩大叔

爲什麼這裏沒有直接打印p和打印p的toString()方法得到的結果是一樣的呢?

我們翻文檔翻翻翻

首先來到PrintStream.class 因爲我們知道System.out其實是一個輸出流對象

    public void print(Object obj) {
        write(String.valueOf(obj));
    }

然後又來到String.class

  public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

發現原來是因爲Print方法最終是調用了String類裏面重寫的toString方法!所以就很簡單了,如果想讓任何一個類直接打印就是你想要的內容,只要重寫toString方法就可以了。

2、hashCode();

返回對象的哈希值,這裏可以看做是地址,注意這裏與ToString方法最後的那個值有點不同, 這裏的哈希值是那個值得一個參數

3、 equals(Object obj);

比較兩個對象的內存地址,即哈希值。

注意: 一般重寫equals(Object obj);方法時也會重寫hashCode();方法, 顯得更合理,equals(Object obj);方法相當於定義了兩個對象相等的一個規範,而hashCode();的本質目的是定義一個對象的唯一確認值.










String類

要學習Stirng, 先要了解String類的對象在內存中的存儲方式。
如下圖所示
這裏寫圖片描述

String的兩種創建方式。

直接用”asdsa” 創建, 只會在字符串常量池中創建,且重複就不創建,然後將棧內存中的變量指向字符串常量池中的地址。

new String(“sadas”) 創建的字符串對象,也會在字符串常量池中創建,重複不創建,然後將常量池中的值複製到堆內存中再創建一個對象,這裏的複製不是字符串常量池地址的複製, 而是真實的字符串值的複製, 然後將這個堆內存中的地址給棧內存中的變量。
所以用new 出來的字符串 其實是創建了兩個對象, 有兩個地址!!!只不過沒有變量指向常量池中的地址,而是直接指向堆內存中的地址, 他們相同,地址不同!!!

常用方法:

這裏寫圖片描述

看起來很多 其實無非就是用byte[], char[], int [] ,和其他String對象去創建一個新的String對象。

使用byte[] 數組可以指定碼錶。
使用char[]數組沒什麼好說的。就是一個一個的複製進字符串,char數組的元素也可以是數字,通過ASCII表直接轉換成相應的字符,這點在前面的複習中有講述。
使用其他String對象創建, 就不用說了吧 弱智。

String()  創建一個空內容 的字符串對象。
String(byte[] bytes)  使用一個字節數組構建一個字符串對象
String(byte[] bytes, int offset, int length) 
    bytes :  要解碼的數組
    offset: 指定從數組中那個索引值開始解碼。
    length: 要解碼多個元素。

String(char[] value)  使用一個字符數組構建一個字符串。  
String(char[] value, int offset, int count)  使用一個字符數組構建一個字符串, 指定開始的索引值,與使用字符個數。
String(int[] codePoints,int offset,int count)
String(String original) 

記住: 使用字節數組或者字符數組都可以構建一個字符串對象。

方法也有很多,看起來數不清,其實分一下類, 都是很簡單的看方法名字就知道怎麼用的方法。

①獲取方法

  int length()  獲取字符串的長度 
  char charAt(int index) 獲取特定位置的字符 (角標越界)
  int indexOf(String str) 查找子串第一次出現的索引值,如果子串沒有出現 在字符串中,那麼則返回-1表示。     
int lastIndexOf(String str) 查找子串最後一次出現的索引值 , 如果子串沒有出現 在字符串中,那麼則返回-1表示

②判斷方法

boolean endsWith(String str) 是否以指定字符結束
boolean isEmpty()是否長度爲0
boolean contains(CharSequences) 是否包含指定序列 應用:搜索
boolean equals(Object anObject) 是否相等
boolean equalsIgnoreCase(String anotherString) 忽略大小寫是否相等


③轉換方法

   char[] toCharArray()  將字符串轉換爲字符數組
    byte[] getBytes();    將字符串轉換爲字節數組

前面說過字符數組、 字節數組、 字符串是可以轉換的,既然可以用String裏面的方法將String轉換爲 字符數組和字節數組。
也可以用Arrays.toString()方法將字符數組或者字節數組轉換爲字符串。


④其他方法

String replace(String oldChar, String newChar) 替換
String[] split(String regex) 切割
String substring(int beginIndex) 指定開始
String substring(int beginIndex, int endIndex)指定開始與結束的索引值截取子串
String toUpperCase() 轉大寫
String toLowerCase() 轉小寫
String trim() 去除字符串首尾的空格





StringBuffer、 StringBuilder類

首先要注意這兩個類都是final類
不同點:

StringBuffer 慢, 線程安全, JDK1.0
StringBuilder 快 , 線程不安全, JDK1.5

因爲隨着JAVA的發展已經有了更好的機制去解決線程安全問題, 所以效率低下的StringBuffer顯得累贅, 很少用了, 都用StringBuilder。
所以以下只討論StringBuilder。

什麼引出這兩個類?

因爲String創建的對象是常量, 一旦確定就無法修改,一旦修改就等於創建了一個新的對象, 耗費了內存,爲了頻繁修改字符串的內容,引出了這兩個字符串緩衝類,實際上是內部維護了一個字符數組

構造方法:
這裏寫圖片描述
翻開他的構造方法。

 public StringBuffer() {
        super(16);
    }

再翻開。

 AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

StringBuffer 是一個存儲字符的容器

容器的具備 的行爲

String 

增加
    append(boolean b)    可以添加任意類型 的數據到容器中
    insert(int offset, boolean b)  指定插入的索引值,插入對應 的內容。 

刪除
    delete(int start, int end)  根據指定的開始與結束的索引值刪除對應的內容。
    deleteCharAt(int index)   根據指定 的索引值刪除一個字符。


修改

    replace(int start, int end, String str) 根據指定 的開始與結束索引值替代成指定的內容。
    reverse()   翻轉字符串緩衝類的內容。  abc--->cba

    setCharAt(int index, char ch)  把指定索引值的字符替換指定的字符。 
    substring(int start, int end)  根據指定的索引值截取子串。
    ensureCapacity(int minimumCapacity)  指定StringBuffer內部的字符數組長度的。

查看
    indexOf(String str, int fromIndex) 查找指定的字符串第一次出現的索引值,並且指定開始查找的位置。
    lastIndexOf(String str) 

    capacity() 查看當前字符數組的長度。 
    length() 

    charAt(int index) 
    toString()   把字符串緩衝類的內容轉成字符串返回。

注意因爲是維護了字符數組,如果長度不夠了,會另外創建一個字符數字長度等於當前長度的2倍+2。





System類

它不能被實例化。沒有構造方法,只有靜態方法。

在 System 類提供的設施中,
①有標準輸入、標準輸出和錯誤輸出流;
②對外部定義的屬性和環境變量的訪問;
③加載文件和庫的方法;
④還有快速複製數組的一部分的實用方法。

實際上所有的方法也是爲了以上四個方面而設計的,而且真正用的到的並不多。。

主要方法:

arraycopy(Object src, int srcPos, Object dest, int destPos, int
length)
從指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束。

currentTimeMillis()
返回以毫秒爲單位的當前時間

exit(int status)
終止當前正在運行的 Java 虛擬機。

gc()
運行垃圾回收器。

getenv()
返回一個不能修改的當前系統環境的字符串映射視圖。
getProperties()
確定當前的系統屬性。

注意System.gc()方法實際上是調用了對象的finalize();方法, 通知jvm儘快回收對象,但是並不是立刻回收。








Runtime類 ##

描述了應用程序的運行環境

一個應用程序只有一個運行環境。所以顯然是單例設計模式,所以沒有構造方法,而是用Runtime.getRuntime()返回當前應用程序的運行時環境。

exec(String path)
執行目標程序,返回Process類對象指向的進程。

然後用這個對象的destroy()方法可以殺死自己。。

freeMemory()
返回 Java 虛擬機中的空閒內存量。

maxMemory()
返回 Java 虛擬機試圖使用的最大內存量。
totalMemory()
返回 Java 虛擬機中的內存總量。







Date類 Calendar類 SimpleDateFormat類

Date類

只有一個Date()返回當前系統時間, 其他方法都已經過時不用 基本都用Calendar類取代。





Calendar類

protected Calendar()
構造一個帶有默認時區和語言環境的 Calendar。

如果要用這個構造方法, 必須繼承這個Calendar,所以一般用靜態方法獲取對象。 Calendar.getInstance()獲取當前系統時間

get(int field)
返回給定日曆字段的值。

eg:

Calendar.get(Calendar.YEAR)
Calendar.get(Calendar.MONTH)
Calendar.get(Calendar.DATE)
Calendar.get(Calendar.HOUR_OF_DAY)
Calendar.get(Calendar.MINUTE)
Calendar.get(Calendar.SECOND)

沒法返回特定格式時間, 也是頭疼。所以引出SimpleDateFormat類






SimpleDateFormat類

SimpleDateFormat 是一個以與語言環境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規範化。

SimpleDateFormat(String pattern)
用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat。

yyyy MM dd HH mm ss

可以自己隨意變成任意格式文本。作爲構造時的參數。

String format(Date date)
將給定的 Date 格式化爲日期/時間字符串,並將結果添加到給定的 StringBuffer。

Date parse(String text)
解析字符串的文本,生成 Date。

public class www {
    public static void main(String[] args) throws ParseException {
        Date date = new Date(); //獲取當前的系統時間。
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss") ;  
        String time = dateFormat.format(date);  //可以把日期轉換轉指定格式的字符串
        System.out.println("當前的系統時間:"+ time);

        String birthday = "2000年12月26日   11:29:08";
        Date date2 = dateFormat.parse(birthday);  //注意: 指定的字符串格式必須要與SimpleDateFormat的模式要一致。
        System.out.println(date2);

    }
}

當前的系統時間:2016年08月02日 15:02:23
Tue Dec 26 11:29:08 CST 2000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章