狀態的哲學思考

1       狀態的哲學思考

狀態在”在線漢語詞典”中的解釋是物質系統所處的狀況,對不同的物質運動形式,可用不同的一組物理量來描述相應物質系統的狀態。如質點作機械運動時,可用質點的位置、動量等來描述其機械運動狀態;由一定質量理想氣體組成的系統,可用溫度、壓強、體積等來描述其熱學狀態。狀態也指物質的各種聚集態,如固態、液態、氣態等。

狀態論是繼系統論、信息論、控制論之後的一個研究狀態的理論。對於複雜性系統的研究具有很強的指導意義。

1.1  狀態論的簡述

狀態論是專門研究事物狀態產生、穩定、變化的理論,狀態論以複雜系統的狀態和過程作爲自已的研究對象。狀態論的主要任務是描述和表達事物在演化過程中的動靜問題,事物在運動變化中的相對靜止、亦靜亦動、穩定存在的非線性的狀態問題,揭示事物演化過程中系統、狀態和過程之間的複雜關係以信狀態之間的各種確定與非確定的、連續與非連線性的關係問題和狀態的歷時態集合如何組成複雜性過程的問題等。

日常用語中的狀態有以下三個含議:(1)狀態是針對某一個具體存在者,是對具體存在者的當前情況和發展態勢的描述和命名;(2)狀態是與時間維度相聯繫的,狀態是指某一特定時刻和時間期間的情況和態勢,但在日常中我們描述時往往不刻意強調;(3)狀態可以描述動態的對象,也可以描述相對靜止的對象。而狀態論中的狀態是指在特定時刻或時間區間中的事物相對靜止或穩定存在的總合。

狀態適用的對象有兩種,(1)共時態對象,即事物停時的存在,指對象不發生變化時的靜止存在;(2)歷時態對象,是指對象在一個有限時間期間的穩定存在的總合。歷時態的狀態是亦靜亦動的對象,是事物整體、質的相對靜止和事物局部、量的運動變化的統一體。

 

1.1.1       狀態概念的簡單說明

狀態概念的簡單說明(1)日常用語的“狀態”是表示事物的存在方式和情況;(2)狀態在具體科學和技術中外延狹窄一般是指一組變量的集合;(3)部分哲學家監於狀態的普適性試圖將它上升爲一個哲學範疇;(4)狀態論中的狀態概念是一個涉及面比較廣泛的對象;(5)以狀態範疇爲核心和邊輯出發點的狀態論是研究複雜系統的一般理論;(6)狀態論是描述複雜系統演化過程中的動靜關係的理論,狀態論不側重對象的局整關係,別然動靜關係中必然有局整問題,局整關係中心然有動靜問題。狀態論與系統論的主要區別在於狀態論從狀態研究事物的演化,系統論則從系統出發研究事物的演化。(7)狀態論是探討複雜系統研究的出發點、路徑、原理和方法的理論。狀態論以事物或系統的狀態及狀態組成的過程作爲研究對象,涉及四個基本對象,即非系統、系統、狀態、過程和兩大曆時態層次即狀態層次和由狀態組成的過程層次。

1.1.2       狀態的符號表示

狀態可以用符號(s,t)來表示,s表示系統或任一對象,t表示時間。狀態可以看作是系統和時間的二元映射。狀態的集合,我們叫過程,p={(s,t1),(s,t2)…(s,tn)}。

1.1.3       狀態論中狀態的要點

狀態論是對科學技術和哲學層次的狀態概念的繼承與改造。其要點有(1)把狀態與過程相聯繫將狀態置於過程之中。(2)把狀態與系統的有限演化聯繫在一起,系統被包容在狀態之中;(3)對狀態概念進行時間維度的精確限制。(4)以狀態概念爲基礎提交出了由非系統、系統、狀態、過程四個歷時態層次的理論。(5)狀態論的狀態範疇提交出了過程的非連續性和過程最小單位位的命題。(6)狀態論的狀態範疇揭示了狀態的七個方面的性質,即(1)狀態的相對靜止性與變靜變動的穩定性、(2)狀態的相玴性、時空統一性、量質統一性、整體性、非線性;(3)過程層次中的最小單位位性、功能上的相對獨立性;(4)狀態之間的非連續性、狀態之間關係的複雜性。(5)狀態對於過程的從屬性和對系統的包容性;(6)狀態與過程界定的相對性;(7)狀態範疇對系統的關鍵性。

