Java的編譯時錯誤和運(yùn)行時錯誤問題
Java編譯時錯誤和運(yùn)行時錯誤
1. 要區(qū)分編譯時錯誤和運(yùn)行時錯誤,就應(yīng)該先明白什么是編譯?什么是運(yùn)行?
首先,先看一下這張圖:
編譯期就是將我們寫的java源代碼交給編譯器執(zhí)行的過程,起翻譯的作用,該過程主要對java源代碼的語法進(jìn)行檢查,如果沒有語法錯誤,就將源代碼編譯成字節(jié)碼文件(即.class文件);
運(yùn)行期則是將字節(jié)碼文件(.class文件)加載到內(nèi)存中交給java虛擬機(jī)執(zhí)行,直到程序執(zhí)行結(jié)束的過程,該過程主要對程序的邏輯錯誤進(jìn)行檢查,如果沒有邏輯錯誤,程序的功能得到實(shí)現(xiàn),輸出結(jié)果。
2. 編譯期和運(yùn)行期的內(nèi)存分配區(qū)別。
①編譯期只是在程序的字節(jié)碼文件中產(chǎn)生一些控制程序運(yùn)行時分配內(nèi)存的指令,僅僅是知道內(nèi)存分配的大小以及存放的位置,不做具體的分配操作。
②運(yùn)行期才是對內(nèi)存真正的分配,確定程序分配內(nèi)存的大小,以及這些變量該存放內(nèi)存的位置。
3. 在eclipse開發(fā)java項(xiàng)目時,怎么區(qū)分編譯錯誤和運(yùn)行錯誤?
①編譯錯誤一般指語法錯誤或者很明顯的邏輯錯誤。
如:缺少分號,少寫括號,關(guān)鍵字書寫錯誤等, 在eclipse往往會畫紅線。
②運(yùn)行錯誤是在沒有編譯錯誤的基礎(chǔ)上運(yùn)行后產(chǎn)生的邏輯錯誤。
如:空指針異常,除數(shù)為0,越界訪問等,一般會拋出異常。
4.例子
下面程序,編輯運(yùn)行,結(jié)果為()
public class Test{ public void main(String[] args){ System.out.println("Hello world"); } }
結(jié)果:編譯無錯誤,但運(yùn)行時產(chǎn)生異常。
編譯錯誤和運(yùn)行錯誤的區(qū)別
編譯期
在程序的字節(jié)碼文件中產(chǎn)生一些控制程序運(yùn)行時分配內(nèi)存的指令, 僅僅是知道內(nèi)存分配的大小以及存放的位置, 不做具體的分配操作
運(yùn)行期
是對內(nèi)存的真正的分配, 確定程序分配內(nèi)存的大小, 以及這些變量該存放內(nèi)存的位置
常見的錯誤
編譯錯誤一般指語法錯誤或者很明顯的邏輯錯誤, 如 : 缺少分號, 少寫括號, 關(guān)鍵字書寫錯誤等
運(yùn)行錯誤是在沒有編譯錯誤的基礎(chǔ)上運(yùn)行后產(chǎn)生的邏輯錯誤, 如 : 空指針異常, 除數(shù)為0 , 越界訪問等
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot實(shí)現(xiàn)注冊加密與登錄解密功能(demo)
這篇文章主要介紹了springboot實(shí)現(xiàn)注冊的加密與登錄的解密功能,本文通過demo實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02關(guān)于replaceFirst使用時的注意事項(xiàng)
這篇文章主要介紹了關(guān)于replaceFirst使用時的注意事項(xiàng),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot MDC全鏈路調(diào)用日志跟蹤實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了SpringBoot MDC全鏈路調(diào)用日志跟蹤實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02