導航:首頁 > 源碼編譯 > 空指針異常編譯器不報錯

空指針異常編譯器不報錯

發布時間:2022-04-27 06:02:35

java編程菜鳥的一個問題

空指針異常,編譯的時候是不報錯的。但是運行的時候,如果對一個null對象調用方法或者變數,就會出現空指針異常,例如:String a=null;a.replace();就會報空指針異常,看看你報錯的這一行,肯定有類似的情況。

㈡ 編譯器不會強制程序員處理哪種異常

在java編譯器中,是不會強制要求程序員進行處理Runtime異常的。

RuntimeException類及其子類的實例被稱為運行時異常,即UnChecked Exception。

我們較為常見的NullPointerException(空指針異常)和 IndexOutOfBoundsException(數組越界異常),對於這些Runtime異常。

在java編譯器中是不會強制要求程序員進行處理或聲明的(有些IDE可能會給可能出現Runtime異常問題的提示,但不會報錯)。

常見的RunTime異常幾種如下:

NullPointerException - 空指針引用異常。

ClassCastException - 類型強制轉換異常。

IllegalArgumentException - 傳遞非法參數異常。

ArithmeticException - 算術運算異常。

ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常。

IndexOutOfBoundsException - 下標越界異常。

NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常。

NumberFormatException - 數字格式異常。

SecurityException - 安全異常。

UnsupportedOperationException - 不支持的操作異常。

㈢ 空指針錯誤是什麼意思

所謂的空指針異常,就是一個指針是空指針,你還要去操作它,既然它指向的是空對象,它就不能使用這個對象的方法。比如上面的s假如為null,你還要用s的方法,比如s.equals( String x);那麼就會產生空指針異常。

產生空指針異常的原因:

(1) 當一個對象不存在時又調用其方法會產生異常    obj.method() // obj對象不存在 

(2) 當訪問或修改一個對象不存在的欄位時會產生異常    obj.method()  // method方法不存在

(3)空指針異常編譯器不報錯擴展閱讀:

空指針正常工作意義:

在許多語言,這不是一個單獨的轉義序列,而是八進制轉義序列,單個八進制數字為0;因此,『』不能跟隨任何數字0通過7;否則它被解釋為更長的八進制轉義序列的開始。被在使用中發現各種語言的其他轉義序列00,x00,z,或的Unicode表示u0000。

表示空字元的能力並不總是意味著生成的字元串將被正確解釋,因為許多程序將認為null作為字元串的結尾。因此,鍵入它的能力(在未經檢查的用戶輸入的情況下)會創建一個稱為空位元組注入的漏洞,並可能導致安全漏洞。

空字元以逗號表示是^@。在Windows上,可以通過按住Ctrl鍵,然後按@(這通常需要同時按下⇧ Shift並按下數字2鍵)。

參考資料:網路——空指針

㈣ 關於java中空指針異常

空指針異常產生的主要原因如下:
(1)當一個對象不存在時又調用其方法會產生異常obj.method() // obj對象不存在
(2)當訪問或修改一個對象不存在的欄位時會產生異常obj.method() // method方法不存在
(3)字元串變數未初始化;
(4)介面類型的對象沒有用具體的類初始化,比如:
List lt;會報錯
List lt = new ArrayList();則不會報錯了
當一個對象的值為空時,你沒有判斷為空的情況。你可以試著把下面的代碼前加一行代碼:
if(rb!=null && rb!="")
改成:
if(rb==null);
if(rb!==null&&rb!="") 或者if((「」).equals(rb))

空指針的解決辦法:
重點關注報錯發生的所在行,通過空指針異常產生的兩條主要原因診斷具體的錯誤。同時為了避免空指針的發生,最好在做判斷處理時將「null」或者空值放於設定的值之前。

㈤ java空指針異常不報錯

你能再檢查一下你的程序嘛?沒有完整程序我不好說。我的JDK也是1.60的版本,我這里會報NullPointer的錯。

有3種潛在的可能問題:
1. 你是不是在a裡面已經給s賦值了? 雖然b裡面沒有任何復制,但是a繼承了b,a對於s也是可以訪問和賦值的。

2. 是不是這執行這一個if之前你的程序有其它錯誤,就卡住了,所以根本還沒有執行到s.equals("...")這里,所以你也收不到這個exception。你可以試一下加一條else語句,確定這個if條件是卻是執行過的。比如if (...) System.out.println("equal") else System.out.println("not equal");

3. 你是不是你的代碼不小心放到了try {...} catch (Exception e) {...}裡面了,但是你catch過後有沒有人工報錯。

介於你說你的程序執行到一半沒有繼續執行,很有可能是2, 3兩種可能。第一種可能不大。最後就是你執行如果是實用IDE執行,是不是你的IDE在檢測到錯誤的時候自動停止debug也不報錯了。

㈥ JAVA編譯正常,但是運行出現空指針異常,有大神知道是什麼問題嗎

㈦ java中的空指針異常怎麼解決

原文:https://www.hu.com/question

你這個問題的解決

問題定位:

在堆棧異常信息的第一行就可以定位到是哪裡出了空指針,倘若這里不是你寫的類,可以往下翻一下,找到你寫的類,就是這里出現的空指針。

問題解決:

對一個空對象調用裡面的方法或者屬性的時候會報空指針,檢查這個對象為什麼是空即可。

Java 空指針異常的若干解決方案