1.1.4       區分事物狀態的五個主要標誌

區分事物狀態的五個主要標誌。(1)針對特定的對象、對象的特定層次或特定的維度;(2)對象必須有一個時間維度假 (3)對象的相對靜止或質的規定性相對穩定不變;(3)對象在歷時態中功能的相對獨立性能 (5)對象的整體性的非線性;

1.1.5       狀態描述的五大要素

狀態的五大要素。(1)系統存在;(2)時刻或時間期間;(3)相對靜止或穩定性;(4)功能上相對獨立;(5)整體的非線性。狀態是特定時間期間事物或系統保持其質的相對穩定不變的存在總合,是事物共時態與歷時態相干統一體,是特定過程的最小的歷時態層次或單位。

1.1.6       狀態範疇的主要特徵

    狀態與過程範疇不同的是狀態範疇一般用來描述事物演化過程中的相對靜止,即各個歷時態組成片段質的穩定態、對象的相對獨立性、演化過程中的歷時態層次性和非連續性。狀態在事物的演化過程中具有靜止性或亦靜亦動性、相對穩定性、非線性整體性、相對獨立性和狀態之間的功能間隔性特徵。狀態範疇是對事物的實體、要素、結構、系統、功能和局部演化過程竺存在的統一命名和統一描述。從不同側面可以看到狀態的不同性質:

    (1)對多變量系統來說狀態是序參量相對穩定不變,是系統的穩定態;

    (2)對層次來說狀態是過程中的歷時態層次;

    (3)對分析方法來說狀態是不可以再分的過程的最小歷時態單位;

    (4)對系統來說狀態是包容了系統的更大的歷時態存在層次,是新的層次突;

    (5)對連續和非連續來說狀態是過程中的間隔,過程中的非連續,是由功能間隔離散的對象組成的過程。

    (6)對量與質來說狀態是量的變化質的穩定不變;

    (7)對運動與靜止來說是變靜亦動;對系統來說是系統的有限演化是動,對過程來說是過程中的相對靜止;

    (8)對局部與整體是局部量變化與整體質靜止的統一;

    (9)對時間與空間來說是時間空間的統一,是共時態與歷時態相干性統一。

    (10)對有限無限來說是有限時間、有限空間相干作用的統一體;

    (11)對結構來說狀態是主要結構的不變化,相對穩定;

    (12)對要素來說狀態是主要要素性質、功能、數量的相對不變;

1.1.7       狀態論與哲學範疇的關係

1.1.7.1         狀態與運動和靜止的關係

    運動與靜止是描述對象存在狀況的哲學範疇。在當前的哲學理論中,普遍認爲事物運動變化是絕對的、無條件的、永恆的。靜止是本對的、有條件的、暫時的,靜止有事物量的靜止或質的靜止的區別。靜止僅僅是物質運動的特殊形式,是事物運動在一定階段上質的相對穩定狀態。

    在狀態論體系中,事物內部變化分成量的變化與質的變化。質的變化是事物作爲單一、整體存在規定性的變化。量變則是事物作用多、局部存在以及局部關係存在變化。在狀態論體系中,事物或系統的量變和質變分三種情況:(1)量的靜止不變,質的靜止不變.(2)量的運動、質的相對靜止;(3)事物或系統量的運動變化,質的運動變化。

1.1.7.2         狀態與局部與整體的關係

    局部與整體是描述事物兩隻其組成要素之間關係的哲學範疇。整體是由部分構成的,沒有部分則整體什麼也不是,整體構成它們的關係,沒有整體便沒有部分。在量上看,整體在量上是一,部分在量上是多。局部與整體的關係有兩類:(1)空間上共時態的局部與整體關係;(2)時間上歷時態的對象之間的局整關係。局部與整體關係包括四種情況,(1)非系統要素與非系統總體; (2)系統要素與系統

