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