Java類庫以及它的基本組織結構


Java 類庫概念: Java 的應用程序編程接口 (API  (Application Programming Interface) )以包的形式來組織,每個包提供了大量的相關類、接口和異常處理類,這些包的集合就是 Java 的類庫

 

例如我編寫了一個類,可以獲取計算機的各種硬件信息,它很強大很穩定,如果你的項目也需要這樣一個功能,那么你就無需再自己編寫代碼,將我的類拿來直接用就可以。但是,我的類代碼很復雜,讓你讀完這些代碼不太現實,而且我也不希望你看到我的代碼(你也沒必要也不希望讀懂這些晦澀的代碼),我要保護我的版權,怎么辦呢?

 

 我可以先將我的類編譯,並附帶一個文檔,告訴你我的類怎么使用,有哪些方法和屬性,你只需要按照文檔的說明來調用就完全沒問題,既節省了你閱讀代碼的時間,也保護了我的版權。

例如,獲取CPU信息的方法:getCpuInfo(int cpuType);這就是一個API。也就是說,該文檔中描述的類的使用方法,就叫做API。

 

我也可以開發一個軟件,用來清理計算機中的垃圾文件,我比較有公益心,希望讓更多的開發人員使用我的軟件,我就會在發布軟件的同時附帶一個說明文檔,告訴你怎樣在自己的程序中調用,這也叫做API。

 

看API方式

  1. 先看包名
  2. 再看類(j繼承關系,類聲明)
  3. 看類中方法(方法名,參數,返回類型,修飾符)

目錄結構

Java類庫中有很多包:

·以 java.* 開頭的是Java的核心包,所有程序都會使用這些包中的類;

·以javax.* 開頭的是擴展包,x 是 extension 的意思,也就是擴展。雖然 javax.* 是對java.* 的優化和擴展,但是由於 javax.* 使用的越來越多,很多程序都依賴於 javax.*,所以 javax.* 也是核心的一部分了,也隨JDK 一起發布。

·以 org.* 開頭的是各個機構或組織發布的包,因為這些組織很有影響力,它們的代碼質量很高,所以也將它們開發的部分常用的類隨JDK一起發布。

在包的命名方面,為了防止重名,有一個慣例:大家都以自己域名的倒寫形式作為開頭來為自己開發的包命名,例如百度發布的包會以com.baidu.* 開頭,w3c組織發布的包會以org.w3c.* 開頭,微學苑發布的包會以 net.weixueyuan.* 開頭……

組織機構的域名后綴一般為org,公司的域名后綴一般為 com,可以認為org.* 開頭的包為非盈利組織機構發布的包,它們一般是開源的,可以免費使用在自己的產品中,不用考慮侵權問題,而以com.* 開頭的包往往由盈利性的公司發布,可能會有版權問題,使用時要注意。

java中常用的幾個包介紹:

包名 說明
java.lang 該包提供了Java編程的基礎類,例如Object、Math、String、StringBuffer、System、Thread等,不使用該包就很難編寫Java代碼了。
 java.applet Applet 是一種 Java 程序。它一般運行在支持 Java 的 Web 瀏覽器內。因為它有完整的 Java API支持,所以Applet 是一個全功能的 Java 應用程序。
java.util 該包提供了包含集合框架、遺留的集合類、事件模型、日期和時間實施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組)。
java.io 該包通過文件系統、數據流和序列化提供系統的輸入與輸出。
java.net 該包提供實現網絡應用與開發的類。
java.sql 該包提供了使用Java語言訪問並處理存儲在數據源(通常是一個關系型數據庫)中的數據API。
java.awt 這兩個包提供了GUI設計與開發的類。java.awt包提供了創建界面和繪制圖形圖像的所有類,而javax.swing包提供了一組“輕量級”的組件,盡量讓這些組件在所有平台上的工作方式相同。 
javax.swing
java.text 提供了與自然語言無關的方式來處理文本、日期、數字和消息的類和接口。

 其他還有

10.   java.beans     開發 Java Beans 需要的所有類

11.   java.math      簡明的整數算術以及十進制算術的基本函數

12.   java.rmi       與遠程方法調用相關的所有類

13.   java.security    設計網絡安全方案需要的一些類

常用的 Java 擴展包 (Java Extension Package)

1.  javax.accessibility  定義了用戶界面組件之間相互訪問的一種機制

2.  javax.naming.*     為命名服務提供了一系列類和接口

3.  javax.swing.*       提供了一系列輕量級的用戶界面組件,是目前 Java 用戶界面常用的包

注 1:在使用 Java 時,除了 java.lang 外,其他的包都需要 import 語句引入之后才能使用。

 

重點講解內容:java.lang和java.util。

