溫立輝
摘 要:針對Java編程環境的常規特性,討論了JDK的字符及編程API接口,詳細論述了String對象的實例原理及常量池管理方式,同時闡述了各種不同類型集合的差別及適用場景,對List下的3個子類的實現原理做深刻分析,最后分析了線程與進程的差別以及Java的進程管理方式,剖析了JDK編程環境中如何進行進程管理。
關鍵詞:JDK API 字符對象 集合 進程
中圖分類號:TP311 文獻標識碼:A 文章編號:1672-3791(2019)01(c)-0026-02
Java語言誕生于1995年,Sun公司在1996年推出了第一個JDK版本,隨后以其獨特的魅力迅速占領了廣大的編程市場。隨著技術的成熟與更新,今年Sun公司推出JDK10,擴充與完善許多新功能點與特性。對廣大的編程人員來說,目前使用最廣泛的是JDK6、JDK7,有部分企業用戶也在使用JDK8。盡管版本更新的速度非常快,但JDK6以上即可滿足常規編程的需要,無需使用過高的版本。JDK6以上的版本中含有豐富編程接口,作為開發人員,應該掌握常見的相關核心部分API,以滿足編程業務的需要。
1 編程接口API應用
JDK6的API涉及各個方面,完全覆蓋各種的編碼需要,包括字符類處理、輸入輸出、網絡編程、對象傳遞、內存管理、數學計算等,一般來說,無需做到全部熟練掌握,只需在編程中需要使用時懂得如何使用幫助文檔來獲得有用信息及相關的幫助即可,以下對API的幾個應用點做分析。
1.1 字符類實例化處理
String類作為Java語言中用得最廣泛的字符處理類,在JVM中其對象實例化過程有別于一般的Java類。Java語言中分兩種數據類型,分別是:基本數據類型、用戶自定義數據類型,除了八大數據類型為基本數據類型,其他的所有類型都可以歸類為用戶自定義數據類型。基本數據類型實例化過程都是在JVM的棧空間上存儲數據,用戶自定義數據類型則是在堆空間存儲數據。String類不同于基本數據類型,也屬于用戶自定義數據類型,但其數據存儲方式有別一般的自定義數據類型。
當使用Stringa1=“abc”的方式實例化數據時,棧空間會創建引用a1及在常量池中創建“abc”字符對象,當再次執行 Stringa2=“abc”語句時,則棧空間會創建引用a2,同時指常量池中的“abc”。當使用Stringa3=new String(“abc”)的方式實例化數據時,則會在JVM的堆空間創建引用a3及字符串對象“abc”。
1.2 集合類對象處理
Java語言中集合的作用是臨時存儲對象,以供應用程序后續處理,一共有3種類型集合,分別是:List、Set、Map,3種類型各有自身的特色,它們之間相互補充共同組成完整集合體系。
List:是Collection下的一個子接口,代表的是有序的對象集合系列,在該類型下的集合系列,所有對象將按一定次序排列,允許重復的添加同一對象,以及空對象,此接口下有3種類型的實現子類,分別是ArrayList、Vector、LinkedList。ArrayList是被最廣泛使用的集合類型,其底層使用數組的方式實現對象的存儲,通過索引來查找集合中的元素,也叫動態數組集合。Vector是List集合的另一種類型,其底層實現與ArrayList類似,它們之間的根本區別是ArrayList沒有實現線程同步,而Vector則是實現了線程的同步加鎖,其在并發的狀態下線程是安全的,但在執行的效率上卻不如ArrayList,這正是ArrayList被大量使用的原因。LinkedList類型集合與前兩種類型相差較大,其底層使用鏈表的方式來實現,其在增加或刪除集合中元素時效率非常高,但查詢檢索集合中元素時效率卻遠比不上ArrayList類型,因而在使用集合時要考慮是增、減操作頻繁還是檢索操作頻繁。
Set:是Collection的另外一個子接口,此子接口下的所有實現子類型均不能添加重復對象,此接口下有3個實現類型,分別是HashSet、TreeSet、LinkedHashSet。HashSet類型底層使用Hash算法原理實現,存儲在此類型中的元素均為無序存儲。TreeSet類型底層使用樹狀結構原理實現元素存儲,此類型集合可以對存儲在其中的元素按某一維來進行排序。LinkedHashSet類型底層使用Hash算法與鏈表共同組合實現,此類型里面的元素按添加的順序存儲,在進行增、減操作效率最高。
Map:是一個鍵值對接口,該類型的作用也是臨時存儲對象實例,存儲在此接口中的元素以鍵/值(key/value)的方式存在。在添加對象時要設定好相應的key,且key不能重復,否則會被后面的數據覆蓋,取值時通過key去取得相應的對象值。該接口的實現子類有HashMap、Hashtable、TreeMap,其中前兩種類型均以數組和鏈表的組合成散列表的形式存在,兩者的區別在于HashMap沒有實現線程安全,只能適用于單線程操作,而Hashtable是實現了線程同步加鎖,可以在線程并發狀態使用。TreeMap是用樹狀結構實現的散列表,其能實現對所存儲在其中元素的排序輸出。
2 進程類操作處理
在計算機操作系統中有兩種不同的任務概念,分別是:進程與線程。進程是任務執行的基本單位,一個正在運行的應用程序就是一個進程,是一個重量級的概念。線程是計算機CPU調度的基本單位,其代表任務執行的一個時間片或資源片,一個進程可以包含多個線程,即一個任務可以由多個資源來共同完成,這就是多線程,計算機系統中能夠同時運行多個應用程序就是因為多線程的存在,相對進程來說,線程是輕量級的概念。
在Java編程語言中,只有線程的專用API接口,而沒有進程專用API接口,因而要創建進程需要借助于操作系統的環境才能實現相關的功能。在JDK中有一個Runtime類代表JVM與操作系統環境相連的橋梁,其是一個單例類,每個Java應用程序有且僅有其對應的一個Runtime實例,在此類中可通過其內置的靜態方法getRuntime()來取得其本類的實例。Runtime類型中包含了一個非靜態的exec()方法,在方法中以字符串參數的形式傳入操作系統環境中的進程命令,該方法執行完畢后,會返回一個Process類型的實例,代表剛剛啟動的這個進程。Process類型中有一個destroy()方法,為進程終止方法,每個進程的任務執行完畢后都必須顯示執行此方法銷毀進程,否則會影響到后繼其他進程的創建、執行。
3 結語
JDK版本的每一次升級都為Java編程環境加入新的活力,JDK5增加泛型的特性,JDK6增加Annotation注解的特性,JDK7在System類型中增加了很多獲取環境信息的工具方法,JDK8增加了接口默認方法,隨著JDK新版本的進一步發布,其新功能與新特性會越來越多。一般來說,新的特性與功能還要經歷時間與市場的檢驗,最新的版本暫時來說未必就是最完善的版本,就目前來說,JDK6是最適合作為企業級開發的編程環境。
參考文獻
[1] 錢宇虹.多線程環境下如何正確使用Java集合類[J].軟件工程師,2012(10):45-48.
[2] 笪林梅.用Java字符流類實現數據操作[J].蘭州工業高等專科學校學報,2010(4):12-15.
[3] 李乃健,田紀宏,胥國偉,等.操作系統中進程同步算法的仿真研究[J].現代計算機:專業版,2018(9):57-61.