㈠ 編譯時異常和運行時異常有什麼區別啊
Throwable 是所有 java 程序中錯誤處理的父類 ,有兩種資類: Error 和 Exception 。 Error :表示由 JVM 所偵測到的無法預期的錯誤,由於這是屬於 JVM 層次的嚴重錯誤 ,導致 JVM 無法繼續執行,因此,這是不可捕捉到的,無法採取任何恢復的操作,頂多隻能顯示錯誤信息。 Exception :表示可恢復的例外,這是可捕捉到的。 Java 提供了兩類主要的異常 :runtime exception 和 checked exception 。 checked 異常也就是我們經常遇到的 IO 異常,以及 SQL 異常都是這種異常。 對於這種異常, JAVA 編譯器強制要求我們必需對出現的這些異常進行 catch 。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆 catch 塊去處理可能的異常。 但是另外一種異常: runtime exception ,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機 接管。比如:我們從來沒有人去處理過 NullPointerException 異常,它就是運行時異常,並且這種異常還是最常見的異常之一。 出現運行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由 Thread.run() 拋出 ,如果是單線程就被 main() 拋出 。拋出之後,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,那麼這整個程序也就退出了。運行時異常是 Exception 的子類,也有一般異常的特點,是可以被 Catch 塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。 如果不想終止,則必須撲捉所有的運行時異常,決不讓這個處理線程退出。隊列裡面出現異常數據了,正常的處理應該是把異常數據舍棄,然後記錄日誌。不應該由於異常數據而影響下面對正常數據的處理。 在這個場景這樣處理可能是一個比較好的應用,但並不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程序比較好,這時你就可以不太理會運行時異常 ,或者是通過對異常的處理顯式的控製程序退出。 異常處理的目標之一就是為了把程序從異常中恢復出來 。
㈡ 請問java程序在編譯和運行時有什麼區別,系統分別都會做什麼
Java程序的編譯
使用命令: javac *.java
編譯時,會將寫的.java文件(高級語言),生成相應的位元組碼文件.class文件(二進制代碼)
Java程序的執行
使用命令:java *
流程: 載入到 -- 連接 ---- 初始化 ...
運行時,首先會由將相應的.class文件,載入到內存中,並驗證.class文件的有效性,將相應類的Class載入到內存中,並對類中的靜態變數進行初始化操作,然後就由 主 類開始執行
具體的可以看一下 JVM 類載入過程,以及jVM的內存分配機制
㈢ 請問編譯,調試和運行分別有什麼區別呢
編譯是把源文件轉化為目標文件,即是把obj文件鏈接成exe文件。
調試則是為了找出在程序中的錯誤。
鏈接成可執行文件.exe,這時才可以運行,運行就是你要的結果。
㈣ Java編譯時註解和運行時註解有什麼區別
區別如下:
1)編譯時註解,註解內容只存在源文件,在編譯期間將被丟棄,不能通過JVM獲取註解信息;
2)運行時註解,編譯時被存儲在.class位元組碼文件,可以通過JVM運行時獲取註解信息(且只限於被RUNTIME註解的註解)。
㈤ C++中什麼是編譯時,什麼是運行時,二者有何區別
意思和區別如下:
1、編譯:依賴於編譯器,英文是compile, vc中這一過程是將源代碼轉換成目標文件,如.obj文件,.rc文件等。
2、生成:指的是鏈接的過程,英文是build.依賴於鏈接器. vc中在這一階段將所有的目標文件和所有需要用到的組件組合成一個整體,例如需要生成的是windows系統下的PE可執行文件,鏈接器會依照特定格式將目標文件組合,最後生成PE格式的.exe或.dll文件。
3、調試:是所有或部分代碼編寫完成後,讓程序在調試器中運行,用這種手段對程序進行分析,找出並修正潛在問題。
4、運行:就是讓程序在系統中運行。
㈥ 編譯錯誤和運行時異常怎麼區分
編譯錯誤 一般都是語法錯誤
運行時錯誤一般都是比如數組索引指向空值 4/0 這類錯誤
請參考
㈦ 請問運行時分配內存和編譯時分配內存有什麼區別
一。運行時分配內存
既然是運行時分配內存,首先這個一定是動態的內存。。那麼它的作用是什麼呢,它的主要應用場所就是在
事先並不知道要多少內存來存儲我們想要存的東西,比如說
偶們現在想要用內存來保存中國深圳的人口相關信息,但是這個城市有多少人呢,這個數字是不確定的隨時都是在變的,這個時候就不可能定義一個固定大小的數組來保存了,這樣就需要動態內存了,來一個就加一個,少一個就減一個多好用,是不。。嘿嘿
二。編譯時候分配的內存。。當然就是事先偶知道要多大的內存。所以就先申請固定大小的內存嘍。這個就是在編譯時候就會分配內存
三。動態的內存一經申請,只要沒有人為的釋放掉它,那麼它會一直存在,直到程序運行結束,才會被釋放。
四。。動態內存會在進程結束的時候自動釋放的。。嘿嘿。。進程都沒有了,那麼內存何在
是不。。瓶子破了,水當然會溜走,想留下也不行啊
回復libujuan
㈧ 代碼的編譯運行和解釋運行的區別
計算機並不能直接地接受和執行用高級語言編寫的源程序,源程序在輸入計算機時,通過"翻譯程序"翻譯成機器語言形式的目標程序,計算機才能識別和執行。這種"翻譯"通常有兩種方式,即編譯方式和解釋方式。編譯方式是指利用事先編好的一個稱為編譯程序的機器語言程序,作為系統軟體存放在計算機內,當用戶將高級語言編寫的源程序輸入計算機後,編譯程序便把源程序整個地翻譯成用機器語言表示的與之等價的目標程序,然後計算機再執行該目標程序,以完成源程序要處理的運算並取得結果。解釋方式是指源程序進入計算機後,解釋程序邊掃描邊解釋,逐句輸入逐句翻譯,計算機一句句執行,並不產生目標程序。如PASCAL、FORTRAN、COBOL等高級語言執行編譯方式;BASIC語言則以執行解釋方式為主;而PASCAL、C語言是能書寫編譯程序的高級程序設計語言。
編譯程序、解釋程序、匯編程序是3種語言處理程序。其區別主要為:匯編程序(為低級服務)是將匯編語言書寫的源程序翻譯成由機器指令和其他信息組成的目標程序。解釋程序(為高級服務)直接執行源程序或源程序的內部形式,一般是讀一句源程序,翻譯一句,執行一句,不產生目標代碼,如BASIC解釋程序。編譯程序(為高級服務)是將高級語言書寫的源程序翻譯成與之等價的低級語言的目標程序。編譯程序與解釋程序最大的區別之一在於前者生成目標代碼,而後者不生成;此外,前者產生的目標代碼的執行速度比解釋程序的執行速度要快;後者人機交互好,適於初學者使用。用COBOL、FORTRAN等語言編寫的程序考慮到執行速度一般都是編譯執行。
解釋:程序運行時,取一條指令,將其換化為機器指令, 再執行這條機器指令。
編譯:程序運行時之前,將程序的把有代碼編譯為機器代碼,再運行這個程序。
計算機並不能直接地接受和執行用高級語言編寫的源程序,源程序在輸入計算機時,通過"翻譯程序"翻譯成機器語言形式的目標程序,計算機才能識別和執行。這種"翻譯"通常有兩種方式,即編譯方式和解釋方式。
編譯方式是指利用事先編好的一個稱為編譯程序的機器語言程序,作為系統軟體存放在計算機內,當用戶將高級語言編寫的源程序輸入計算機後,編譯程序便把源程序整個地翻譯成用機器語言表示的與之等價的目標程序,然後計算機再執行該目標程序,以完成源程序要處理的運算並取得結果。
解釋方式是指源程序進入計算機後,解釋程序邊掃描邊解釋,逐句輸入逐句翻譯,計算機一句句執行,並不產生目標程序。如PASCAL、FORTRAN、COBOL等高級語言執行編譯方式;BASIC語言則以執行解釋方式為主;而PASCAL、C語言是能書寫編譯程序的高級程序設計語言。
簡單的說,編譯就是全文翻譯,全部翻譯完才執行。解釋就相當於同聲翻譯,邊翻譯邊執行。
解釋語言, 比如以前的Basic, 源程序是文本的, 運行時有一個解釋程序, 它把源程序讀入, 一條一條地現翻譯現執行. 這當然慢了, 因為它要現場解釋嘛. 現在網頁中的VBScript, JavaScript等也是如此.
編譯語言, 比如C或C++, 你編一段程序, 由Turbo C, VC, 或其它什麼編譯器編譯, 變成了一個可執行的程序文件 (在DOS或Windows下, 擴展名為 .EXE的), 以後運行這個編譯好的文件就成了. 因為已經翻譯好了, 所以運行時就沒有現場解釋這一步, 當然快得多了. DOS或Windows下的 EXE 文件, 都是編譯或匯編出來的.
另外注意, 是否是編譯或解釋, 與語言種類其實無關. 過去一般說Basic是解釋的, 其實它也有編譯的; 而C, Pascal一般都說是編譯的, 但我確實見到過以解釋方式執行的C和Pascal.