開發過程中--常見錯誤解決

1 字符串越界錯誤 java.lang.StringIndexOutOfBoundsException

注意: 對字符串進行截取(substring,charAt)、轉換爲字節數組(getBytes),字符數組轉換爲字符串
(valueOf)操作時,先對操作字符串對象的存在性(是否爲空)及長度進行檢查後,再進行
操作。

2. 數據插入異常 ,GenericJDBCException: could not insert

a. 沒有建表

b.插入數據執行時沒有commit 提交語句;

3 類定義未找到錯誤 java.lang.NoClassDefFoundError

a.一般重新編譯或找對應包或類

4 解決 java.lang.StackOverflowError 錯誤。

錯誤原因:,JVM 會開闢一塊內存空間去儲存程序進行時的某些信息,當程序運行時需
要儲存的信息超過了分配的空間,就會出現那樣的問題.比如死循環,遞歸次數過多

a.從程序代碼優化入手,檢查是否有死循環,遞歸等

5 在開發框架整合時:java.lang.NoSuchMethodError

a.一般主要是從jar包衝突入手,根據提示的具體錯誤信息定位jar包

6.Java 錯誤 java.lang.Error

a.對系統所訪問外部資源,未執行關閉操作,導致外部資源大量浪費,最終可能導致
系統無法正常運行;
b. 對系統所訪問的外部資源關閉次數太多,外部系統無法正常處理;
c. 系統訪問的外部資源出現異常情況

7. Java 調用 DLL 錯誤:Exceptioninthread"main"java.lang.UnsatisfiedLinkError 解決

Exceptioninthread"main"java.lang.UnsatisfiedLinkError,編譯沒有問題,運行出現問題,
如果錯誤 Exceptioninthread"main"java.lang.UnsatisfiedLinkError 後面是某一個類名的話,很可
能是 java 程序調用了有關 dll 文件而沒有找到這樣的 dll 文件造成的。

一般把需要的 dll 文件放到和該 java 類相同的目錄下即可。

8.java.lang.OutOfMemoryError 異常處理總結

a 內存中加載的數據量過於龐大,如一次從數據庫取出過多數據。
b集合類中有對對象的引用,使用完後未清空,使得 JVM 不能回收。
c代碼中存在死循環或循環產生過多重複的對象實體。
d 使用的第三方軟件中的 BUG。
e啓動參數內存值設定的過小

9.如果 JSP 頁面跳轉時出現下邊的錯誤信息

The request sent by the client was syntactically incorrect (Invalid path
/web/shoppingCart was requested)

檢查 struts-config 的action的配置

10 部署 Struts 時,出現如下錯誤信息

HTTP Status 404 - Servlet action is not available
type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not
available.

a.web.xml 文件中未配置 ActionServlet。
b. struts-config.xml 文件未配置你要訪問的 Action。
c. 你的 jsp 文件 form 標記中 action 屬性的路徑名稱錯誤。
d 具體情況具體看

11.JSON.parseObject(jsonObj,Map.class)類型轉換異常

    2019-05-31 16:12:26.692 [http-nio-1601-exec-2] ERROR at com.wb.test.controller.UserController

    java.lang.Integer cannot be cast to java.lang.Long
    java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
String jsonStr = “{\”123001\”:1201,\”109131\”:1301}”;
Map<String,Long> map = JSONObject.parseObject(jsonStr, Map.class);
Long uid = map.get(“123001”);
System.out.println(uid);

代碼報錯 原因很明顯,類型轉換異常:分析原因:

將json字符串轉爲了Map類型而未指定目標Map中的泛型,此時Map中的類型可以寫任何類型,編譯的時候都不會被編譯器識別出來。導致轉換之後的Map類中並沒有確定的泛型規定,所以在運行過程中使用map.get()方法獲取到的value如果在int範圍內,會自動當做Integer類型處理,如果用Long類型去接收,相當於將Integer轉爲Long,而由低精度向高精度強轉就會拋出類型轉換異常

a.在使用JSONObject.parseObject()轉換的時候,指定目標Map中的泛型,例如

Map<String,Long> map = JSONObject.parseObject(jsonStr, new TypeReference<Map<String,Long>>(){});

b.先將獲取到的數字類型的value轉換爲Number類型,然後轉爲Long類型,因爲Number爲Integer和Long的父類,可以直接轉換

    String jsonStr = “{\”123001\”:1201,\”109131\”:1301}”;
    Map<String,Long> map = JSONObject.parseObject(jsonStr, Map.class);

    Long value = ((Number)map.get(“123001”)).longValue();

    System.out.println(value);

 

 

 

不定時更新。。。

人世間,流浪人歸,亦若迴流川。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章