編譯不報錯運行報錯都叫異常嗎
1. 程序編譯時沒錯運行時有錯是怎麼回事
程序編譯沒有錯誤,只是表明語法檢查沒有問題了,但是程序的邏輯是否合理、運行是否正確,則不一定。很多情況都會導致這樣的問題,比方說數組越界,訪問非法指針等,你沒有給出源代碼,也沒有提供相關錯誤信息,所以到底是什麼原因,在這里也不好確定。如果程序不長的話,建議對程序進行調試,監測程序的運行狀態,這樣容易找出問題。
2. 為什麼我寫的C語言程序編譯時沒錯,運行時有錯誤
建議你下斷點,然後反復調試運行,肯定能找出問題所在。
我一遇到次類問題,都是這樣解決的。
3. java闂棰 ~~奼傛暀楂樻墜 13) 浠ヤ笅鍏充簬寮傚父鐨勮存硶錛岄敊璇鐨勬槸
閫夋嫨D
鎴戝湪榪欏彧璇翠笅 erroer 鍜孍xception鐨勫尯鍒
error 鏄閿欒 , 榪欎釜閿欒鏄鐢變簬java鉶氭嫙鏈哄紩璧風殑 鏄紼嬪簭鍛樻棤娉曢氳繃鏇存敼浠g爜瑙e喅鐨,鎵浠ヨ繖縐嶉敊璇鎴戜滑涓嶉渶瑕佹姏鍑哄紓甯
Exception 榪欏氨鏄鎴戜滑鎵璇寸殑寮傚父 鎴戜滑鐭ラ亾 java 鍒嗕負2姝 絎涓 緙栬瘧 濡傛灉緙栬瘧娌℃湁閫氳繃,閭e彨鍋
璇娉曢敊璇 緙栬瘧閫氳繃 鑰屽湪絎浜屾ヨ繍琛岀殑鏃跺欎駭鐢熺殑閿欒(姝ら敊璇涓嶆槸涓婇潰璇寸殑error)鍙鍋氬紓甯 .
鑰屽紓甯哥殑瑙e喅鏂規堟湁澶氶噸
甯歌佺殑鏈 1 鍦ㄦ柟娉曠懼悕澶勬姏鍑哄紓甯
2 鍦ㄩ渶瑕佹墤鎹夊紓甯哥殑鍦版柟鐢╰ry catch璇鍙ユ潵鎹曟崏
java璇璦閲囧彇浜嗕竴涓緇熶竴鐨勫紓甯稿勭悊鏈哄埗銆
浠涔堟槸寮傚父錛熻繍琛屾椂鍙戠敓鐨勫彲琚鎹曡幏鍜屽勭悊鐨勯敊璇銆
鍦╦ava璇璦涓錛孍xception鏄鎵鏈夊紓甯哥殑鐖剁被銆備換浣曞紓甯擱兘鎵╁睍浜嶦xception綾匯侲xception灝辯浉褰撲簬涓涓閿欒綾誨瀷銆傚傛灉瑕佸畾涔変竴涓鏂扮殑閿欒綾誨瀷灝辨墿灞曚竴涓鏂扮殑Exception瀛愮被銆傞噰鐢ㄥ紓甯哥殑濂藉勮繕鍦ㄤ簬鍙浠ョ簿紜鐨勫畾浣嶅埌瀵艱嚧紼嬪簭鍑洪敊鐨婧愪唬鐮浣嶇疆,騫惰幏寰楄︾粏鐨勯敊璇淇℃伅銆
Java寮傚父澶勭悊閫氳繃浜斾釜鍏抽敭瀛楁潵瀹炵幇錛宼ry,catch,throw ,throws, finally銆傚叿浣撶殑寮傚父澶勭悊緇撴瀯鐢眛ry鈥.catch鈥.finally鍧楁潵瀹炵幇銆倀ry鍧楀瓨鏀懼彲鑳藉嚭鐜板紓甯哥殑java璇鍙ワ紝catch鐢ㄦ潵鎹曡幏鍙戠敓鐨勫紓甯革紝騫跺瑰紓甯歌繘琛屽勭悊銆侳inally鍧楃敤鏉ユ竻闄ょ▼搴忎腑鏈閲婃斁鐨勮祫婧愩備笉綆$悊try鍧楃殑浠g爜濡備綍榪斿洖錛宖inally鍧楅兘鎬繪槸琚鎵ц屻
Java寮傚父鍒嗕負涓ゅぇ綾:checked 寮傚父鍜寀nChecked 寮傚父銆傛墍鏈夌戶鎵縥ava.lang.Exception 鐨勫紓甯擱兘灞炰簬checked寮傚父銆傛墍鏈夌戶鎵縥ava.lang.RuntimeException鐨勫紓甯擱兘灞炰簬unChecked寮傚父銆
褰撲竴涓鏂規硶鍘昏皟鐢ㄤ竴涓鍙鑳芥姏鍑篶hecked寮傚父鐨勬柟娉曪紝蹇呴』閫氳繃try鈥catch鍧楀瑰紓甯歌繘琛屾崟鑾瘋繘琛屽勭悊鎴栬呴噸鏂版姏鍑恆
4. 為什麼我這個程序編譯不報錯,運行報錯
這個是運行時錯誤,編譯器在編譯時無法檢查此類錯誤,因為很多情況下值並不是固定的,編譯器無法判斷值是否合法,你這種情況就是數組下標越界,再仔細檢查一下代碼
5. Java中數組向下轉型,編譯沒問題,運行卻報錯
異常提示不可以直接轉,換這樣寫String[] as = Arrays.asList(a).toArray(new String[0]);
樓主你首先異常那裡概念沒有弄清,在java中分為運行時異常runtime Exception,以及一般的Exception,如圖
你這個就屬於運行時異常,編譯是不會報錯的,編譯不報錯不代表沒有錯誤,你寫個int a =1;int b = 0; 輸出 a/b編譯也不會出粗,但是運行就報除數不為0異常了。
6. Java之運行時異常與編譯時異常區別
Java中用2種方法處理異常:
1.在發生異常的地方直接處理;
2.將異常拋給調用者,讓調用者處理。
Java常見的異常:
(1)編譯時異常:Java.lang.Exception
(2)運行期異常:Java.lang.RuntimeException
Java.lang.Exception和Java.lang.Error繼承自Java.lang.Throwable;
Java.lang.RuntimeException繼承自Java.lang.Exception.
編譯時異常: 程序正確,但因為外在的環境條件不滿足引發。例如:用戶錯誤及I/O問題----程序試圖打開一個並不存在的遠程Socket埠。這不是程序本身的邏輯錯誤,而很可能是遠程機器名字錯誤(用戶拼寫錯誤)。對商用軟體系統,程序開發者必須考慮並處理這個問題。Java編譯器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。
運行期異常: 這意味著程序存在bug,如數組越界,0被除,入參不滿足規范.....這類異常需要更改程序來避免,Java編譯器強制要求處理這類異常。
7. java異常和錯誤的區別
異常與錯誤:
異常:
在Java中程序的錯誤嘩虛主要是語法錯誤和語義錯誤,一個程序在編譯和運行時出現的錯誤我們統一稱之為異常,它是VM(虛擬機)通知你的一種方式,通過這種方式,VM讓你知道,你(開發人員)已經犯了個錯握局誤,現在有一個機會來修改它。Java中使用異常類來表示異常,不同的異常類代表了不同的異常。但是在Java中所有的異常都有一個基類,叫做Exception。
錯誤:
它指的是一個合理的應用程序不能截獲的嚴重的問題。大多數都是反常的情況。錯誤是VM的一個故障(雖然它可以是任何系統級的服務)。所以,錯誤是很難處理的,一般的開發人員(當然不是你)是無法處理這些錯誤的,比如內存溢出。 和異常一樣,在Java中用錯誤類來表示錯誤,不同的錯誤類代表了不同的錯誤。 但是在Java中所有的錯誤都有一個基類,叫做Error。
綜上,我們可以知道異常和錯誤最本質的區別就是異常能被開發人員處理而錯誤時系統本來自帶的,一般無法處理也不需要我們程序員來處理。
1.一個異常是在一個程序執行過程中出現的一個事件,它中斷了正常指令的運行
2.錯誤,偏離了可接受的代碼行為的一個動作或實例
異常的結構分類:
1、運行時異常(未檢查異常)
2、編譯時異常(已檢查異常段蘆讓)
在Java中異常Exception和錯誤Error有個共同的父類Throwable。
Error Exception
runtimeException幾個子類
1、 java.lang.
數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。
2、java.lang.ArithmeticException
算術條件異常。譬如:整數除零等。
3、java.lang.NullPointerException
空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的
屬性、計算null對象的長度、使用throw語句拋出null等等
4、java.lang.ClassNotFoundException
找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出
該異常。
對異常的處理:
try{}catch{}
try{}catch{}finally{}無論有無異常finally代碼塊都會被執行
try{}finally{}也是可以組合使用的但是catch{}finally{}不可以
注意:在繼承關系中,子類覆蓋父類的方法,拋出異常的范圍不能比父類更寬泛
異常的使用
在異常的使用這一部分主要是演示代碼,都是我們平常寫代碼的過程中會遇到的(當然只是一小部分),拋磚引玉嗎!
例1. 這個例子主要通過兩個方法對比來演示一下有了異常以後代碼的執行流程。
代碼如下
public static void testException1() {
int[] ints = new int[] { 1, 2, 3, 4 };
System.out.println(異常出現前);
try {
System.out.println(ints[4]);
System.out.println(我還有幸執行到嗎);// 發生異常以後,後面的代碼不能被執行
} catch (IndexOutOfBoundsException e) {
System.out.println(數組越界錯誤);
}
System.out.println(異常出現後);
}
/*output:
異常出現前
數組越界錯誤
常出現後
*/
8. 編譯錯誤和運行時異常怎麼區分
編譯錯誤 一般都是語法錯誤
運行時錯誤一般都是比如數組索引指向空值 4/0 這類錯誤
請參考
9. Java什麼情況下強轉型 編譯不報錯,運行會報錯
向下強制轉型——把一個父類(或祖先類)引用強制轉換成一個子類(或孫類)引用,是不會發生編譯錯誤的。
但如果這個父類(或祖先類)引用實際引用(指向)的對象,不是一個子類(或孫類)對象,運行時就會拋出異常。
舉例來說,如果鳥類和狗類都是動物類的子類。
如果有一個動物類的引用a引用了一個鳥類對象,則此時將a強制轉換成狗類引用,就不會報編譯錯誤,但運行時會拋出類型轉換異常。
因為a這個裝動物的籠子,實際上關的是一隻鳥,而需要的動物是一隻狗。