java.lang 包

這個包稱為 java 語言包,是由編譯器自動引入的。程序中不必用 import 語句就可以使用。它所包含的類和接口對所有實際的 Java 程序都是必要的。

1.       object 類

2.       數學類 (Math)

3.       數據類型類

4.       線程類

5.       字符串類 (String 類和 StringBuffer 類 )

6.       系統及運行類 (System 類和 Runtime 類 )

7.       錯誤和異常處理類 (Throwable 、 Exception 、 Error)

8.       過程類 (process)

java.util 包

1. 日期類、日歷類( Data 、 Calendar 、 GregorianCalendar )

2. 隨機數類( Random )

3. 位運算類( BitSet )

4. 矢量類( Vector )

5. 數據結構類( Stack )

6. 散列表類( Hashtable )

7. StringTokenizer類

 

下面簡單說明一下java.lang包下的Object類和Math類。

Object類:

Object 是類層次結構的根類。每個類都使用 Object 作為超類。所有對象(包括數組)都實現這個類的方法。

下面說明Object類的幾種常用方法:

示例1:

toString

  public String toString()

返回:
該對象的字符串表示形式。

equals

public boolean equals(Object obj)

返回:

指示其他某個對象是否與此對象“相等”(內容)。
package com.company;

public class test {
        /**
         * 類庫練習
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String str1,str2,str3,str4;
            str1 = new String("ABC");
            str2 = new String("ABC");
            str3 = "ABC";
            str4 = "ABC";
            System.out.println(str1.toString());//用於返回該對象的信息
            System.out.println(str1.equals(str2));
            //判斷內容是不是相等
            System.out.println(str1.equals(str3));
            System.out.println("+++++++++++++++++");
            System.out.println(str1==str2);
            //判斷是不是相同
            System.out.println(str1==str3);
            System.out.println(str4==str3);

    }

}

運行結果

ABC
true
true
+++++++++++++++++
false
false
true

 

Math類:

Math類中包含多種對數字數據處理的工具方法。

1.sqrt

public static double sqrt(double a)

返回正確舍入的 double 值的正平方根。

2.cbrt

public static double cbrt(double a)

返回 double 值的立方根。

3.pow

public static double pow(double a,double b)

返回第一個參數的第二個參數次冪的值。

4.round

public static long round(double a)

返回最接近參數的 long。結果將舍入為整數:加上 1/2,對結果調用 floor 並將所得結果強制轉換為 long 類型。換句話說,結果等於以下表達式的值:
(long)Math.floor(a + 0.5d)

示例2:

package com.company;

public class test01 {

        /**
         * 類庫練習
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //有一三角形土地,有兩邊本別長為400,500米,夾角70度,求土地面積。
            //利用公式S=1/2*a*b*sinAB
            double a = 400,b = 500;
            double c=Math.PI*70/180;   //用弧度制表示
            System.out.println(a*b*(Math.sin(c))/2);
            System.out.println("+++++++++++++++++");
            //求平方根,立方根,n次冪,四舍五入,絕對值
            System.out.println("10的平方根:"+Math.sqrt(10));
            System.out.println("10的立方根:"+Math.cbrt(10));
            System.out.println("25的4次方:"+Math.pow(25,4));
            System.out.println("對3.5四舍五入:"+Math.round(3.5));
            System.out.println("對-3.5四舍五入:"+Math.round(-3.5));
            System.out.println("求兩數-12和34的差"+Math.abs((-12)-34));
            System.out.println("+++++++++++++++++");
            //求兩個數之中的大數、小數
            double inter1,inter2;
            inter1 = -123.45;
            inter2 = 67.89;
            System.out.println(Math.min(inter1, inter2));
            System.out.println(Math.max(inter1, inter2));
            System.out.println("+++++++++++++++++");
            //隨機數,每次運行產生的數是不一樣的
            int i,sum=0;
            int array[] = new int [10];
            for(i=0;i<=9;i++)
            {
                array[i]=(int)(Math.random()*900+100);
                sum+=array[i];
            }
            System.out.println("隨機數的平均值是:"+sum/10.0);
            System.out.println("隨機數分別是:");
            for(i=0;i<=9;i++)
            {
                System.out.println(array[i]);
            }
        }

    }

 

運行結果

93969.26207859084
+++++++++++++++++
10的平方根:3.1622776601683795
10的立方根:2.154434690031884
25的4次方:390625.0
對3.5四舍五入:4-3.5四舍五入:-3
求兩數-12和34的差46
+++++++++++++++++
-123.45
67.89
+++++++++++++++++
隨機數的平均值是:564.5
隨機數分別是:
578
301
546
713
745
256
199
638
716
953

Process finished with exit code 0

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM