對于每一個程序員來說,在編程過程中出現bug和錯誤是非常正常的一件事情,只要我們在上線之前排除問題就可以了。今天,我們就一起來了解一下,JavaScript中的問題都有哪些。
成都創新互聯公司是網站建設專家,致力于互聯網品牌建設與網絡營銷,專業領域包括網站建設、做網站、電商網站制作開發、重慶小程序開發公司、微信營銷、系統平臺開發,與其他網站設計及系統開發公司不同,我們的整合解決方案結合了恒基網絡品牌建設經驗和互聯網整合營銷的理念,并將策略和執行緊密結合,且不斷評估并優化我們的方案,為客戶提供全方位的互聯網品牌整合方案!
調用棧的工作機制
在探討JS中的錯誤之前,我們必須理解調用棧(CallStack)的工作機制,其實這個機制非常簡單,如果你對這個已經一清二楚了,可以直接跳過這部分內容。
簡單的說:函數被調用時,就會被加入到調用棧頂部,執行結束之后,就會從調用棧頂部移除該函數,這種數據結構的關鍵在于后進先出,即大家所熟知的LIFO。比如,當我們在函數y內部調用函數x的時候,調用棧從下往上的順序就是y-x。
Error對象及錯誤處理
當代碼中發生錯誤時,我們通常會拋出一個Error對象。Error對象可以作為擴展和創建自定義錯誤類型的原型。Error對象的prototype具有以下屬性:
constructor_負責該實例的原型構造函數;
message_錯誤信息;
name_錯誤的名字;
上面都是標準屬性,有些JS運行環境還提供了標準屬性之外的屬性,如Node.js、Firefox、Chrome、Edge、IE10、Opera和Safari6+中會有stack屬性,它包含了錯誤代碼的調用棧,接下來我們簡稱錯誤堆棧。錯誤堆棧包含了產生該錯誤時完整的調用棧信息。如果您想了解更多關于Error對象的非標準屬性,我強烈建議你閱讀MDN的這篇文章。
拋出錯誤時,你必須使用throw關鍵字。為了捕獲拋出的錯誤,則必須使用trycatch語句把可能出錯的代碼塊包起來,catch的時候可以接收一個參數,該參數就是被拋出的錯誤。與Java中類似,JS中也可以在trycatch語句之后有finally,不論前面代碼是否拋出錯誤finally里面的代碼都會執行,這種語言的常見用途有:在finally中做些清理的工作。
錯誤堆棧的裁剪
Node.js才支持這個特性,通過Error.captureStackTrace來實現,Error.captureStackTrace接收一個object作為1個參數,以及可選的function作為2個參數。IT培訓認為其作用是捕獲當前的調用棧并對其進行裁剪,捕獲到的調用棧會記錄在1個參數的stack屬性上,裁剪的參照點是2個參數,也就是說,此函數之前的調用會被記錄到調用棧上面,而之后的不會。
什么是Java程序員呢?Java程序員是這幾年出現的,他們的著裝經常被吐槽,沒有人能夠get到他的笑點,總是讓人感覺到莫名其妙,這就是很多人眼中的程序員。程序員在進行軟件開發的時候,會存在一些錯誤的問題,學會避免是非常關鍵的。下面電腦培訓為大家介紹一下。
1、改一行代碼,不會影響其他功能
做任何事情誠意是非常關鍵的,在不認真的情況下任何事情都是做不好的。如果隨意改動代碼,在連接數據庫的時候會出現很多問題。想要成為一名合格的程序員,對代碼的嚴謹性是非常關鍵的。
2、不考慮自身問題
在進行軟件開發的過程中,存在問題是不可避免的,如何面對和處理問題才是最關鍵的。如果在遇到問題的時候一直認為是電腦的問題,這樣想法想要成為合格的程序員是不可能的。IT培訓認為硬件問題是比較少的,不能很好的解決自己的問題想要成功是不可能的。
3、使用臨時的方法
臨時方法并不是解決問題的最好方法,在進行編程的過程中,由于可能出現的問題比較多,如果使用臨時辦法,最終可能會演變為永久的辦法,這對于程序員來說,北大青鳥認為是非常避諱的解決方法。
4、以后在給代碼添加注釋
習慣是需要在生活中不斷養成的,好的習慣是成功的墊腳石。在進行代碼書寫的時候也應該有一個好的習慣,如果只會一味地推脫,很難讓自己前進。
5、測試過,沒有BUG
有的程序員永遠不承認自己存在問題,代碼存在BUG是很正常的,就算進行測試之后也會出現同樣的問題。在程序出現問題的時候不要一味的認為是使用而導致的,北大青鳥云南計算機學院認為,作為程序員,應該解決所有存在的問題。
相信作為程序員的我們在對程序進行編譯過程中經常會遇到錯誤,或者在運行過程中出現錯誤,在這里主要跟大家談談經常遇到的一些異常與錯誤,以及解決辦法。
異常是指程序在編譯或運行過程出現的錯誤。
在java.lang包中Throwable包含了所有的異常。
Error (錯誤) 和Exception(異常)
(1)Error(錯誤)
一旦發生無法修復,但可以避免發生。
常見錯誤類:
IOError:I/O錯誤,當發生嚴重的I/O錯誤時,拋出此錯誤。
VirtualMachineError?:虛擬機錯誤,當 Java 虛擬機崩潰或用盡了它繼續操作所需的資源時,拋出該錯誤。
StackOverflowError:棧內存滿了,當應用程序遞歸太深而發生堆棧溢出時,拋出該錯誤。
OutofMemoryError:堆內存滿了,因為內存溢出或沒有可用的內存提供給垃圾回收器時,Java 虛擬機無法分配一個對象,這時拋出該異常。
以上是一些常見的錯誤,在Error類中還有一些別的錯誤(參照文件Java.lang.Throwable.Error).
(2)Exception(異常)
一旦發生,可以捕獲并處理,不會導致程序終止,有時可以避免有時無法避免。
異常的分類:
1.編譯時異常(需要強制處理)?????? 2.運行時異常(不需要強制處理)
常見的異常有:
IOException:輸入輸出流異常
FileNotFoundException:文件找不到的異常
ClassNotFoundException:類找不到的異常
DataFormatException:數據格式化異常
NoSuchFieldException:沒有匹配的屬性異常
NoSuchMethodException:沒有匹配的方法異常
SQLException:數據庫操作異常
TimeoutException:執行超時異常
常見的運行時異常:
RuntimeException:運行時異常
NullPointerException:空指針異常
ArrayIndexOutofBoundsException:數組越界異
ClassCastException:類型轉換異常
IllegalArgumentException:非法的參數異常
InputMismatchException:輸入不匹配
以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception
既然我們常常會遇到一些異常,那我們如何來處理這些異常就是一個急需解決的事情。
(1) 如何處理編譯時異常?
方法一:將需要處理的代碼塊放在一個try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}
我們方法一就是要將我們不確定的代碼放入try......catch中,先進行try一下,如果沒有異常,則不會觸發catch,沒有輸出,一旦出現異常,那么catch就會工作,在catch中捕獲異常信息,根據異常信息進行補救措施。
如以下代碼:
方法二:在出現異常的方法上直接向上拋出異常,throws
void ff() throws XXXException{
}
將出現的異常的代碼中,放入如上的方法中,就會將異常拋給該方法的上一級,在主函數上繼續向上拋,最終拋給JVM java虛擬機,讓JVM來解決該問題。
如代碼:
注意:在catch和throws的時候如果不確定是什么異常,就直接寫一個Exception.
(2) 如何處理運行時異常?
1.一般情況下,運行時異常是不用處理的?
2.在某些情況下,如果對發生異常的結果進行處理,也可以對運行時異常進行try...catch...
以上就是一些我們處理編譯時異常和運行時異常的方法。
在程序出現異常時,有時候我們可以自定義異常,以便我們能夠發現是什么異常。
那么如何自定義異常??
1.當運行時,程序出現意外,可以拋出異常對象來結束程序
如:
//拋出運行時異常對象
RuntimeException ef = new RuntimeException("下標越界!index:"+index+" ,size:"+size());
throw ef;
2.對于編譯時異常,同樣可以拋出異常對象
但在方法定義時候必須加上throws
如:
public void test(int t) throws Exception{
if (t 0 || t 100) {
Exception ef = new Exception("數據錯誤");
throw ef;
}
}
例如:
運行結果:
從結果可以看出,我們在輸入數據的時候出現錯誤,這樣通過自定義異常能夠讓我們更直接快速的找到運行或編譯時的異常。
在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那么到底三者有什么區別?
Throwable:是指在在Java.lang包中的一個類,其包含了所有的異常和錯誤,其中類Error和Exception 是它
的子類。
Thows:是指在解決編譯時異常,將方法中異常拋給上一級,在方法后面要加Throw Exception來進行拋。
throw:是指在自定義異常時,如果方法出現異常,那么將作為引用方法的對象拋出。即拋出異常。
網頁名稱:常見java代碼bug java代碼常見錯誤
本文鏈接:http://vcdvsql.cn/article38/ddceosp.html
成都網站建設公司_創新互聯,為您提供面包屑導航、軟件開發、網站導航、用戶體驗、建站公司、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