1. 程式人生 > >Java API(常用類)

Java API(常用類)

(一)Java API概述

        Java API(Java Application Programming Interface,Java應用程式介面),是Java語言提供的組織成包結構的許多類和接

口的集合。Java API為使用者編寫應用程式提供了極大的便利。Java API包含在JDK中,因此使用者只要安裝了JDK執行環境就可以

使用該API(在Java中的API就是JDK中提供的各種功能       

        Java語言在不斷髮展,表現在JDK執行環境的版本在不斷提高(目前為JDK10,因此讀者學習時,可能Java API中又包含了

新的包或某,些包中又增加了新的子包,開啟JDK的幫助文件,可以看到Java API的詳細說明文件)

        Java API包含的內容很多,主要討論其中兩個最基本的包中的主要類:語言包(java.lang)和實用包(java.util)

        Java API按照內容分別組織和存放在不同的包中,Java API中的包及其主要功能按字母順序說明如下:

                   

java.accessibility 介面元件和助手技術的類和介面
                   java.applet         Applet所需的類和介面
                   java.awt            圖形使用者介面所需的類和介面
                   java.beans          Java bean所需的類和介面
                   java.io             系統輸入/輸出所需的類和介面
                   java.lang           Java語言程式設計的基礎類和介面
                   java.math           支援任意精度整數和任意精度小數的類和介面
                   java.naming         訪問命名服務的類和介面
                   java.net            網路應用的類和介面
                   java.rmi            遠端呼叫(RMI)的類和介面
                   java.security       用於安全框架的類和介面
                   java.sql            訪問和處理資料來源中資料的類和介面
                   java.text           支援按與語言無關方式處理文字、資料、數字和訊息的類和介面
                   java.util           集合框架、事件模型、日期和時間機制、國際化等的類和介面
                   javax.rmi           支援RMI-IIOP的類和介面
                   javax.serverlet     支援serverlet程式設計的類和介面
                   javax.sound         支援音訊裝置數字介面(MIDI)的類和介面
                   javax.swing         擴充和增強基本圖形使用者介面功能的類和介面
                   javax.transaction   包含有幾個關於事務上下文異常的類 
                   org.omg.CORBA       支援OMG CORBA API到Java語言對映的類和介面 

 

(二)語言包(java.lang)

         java.lang包是Java語言的核心類庫,包含了Java語言必不可少的系統類定義,如Object類、基本資料型別包裝類、Math數

學類、Comparable介面、String和StringBuffered類、System和Runtime類、Class類操作類、Error錯誤類和Exception異常類、

Thread執行緒類和Runnable介面

                java.lang包是Java語言程式設計使用最頻繁的包(包含Java程式設計語言最基礎的類),為了簡化程式設計,系統固定地預設

匯入了java.lang包,使用java.lang包中的時可以不用import語句匯入

1、Object類

            Object類是Java中所有類的根,所有其他的類都是由Object類派生出來的,因此根據繼承的特點,在Object類中定義的成

員變數和方法,在其他類中都可以使用,部分方法宣告如下:

                    public class Object{  //提供類的基本方法

                          public Object()                      //構造方法

                          public String toString()       //返回當前物件的資訊字串( 把物件轉換為字串)

                          public boolean equals(Object obj)     //比較當前物件與obj是否相等

                          public void finalize() throws Throwable   //析構方法

                          public fina Clas<?> getClass()    //返回當前物件所屬的類的Class物件(獲取物件的執行時類)

                      }

             PS:equals(Object obj)方法與Java運算子"=="的含義相同,但用法不同。當兩個值比較、物件或變數與值比較、兩個變

量比較時,使用運算子"==";當比較兩個物件時,使用equals()方法,該方法呼叫返回true時表示兩個物件相等(或稱相同),返

回false時表示兩個物件不相等 

   public static void main(String[] args) {

        // TODO Auto-generated method stub

        char ch = 'A';

        if ((ch == 'A') || (ch == 'a'))// 變數與值比較

            System.out.println("true");

        String str1 = "abc", str2 = null;

        if (str1 != null) {// 物件與值比較

            System.out.println(str1.equals(str2));// 兩個物件比較

        }

    }  

2、Math數學類

             Math類包含了一組基本的數學運算的方法和常數,如求絕對值的abs()方法,計算三角函式的sin()方法和cos()方法,求兩

個數中的較小值和較大值的min()方法和max()方法,求隨機數的random()方法等

             Math類是最終類(final),不能從Math類中派生其他的新類,不能被繼承,其中方法都是靜態最終方法,通過類名調

,如Math.abs(),另外Math類還把E和PI定義為類的靜態成員變數,其中E和PI代表數學上的相應常數

               Math類的幾個常用方法如下:

                        public final class Math extends Object   //數學類,最終類

                        {

                                public static final double E=2.7182818;     //靜態常量e

                                public static final double PI=3.1415926;   //靜態常量π

                                public static double abs(double a);       //返回a的絕對值,有過載方法

                                public static double random();       //返回一個0.0~1.0之間的隨機數

                                public static doule sin(double a);      //返回a的正弦值

                         }

            (1)abs()方法有4個(過載方法),包括了4種基本的數值型別(double,float,int,long),其他方法類同

            (2)random()方法是非常有用的方法,把random()的返回值乘上一個整數,可以得到任意區間的、double型別的隨機

數;把random()的返回值乘上一個整數再轉換成int型別,可以得到任意區間的、int型別的隨機數

    

public static void main(String[] args) {

        // TODO Auto-generated method stub

        int i;

        int[] a = new int[10];

        for (i = 0; i < a.length; i++) {

            a[i] = (int) (Math.random() * 100);// 產生隨機數並賦值

        }

        for (i = 0; i < a.length; i++)

            System.out.print(" " + a[i]);// 輸出一維陣列

        int min = a[0];

        for (i = 1; i < a.length; i++)

            if (a[i] < min)

                min = a[i]; // 尋找最小數

        System.out.println("\n最小數為:" + min);

    }

}  

 

