一步一步學JAVA(15)-API

API:(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
--< java.lang >-- String 字符串
java 中用String 類進行描述。對字符串進行了對象的封裝。這樣的好處是可以對字符串這種常見數據進行方便的操作。對象封裝後,可以定義N 多屬性和行爲。
如何定義字符串對象呢?String s = "abc";只要是雙引號引起的數據都是字符串對象。
特點:字符串一旦被初始化,就不可以被改變,存放在方法區中的常量池中。

String s1 = "abc"; // s1 指向的內存中只有一個對象abc。
String s2 = new String("abc"); // s2 指向的內容中有兩個對象abc、new 。
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true ,字符串中equals 比較的是字符串內容是否相同。

字符串的方法:
1:構造方法:將字節數組或者字符數組轉成字符串。

String s1 = new String();//創建了一個空內容的字符串。
String s2 = null;//s2 沒有任何對象指向,是一個null 常量值。
String s3 = "";//s3 指向一個具體的字符串對象,只不過這個字符串中沒有內容。
//一般在定義字符串時,不用new。
String s4 = new String("abc");
String s5 = "abc"; 一般用此寫法
new String(char[]);//將字符數組轉成字符串。
new String(char[],offset,count);//將字符數組中的一部分轉成字符串。

2:一般方法:
按照面向對象的思想:
2.1 獲取:
2.1.1:獲取字符串的長度。length();
2.1.2:指定位置的字符。char charAt(int index);
2.1.3:獲取指定字符的位置。如果不存在返回-1,所以可以通過返回值-1 來判斷某一個字符不存在的情況。

int indexOf(int ch);//返回第一次找到的字符角標
int indexOf(int ch,int fromIndex); //返回從指定位置開始第一次找到的角標
int indexOf(String str); //返回第一次找到的字符串角標
int indexOf(String str,int fromIndex);
int lastIndexOf(int ch);
int lastIndexOf(int ch,int fromIndex);
int lastIndexOf(String str);
int lastIndexOf(String str,int fromIndex);

2.1.4:獲取子串。

String substring(int start);//從start 位開始,到length()-1 爲止.
String substring(int start,int end);//從start 開始到end 爲止。//包含start 位,不包含end 位。
substring(0,str.length());//獲取整串


2.2 判斷:
2.2.1:字符串中包含指定的字符串嗎?

boolean contains(String substring);


2.2.2:字符串是否以指定字符串開頭啊?

boolean startsWith(string);


2.2.3:字符串是否以指定字符串結尾啊?

boolean endsWith(string);

2.2.4:判斷字符串是否相同

boolean equals(string);//覆蓋了Object 中的方法,判斷字符串內容是否相同。

2.2.5:判斷字符串內容是否相同,忽略大小寫。

boolean equalsIgnoreCase(string) ;

2.3 轉換:
2.3.1:通過構造函數可以將字符數組或者字節數組轉成字符串。
2.3.2:可以通過字符串中的靜態方法,將字符數組轉成字符串。

static String copyValueOf(char[] );
static String copyValueOf(char[],int offset,int count);
static String valueOf(char[]);
static String valueOf(char[],int offset,int count);

2.3.3:將基本數據類型或者對象轉成字符串。

static String valueOf(char);
static String valueOf(boolean);
static String valueOf(double);
static String valueOf(float);
static String valueOf(int);
static String valueOf(long);
static String valueOf(Object);

2.3.4:將字符串轉成大小寫。

String toLowerCase();
String toUpperCase();

2.3.5:將字符串轉成數組。

char[] toCharArray();//轉成字符數組。
byte[] getBytes();//可以加入編碼表。轉成字節數組。

2.3.6:將字符串轉成字符串數組。切割方法。

String[] split(分割的規則-字符串);

2.3.7:將字符串進行內容替換。注意:修改後變成新字符串,並不是將原字符串直接修改。

String replace(oldChar,newChar);
String replace(oldstring,newstring);

2.3.8: String concat(string); //對字符串進行追加。

String trim();//去除字符串兩端的空格
int compareTo();//如果參數字符串等於此字符串,則返回值 0;如果此字符串按字典順序小於字符串參數,則返回一個小於 0 的值;如果此字符串按字典順序大於字符串參數,則返回一個大於 0 的值。

--< java.lang >-- StringBuffer 字符串緩衝區
構造一個其中不帶字符的字符串緩衝區,初始容量爲 16 個字符。
特點:
1:可以對字符串內容進行修改。
2:是一個容器。
3:是可變長度的。
4:緩衝區中可以存儲任意類型的數據。
5:最終需要變成字符串。
容器通常具備一些固定的方法:
1,添加。

StringBuffer append(data):在緩衝區中追加數據。追加到尾部。
StringBuffer insert(index,data):在指定位置插入數據。

2,刪除。

StringBuffer delete(start,end);刪除從start 至end-1 範圍的元素
StringBuffer deleteCharAt(index);刪除指定位置的元素
//sb.delete(0,sb.length());//清空緩衝區。

3,修改。

StringBuffer replace(start,end,string);將start 至end-1 替換成string
void setCharAt(index,char);替換指定位置的字符
void setLength(len);將原字符串置爲指定長度的字符串

4,查找。(查不到返回-1)

int indexOf(string); 返回指定子字符串在此字符串中第一次出現處的索引。
int indexOf(string,int fromIndex);從指定位置開始查找字符串
int lastIndexOf(string); 返回指定子字符串在此字符串中最右邊出現處的索引。
int lastIndexOf(string,int fromIndex); 從指定的索引開始反向搜索

5,獲取子串。

string substring(start); 返回start 到結尾的子串
string substring(start,end); 返回start 至end-1 的子串

6,反轉。

StringBuffer reverse();字符串反轉

--< java.lang >-- StringBuilder 字符串緩衝區
JDK1.5 出現StringBuiler;構造一個其中不帶字符的字符串生成器,初始容量爲 16 個字符。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。
方法和StringBuffer 一樣;
StringBuffer 和 StringBuilder 的區別:
StringBuffer 線程安全。
StringBuilder 線程不安全。
單線程操作,使用StringBuilder 效率高。
多線程操作,使用StringBuffer 安全。
---------------------------------------------------------

StringBuilder sb = new StringBuilder("abcdefg");
sb.append("ak"); //abcdefgak
sb.insert(1,"et");//aetbcdefg
sb.deleteCharAt(2);//abdefg
sb.delete(2,4);//abefg
sb.setLength(4);//abcd
sb.setCharAt(0,'k');//kbcdefg
sb.replace(0,2,"hhhh");//hhhhcdefg
//想要使用緩衝區,先要建立對象。
StringBuffer sb = new StringBuffer();
sb.append(12).append("haha");//方法調用鏈。
String s = "abc"+4+'q';
s = new StringBuffer().append("abc").append(4).append('q').toString();

 

class Test{
    public static void main(String[] args) {
        String s1 = "java";
        String s2 = "hello";
        method_1(s1,s2);
        System.out.println(s1+"...."+s2); //java....hello
        StringBuilder s11 = new StringBuilder("java");
        StringBuilder s22 = new StringBuilder("hello");
        method_2(s11,s22);
        System.out.println(s11+"-----"+s22); //javahello-----hello
    }
    public static void method_1(String s1,String s2){
        s1.replace('a','k');
        s1 = s2;
    }
    public static void method_2(StringBuilder s1,StringBuilder s2){
        s1.append(s2);
        s1 = s2;
    }
}


基本數據類型對象包裝類:是按照面向對象思想將基本數據類型封裝成了對象。
好處:
1:可以通過對象中的屬性和行爲操作基本數據。
2:可以實現基本數據類型和字符串之間的轉換。
關鍵字      對應的類名
byte         Byte
short        Short paserShort(numstring);
int            Integer 靜態方法:parseInt(numstring)
long         Long
float         Float
double     Double
char        Character
Boolean  Boolean
基本數據類型對象包裝類:都有 XXX parseXXX 方法
只有一個類型沒有parse 方法:Character ;
--------------------------------------------------------
Integer 對象
數字格式的字符串轉成基本數據類型的方法:
1:將該字符串封裝成了Integer 對象,並調用對象的方法intValue();
2:使用Integer.parseInt(numstring):不用建立對象,直接類名調用;
將基本類型轉成字符串:
1:Integer 中的靜態方法 String toString(int);
2:int+"";
將一個十進制整數轉成其他進制:
轉成二進制:toBinaryString
轉成八進制:toOctalString
轉成十六進制:toHexString
toString(int num,int radix);
將其他進制轉換十進制:
parseInt(string,radix); //將給定的數轉成指定的基數進制;
在jdk1.5 版本後,對基本數據類型對象包裝類進行升級。在升級中,使用基本數據類型對象包裝類可以像使用基本數據類型一樣,進行運算。
Integer i = new Integer(4); //1.5 版本之前的寫法;
Integer i = 4; //自動裝箱,1.5 版本後的寫法;
i = i + 5;
//i 對象是不能直接和5 相加的,其實底層先將i 轉成int 類型,在和5 相加。而轉成int 類型的操作是隱
式的。自動拆箱:拆箱的原理就是i.intValue();i+5 運算完是一個int 整數。如何賦值給引用類型i 呢?其實
有對結果進行裝箱。
Integer c = 127;
Integer d = 127;
System.out.println(c = = d); //true
//在裝箱時,如果數值在byte 範圍之內,那麼數值相同,不會產生新的對象,也就是說多個數值相同的引用指向的是同一個對象。

API--- java.lang.System: 屬性和行爲都是靜態的。

long currentTimeMillis(); // 返回當前時間毫秒值
exit(); // 退出虛擬機
Properties getProperties() ; // 獲取當前系統的屬性信息
Properties prop = System.getProperties(); //獲取系統的屬性信息,並將這些信息存儲到Properties 集合中。
System.setProperty("myname","畢老師"); //給系統屬性信息集添加具體的屬性信息
//臨時設置方式:運行jvm 時,可以通過jvm 的參數進行系統屬性的臨時設置,可以在java 命令的後面加入–D<name>=<value> 用法:java –Dmyname=小明 類名。
String name = System.getProperty("os.name");//獲取指定屬性的信息
//想要知道該系統是否是該軟件所支持的系統中的一個。
Set<String> hs = new HashSet<String>();
hs.add("Windows XP");
hs.add("Windows 7");
if(hs.contains(name))
System.out.println("可以支持");
else
System.out.println("不支持");

API--- java.lang.Runtime: 類中沒有構造方法,不能創建對象。
但是有非靜態方法。說明該類中應該定義好了對象,並可以通過一個static 方法獲取這個對象。用這個對象來調用非靜態方法。這個方法就是 static Runtime getRuntime();
這個Runtime 其實使用單例設計模式進行設計。

class RuntimeDemo {
    public static void main(String[] args) throws Exception {
        Runtime r = Runtime.getRuntime();
        Process p = r.exec("notepad.exe SystemDemo.java"); //運行指定的程序
        Thread.sleep(4000);
        p.destroy(); //殺掉進程
    }
}


API--- java.util.Math: 用於數學運算的工具類,屬性和行爲都是靜態的。該類是final 不允許繼承。

static double ceil(double a) ; //返回大於指定數值的最小整數
static double floor(double a) ; //返回小於指定數值的最大整數
static long round(double a) ; //四捨五入成整數
static double pow(double a, double b) ; //a 的b 次冪
static double random(); //返回0~1 的僞隨機數
public static void main(String[] args) {
    Random r = new Random();
    for(int x=0; x<10; x++) {
        //double d = Math.floor(Math.random()*10+1);
        //int d = (int)(Math.random()*10+1);
        int d = r.nextInt(10)+1;
        System.out.println(d);
    }
}

 



API--- java.util.Date:日期類,月份從0-11;

/*
日期對象和毫秒值之間的轉換。
1,日期對象轉成毫秒值。Date 類中的getTime 方法。
2,如何將獲取到的毫秒值轉成具體的日期呢?
Date 類中的setTime 方法。也可以通過構造函數。
*/
//日期對象轉成毫秒值
Date d = new Date();
long time1 = d.getTime();
long time2 = System.currentTimeMillis(); / /毫秒值。
//毫秒值轉成具體的日期
long time = 1322709921312l;
Date d = new Date();
d.setTime(time);
/*
將日期字符串轉換成日期對象:使用的就是DateFormat 方法中的 Date parse(String source) ;
*/
public static void method() throws Exception {
    String str_time = "2011/10/25";
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); //SimpleDateFormat 作爲可以指定用戶自定義的格式來完成格式化。
    Date d = df.parse(str_time);
}
/*
如果不需要使用特定的格式化風格,完全可以使用DateFormat 類中的靜態工廠方法獲取具體的已經封裝好風格的對象。getDateInstance();getDateTimeInstance();
*/
Date d = new Date();
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
df = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String str_time = df.format(d);
//將日期對象轉換成字符串的方式:DateFormat 類中的format 方法。
//創建日期格式對象。
DateFormat df = new SimpleDateFormat(); //該對象的建立內部會封裝一個默認的日期格式。11-12-1 下午1:48
//如果想要自定義日期格式的話。可使用SimpleDateFormat 的構造函數。將具體的格式作爲參數傳入
到構造函數中。如何表示日期中年的部分呢?可以必須要參與格式對象文檔。
df = new SimpleDateFormat("yyyy 年MM 月dd 日 HH:mm:ss");
//調用DateFormat 中的format 方法。對已有的日期對象進行格式化。
String str_time = df.format(d);


--------------------------------------------------------------------------------------------------------------------
API--- java.util. Calendar:日曆類
 

public static void method(){
    Calendar c = Calendar.getInstance();
    System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"
    +getNum(c.get(Calendar.DAY_OF_MONTH))+"日"
    +"星期"+getWeek(c.get(Calendar.DAY_OF_WEEK)));
}
public static String getNum(int num){
    return num>9 ? num+"" : "0"+num;
}
public static String getWeek(int index){
    /*
        查表法:建立數據的對應關係.
        最好:數據個數是確定的,而且有對應關係。如果對應關係的一方,是數字,而且可以作爲角標,那麼可以通過數組來作爲表。
    */
    String[] weeks = {"","日","一","二","三","四","五","六"};
    return weeks[index];
}

 

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