① 做java開發時,什麼原因導致報multiple markers at this line錯誤
導致報multiple markers at this line錯誤的原因一般是函數裡面嵌套了函數!java開發推薦千鋒教育,千鋒教育拼搏、開拓、思危、創新的創業精神激勵每位前來學習的學員。
做java開發時,常出現的錯誤有以下幾點:
1.Duplicated Code
代碼重復可謂是十分常見的問題。他也是Refactoring的主要目標之一。
2.忽視異常
針對初學者和有經驗的 Java 程序員,建議還不要忽視異常。異常拋出通常是帶有目的性的,因此在大多數情況下需要記錄引起異常的事件。
3.Hashtable vs HashMap
在演算法中,哈希表是數據結構的名稱。但在Java中,數據結構的名字是HashMap中。其中一個Hashtable和HashMap的之間的主要區別是,Hashtable是同步的。
4.Divergent Change
一個類裡面的內容變化率不同。面向對象的抽象就是把相對不變的和相對變化相隔離。把問題變化的一方面和另一方面相隔離。這使得這些相對不變的可以重用。
想要了解更多關於java開發的相關信息,推薦咨詢千鋒教育。千鋒企合作部整合大量企業客戶資源,緊抓當下企業需求,將技術和項目完美結合千鋒課程體系,力求培養更多優質人才服務企業,不斷提升學員競爭力,鏈接企業用人標準的培訓課程及實戰項目,讓企業招聘用人的技術要求與千鋒學員的技術充分對接。近年來不斷引進阿里釘釘小程序技術、紅帽認證、騰訊雲、亞馬遜等,通過與企業的深度融合實現千鋒教研和就業服務的迭代升級,專業性值得信賴。
② 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:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。
希望對您有所幫助!~
③ 高級Java程序員的四大禁忌,你做到了嗎
高級Java程序員四大忌,你做到了嗎?
做為一名優秀的程序員需要具備永不放棄的精神,如果一個程序員不具備這種永不放棄的精神,那麼這個程序員只能算是一名假程序員。而通往成功的道路上往往是不平坦的,想要成為一個合格的高級Java程序員,需要規避掉四大禁忌,接下來就看看你是否規避了這四大禁忌呢?
一忌:輕易言敗,沒有自信
做為一名真正的Java程序員要對自己充滿信心,不要輕言放棄。在進行編程的時候你可能會遇到無數的困難和問題,可能有極其多的挫折和失敗,而成功卻只有一次,做為一個真正的程序員是非常了解這個問題的。正如俗話說的好失敗是成功之母,只有經歷了一次次的失敗才會成功,而且失敗了總結經驗又何嘗不是一種另類的成功呢?
做為全國知名的Java培訓機構——北京達內,一直秉持「學員利益為重,做有良心,有責任心的Java培訓機構」為此北京達內Java培訓機構,聘請全國知名Java老師,深入淺出的講解Java知識點,努力保證每一位學員學有所成,學有所用,在這里有舒適的教學環境,濃厚的教學氛圍,以及和藹,耐心的老師,零基礎學習Java不要緊,北京達內Jav a培訓圓您一個Java開發夢。
做為一名程序員為解決一個問題,我們可能連續十幾甚至幾十小時的坐在計算機前不停的工作。一個問題解決了,可能又有其它的問題出現。而你要是不能堅持下來,可能之前所有的一切努力都流失了。輕易言敗的人請不要做程序員,你不可能成功。執著是最可貴的。執著的程序員都是相信自己的人,每時每刻都會鼓勵自己,你做的出來,你能解決,你會成功。這樣他才能堅持下去。
二忌:浮華不實,自滿自大
一個整個程序設計的過程就是一個研究、學習、應用、再研究、學習、再應用的過程。一名優秀的程序員是決不會認為自己足夠好了,不需要再提高了的。驕傲自滿自足的人不是一個合格的Java程序員,很快就會落後以致落伍。所以一個越是優秀的程序員就越會覺得自己懂得不夠,需要學習補充,不會在人前故意賣弄,這並不是故作謙虛,而是實實在在的感受,只有親自體驗才會明白。而那種誇誇其談,故意賣弄自己多厲害的程序員會不懂裝懂,不停的強調語言的優劣,平台的好壞。追求所謂最新最時尚的技術,停留在表面問題上。或假做深沉,用不適合的方式做不適合的事情。就像孔已己一樣,以為知道'茴'字有四種寫法就是學問。最後是簡單的作不好,困難的也作不好。而這樣的人也是註定了難以成為一名合格的Java程序員。
三忌:死氣沉沉,不求甚解
一個優秀的Java程序員是充滿激情和活力的。擁有求知慾望和創造慾望是進行Java開發的原動力,只有有求知慾你才能不停地學習,不斷地去充實自己,而擁有創造欲才能不停地突破自己超越自己。而一個死氣沉沉的Java程序員已經失去對編程的興趣的程序員,很快就會淪為時代的淘汰品。
創造一個程序的過程通常指的是知其然還要知其所以然,而不是那種要你發明什麼別人不知道的方法或者技術。只有充分的進行了解才能進行一個軟體的發明與創造。
四忌:強調客觀,忽略自身
一個優秀的Java程序員都是先反省自己,明白自己的缺點缺陷,然後再為之努力改進,努力學習,而不是說在自己失敗的時候去強調那些客觀性的原因。天底下沒有人生下來就是成功的,也沒有人會事事都成功,更沒有說生下來就什麼都會做的,所以失敗了並不可怕,可怕的是自己失敗了還不去吸取教訓,總結經驗,一錯再錯原地踏步不停地抱怨下去。多想想自身的錯誤,反省反省自己,這樣你才會不斷的進步。
一個人是很強大的,然而卻總是失敗而終,而這個打敗他的人不是別人正是他自己,失敗了並不可怕,可怕的是失敗了就止步不前真的失敗了,只有迎難而上,突破自己不斷地改進才會走向成功,而我相信你一定是那個成功者,而不是那個失敗者,祝願所有人都能成為一名合格的真正的Java程序員。
④ Java程序員在寫SQL時常犯的錯誤!
Java程序員編程時需要混合面向對象思維和一般命令式編程的方法,能否完美的將兩者結合起來完全得依靠編程人員的水準:
技能(任何人都能容易學會命令式編程)模式(有些人用「模式-模式」,舉個例子,模式可以應用到任何地方,而且都可以歸為某一類模式)心境(首先,要寫個好的面向對象程序是比命令式程序難的多,你得花費一些功夫)但當Java程序員寫SQL語句時,一切都不一樣了。SQL是說明性語言而非面向對象或是命令式編程語言。在SQL中要寫個查詢語句是很簡單的。但在Java里類似的語句卻不容易,因為程序員不僅要反復考慮編程範式,而且也要考慮演算法的問題。
下面是Java程序員在寫SQL時常犯的10個錯誤(沒有特定的順序)。
1、忘掉NULL
Java程序員寫SQL時對NULL的誤解可能是最大的錯誤。也許是因為(並非唯一理由)NULL也稱作UNKNOWN。如果被稱作 UNKNOWN,這還好理解些。另一個原因是,當你從資料庫拿東西或是綁定變數時,JDBC將SQL NULL 和Java中的null對應了起來。這樣導致了NULL = NULL(SQL)和null=null(Java)的誤解。
對於NULL最大的誤解是當NULL被用作行值表達式完整性約束條件時。另一個誤解出現在對於NULL 在 NOT IN anti-joins的應用中。
解決方法:
好好的訓練你自己。當你寫SQL時要不停得想到NULL的用法:這個NULL完整性約束條件是正確的?NULL是否影響到結果?2、在Java內存中處理數據
很少有Java開發者能將SQL理解的很好。偶爾使用的JOIN,還有古怪的UNION,好吧,但是對於窗口函數呢?還有對集合進行分組呢?許多 的Java開發者將SQL數據載入到內存中,將這些數據轉換成某些相近的集合類型,然後再那些集合上面使用邊界循環控制結構(至少在Java8的集合升級 以前)執行令人生厭的數學運算。
但是一些SQL資料庫支持先進的(而且是SQL標准支持的)OLAP特性,這一特性表現更好而且寫起來也更加方便。一個(並不怎麼標準的)例子就 是Oracle超棒的MODEL分句。只讓資料庫來做處理然後只把結果帶到Java內存中吧。因為畢竟所有非常聰明的傢伙已經對這些昂貴的產品進行了優 化。因此實際上,通過將OLAP移到資料庫,你將獲得一下兩項好處:
便利性。這比在Java中編寫正確的SQL可能更加的容易。性能表現。資料庫應該比你的演算法處理起來更加快.而且更加重要的是,你不必再去傳遞數百萬條記錄了。解決方法:
每次你使用Java實現一個以數據為中心的演算法時,問問自己:有沒有一種方法可以讓資料庫代替為我做這種麻煩事。
3、使用UNION代替UNION ALL
和UNION相比UNION ALL還需要額外的關鍵字。如果SQL標准已經規定了支持,那麼可能會更好點。
UNION(允許重復)UNION DISTINCT (去除了重復)移除重復行不僅很少需要(有時甚至是錯的),而且對於帶很多行的大數據集合會相當慢,因為兩個子select需要排序,而且每個元組也需要和它的子序列元組比較。
注意即使SQL標准規定了INTERSECT ALL和EXCEPT ALL,很少資料庫會實現這些沒用的集合操作符。
解決方法:
每次寫UNION語句時,考慮實際上是否需要UNION ALL語句。
4、通過JDBC分頁技術給大量的結果進行分頁操作
大部分的資料庫都會支持一些分頁命令實現分頁效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH語句等。即使沒有支持這些語句的資料庫,仍有可能對ROWNUM(Oracle)或者是ROW NUMBER()、OVER()過濾(DB2、SQL Server2008等),這些比在內存中實現分頁更快速。在處理大量數據中,效果尤其明顯。
解決方法:
僅僅使用這些語句,那麼一個工具(例如JOOQ)就可以模擬這些語句的操作。
5、在Java內存中加入數據
從SQL的初期開始,當在SQL中使用JOIN語句時,一些開發者仍舊有不安的感覺。這是源自對加入JOIN後會變慢的固有恐懼。假如基於成本的 優化選擇去實現嵌套循環,在創建一張連接表源前,可能載入所有的表在資料庫內存中,這可能是真的。但是這事發生的概率太低了。通過合適的預測,約束和索 引,合並連接和哈希連接的操作都是相當的快。這完全是是關於正確元數據(在這里我不能夠引用Tom Kyte的太多)。而且,可能仍然有不少的Java開發人員載入兩張表通過分開查詢到一個映射中,並且在某種程度上把他們加到了內存當中。
解決方法:
假如你在各個步驟中有從各種表的查詢操作,好好想想是否可以表達你的查詢操作在單條語句中。
6、在一個臨時的笛卡爾積集合中使用 DISTINCT 或 UNION 消除重復項
通過復雜的連接,人們可能會對SQL語句中扮演關鍵角色的所有關系失去概念。特別的,如果這涉及到多列外鍵關系的話,很有可能會忘記在JOIN .. ON子句中增加相關的判斷。這會導致重復的記錄,但或許只是在特殊的情況下。有些開發者因此可能選擇DISTINCT來消除這些重復記錄。從三個方面來說 這是錯誤的:
它(也許)解決了表面症狀但並沒有解決問題。它也有可能無法解決極端情況下的症狀。對具有很多列的龐大的結果集合來說它很慢。DISTINCT要執行ORDER BY操作來消除重復。對龐大的笛卡爾積集合來說它很慢,還是需要載入很多的數據到內存中。解決方法:
根據經驗,如果你獲得了不需要的重復記錄,還是檢查你的JOIN判斷吧。可能在某個地方有一個很難覺察的笛卡爾積集合。
7、不使用MERGE語句
這並不是一個過失,但是可能是缺少知識或者對於強悍的MERGE語句信心不足。一些資料庫理解其它形式的更新插入(UPSERT)語句, 如 MYSQL的重復主鍵更新語句,但是MERGE在資料庫中確是很強大,很重要,以至於大肆擴展SQL標准,例如SQL SERVER。
解決方法:
如果你使用像聯合INSERT和UPDATE或者聯合SELECT .. FOR UPDATE然後在INSERT或UPDATE等更新插入時,請三思。你完全可以使用一個更簡單的MERGE語句來遠離冒險競爭條件。
8、使用聚合函數代替窗口函數(window functions)
在介紹窗口函數之前,在SQL中聚合數據意味著使用GROUP BY語句與聚合函數相映射。在很多情形下都工作得很好,如聚合數據需要濃縮常規數據,那麼就在join子查詢中使用group查詢。
但是在SQL2003中定義了窗口函數,這個在很多主流資料庫都實現了它。窗口函數能夠在結果集上聚合數據,但是卻沒有分組。事實上,每個窗口函數都有自己的、獨立的PARTITION BY語句,這個工具對於顯示報告太好了。
使用窗口函數:
使SQL更易讀(但在子查詢中沒有GROUP BY語句專業)提升性能,像關系資料庫管理系統能夠更容易優化窗口函數解決方法:
當你在子查詢中使用GROUP BY語句時,請再三考慮是否可以使用窗口函數完成。
9、使用內存間接排序
SQL的ORDER BY語句支持很多類型的表達式,包括CASE語句,對於間接排序十分有用。你可能重來不會在Java內存中排序數據,因為你會想:
SQL排序很慢SQL排序辦不到解決方法:
如果你在內存中排序任何SQL數據,請再三考慮,是否不能在資料庫中排序。這對於資料庫分頁數據十分有用。
10、一條一條地插入大量記錄
JDBC「懂」批處理(batch),你應該不會忘了它。不要使用INSERT語句來一條一條的出入成千上萬的記錄,(因為)每次都會創建一個新 的PreparedStatement對象。如果你的所有記錄都插入到同一個表時,那麼就創建一個帶有一條SQL語句以及附帶很多值集合的插入批處理語 句。你可能需要在達到一定量的插入記錄後才提交來保證UNDO日誌瘦小,這依賴於你的資料庫和資料庫設置。
解決方法:
總是使用批處理插入大量數據。
來自:OSChina
譯者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql
⑤ 常見的java異常有哪些都是什麼意思
1、ArithmeticException - 算術運算中,被0除或模除。
2、 - 數組越界訪問。
3、ArrayStoreException - 數據存儲異常,寫數組操作時,對象或數據類型不兼容。
4、ClassCastException - 類型轉換異常。
5、IllegalArgumentException - 方法的參數無效。
6、IllegalThreadStateException - 試圖非法改變線程狀態,比方說試圖啟動一已經運行的線程。
7、NullPointerException - 試圖訪問一空對象的變數、方法或空數組的元素
8、NumberFormatException - 數據格式異常,試圖把一字元串非法轉換成數值(或相反)。
9、SecurityException - 如果Applet試圖執行一被WWW瀏覽器安全設置所禁止的操作。
10、 - 如改變了某一類定義,卻沒有重新編譯其他引用了這個類的對象。如某一成員變數的聲明被從靜態改變為非靜態,但其他引用了這個變數的類卻沒有重新編譯,或者相反。
11、OutOfMemoryException - 內存不足,通常發生於創建對象之時。
12、NoClassDefFoundException - JAVA運行時系統找不到所引用的類。
13、IncompatibleTypeException - 試圖實例化一個介面,Java運行時系統將拋出這個異常。
14、UnsatisfiedLinkException - 如果所需調用的方法是C函數,但Java運行時系統卻無法連接這個函數。
15、InternalException - 系統內部故障所導致的異常情況,可能是因為Java運行時系統本身的原因。如果發現一可重現的InternalException,可以直接給Sun公司發電郵[email protected]。
⑥ java中5種常見的異常(Exception)是哪些
Java.lang.NullPointerException
這個異常大家肯定都經常碰到,異常的解釋是"程序遇上了空指針",簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針,很多情況下是一些剛開始學習編程的朋友常犯的錯誤,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(假如要調用的話)
2. java.lang.ClassNotFoundException
這個異常是很多原本在JB等開發環境中開發的程序員,把JB下的程序包放在WTk下編譯經常出現的問題,異常的解釋是"指定的類不存在",這里主要考慮一下類的名稱和路徑是否正確即可,假如是在JB下做的程序包,一般都是默認加上Package的,所以轉到WTK下後要注重把Package的路徑加上。
3. java.lang.ArithmeticException
這個異常的解釋是"數學運算異常",比如程序中出現了除以零這樣的運算就會出這樣的異常,對這種異常,大家就要好好檢查一下自己程序中涉及到數學運算的地方,公式是不是有不妥了。
4. java.lang.
這個異常相信很多朋友也經常碰到過,異常的解釋是"數組下標越界",現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的范圍,一般來說,顯示(即直接用常數當下標)調用不太輕易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。
5. java.lang.IllegalAccessException
這個異常的解釋是"沒有訪問許可權",當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了Package的情況下要注重這個異常。
⑦ 常見JAVA運行時異常有哪些
1,java.lang.NullPointerException
這個異常的解釋是 "程序遇上了空指針 ",簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。
2,java.lang.ClassNotFoundException
異常的解釋是"指定的類不存在",這里主要考慮一下類的名稱和路徑是否正確即可
3,java.lang.
這個異常的解釋是"數組下標越界",現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的范圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了.
4,java.lang.NoSuchMethodError
方法不存在錯誤。當應用試圖調用某類的某個方法,而該類的定義中沒有該方法的定義時拋出該錯誤。
5,java.lang.IndexOutOfBoundsException
索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。
6,java.lang.NumberFormatException
數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。
7,java.sql.SQLException
Sql語句執行異常
8,java.io.IOException
輸入輸出異常
9,java.lang.IllegalArgumentException
方法參數錯誤
10java.lang.IllegalAccessException
無訪問許可權異常
(7)java開發程序員常犯的4個錯誤擴展閱讀:
Java技術應用領域:
1、Android應用
許多的 Android應用都是Java程序員開發者開發。雖然 Android運用了不同的JVM以及不同的封裝方式,但是代碼還是用Java語言所編寫。相當一部分的手機中都支持JAVA游戲,這就使很多非編程人員都認識了JAVA。
2、在金融業應用的伺服器程序
Java在金融服務業的應用非常廣泛,很多第三方交易系統、銀行、金融機構都選擇用Java開發,因為相對而言,Java較安全 。大型跨國投資銀行用Java來編寫前台和後台的電子交易系統,結算和確認系統,數據處理項目以及其他項目。
3、網站
Java 在電子商務領域以及網站開發領域占據了一定的席位。開發人員可以運用許多不同的框架來創建web項目,SpringMVC,Struts2.0以及frameworks。即使是簡單的 servlet,jsp和以struts為基礎的網站在政府項目中也經常被用到。例如醫療救護、保險、教育、國防以及其他的不同部門網站都是以Java為基礎來開發的。
4、嵌入式領域
Java在嵌入式領域發展空間很大。在這個平台上,只需130KB就能夠使用Java技術(在智能卡或者感測器上)。
5、大數據技術
Hadoop以及其他大數據處理技術很多都是用Java,例如Apache的基於Java的HBase和Accumulo以及 ElasticSearchas。
6、高頻交易的空間
Java平台提高了這個平台的特性和即使編譯,他同時也能夠像 C++ 一樣傳遞數據。正是由於這個原因,Java成為的程序員編寫交易平台的語言,因為雖然性能不比C++,但開發人員可以避開安全性,可移植性和可維護性等問題。
7、科學應用
Java在科學應用中是很好選擇,包括自然語言處理。最主要的原因是因為Java比C++或者其他語言相對其安全性、便攜性、可維護性以及其他高級語言的並發性更好。
⑧ JAVA編程中常見的錯誤有哪些
錯誤就是error,它不同於異常。有時候程序不發生異常是不會出問題的,但有錯誤一定有問題。
常見的錯誤:編寫錯誤,語句錯誤---這兩個編譯器會提醒,也就是常用的eclipse;
邏輯錯誤,這個要看你自己的邏輯思維了。
潛在錯誤,也就是編寫語句邏輯都沒有問題,但jvm檢測有問題,就需要你自己找了,通常潛在錯誤都有邏輯問題。
⑨ 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:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。