3、Comparable可比較介面(內比較器

            Java通過Comparable介面的compareTo方法約定兩個物件比較大小的規則,Comparable介面宣告如下:

                public interface Comparable<T>{

                         public abstract  int compareTo(T obj);  

                 }

4、基本資料型別包裝類

            Java為每種資料型別聲明瞭一個對應的類,稱為基本資料型別的包裝類,Java語言中的8種基本資料型別是:byte、

short、int、long、float、double、char和boolean,對應的8個數據型別包裝類是:Byte、    Short、Integer、Long、Float、

Double、Character和Boolean

   (1)Integer整數類

            Integer是in型別的包裝類,宣告如下,使用的是一個私有最終變數儲存int整數值

                     public final class Integer extends Number implements Comparable<Integer>  

                      {

                            public static final int  MIN_VALUE=0x8000000;     //最小值常量

                            public static final double PI=0x7ffffffff;   //最大值常量

                            public Integer(int value){    //構造方法

                                    this.value=value;

                              }      

                            public int intValue();         //  返回物件的int資料型別的數值,小數部分丟掉

                            public static int parseInt(String s) throws NumberFormatException    //將串s按十進位制轉換為整數

                            public int compareTo(Integer iobj)    //比較兩個物件值大俠你,返回-1、0或1

                         }

         注意:Integer類的靜態方法parseInt()和例項方法intValue()都可以將一個字串轉化為int值,呼叫語句如下:

            int i=Integer.parseInt("123");

            int j=new Integer("123").intValue();

 

  (2)Double浮點數類和Integer相似

             public final class Double  extends Number implements Comparable<Double>  

                      {

                            public Double(double value)      //構造方法

                            public Double(String s) throws NumberFormatException

                            public static double parseDouble(String s) throws  NumberFormatException    //將串s轉換為浮點數

                            public double doubleValue();  //返回當前物件中浮點數的值

                        }    

5、String字串類

            定義字串變數所使用的String不是一個基本資料型別,而是Java API中提供的類,String是常量字串類,String物件存

儲常量字串,例項一旦建立,就不能再修改(代表不可變的字串序列)

                 public final class String  implements java.io.Serializable,Comparable<String>  

                      {

                            public String()      //構造方法

                            public boolean isEmpty()     //判斷是否為空串

                            public String toLowerCase()           //返回小寫字串

                            public Stirng toUpperCase()          //返回大寫字串

                            public int length()       //獲取字串的長度

                            public String substring(int beginIndex)        返回當前字串的由beginIndex開始到結尾的子串(求字串)

                            public String substring(int beginIndex,int endIndex)  返回當前字串的由beginIndex開始到endIndex結尾的子串

                        }    

 public static void main(String[] args) {

        //連線、求字串等String運算將建立另一個String例項(具有執行緒訪問的安全特性)

        System.out.println("abc");

        String cde = "cde";

        System.out.println("abc" + cde);// 字串的連線

        String d = cde.substring(1, 2);// 求字串

        System.out.println(d);

    }

}