整體;(3)系統與狀態; (4)狀態與過程.

    在狀態論中複雜事物的歷時態被分爲四個層次,即非系統存在、系統存在、狀態存在、過程存在。非系統包含於系統中,系統包含於狀態中,狀態包含於過程中。非系統是系統的局部,系統是它的整體,二者構成局整關係;系統是狀態的局部,狀態是局部的有限演化整體,兩者構成局整關係;狀態是過程的局部,過程是太態的整體,二者構成局整關係。

1.1.7.3         狀態與結構功能的關係

    所謂結構是指對象內各個要素相對穩定的相互聯繫、相互作用的方式、組織形式、結合方式和秩序。系統結構的形成在於要素間的相互聯繫、相互作,實質就是物質、能量、信息的交換和轉換。系統結構分三種(1)空間結構,即要素在空間上的排列秩序;(2)時間結構,指系統按時間進程呈現出來的有秩序的流動性,變動的結構;(3)時空統一的結構,是時間結構和空間結構的統一。功能是系統整體在其內部和外部隨着系中表現出來的作用和能力。功能分成外部功能和內部功能兩種。外部功能指系統整體對環境的輸出作用,對環境的改變作用。內部功能指系統整體與要素聯繫中表現出來的對要素的作用和能力。對簡單系統而言,結構和功能總表現爲一定的功能,一定的功能總是由一定的結構產生。

在狀態論中將結構分爲共時態系統結構、歷時態系統結構和過程結構,三者組成事物的結構,而事物的功能是三種結構的相干作用的產物。此時的功能主要指系統、狀態或過程對外表現的性質、作用,我們將其分成系統功能、狀態功能和過程功能三種。這裏的狀態結構就是指系統在保持質的相對靜止時間區間內的系統內各個要素的變化發展,以及這些要素之間的結構關係。系統保持質的相對靜止,而又同時是系統內各種要素及關係的變化組成系統的狀態。系統的功能一般通過狀態的功能表現出來,而狀態的功能中包含着系統的有限演化存在的功能。系統狀態的更替變化就組成過程。過程的功能中又包含着一個個狀態的功能。在簡單系統和簡單過程中,特別是時間歷程中的靜止對象,其系統、狀態、過程三個層次的結構和功能可以是等價的,因爲在時間歷程中它們都沒有發生結構和功能的變化,它們的區別只在於三者經歷時間尺度不一樣。

1.1.7.4         狀態與時間、空間關係

    時間和空間概念與人類關於整個世界的認識密切相關。一般人們可以將時間理解爲物質運動的延續性。時間概念反映是特質事件的先後順序,不周過程之間的間隔、階段以及過程的延續。時間描述的是一種對象的前後相繼的歷存性。空間則指運動的物質的廣延性。空間概念反映的是諸多事物現象的鄰接性和秩序性,表示它們的相互位置、距離和廣延。空間描述的是一種對象的並存性。時間的特點是一維性,具有方向性和不可逆。空間的特點是三級性,各個方向沒有區別。

狀態論認爲時間就是指存在才的變化。時間是存在者的規定性之一,時間與過程、歷史、變化等所描述的是大致相同的對象。對存在者變化的描述、量度、抽象和命名,時間所指向和描述的對象是存在着變化的。在時間量度上人們是用自然科學時間的變化爲參考系對人們面對的對時進行量度。時間可以分爲(1)內部時間,指對象自身變化;(2)外部時間,指對象外部的變化;(3)整體時間,指無數參與者的整體的變化,不發生相互作用的對象之間的整體時間不存在這 (4)局部時間,指局部的變化; (5)平均時間,指參與比對的所有對象的變化/參與對象的個數;(6)相對時間,指宇宙中某個區域的變化或相對於其他對象變化的時間。靜止的對象或靜止的時間就是空間,運動變化的空間就是時間。空間+運動=時間,時間+靜止=空間,運動與靜止的相對性決了時間、空間的相對性。任何狀態在時空上都是有限的,佔有一定空間,經歷一定時間。狀態與過程不過是無限發生的事物的一個有限環節。