Java 中任何對象都有可能為空,當我們調用空對象的方法時就會拋出 NullPointerException 空指針異常,這是一種非常常見的錯誤類型。我們可以使用若干種方法來避免產生這類異常,使得我們的代碼更為健壯。本文將列舉這些解決方案,包括傳統的空值檢測、編程規范、以及使用現代 Java 語言引入的各類工具來作為輔助。

運行時檢測

最顯而易見的方法就是使用 if (obj == null) 來對所有需要用到的對象來進行檢測,包括函數參數、返回值、以及類實例的成員變數。當你檢測到 null 值時,可以選擇拋出更具針對性的異常類型,如 IllegalArgumentException,並添加消息內容。我們可以使用一些庫函數來簡化代碼,如 Java 7 開始提供的 Objects#requireNonNull 方法:

public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}

Guava 的 Preconditions 類中也提供了一系列用於檢測參數合法性的工具函數,其中就包含空值檢測:

public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}

我們還可以使用 Lombok 來生成空值檢測代碼,並拋出帶有提示信息的空指針異常:

public void testLombok(@NonNull Object arg) {
arg.toString();

生成的代碼如下:

public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}

這個註解還可以用在類實例的成員變數上,所有的賦值操作會自動進行空值檢測。

編程規范

·通過遵守某些編程規范,也可以從一定程度上減少空指針異常的發生。

使用那些已經對 null 值做過判斷的方法,如 String#equals、String#valueOf、以及三方庫中用來判斷字元串和集合是否為空的函數:

if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}

if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"

// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);

·如果函數的某個參數可以接收 null 值,考慮改寫成兩個函數,使用不同的函數簽名,這樣就可以強制要求每個參數都不為空了:

public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}

public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}

·如果函數的返回值是集合類型,當結果為空時,不要返回 null 值,而是返回一個空的集合;如果返回值類型是對象,則可以選擇拋出異常。Spring JdbcTemplate 正是使用了這種處理方式:

// 當查詢結果為空時,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");

// 若找不到該條記錄,則拋出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);

// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}

靜態代碼分析

Java 語言有許多靜態代碼分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它們可以幫助程序員檢測出編譯期的錯誤。結合 @Nullable 和 @Nonnull 等註解,我們就可以在程序運行之前發現可能拋出空指針異常的代碼。

但是,空值檢測註解還沒有得到標准化。雖然 2006 年 9 月社區提出了 JSR 305 規范,但它長期處於擱置狀態。很多第三方庫提供了類似的註解,且得到了不同工具的支持,其中使用較多的有:

㈧ 空指針異常,控制台沒有報錯,不知道什麼原因

應該是後台程序查詢相應顯示數據的時候出錯,此時數據還在後台處理,頁面等待後台的數據進行顯示,所以頁面不顯示並且不報錯,你根據myEclipse控制台的指針異常信息進行調試問題應該能解決。

㈨ 空指針異常

username.trim();這邊的username如果為空就會報空指針,在這前應加一句if(username!=null)
具體如下:String username = request.getParameter("username");
String password = request.getParameter("password");

List<USER> tempUserList;
try {
if(username!=null){
username = username.trim();
tempUserList = userService.findEntityByHql(" username = '" + username + "'" );//頁面報空指針
USER baseUser = tempUserList.get(0);
if(baseUser.getPassWord().equals(password)){
return "gly";
}
}
} catch (Exception e) {
e.printStackTrace();
}

㈩ java.lang.NullPointerException 是什麼意思啊 該如何處理

這個是空指針異常,空指針的解決辦法:重點關注報錯發生的所在行,通過空指針異常產生的兩條主要原因診斷具體的錯誤。同時為了避免空指針的發生,最好在做判斷處理時將「null」或者空值放於設定的值之前。

在Java中一般報空指針異常的原因有以下幾種:

1、字元串變數未初始化;

2、介面類型的對象沒有用具體的類初始化,比如:

List lt;會報錯

List lt = new ArrayList();則不會報錯了

3、當一個對象的值為空時,你沒有判斷為空的情況。你可以試著把下面的代碼前加一行代碼:
if(rb!=null && rb!="")

改成:

if(rb==null);

if(rb!==null&&rb!="") 或者if((「」).equals(rb))

(10)空指針異常編譯器不報錯擴展閱讀:

空指針異常的報錯

root cause

java.lang.NullPointerException

Dao.BookInfor.ImFromClassification(BookInfor.java:31

org.apache.jsp.front.home_jsp._jspService(home_jsp.java:120)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)

javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

閱讀全文

與空指針異常編譯器不報錯相關的資料

熱點內容
ug命令視頻大全 瀏覽:610
箱子裝貨物最小容量編程 瀏覽:98
cad2014教程pdf 瀏覽:200
怎麼遍歷伺服器同一類型的文件 瀏覽:436
惠普戰66畫圖編程 瀏覽:805
java面向對象作業 瀏覽:570
cad插件製作加密狗 瀏覽:923
cmd命令對話框 瀏覽:290
安卓應用怎麼常駐 瀏覽:677
安卓手機怎麼群發小費才不會被鎖 瀏覽:741
相機文件夾設置 瀏覽:856
centos7php怎麼用 瀏覽:119
查看linux操作系統版本的命令 瀏覽:383
收支預演算法怎麼做 瀏覽:876
模板如何上傳到伺服器 瀏覽:372
如何同步安卓信息到新ipad 瀏覽:365
騰訊雲輕量伺服器流量警告 瀏覽:504
u盤備份linux 瀏覽:121
高壓縮比活塞 瀏覽:92
壓縮彈簧標准件 瀏覽:26