charAt(int index)  返回在index位置出的字元
endsWith(String suffix)  判斷字串是否是以該字串結束
startsWith(String prefix)   判斷該字串是否是以該字串開始
equalsIgnoreCase(String anotherString)  將此 String 與另一個 String 比較,不考慮大小寫。
indexOf(int ch, int fromIndex) 返回在此字串中第一次出現指定字元處的索引,從指定的索引開始搜尋。
replace(char oldChar, char newChar) 返回一個新的字串,它是通過用 newChar 替換此字串中出現的所有 oldChar 得到的。
substring(int beginIndex) 
返回一個新的字串,它是此字串的一個子字串。
trim() 
返回字串的副本,忽略前導空白和尾部空白。
toLowerCase(Locale locale) 
使用給定 Locale 的規則將此 String 中的所有字元都轉換為小寫。
toUpperCase() 
使用預設語言環境的規則將此 String 中的所有字元都轉換為大寫。
split(String regex) 
根據給定正則表示式的匹配拆分此字串

 

6、StringBuffered字串緩衝區類

           StringBuffered字串緩衝區類採用緩衝區儲存可變長的字串,可以改變字串物件中的指定字元,可以插入或刪除

字串,當緩衝區容量不能滿足要求時,將自動擴充容量適用於經常可變的一個字元序列,效率比String高,允許字串追加在後

面也允許刪除某個字串(代表可變的字串序列)

    public static void main(String[] args) {

        // 允許字串追加在後面也允許刪除某個字串

        StringBuffer str = new StringBuffer("hello");

        str.append("hzx");

        System.out.println(str);

    }

}

7、StringBuilder類

 

8、Class類操作類

              Class類提供一組方法獲得當前類資訊,包括類名、父類及類所在包等,以及對類操作的通用方法,Class類的例項代表

一個正在執行的Java應用程式的類或介面,Java的基本資料型別(boolean,byte,char,shart,int,long,float,double)以

及陣列和關鍵字void都是由Class物件來表達,Class類沒有公共的構造方法,Class物件由Java虛擬機器自動構造

            Class類常用方法:

                     String static getName()              //返回物件的類名

                     class static forName(String ClassName)  //使用ClassName指定的、與類或介面相聯絡的class物件

                     class static forName(String name,boolean initialize,ClassLoader loader)  // 使用loader指定的類裝載器Class類