1.2  狀態機的簡述

 關於狀態機的一個極度確切的描述是它是一個有向圖形,由一組節點和一組相應的轉移函數組成。狀態機通過響應一系列事件而“運行”。每個事件都在屬於“當前” 節點的轉移函數的控制範圍內,其中函數的範圍是節點的一個子集。函數返回“下一個”(也許是同一個)節點。這些節點中至少有一個必須是終態。當到達終態, 狀態機停止。   

包含一組狀態集(states)、一個起始狀態(start state)、一組輸入符號集(alphabet)、一個映射輸入符號和當前狀態到下一狀態的轉換函數(transition function)的計算模型。當輸入符號串,模型隨即進入起始狀態。它要改變到新的狀態,依賴於轉換函數。在有限狀態機中,會有有許多變量,例如,狀態 機有很多與動作(actions)轉換(Mealy機)或狀態(摩爾機)關聯的動作,多重起始狀態,基於沒有輸入符號的轉換,或者指定符號和狀態(非定有 限狀態機)的多個轉換,指派給接收狀態(識別者)的一個或多個狀態,等等。   

傳統應用程序的控制流程基本是順序的:遵循事先設定的邏輯,從頭到尾地執行。很少有事件能改變標準執行流程;而且這些事件主要涉及異常情況。“命令行實用程序”是這種傳統應用程序的典型例子。   

另一類應用程序由外部發生的事件來驅動——換言之,事件在應用程序之外生成,無法由應用程序或程序員來控制。具體需要執行的代碼取決於接收到的事件,或者它 相對於其他事件的抵達時間。所以,控制流程既不能是順序的,也不能是事先設定好的,因爲它要依賴於外部事件。事件驅動的GUI應用程序是這種應用程序的典 型例子,它們由命令和選擇(也就是用戶造成的事件)來驅動。   

Web應用程序由提交的表單和用戶請求的網頁來驅動,它們也可劃歸到上述類別。但是,GUI應用程序對於接收到的事件仍有一定程度的控制,因爲這些事件要依賴於向用戶顯示的窗口和控件,而窗口和控件是由程序員控制的。Web應用 程序則不然,因爲一旦用戶採取不在預料之中的操作(比如使用瀏覽器的歷史記錄、手工輸入鏈接以及模擬一次表單提交等等),就很容易打亂設計好的應用程序邏輯。   

顯然,必須採取不同的技術來處理這些情況。它能處理任何順序的事件,並能提供有意義的響應——即使這些事件發生的順序和預計的不同。有限狀態機正是爲了滿足這方面的要求而設計的。   

有限狀態機是一種概念性機器,它能採取某種操作來響應一個外部事件。具體採取的操作不僅能取決於接收到的事件,還能取決於各個事件的相對發生順序。之所以能 做到這一點,是因爲機器能跟蹤一個內部狀態,它會在收到事件後進行更新。爲一個事件而響應的行動不僅取決於事件本身,還取決於機器的內部狀態。另外,採取 的行動還會決定並更新機器的狀態。這樣一來,任何邏輯都可建模成一系列事件/狀態組合。   

狀態機可歸納爲4個要素,即現態、條件、動作、次態。這樣的歸納,主要是出於對狀態機的內在因果關係的考慮。“現態”和“條件”是因,“動作”和“次態”是果。詳解如下:   

①            現態:是指當前所處的狀態。   

②            條件:又稱爲“事件”,當一個條件被滿足,將會觸發一個動作,

或者執行一次狀態的遷移。   

③            動作:條件滿足後執行的動作。動作執行完畢後,可以遷移到新的

狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足

後,也可以不執行任何動作,直接遷移到新狀態。   

④            次態:條件滿足後要遷往的新狀態。“次態”是相對於“現態”而

言的,“次態”一旦被激活,就轉變成新的“現態”了。

 

 

 

2       程序異常狀態的認識

