Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評(píng)論 :: 0 Trackbacks
          Java API基礎(chǔ)
          ?
          ?
          ??? Java語(yǔ)言的強(qiáng)大功能主要體現(xiàn)在Java語(yǔ)言完備豐富、功能強(qiáng)大的Java API上。本章介紹Java API的基本結(jié)構(gòu)以及語(yǔ)言包和實(shí)用包中的常用類。
          ?
          ?
          1、Java API 綜述
          ?
          ??? Java語(yǔ)言的內(nèi)核非常小,Java語(yǔ)言的強(qiáng)大功能主要體現(xiàn)在Java語(yǔ)言完備豐富、功能強(qiáng)大的Java API上。
          ??? Java API(Java Application Programming Interface,Java應(yīng)用程序接口),是Java語(yǔ)言提供的組織成包結(jié)構(gòu)的許多類和接口的集合。Java API為用戶編寫應(yīng)用程序提供了極大的便利。Java API包含在JDK中,因此用戶只要按照1.3節(jié)介紹的方法安裝了JDK運(yùn)行環(huán)境就可以使用了。
          ??? Java API按照內(nèi)容分別組織和存放在不同的包中,Java API中的包及其主要功能按字母順序說(shuō)明如下:
          ??????? java.accessibility?接口組件和助手技術(shù)的類和接口
          ??????? java.applet???????? Applet所需的類和接口
          ??????? java.awt??????????? 圖形用戶界面所需的類和接口
          ??????? java.beans????????? Java bean所需的類和接口
          ??????? java.io???????????? 系統(tǒng)輸入/輸出所需的類和接口
          ??????? java.lang?????????? Java語(yǔ)言編程的基礎(chǔ)類和接口
          ??????? java.math?????????? 支持任意精度整數(shù)和任意精度小數(shù)的類和接口
          ??????? java.naming???????? 訪問(wèn)命名服務(wù)的類和接口
          ??????? java.net??????????? 網(wǎng)絡(luò)應(yīng)用的類和接口
          ??????? java.rmi??????????? 遠(yuǎn)程調(diào)用(RMI)的類和接口
          ??????? java.security?????? 用于安全框架的類和接口
          ??????? java.sql??????????? 訪問(wèn)和處理數(shù)據(jù)源中數(shù)據(jù)的類和接口
          ??????? java.text?????????? 支持按與語(yǔ)言無(wú)關(guān)方式處理文本、數(shù)據(jù)、數(shù)字和消息的類和接口
          ??????? java.util?????????? 集合框架、事件模型、日期和時(shí)間機(jī)制、國(guó)際化等的類和接口
          ??????? javax.rmi?????????? 支持RMI-IIOP的類和接口
          ??????? javax.serverlet???? 支持serverlet編程的類和接口
          ??????? javax.sound?????????支持音頻設(shè)備數(shù)字接口(MIDI)的類和接口
          ??????? javax.swing?????????擴(kuò)充和增強(qiáng)基本圖形用戶界面功能的類和接口
          ??????? javax.transaction?? 包含有幾個(gè)關(guān)于事務(wù)上下文異常的類

          ??????? org.omg.CORBA?????? 支持OMG CORBA API到Java語(yǔ)言映射的類和接口
          ??? 上述大部分的包都又按內(nèi)容組織成子包形式,關(guān)于各包的子包這里就不再贅述。
          ??? Java語(yǔ)言在不斷發(fā)展,這表現(xiàn)在JDK運(yùn)行環(huán)境的版本在不斷提高。因此,讀者學(xué)習(xí)本書時(shí),可能Java API中又包含了新的包,或某些包中又增加了新的子包。
          打開(kāi)JDK的幫助文檔,可以看到Java API的詳細(xì)說(shuō)明文檔。
          ??? Java API包含的內(nèi)容很多,本章主要討論其中兩個(gè)最基本的包中的主要類:
          ????(1)語(yǔ)言包(java.lang)。主要討論的類有:Object類、Class類、Runtime類、Float類、String類和Math類。
          ??? (2)實(shí)用包(java.util)。主要討論的類和接口有:Arrays類、Vector 類、Data 類和Enumeration接口。

          2、語(yǔ)言包(java.lang)簡(jiǎn)介

          ??? java.lang包中包含了Java程序設(shè)計(jì)語(yǔ)言最基礎(chǔ)的類。本節(jié)討論的java.lang包中的類有Object類、System類、Class類、Runtime類、String類、Math類和Float類。
          ??? java.lang包是Java語(yǔ)言編程使用最頻繁的包。為了簡(jiǎn)化編程,系統(tǒng)固定地默認(rèn)導(dǎo)入了java.lang包,所以使用java.lang包中的類時(shí)可以不用import語(yǔ)句導(dǎo)入。
          ?
          1、Object類
          ?
          ??? Object類是Java中所有類的根,所有其他的類都是由Object類派生出來(lái)的,因此,根據(jù)繼承的特點(diǎn),在Object類中定義的成員變量和方法,在其他類中都可以使用。
          ??? Object類常用方法有:
          ????? equals(Object obj)?比較兩個(gè)對(duì)象是否相等
          ????? getClass()????????獲取對(duì)象的運(yùn)行時(shí)類
          ????? toString()????????把對(duì)象轉(zhuǎn)換為字符串
          ??? Object類中還有一組關(guān)于線程同步的方法:wait()方法和notify()方法。
          ??? equals(Object obj)方法與Java運(yùn)算符"=="的含義相同,但用法不同。當(dāng)兩個(gè)值比較、對(duì)象或變量與值比較、兩個(gè)變量比較時(shí),使用運(yùn)算符"==";當(dāng)比較兩個(gè)對(duì)象時(shí),使用equals()方法。該方法調(diào)用返回true時(shí)表示兩個(gè)對(duì)象相等(或稱相同),返回false時(shí)表示兩個(gè)對(duì)象不相等。
          【例5.1】equals()方法應(yīng)用舉例。
          public class EqualsTest
          {
          ???public static void main(String args[])
          ???{
          ??????char ch='A';
          ????? if ((ch=='A') || (ch=='a'))????//變量與值比較
          ????? System.out.println("true");
          ????? String str1="abc",str2=null;
          ????? if (str1!=null)???????//對(duì)象與值比較
          ??????System.out.println(str1.equals(str2));?//兩個(gè)對(duì)象比較
          ???}
          }
          程序運(yùn)行顯示結(jié)果如下:
          true
          false

          2、System類

          ??? System類提供了許多獲取或重新設(shè)置系統(tǒng)資源的靜態(tài)方法。
          ??? System類的常用方法有:
          ??????? static Properties getProperty()???????????? 獲取系統(tǒng)屬性
          ??????? static Properties getProperty(String key)???獲取由key指定的系統(tǒng)屬性
          ??????? static void setProperty(Properties props) ??設(shè)置由props指定的系統(tǒng)屬性
          ??????? static void load(String fileName)?????????? 加載本地文件系統(tǒng)中由文件名fileName指定的動(dòng)態(tài)庫(kù)
          ??????? static void?exit(int status)????????????????中斷當(dāng)前運(yùn)行的Java虛擬機(jī),status為狀態(tài)碼,非0的狀態(tài)碼表示不正常中斷

          ??? 其中,獲取系統(tǒng)屬性方法的返回值類型為Properties,Properties是java語(yǔ)言包中定義的一個(gè)類。該類定義了系統(tǒng)屬性集合,每個(gè)屬性用字符串表示,其常用的幾個(gè)屬性值以及含義如下:
          ??????? java.version????java運(yùn)行時(shí)環(huán)境版本
          ??????? java.vm.version??java虛擬機(jī)實(shí)現(xiàn)的版本
          ??????? java.class.path??java類的路徑
          ??????? os.version?????? 操作系統(tǒng)的版本
          ??????? user.name??????? 用戶名
          ??????? user.dir???????? 用戶路徑
          ??????? user.home??????? 用戶HOME路徑

          【例5.2】用System類獲得當(dāng)前系統(tǒng)屬性示例。
          public class SystemTest
          {
          ?public static void main(String args[])
          ??? {
          ??????? String str;
          ??????? //java運(yùn)行時(shí)環(huán)境版本
          ??????? str = System.getProperty("java.version");?
          ??????? System.out.println("java.version: " + str);???????
          ?
          ??????? //java虛擬機(jī)實(shí)現(xiàn)的版本
          ??????? str = System.getProperty("java.vm.version");?
          ??????? System.out.println("java.vm.version: " + str);
          ???????????????
          ??????? //java類的路徑
          ??????? str = System.getProperty("java.class.path");?
          ??????? System.out.println("java.class.path: " + str);
          ???????????????
          ??????? //操作系統(tǒng)的版本
          ??????? str = System.getProperty("os.version");?
          ??????? System.out.println("os.version: " + str);
          ???????????????
          ??????? //用戶名
          ??????? str = System.getProperty("user.name");?
          ??????? System.out.println("user.name: " + str);
          ???????????????
          ??????? //用戶路徑
          ??????? str = System.getProperty("user.dir");?
          ??????? System.out.println("user.dir: " + str);
          ???????????????
          ??????? //用戶HOME路徑
          ??????? str = System.getProperty("user.home");?
          ??????? System.out.println("user.home: " + str);
          ??? }
          }
          程序的運(yùn)行結(jié)果為:
          java.version: 1.4.1_02
          java.vm.version: 1.4.1_02-b06
          java.class.path: D:\JBuilder9\jdk1.4\lib;D:\;.;
          os.version: 5.0
          user.name: administrator
          user.dir: E:\Java\chapt5
          user.home: C:\Documents and Settings\Administrator.ZXB

          另外,System類中定義了三個(gè)和輸入輸出流有關(guān)的靜態(tài)成員變量in、out和err。
          ?
          3、Class類
          ?
          ??? Class類的實(shí)例代表一個(gè)正在運(yùn)行的Java應(yīng)用程序的類或接口。Java的基本數(shù)據(jù)類型(boolean,byte,char,shart,int,long,float,double)以及數(shù)組和關(guān)鍵字void都是由Class對(duì)象來(lái)表達(dá)。
          ??? Class類沒(méi)有公共的構(gòu)造方法,Class對(duì)象由Java虛擬機(jī)自動(dòng)構(gòu)造。
          ??? Class類的常用方法有:
          ??????? String static getName()????????????????? 返回對(duì)象的類名
          ??????? class static forName(String ClassName)?? 使用ClassName指定的、與類或接口相聯(lián)系的class對(duì)象
          ??????? class static forName(String name,boolean initialize,ClassLoader loader)?? 使用loader指定的類裝載器Class類的forName()方法可用于安裝驅(qū)動(dòng)程序。
          ??????????? 例如,安裝JDBC-ODBC驅(qū)動(dòng)程序,可以使用下面語(yǔ)句:
          ??????????? Class.forName("sun.jdbc.odbc.JdbcOdcDriver");
          ??????????? 要安裝Oracle Jdbc驅(qū)動(dòng)程序,可以使用下面語(yǔ)句:
          ??????????? Class.forName("oracle.jdbc.driver.OracleDriver");
          ?
          4、Runtime類
          ?
          ??? 每一個(gè)Java應(yīng)用程序都有一個(gè)Runtime類的實(shí)例,從而允許應(yīng)用程序與其運(yùn)行的環(huán)境進(jìn)行交互。可利用Runtime類直接訪問(wèn)運(yùn)行時(shí)環(huán)境資源。
          ??? Runtime類常用方法有:
          ??????? static Runtime?getRuntime()??? 返回與當(dāng)前應(yīng)用程序相聯(lián)系的運(yùn)行時(shí)環(huán)境
          ??????? void?exit(int status)????????? 中斷當(dāng)前運(yùn)行的Java虛擬機(jī),status為狀態(tài)碼,非0的狀態(tài)碼表示不正常中斷
          ??????? native void traceInstructions(Boolean on)??設(shè)置對(duì)指令的追蹤,如果參數(shù)on為 true,則Java虛擬機(jī)對(duì)于其上執(zhí)行的每一條指令都發(fā)出調(diào)試信息
          ??????? native void traceMethodCalls(Boolean on)??? 設(shè)置對(duì)調(diào)用方法的追蹤,如果參數(shù)on為 true,則支持指令的追蹤
          ??????? totalMemory()????????????????? 返回系統(tǒng)的內(nèi)存總數(shù)
          ??????? freeMemory()?????????????????? 返回系統(tǒng)當(dāng)前內(nèi)存的剩余空間總數(shù)
          ??????? gc ()????????????????????????? 運(yùn)行垃圾回收程序
          【例5.3】用Runtime類獲得當(dāng)前系統(tǒng)運(yùn)行狀況示例。
          public class RuntimeTest
          {
          ?public static void main(String args[])
          ??? {
          ??????? 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");???????
          ??? }
          }
          程序運(yùn)行結(jié)果為:
          totalMemory: 1984k
          freeMemory: 1734k

          5、Float類
          ?
          ??? 為了方便學(xué)習(xí)過(guò)C語(yǔ)言的人員學(xué)習(xí)Java語(yǔ)言,Java語(yǔ)言也像C語(yǔ)言一樣,有數(shù)據(jù)類型的概念。但數(shù)據(jù)類型與類不等同。Java是一種純面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,為了達(dá)到這個(gè)目標(biāo),語(yǔ)言包中提供了8個(gè)稱為數(shù)據(jù)類型包裝類的類,專門完成把Java語(yǔ)言的8個(gè)基本數(shù)據(jù)類型包裝為相應(yīng)的類。
          ??? Java語(yǔ)言中的8種基本數(shù)據(jù)類型是:byte、short、int、long、float、double、char、boolean,對(duì)應(yīng)的8個(gè)數(shù)據(jù)類型包裝類是:Byte、Short、Integer、Long、Float、Double、Character、Boolean。這里僅介紹Float類,其余的相似。
          ??? Float類的幾個(gè)構(gòu)造方法如下:
          ??????? Float (double value)???以double類型的參數(shù)value創(chuàng)建一個(gè)對(duì)象
          ??????? Float (float value)???以float類型的參數(shù)value創(chuàng)建一個(gè)對(duì)象
          ??????? Float (String s)????以String類型的參數(shù)s創(chuàng)建一個(gè)對(duì)象

          ??? Float類的幾個(gè)方法如下:
          ??????? compareTo(Float anotherF)?? 比較兩個(gè)對(duì)象的大小,大于返回1,相等返回0,小于返回-1?
          ??????? floatValue()??????????????? 返回對(duì)象的float數(shù)據(jù)類型的數(shù)值
          ??????? doubleValue()?????????????? 返回對(duì)象的double數(shù)據(jù)類型的數(shù)值
          ??????? intValue()????????????????? 返回對(duì)象的int數(shù)據(jù)類型的數(shù)值,小數(shù)部分丟掉

          ?
          6、String類
          ?
          ??? 我們說(shuō)過(guò),定義字符串變量所使用的String不是一個(gè)基本數(shù)據(jù)類型,而是Java API中提供的類。
          ??? String類的構(gòu)造方法和常用方法有:
          ??????? String()?????? 構(gòu)造方法,初始化創(chuàng)建一個(gè)字符為空的String對(duì)象
          ??????? String(byte[] bytes)???????????? 構(gòu)造方法,初始化創(chuàng)建一個(gè)string對(duì)象,其值由指定bytes轉(zhuǎn)換而來(lái)
          ??????? compareTo(String anotherString)??比較字符串,返回兩者之間的差值
          ??????? length()???????獲取字符串的長(zhǎng)度
          ??????? substring(int beginIndex)??????? 返回當(dāng)前字符串的由beginIndex開(kāi)始到結(jié)尾的子串
          ??????? substring(int beginIndex,int endIndex)??返回當(dāng)前字符串的由beginIndex開(kāi)始到endIndex結(jié)尾的子串
          ??????? toLowerCase()??返回小寫字符串,即返回的對(duì)象中所有的字符均為小寫字符
          ??????? toUpperCase()??返回大寫字符串,即返回的對(duì)象中所有的字符均為大寫字符

          【例5.4】String類應(yīng)用舉例。
          要求:在程序中進(jìn)行字符串的連接(+)、取子串等操作。
          public class StringTest
          {
          ??? public static void main(String args[])
          ??? {????
          ??? ??System.out.println("abc");
          ???? ?String cde = "cde";
          ???? ?System.out.println("abc" + cde);
          ???? ?String c = "abc";
          ???? ?c = c.substring(2,3);
          ??? ??System.out.println("c = " + c);
          ??? ??String d = cde.substring(1, 2);
          ??? ??System.out.println("d = " + d);
          ??? }
          }
          程序運(yùn)行顯示結(jié)果如下:
          abc
          abccde
          c = c
          d = d

          7、Math類
          ?
          ??? Math類包含了一組基本的數(shù)學(xué)運(yùn)算的方法和常數(shù)。如求絕對(duì)值的abs()方法,計(jì)算三角函數(shù)的sin()方法和cos()方法,求兩個(gè)數(shù)中的較小值和較大值的min()方法和max()方法,求隨機(jī)數(shù)的random()方法等。Math類中的所有方法都定義為靜態(tài)的。另外,Math類還把E和PI定義為類的靜態(tài)成員變量,其中,E和PI代表數(shù)學(xué)上的相應(yīng)常數(shù)。
          ??? Math類是最終類(final),所以不能從Math類中派生其他的新類。
          ??? Math類的幾個(gè)常用方法如下:
          ??????? double abs(double a)??求a的絕對(duì)值
          ??????? float abs(float a)???求a的絕對(duì)值
          ??????? int abs(int a)??????? 求a的絕對(duì)值
          ??????? long abs(long a)????? 求a的絕對(duì)值
          ??????? double random()?????? 返回一個(gè)(0.0,1.0)區(qū)間的隨機(jī)數(shù)

          ??? abs()方法有4個(gè),包括了4種基本的數(shù)值類型(double,float,int,long),其他方法(如sin()方法 等)類同,為節(jié)省篇幅,這里不再列出。
          ??? random()方法是非常有用的方法。把random()的返回值乘上一個(gè)整數(shù),可以得到任意區(qū)間的、double類型的隨機(jī)數(shù);把random()的返回值乘上一個(gè)整數(shù)再轉(zhuǎn)換成int類型,可以得到任意區(qū)間的、int類型的隨機(jī)數(shù)。
          【例5.5】求10個(gè)數(shù)中的最小數(shù)。
          要求:用Math類的random()方法產(chǎn)生隨機(jī)數(shù)來(lái)給數(shù)組賦值。
          程序設(shè)計(jì)如下:
          public class Exam5_6
          {
          ??? public static void main(String args[])
          ??? {
          ??????? final int SIZE = 10;???????????????//常量
          ??????? int i, min;
          ??????? int a[] = new int[SIZE];
          ?
          ??????? for(i = 0; i < a.length; i++)
          ??????????? a[i] = (int)(Math.random() * 100);?//產(chǎn)生隨機(jī)數(shù)并賦值
          ???????????
          ??????? System.out.print("數(shù)組元素為:");???????//輸出一維數(shù)組
          ??????? for(i = 0; i < a.length; i++)
          ??????????? System.out.print("? " + a[i]);
          ?
          ??????? min = a[0];???????????????????????
          ??????? for(i = 1; i < a.length; i++)
          ??????????? if(a[i] < min)? min = a[i];????//尋找最小數(shù)
          ?
          ??????? System.out.println("\n最小數(shù)為:" + min);
          ??? }
          }
          程序運(yùn)行結(jié)果如下:
          數(shù)組元素為:? 64? 99? 44? 94? 28? 82? 39? 19? 6? 41
          最小數(shù)為:6

          ?
          3、實(shí)用包(java.util)簡(jiǎn)介

          ??? java.util包主要包含集合框架、事件模型、日期和時(shí)間機(jī)制、國(guó)際化等的類和接口。本節(jié)介紹的java.util包的類和接口有Arrays類、Vector類、Data類和Enumeration接口。
          ?
          1、?Arrays類
          ?
          ??? Arrays類中包含有數(shù)組操作的一些常用方法(如排序和查找),這可以大大簡(jiǎn)化程序設(shè)計(jì)人員的設(shè)計(jì)過(guò)程。
          ??? Arrays類的常用方法有:
          ??????? static void sort(byte[] a)??
          ??????????? 把byte類型的數(shù)組a中的元素按升序排序
          ??????? static void sort(byte[] a,int fromIndex,int toIndex)??
          ??????????? 把byte類型的數(shù)組a中的、從fromIndex到toIndex的元素按升序排序
          ??????? static void sort(int[] a)???
          ??????????? 把int類型的數(shù)組a中的元素按升序排序
          ??????? static void sort(int[] a,int fromIndex,int toIndex)???
          ??????????? 把int類型的數(shù)組a中的、從fromIndex到toIndex的元素按升序排序
          ??????? static void sort(double[] a)?
          ??????????? 把double類型的數(shù)組a中的元素按升序排序
          ??????? static void sort(double[] a,int fromIndex,int toIndex)
          ??????????? 把double類型的數(shù)組a中的、從fromIndex到toIndex的元素按升序排序
          ??????? static int binarySearch(byte[] a,byte key)??
          ??????????? 在byte類型的數(shù)組a 中、使用折半查找算法查找指定元素key是否存在,若存在返回該元素的數(shù)組下標(biāo);若不存在返回-1
          ??????? static int binarySearch(int[] a,int key)??
          ??????????? 在int類型的數(shù)組a 中、使用折半查找算法查找指定元素key是否存在,若存在返回該元素的數(shù)組下標(biāo);若不存在返回-1
          ??????? static int binarySearch(double[] a,double key)??
          ??????????? 在double類型的數(shù)組a 中、使用折半查找算法查找指定元素key是否存在,若存在返回該元素的數(shù)組下標(biāo);若不存在返回-1

          說(shuō)明:
          (1)除了上面列出的sort()方法和binarySearch()外,還有char、float、long、Object等類型的sort()方法和binarySearch(),這里不再列出。
          (2)在使用binarySearch()時(shí),要求數(shù)組a中的元素已經(jīng)有序排列,否則返回值未定義。
          ?
          2、Vector 類
          ?
          ????Vector類稱作向量類,它實(shí)現(xiàn)了動(dòng)態(tài)的數(shù)組,使用于元素?cái)?shù)量變化的對(duì)象數(shù)組。像數(shù)組一樣,Vector類也用從0開(kāi)始的下標(biāo)表示元素的位置;但和數(shù)組不同的是,當(dāng)Vector對(duì)象創(chuàng)建后,數(shù)組的元素個(gè)數(shù)會(huì)隨著Vector對(duì)象元素個(gè)數(shù)的增大和縮小變化。
          ??? Vector類的成員變量有:
          ??????? elementData???????? 存放對(duì)象元素的數(shù)組
          ??????? elementCount??????? 當(dāng)前對(duì)象元素的個(gè)數(shù)
          ??????? capacityIncreament??元素個(gè)數(shù)變大時(shí)自動(dòng)增大數(shù)組空間的個(gè)數(shù)

          ??? Vector類的構(gòu)造方法有:
          ??????? Vector ()??
          ??????????? 創(chuàng)建元素為空的對(duì)象,且elementCount=10,capacityIncreament=0
          ??????? Vector (int initialC)??
          ??????????? 創(chuàng)建元素為空的對(duì)象,且elementCount= initialC,capacityIncreament=0
          ??????? Vector (int initialC,int capacityI)??
          ??????????? 創(chuàng)建元素為空的對(duì)象,且elementCount= initialC,capacityIncreament= capacityI

          ????Vector類的常用方法有:
          ??????? void add( int index,Object elem)
          ??????????? 在Vector對(duì)象的index下標(biāo)處插入元素elem,index下標(biāo)以后的元素依次后移
          ??????? boolean add(Object elem)
          ??????????? 在Vector對(duì)象的尾部添加元素elem,添加成功返回true,失敗返回false
          ??????? boolean addAll(Collection c)
          ??????????? 在Vector對(duì)象的尾部、依次添加集合對(duì)象c中的所有元素,添加成功返回true,失敗返回false
          ??????? void addElement(Object obj)
          ??????????? 在Vector對(duì)象的尾部、增加對(duì)象obj,且對(duì)象的元素個(gè)數(shù)加1
          ??????? boolean removeElement(Object obj)
          ??????????? 如果對(duì)象非空,則刪除Vector對(duì)象obj第一次出現(xiàn)的元素
          ??????? copyInto(Object[] anArray)
          ??????????? 把Vector對(duì)象指針?biāo)肝恢玫某煞謴?fù)制給數(shù)組anArray,要求數(shù)組anArray要足夠大,否則會(huì)拋出異常
          ??????? Enumeration elements()?????
          ??????????? 返回對(duì)象的序列化元素
          ??????? int size()???????
          ??????????? 返回對(duì)象的元素個(gè)數(shù)
          ??? 和Arrays類相比,Vector類的最主要特點(diǎn)是長(zhǎng)度可隨對(duì)象成分個(gè)數(shù)的增加或減少任意變化。
          ?
          3、Data 類和Calendar類
          ?
          ??? Data 類提供了獲取當(dāng)前精確到毫秒時(shí)間的方法,并提供了許多方法截取當(dāng)前時(shí)間的年、月、日等數(shù)值。
          ??? Data 類的構(gòu)造方法有:
          ??????? Data ()????創(chuàng)建一個(gè)可精確到毫秒的當(dāng)前時(shí)間的對(duì)象
          ??????? Data (long date)??創(chuàng)建一個(gè)可精確到毫秒的參數(shù)date指定時(shí)間的對(duì)象,date表示從GMT(格林威治)時(shí)間1970-1-1 00:00:00開(kāi)始至某時(shí)刻的毫秒數(shù)。

          ??? Calendar類定義了許多如YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、DAY_OF_WEEK等成員變量,Calendar類的get()方法可以獲取這些成員變量的數(shù)值。
          【例5.6】設(shè)計(jì)程序獲取本地計(jì)算機(jī)上的當(dāng)前時(shí)間并顯示。
          程序設(shè)計(jì)如下:
          import java.util.*;
          public class MyDate
          {
          ?public static void main(String args[])
          ?{
          ??Date date = new Date();??//創(chuàng)建對(duì)象,其值為當(dāng)前時(shí)間
          ??System.out.println(date);?//輸出顯示當(dāng)前時(shí)間
          ?
          ??//分項(xiàng)輸出顯示當(dāng)前時(shí)間
          ????? Calendar now = Calendar.getInstance();???????? //獲得當(dāng)前時(shí)間
          ??????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);???????????? //時(shí)
          ??????int minute = now.get(Calendar.MINUTE);???????? //分
          ??????int second = now.get(Calendar.SECOND);???????? //秒
          ??????System.out.print(hour+"時(shí)"+minute+"分"+second+"秒 ");
          ?????????
          ??????int week = now.get(Calendar.DAY_OF_WEEK);????? //星期1~7
          ??????String str = "日一二三四五六";
          ??????int i=2*(week-1);?????????????????????????????//對(duì)應(yīng)中文的下標(biāo)
          ??????System.out.println("星期"+str.substring(i,i+2));
          ?}
          }
          程序運(yùn)行結(jié)果如下:
          Tue Sep 28 10:32:29 CST 2004
          2004年9月28日 10時(shí)32分29秒 星期二

          4、Enumeration接口
          ?
          ??? Enumeration接口主要用于集合類對(duì)象的序列化。一個(gè)集合類對(duì)象中包含有許多元素,所謂對(duì)象是序列化的,就是說(shuō)可以依次取出該對(duì)象中的元素。
          ??? Enumeration接口定義如下:
          ??? public interface Enumeration?
          ??? {
          ????? Object nextElement();?????? //返回后續(xù)元素
          ????? boolean hasMoreElements();??//是否還有后續(xù)元素
          ??? }

          ??? nextElement()方法返回后續(xù)元素;hasMoreElements()方法判斷是否還有后續(xù)元素。
          ??? 任何一個(gè)類,只要實(shí)現(xiàn)了Enumeration接口,其對(duì)象就是序列化的。所謂對(duì)象是序列化的,就是說(shuō)若連續(xù)調(diào)用nextElement()方法,每次將返回該集合對(duì)象當(dāng)前元素的后續(xù)元素。
          ??? 例如,Vector類是一個(gè)集合類,Vector類就實(shí)現(xiàn)了Enumeration接口。因此,若要輸出一個(gè)Vector類的對(duì)象v中的所有元素,就可以編寫如下代碼:?
          ??? Enumeration e = v.elements();
          ??? while (e.hasMoreElements())?
          ??? {
          ????? System.out.println(e.nextElement());
          ??? }

          ?
          4、綜合應(yīng)用舉例
          ?
          ??? 為了讓讀者更好地理解Java API的使用方法,本節(jié)給出兩個(gè)簡(jiǎn)單的Java API的應(yīng)用例子。
          【例5.7】把10個(gè)數(shù)按從小到大的次序排序。
          要求:用 Arrays類的sort()方法實(shí)現(xiàn)排序。
          程序設(shè)計(jì)如下:
          import java.util.*;
          public class Exam5_7
          {
          ??? public static void main(String args[])
          ??? {
          ??????? final int SIZE = 10;??????????????????????? ?//常量
          ??????? int i, min;
          ??????? int a[] = new int[SIZE];
          ?
          ??????? for(i = 0; i < a.length; i++)
          ??????????? a[i] = (int)(Math.random() * 100);???????//產(chǎn)生隨機(jī)數(shù)并賦值
          ??????
          ??????? System.out.println("排序前數(shù)組元素為:");
          ??????? for(i = 0; i < a.length; i++)
          ??????????? System.out.print(a[i] + "? ");
          ?
          ??????? Arrays.sort(a);????????//排序
          ?
          ??????? System.out.println("\n排序后數(shù)組元素為:");
          ??????? for(i = 0; i < a.length; i++)
          ??????????? System.out.print(a[i] + "? ");
          ??? }
          }
          程序運(yùn)行結(jié)果如下:
          排序前數(shù)組元素為:
          40? 96? 31? 20? 85? 58? 40? 89? 18? 18
          排序后數(shù)組元素為:
          18? 18? 20? 31? 40? 40? 58? 85? 89? 96

          【例5.8】使用Vector類和Integer類求解約瑟夫環(huán)問(wèn)題。
          約瑟夫環(huán)(Josephus)問(wèn)題:古代某法官要判決N個(gè)犯人的死刑,他有一條荒唐的法律,將犯人站成一個(gè)圓圈,從第S個(gè)人開(kāi)始數(shù)起,每數(shù)到第D個(gè)犯人,就拉出來(lái)處決,然后再數(shù)D個(gè),數(shù)到的人再處決,……,直到剩下的最后一個(gè)可赦免。
          當(dāng)N=5,S=0,D=2時(shí),約瑟夫環(huán)問(wèn)題執(zhí)行過(guò)程示意圖如下圖所示。
          ??? java5-1.gif

          設(shè)計(jì):
          1.初始化,創(chuàng)建一個(gè)Vector類的向量對(duì)象v,調(diào)用v的add()方法依次將N個(gè)人的序號(hào)添加到v中。由于v的元素類型為Object,所以add()的參數(shù)必須使用new Integer(i+1)將int值轉(zhuǎn)化為Integer對(duì)象。
          2.設(shè)current為當(dāng)前欲刪除元素的下標(biāo),如果從第1個(gè)人開(kāi)始數(shù)起,則current的初值應(yīng)該設(shè)置為第1個(gè)人的前一個(gè)位置,即current=S-1。
          3.循環(huán),當(dāng)v中元素多于一個(gè)時(shí)(v.size()>0),調(diào)用v.remove()方法刪除下標(biāo)為current的元素。current的值一直在增加,但既不能超出數(shù)組下標(biāo)范圍,又要實(shí)現(xiàn)環(huán)形結(jié)構(gòu),所以current的變化規(guī)律是current=(current + 1) % v.size(),其中v.size()是v的實(shí)際元素個(gè)數(shù),每刪除一個(gè)元素,v.size()的值少1。
          4.為了更好地了解向量中的元素情況,每次循環(huán)都輸出了向量中的全部元素值,調(diào)用(Integer)v.get(i))方法將獲得的下標(biāo)為i的Object類元素轉(zhuǎn)化為Integer類對(duì)象,再調(diào)用Integer類的intValue()方法輸出相應(yīng)的int值。
          5.當(dāng)循環(huán)停止時(shí),向量v中只剩下一個(gè)元素,這就是我們要找的最后一個(gè)人。
          程序如下:
          import java.util.*;
          public class Josephus?????????????? ?//使用Vector類求解約瑟夫環(huán)問(wèn)題
          {
          ??? public static void main(String args[])
          ??? {
          ??????? int n=5,s=0,d=2;
          ??????? Vector v = new Vector(n);?//創(chuàng)建向量對(duì)象v
          ??????? for(int i = 0; i < n; i++)
          ??????????? v.add(new Integer(i+1));?//向量對(duì)象v中添加Integer對(duì)象
          ?
          ??????? int current = s - 1;??????? ?//設(shè)置當(dāng)前元素下標(biāo)current的初值
          ??????? while (v.size()>1)?????????? ?//向量對(duì)象v中多于一個(gè)元素時(shí)循環(huán)
          ??????? {
          ??????????? System.out.print("Vector:? ");
          ??????????? for(int i = 0; i < v.size(); i++)//輸出向量對(duì)象v中全部元素值
          ?????????????? System.out.print(((Integer)v.get(i)).intValue() + "? ");
          ??????????? int j=0;
          ??????????? while (j<d)??????????????? ?//計(jì)數(shù)
          ??????????? {
          ???????????????? current = (current + 1) % v.size();
          ???????????????? j++;
          ??????????? }
          ??????????? System.out.println("\tcurrent = " + current + "??? ");
          ??????????? v.remove(current);??????? ?//刪除向量v中下標(biāo)為current的元素
          ??????? }
          ??????? System.out.println("赦免者是" +((Integer)v.get(0)).intValue());
          ???????
          ??? }
          }
          程序運(yùn)行結(jié)果如下:
          Vector:? 1? 2? 3? 4? 5? ?current = 1???
          Vector:? 1? 3? 4? 5? ??current = 3???
          Vector:? 1? 3? 4? ??current = 2???
          Vector:? 1? 3? ???current = 0???
          赦免者是3

          ?




          -The End-

          posted on 2008-09-27 16:23 decode360-3 閱讀(1106) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 宜宾县| 石河子市| 肥东县| 隆昌县| 绍兴市| 焉耆| 英吉沙县| 金昌市| 岳西县| 高陵县| 敖汉旗| 柘荣县| 湘阴县| 凯里市| 洛隆县| 武山县| 肃北| 贡山| 车险| 宜君县| 平昌县| 德阳市| 武汉市| 如东县| 车险| 凯里市| 大邑县| 涿州市| 通海县| 洮南市| 汕尾市| 临西县| 自贡市| 永登县| 靖宇县| 诸城市| 尼木县| 霍城县| 靖江市| 江安县| 牟定县|