的forName()方法可用於安裝驅動序,Class.forName("sun.jdbc.odbc.JdbcOdcDriver");

  public static void main(String args[]) {

        // 物件名.getClass()

        Person p = new Person("zhangsan", 50);

        Class<?> class1 = p.getClass();// 型別的例項class1(通過類的物件呼叫getCLass方法)

        System.out.println(class1.getName());// 輸出類名

        System.out.println(class1.getSuperclass().getName());// 輸出超類名

        // 類名.class

        Class<?> class2 = Person.class;// 建立一個 Class 型別的例項class2(通過類名.class)

        System.out.println(class2.getName());

        System.out.println(class2.getSuperclass().getName());

        // 使用Class.forName();

        try {

            Class<?> class3 = Class.forName("classtype.Person");// //建立一個 Class

                                                                // 型別的例項class3(通過Class呼叫靜態方法forName())

            System.out.println(class3.getName());

            System.out.println(class3.getSuperclass().getName());

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }         

9、System系統類

                  System類提供標準輸入輸出常量和訪問系統資源的方法,其中宣告3個標準輸入/輸出常量:in、out、和err,方法都是靜態的,System類部分宣告如下:

              public final class System extends Object  

                      {

                            public static final int InputStream in=nullInputStream;     //標準輸入常量

                            public static final int OutputStream out=nullOutputStream;     //標準輸出常量

                            public static final int PrintStream err=nullPrintStream;     //標準錯誤輸出常量

                            public  static void exit(int status)    //結束當前程式執行(中斷當前執行的Java虛擬機器,status為狀態碼,非0的狀態碼錶示不正常中斷)

                            public static long currentTimeMills()      //獲得當前日期和時間

                            public static Properties getProperties()   //獲得當前系統全部屬性

                            public static String getProperty(String key)     //獲得指定系統屬性

                            public static String setProperty(Properties props)     //設定props指定的屬性

                            public static void load(String fileName)   //載入本地檔案系統中由檔名fileName指定的動態庫

                       }      

              其中Properties是java語言包中定義的一個類,該類定義了系統屬性集合,每個屬性用字串表示,其常用的幾個屬性值以及含義如下:

 public static void main(String args[]) {

        // java執行時環境版本

        String str1 = System.getProperty("java.version");

        System.out.println(str1);

        // java虛擬機器實現的版本

        String str2 = System.getProperty("java.vm.version");

        System.out.println(str2);

        // java類的路徑

        String str3 = System.getProperty("java.class.path");

        System.out.println(str3);

        // 作業系統版本

        String str4 = System.getProperty("os.version");

        System.out.println(str4);

        // 使用者名稱

        String str5 = System.getProperty("user.name");

        System.out.println(str5);

        // 使用者路徑

        String str6 = System.getProperty("user.dir");

        System.out.println(str6);

        // 使用者HOME路徑

        String str7 = System.getProperty("user.home");

        System.out.println(str7);  

10、Runtime執行類

                每一個Java應用程式都有一個Runtime類的例項,從而允許應用程式與其執行的環境進行互動,利用Runtime類直接訪問執行時環境資源

                    public class Runtime  extends Objec0t  

                    {

                            public static Runtime getRuntime()      //返回與當前程式相聯絡的Runtime例項

                            public  long totalMemory()      //返回系統記憶體空間總量

                            public long freeMemory        //返回系統記憶體剩餘空間大小

                     }

public static void main(String[] args) {

        // TODO Auto-generated method stub

        Runtime rtime = Runtime.getRuntime();

        long totalMemory = rtime.totalMemory() / 1024;

        long freeMemory = rtime.freeMemory() / 1024;

        System.out.println("totalMemory: " + totalMemory + "k");

        System.out.println("freeMemory: " + freeMemory + "k");

    }

 

三、實用包(java.util)

           java.util實用包提供了實現各種功能的類,主要包含日期類(日期和時間機制)、陣列類、集合類(集合框架)、事件

模型、國際化等的類和介面

1、日期類(Data 類和Calendar類 )

        1)Data 類提供了獲取當前精確到毫秒時間的方法,並提供了許多方法擷取當前時間的年、月、日等數值。

              Data 類的構造方法有:

                    Data ()    //構造方法,獲得系統當前日期和時間

                    Data (long date)    //以長整數建立一個可精確到毫秒的引數date指定時間的物件,date表示從GMT(格林威治)時

間1970-1-1 00:00:00開始至某時刻的毫秒數

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Date date=new Date();

//        long dL = 12345678l;

//        Date date = new Date(dL);

        System.out.println(date);

    }  

       2)Calendar類定義了許多如YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、DAY_OF_WEEK等成員變數,Calendar類的get()方法可以獲取這些成員變數的數值

public static void main(String[] args) {

 

        // 分項輸出顯示當前時間

        Calendar now = Calendar.getInstance(); // 獲得當前時間

        int year = now.get(Calendar.YEAR); // 年份

        int month = now.get(Calendar.MONTH) + 1; // 月份

        int day = now.get(Calendar.DATE); // 日期

        System.out.print(year + "年" + month + "月" + day + "日 ");

        int hour = now.get(Calendar.HOUR); // 時

        int minute = now.get(Calendar.MINUTE); // 分

        int second = now.get(Calendar.SECOND); // 秒

        System.out.print(hour + "時" + minute + "分" + second + "秒 ");

        int week = now.get(Calendar.DAY_OF_WEEK); // 星期1~7

        String str = "日一二三四五六";

        int i = 2 * (week - 1); // 對應中文的下標

        System.out.println("星期" + str.substring(i, i + 2));

    }

}

 

2、Comparator比較器介面(外比較器

             java.lang.Comparable介面約定兩個物件比較大小的規則 一個類如果還需要其他比較物件大小的規則,可使用

java.util.Comparator比較器介面,Comparator介面宣告如下:

                  public interface Comparator<T>{

                          public abstract boolean equals(Object obj);

                           public abstract int compare(T cobj1,T cobj2); 

                  }

         PS:有兩種情況可以使用實現Comparator介面的方式:

              (1)一個物件不支援自己和自己比較(沒有實現Comparable介面),但是又想對兩個物件進行比較

              (2)一個物件實現了Comparable介面,但是開發者認為compareTo方法中的比較方式並不是自己想要的那種比較方式

 

3、Array陣列類

              Arrays類中包含有陣列操作的一些常用方法(填充、比較、排序和查詢),所有方法都是靜態方法,大大簡化程式設計人員的設計過程

       1)排序

              static void sort(byte[] a)  :把byte型別的陣列a中的元素按升序排序

              static void sort(byte[] a,int fromIndex,int toIndex)  :把byte型別的陣列a中的、從fromIndex到toIndex的元素按升序排序

              static void sort(int[] a)  : 把int型別的陣列a中的元素按升序排序

              static void sort(int[] a,int fromIndex,int toIndex) :把int型別的陣列a中的、從fromIndex到toIndex的元素按升序排序

              static void sort(double[] a) :把double型別的陣列a中的元素按升序排序

              static void sort(double[] a,int fromIndex,int toIndex):把double型別的陣列a中的、從fromIndex到toIndex的元素按升序排序

         2)二分法查詢

              static int binarySearch(byte[] a,byte key)  :在byte型別的陣列a 中、使用折半查詢演算法查詢指定元素key是否存在,若存在返回該元素的陣列下標;若不存在返回-1

              static int binarySearch(int[] a,int key)  :在int型別的陣列a 中、使用折半查詢演算法查詢指定元素key是否存在,若存在返回該元素的陣列下標;若不存在返回-1

              static int binarySearch(double[] a,double key)  :在double型別的陣列a 中、使用折半查詢演算法查詢指定元素key是否存在,若存在返回該元素的陣列下標;若不存在返回-1 

4、Enumeration介面 

              Enumeration介面主要用於集合類物件的序列化。一個集合類物件中包含有許多元素,所謂物件是序列化的,就是說可以依次取出該物件中的元素。

             Enumeration介面定義如下:

    public interface Enumeration 

    {

         Object nextElement();       //返回後續元素

          boolean hasMoreElements();  //判斷是否還有後續元素

    } 

                任何一個類,只要實現了Enumeration介面,其物件就是序列化的。所謂物件是序列化的,就是說若連續呼叫nextElement()方法,每次將返回該集合物件當前元素的後續元素。

                例如,Vector類是一個集合類,Vector類就實現了Enumeration介面。因此,若要輸出一個Vector類的物件v中的所有元素,就可以編寫如下程式碼: 

    Enumeration e = v.elements();

    while (e.hasMoreElements()) 

    {

      System.out.println(e.nextElement());

    }

 

四、Java API總結

      1、生成隨機數的方法

             1)Math類
                        Math.random() ,返回帶正號的double值,該值大於等於0.0且小於1.0(懂得靈活轉換成獲取其他數字的函式)

             2) java.util.Random包下

                       New Random.nextInt(int n),返回一個偽隨機數,它是取自此隨機數生成器序列的、在 0(包括)和指定值(不包

括)之間均勻分佈的int值

      2、String、StringBuffer和StringBuilder的比較

                1)String 字串常量(物件不可變,執行緒安全)  private final char value[];

                2) StringBuffer 字串變數(執行緒安全)

                3)StringBuilder 字串變數(非執行緒安全)char[] value;

                      如果程式不是多執行緒的,那麼使用StringBuilder效率高於StringBuffer,在大部分情況下 StringBuilder > StringBuffer> String

      3、Comparator 和 Comparable 的區別

           相同點:都是java的一個介面,並且是用來對自定義的class比較大小的

           不同點:

          (1)Comparable:Comparable 定義在 Person類的內部

                            public class Persion implements Comparable {..比較Person的大小..},

            因為已經實現了比較器,那麼我們的Person現在是一個可以比較大小的物件,它的比較功能和String完全一樣,可以隨時

隨地的拿來比較大小,因為Person現在自身就是有大小之分的。Collections.sort(personList)可以得到正確的結果。

            (2)Comparator:Comparator 是定義在Person的外部的,此時我們的Person類的結構不需要有任何變化,如

                             public class Person{ String name; int age }

                      然後我們另外定義一個比較器:

                             public PersonComparator implements Comparator() {..比較Person的大小..},       

                     在PersonComparator裡面實現了怎麼比較兩個Person的大小,所以用這種方法,當我們要對一個 personList進行

序的時候, 我們除了了要傳遞personList過去,還需要把PersonComparator傳遞過去,因為怎麼比較Person的大小是在

PersonComparator裡面實現的, 如Collections.sort( personList , new PersonComparator() ).