程序中的狀態分爲可控狀態和異常狀態,可控狀態是指在程序運行時對程序各種運行條件的判斷,如關係運算、邏輯運算等,都是可控狀態的處理。異常狀態主要是指程序在系統級的出錯控制,如空指針、非法運算、內存溢出等。可控狀態的處理,在很多書裏都有說明,在此我們只談異常狀態的處理。

異常處理,英文名爲exceptional handling, 是代替日漸衰落的error code方法的新法,提供error code 所未能具體的優勢。異常處理分離了接收和處理錯誤代碼。這個功能理清了編程者的思緒,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解。   

異常處理(又稱爲錯誤處理)功能提供了處理程序運行時出現的任何意外或異常情況的方法。異常處理使用 try、catch 和 finally 關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。   異常處理通常是防止未知錯誤產生所採取的處理措施。異常處理的好處是你不用再絞盡腦汁去考慮各種錯誤,這爲處理某一類錯誤提供了一個很有效的方法,使編程效率大大提高。異常可以由公共語言運行庫 (CLR)、第三方庫或使用 throw 關鍵字的應用程序代碼生成。

異常處理的特點如下:

1.在應用程序遇到異常情況(如被零除情況或內存不足警告)時,就會產生異常。   

2.發生異常時,控制流立即跳轉到關聯的異常處理程序(如果存在)。   

3.如果給定異常沒有異常處理程序,則程序將停止執行,並顯示一條錯誤信息。   

4.可能導致異常的操作通過 try 關鍵字來執行。   

5.異常處理程序是在異常發生時執行的代碼塊。在 C# 中,catch 關鍵字用於定義異常處理程序。   

6.程序可以使用 throw 關鍵字顯式地引發異常。   

7.異常對象包含有關錯誤的詳細信息,其中包括調用堆棧的狀態以及有關錯誤的文本說明。   

8.即使引發了異常,finally 塊中的代碼也會執行,從而使程序可以釋放資源。

一種稱爲"終止模型"(它是Java與C++所支持的模型).在這種模型中,將假設錯誤非常關鍵,將以致於程序無法返回到異常發生的地方繼續執行.一旦異常被拋出,就表明錯誤已無法挽回,也不能回來繼續執行.

另一種稱爲"恢復模型".意思是異常處理程序的工作是修正錯誤,然後重新嘗試調動出問題的方法,並認爲的二次能成功.

對於恢復模型,通常希望異常被處理之後能繼續執行程序.在這種情況下,拋出異常更像是對方法的調用--可以在Java裏用這種方法進行配置,以得到類似恢復的行爲.(也就是說,不是拋出異常,而是調用方法修正錯誤.)或者,把try塊放在while循環裏,這樣就可以不斷的進入try塊,直到得到滿意的結果.   

雖然恢復模型開始顯得很吸引人,並且人們使用的操作系統也支持恢復模型的異常處理,但程序員們最終還是轉向了使用類似"終止模型"的代碼.因爲:處理程序必須關注異常拋出的地點,這勢必要包含依賴於拋出位置的非通用性代碼.這增加了代碼編寫和維護的困難,對於異常可能會從許多地方拋出的大型程序來說,更是如此。

 

3       JAVA語言中的異常狀態處理

3.1  簡介

異常是程序執行時遇到的任何錯誤情況或意外行爲。以下這些情況都可以引發異常:您的代碼或調用的代碼(如共享庫)中有錯誤,操作系統資源不可用,公共語言運行庫遇到意外情況(如無法驗證代碼),等等。向對象中每增加一個類,都可能包含一些錯誤。Java使用和C++類似的異常處理

a)        處理錯誤的方法有很多流行方法

b)        一般方法是把程序處理代碼段分散到系統代碼中,在可能發生錯誤的地方處理錯誤

優點:便於程序員能夠條理的看到程序中異常的處理

缺點:異常處理程序“攪亂”代碼,程序員很難關心程序本身能否正常完成功能,而只關心了性能。

c)        常見異常實例包括:數組下標越界,算法溢出(超出數值表達範圍),除數爲零,無效參數、內存溢出

