編譯錯誤和運行時出現異常
Ⅰ java編譯過程沒有錯誤為什麼運行過程後出現出現錯誤或無法載入主類
java中的錯誤一般分為編譯錯誤或者運行時的錯誤或異常
編譯錯誤一般指的是語法上的錯誤,比如引用未付值的變數,語句後少了分號等等通過編譯器可以檢查出來的錯誤
運行時的錯誤或異常,是指編譯器無法檢查出來在程序中卻又不能正確執行的代碼,比如兩個變數相除,除數為0,或者是你引用了null值等等,面向對象的語言中萬物皆對象,運行時的各種異常或錯誤也是java的類的一部分,你可以參見j2se的api,在java.lang這個包下的Throwable就是所有異常和錯誤的父類,你可以看一看
java在運行出錯時,通常都會在控制台上列印出錯信息,比如
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)
那個java.lang.NullPointerException就是異常的名稱,你就可以去API中查看此異常,就知道這個異常是什麼意思了,第二行Test.java:6的意思就是Test.java這個文件第6行報的錯誤
無法載入主類,你是怎麼判斷的,如果你是用命令行啟動,一般情況下看看檢查你的class_path設置的對不對,你運行的class文件有沒有,運行的class文件中有沒有main方法,還有就是引用的其他class文件或jar包在不在classpath的路徑下
祝你好運!
Ⅱ 編譯時異常和運行時異常有什麼區別啊
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什麼時候是編譯出錯,什麼時候會報異常呢
編譯錯時因為你寫的語法不正確,報異常有時候是程序自身的錯誤 大部分是你程序邏輯有錯誤
Ⅳ 為什麼編譯沒有錯誤,運行卻有錯誤
編譯沒有錯誤是因為你的程序語法沒有錯誤.
而運行時則有可能出現邏輯錯誤.
比如說C#里最常見的"未將對象引用設置到對象的實例",就是說一個對象並沒有實力化,或者沒有值就去引用了.
再比如連接資料庫,語法正確,但是運行時卻因為SQL未啟動或者連接字元串拼寫錯誤而發生異常.
Ⅳ Java編程中 常見的異常有哪幾種
相信作為程序員的我們在對程序進行編譯過程中經常會遇到錯誤,或者在運行過程中出現錯誤,在這里主要跟大家談談經常遇到的一些異常與錯誤,以及解決辦法。
異常是指程序在編譯或運行過程出現的錯誤。
在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:空指針異常
:數組越界異
ClassCastException:類型轉換異常
IllegalArgumentException:非法的參數異常
InputMismatchException:輸入不匹配
以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception
既然我們常常會遇到一些異常,那我們如何來處理這些異常就是一個急需解決的事情。
(1) 如何處理編譯時異常?
方法一:將需要處理的代碼塊放在一個try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}
我們方法一就是要將我們不確定的代碼放入try......catch中,先進行try一下,如果沒有異常,則不會觸發catch,沒有輸出,一旦出現異常,那麼catch就會工作,在catch中捕獲異常信息,根據異常信息進行補救措施。
如以下代碼:

從結果可以看出,我們在輸入數據的時候出現錯誤,這樣通過自定義異常能夠讓我們更直接快速的找到運行或編譯時的異常。
在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那麼到底三者有什麼區別?
Throwable:是指在在Java.lang包中的一個類,其包含了所有的異常和錯誤,其中類Error和Exception 是它
的子類。
Thows:是指在解決編譯時異常,將方法中異常拋給上一級,在方法後面要加Throw Exception來進行拋。
throw:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。
希望對您有所幫助!~
Ⅵ 運行時異常與一般異常有何異同
1.定義不同,運行時異常都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException等。一般異常是RuntimeException以外的異常,類型上都屬於Exception類及其子類。
2.處理方法不同,運行時異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。對於一般異常,JAVA編譯器強制要求用戶必需對出現的這些異常進行catch並處理,否則程序就不能編譯通過。
3.發生原因不同,運行時異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度盡可能避免這類異常的發生。面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。

(6)編譯錯誤和運行時出現異常擴展閱讀:
兩種異常同屬於Exception父類。
不同點:
(1)運行時異常都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException等。
(2)一般異常是RuntimeException以外的異常,類型上都屬於Exception類及其子類。