異常處理功能:主要處理一些同步異常(除數爲0),不宜處理一些異步事件(Disk I/O End、網絡信息到達、點擊鼠標、敲擊鍵盤)這些最好使用java事件監聽。

異常處理程序:能夠讓系統在出現異常的情況下恢復過來的程序使用異常處理情況:異常診斷與異常處理不在同一個位置下時使用異常處理程序(若用戶一直通過鍵盤與程序通話,那麼就不能使用處理鍵盤輸入處理)。使用異常的注意事項:

1、 異常處理位置與異常發生位置必須不同(若一個程序能夠處理自己的錯誤,那麼就採用傳統的錯誤處理方式進行局部處理)

2、 要避免使用異常處理來代替錯誤處理,若這樣就會降低程序的清晰性。

3、 儘管可以使用異常處理來代替錯誤處理,但會降低性能

4、 異常處理會佔用程序的格外執行時間

5、 異常處理能夠提高程序的容錯性

6、 程序員使用JAVA標準的異常處理功能來代替他們的專用方法,可以在大型項目中提高程序的清晰性

7、 異常是超類Exception繼承的子類,主要如何處理“未撲獲的異常”,無法預料的異常。

8、 異常處理在java中原理:異常處理有Method調用者的調用者或者Method調用者來處理,

 

9、 異常處理適用分別開發的組件系統

10、 因爲一些程序員使用不支持異常處理語言編程時,往往拖延或忘記錯誤處理程序的編寫,故,Java強制程序員從項目一開始就着手進行異常處理,程序員必須投入很大精力把異常處理的策略融合到軟件產品中

11、 最好在進行系統設計是就把異常處理融合在系統中,若系統一實現,就很難添加異常處理功能

3.2  如何使用異常處理:

在以下情況下使用異常處理:

1、 當方法因無法控制的原因而不能實現其功能時;

2、 處理來自程序組件整體異常,這些程序組件不適宜直接處理異常

3、 在大型項目中,對於每個項目都以一致的方式進行錯誤處理

4、 在類庫中出現每一個異常,都需要一個惟一錯誤處理,在類庫中使用異常處理很合適

3.3  java異常處理的基礎:

java的異常處理適用於在一個方法中能夠檢測出錯誤單不能處理錯誤的情況,這樣方法將拋出一個異常(JAVA無法保證“存在”的異常處理程序能夠處理某種異常,若“存在”,就“捕獲”異常,並處理“異常”,如找不到,那麼:

命令行APP/控制檯APP(不基於GUI),當異常不能被“捕獲”,那麼該程序會運行默認異常處理程序,退出JAVA,若Applet或基於GUI的APP,當一個異常未被“捕獲”,GUI在運行默認異常處理程序依然會顯示,而且用戶使用的GUI處於一個不穩定的狀態)

JAVA代碼中:可能出現異常的代碼-----

{ …… try{拋出一個異常}-----程序塊 ……

catch1{異常處理程序1};

……

catch100 {異常處理程序100};

finally{無類是否出現異常都執行的程序}

a)        若try拋出Exception,App尋找在Catch1~100尋找合適異常處理程序,若找到,執行CATCH{}代碼,沒有,執行最後一個catch{}後代碼

b)        若try未拋出Exception,就執行執行最後一個catch{}後代碼。

c)        throws子句來拋出指定的異常,異常拋出點(throws 語句位置、try{}程序塊、try()程序塊中直接和間接調用的方法中)

d)       java採用終止方式異常處理,不是恢復方式的異常處理

e)        發生異常時,異常周圍信息(拋出對象本身類型)-------------異常處理程序

3.3.1       try程序塊:

try{

……}

catch(){

…….}

finally{ ……}

try後面跟0~多個catch程序塊。若try拋出Exception,App尋找在Catch1~100尋找合適異常處理程序,若找到,執行CATCH{}代碼,沒有,執行最後一個catch{}後代碼若try未拋出Exception,就執行執行最後一個catch{}後代碼。finally{無類是否出現異常都執行的程序,必須完成資源釋放即終止函數調用,可避免資源泄露}

3.3.2       throw拋出異常:

throw 子句用來拋出異常,而throws子句用來指定異常。throw 的操作數是Throwable所有派生類,Throwable的直接子類是Exception(異常,由應捕獲的問題引起,應進行處理)與Error(重大系統問題,一般不捕獲)。拋出異常拋出點有try{}塊、, try{}塊某個深層嵌套的作用域、try{}塊某個深層嵌套的方法中,throws指定異常,throw拋出的異常 。try{}不包括錯誤檢測語句與throw子句,但它的程序塊中所引用的對象將會執行構造函數中的錯誤檢測代碼,並拋出異常

我們只要求異常終止產生異常的程序塊執行,而不停止整個程序

異常信息傳遞通過對象引用產生,然後讓catch塊中的參數名(對象名)引用

3.3.3       catch捕獲異常:

異常處理程序包含在catch程序塊中。語法:

catch (classNmae---指定要拋出的異常的類型,參數名-----用來引用處理程序捕獲的對象)

{javaCode -----處理異常可執行代碼}

catch使用注意事項:

1、 若假設異常處理之後,程序控制將返回throw後的第一個語句,那麼將導致邏輯錯誤

2、 將catch程序塊的參數不能設置成多個,一個catch只有一個參數

3、 若兩個catch程序塊(均和某個try程序塊有關)都用於捕獲同一類型異常,那麼將產生語法錯誤

4、 捕獲特殊異常可能找不到,需要在下一層try中找,若找不到,那麼命令行APP/控制檯APP(不基於GUI)將退出程序,Applet或基於GUI的APP將繼續執行處於一個不穩定的狀態的APP

5、 若某一類型異常,可能有幾個異常處理程序與他相匹配,那麼執行first相匹配的異常處理程序

6、 一個程序可以同時處理許多關係密切的異常,我們可謂此ExceptionGroup提供1個異常類與catch處理程序,當某個異常發生時,可根據不同的實例數據創建異常對象,同時catch檢查該數據,以判斷異常的類型;我們一般不提倡此種編程風格,最好用繼承的方法解決

7、 在異常處理程序中,不能訪問try塊中定義的對象,異常處理開始,try快結束

8、 若執行某個異常處理程序時又拋出一個異常,原try塊已經終止,那麼就讓原try外層try處理程序進行處理,同時外層try程序監視並處理原try塊的catch處理程序產生的錯誤

9、 異常處理程序的形式:A、重拋出異常;B、通過拋出另一種不同類型的異常來轉換異常類型;C、通過執行完最後一個異常處理程序之後,完成任何必要的恢復工作並使程序繼續執行;D、判斷產生錯誤的原因,然後處理,並重新調用原來曾產生該異常的方法 E、簡單向Runtime返回一個狀態值 ……………等等

10、 傳統的控制流不使用異常,因“額外的”異常會“掩蓋”那些真正的錯誤類型的異常,程序員很難跟蹤那些大量的異常,而且這裏的異常不是經常見到的

11、 catch處理程序拋出一個異常,將由catch處理或與同1個try塊相關的其他處理程序來處理,就會產生邏輯錯誤

3.3.4       finally程序塊

若程序顯示使用某些資源,那麼必須在最後完成對資源的釋放即無庸單元回收,在C與C++中,常見是指針不能回收,函數不能終止,出現“內存泄露”

java實現自動的無庸的單元回收功能,可避免“內存泄露”,但java同樣存在別的“資源泄露”一般在finally程序塊中使用一些資源釋放的代碼。

1、 finally程序塊將try程序塊中所有打開文件關閉

2、 java並沒有徹底消除資源泄露、當某個對象不存在是,java纔對該對象進行無庸單元回收處理,當程序員錯誤的對某個對象保持引用時,就會出現內存泄露

3、 exception ( String informationString):其中informationString是對該類異常描述信息,而獲得信息使用getMessage(用於返回保存在某個異常中的描述字符串)。PrintStackTrace(用於把方法調用堆棧的內容打印出來,對測試程序特別有用)。

 

 

4       JAVA語言的狀態實例

 

 

 

 

 

 

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