執行中的問題:執行Hello時的問題
如果您看到以下錯誤消息:
“java”不被識別為內部或外部命令,...
或者
java:找不到命令。
那麽您可能沒有安裝java,或者沒有在環境變量中設置路徑path java\bin directory。請檢查您的java安裝和環境變量的正確設置。
如果您看到:
線程“main”中出現異常Java . lang . noclassdeffounderror:hello
(錯名:妳好)...
那妳很可能沒註意大小寫或者把名字裏的字母打錯了。比如:
java妳好
只需鍵入正確的命令並重新運行。
如果您看到:
線程“main”中出現異常Java . lang . noclassdeffounderror:Hello
/類別
然後,您需要考慮是否刪除。名字中的類部分。
2.分析java.lang.NoClassDefFoundError異常的具體情況。
上面調試第壹個例程就出現了這個問題,但是如果我們輸入了正確的名稱,仍然提示這樣的問題怎麽辦?
JDK1.4.0版本安裝,JAVA_HOME,PATH,CLASSPATH都設置好了。如下
JAVA_HOME=/home/jdk
class path = $ JAVA _ HOME/JRE/lib/tools . jar:$ JAVA _ HOME/lib/dt . jar:$ JAVA _ HOME/JRE/lib/:$ JAVA _ HOME/lib
PATH=$PATH:$JAVA_HOME/bin
用JAVAC命令生成hello.class,當使用java hello時,仍然提示:
線程“main”中出現異常Java . lang . noclassdeffounderror:XXX(錯誤名稱:
XXX)
解決方案提示:
(1),將(當前目錄)添加到類路徑中,或者在類定義前添加public。
(2)在path環境變量中設置的路徑中是否有另壹個java.exe文件?默認情況下,會執行該目錄中的java.exe。雖然版本與JDK的java.exe壹致,但在此目錄下執行時會出錯。
方法:
安裝jdk時,應該刪除winnt下的java.exe,以確保默認調用的java.exe是位於JDK bin目錄中的java.exe。
(3)如果使用數據包。
然後檢查您正在編譯的java文件中是否不包含指定的包。
3、通常的異常捕獲處理:
JAVA中幾種基本異常的簡要描述:
當異常算術條件發生時,發生算術異常。
當應用程序試圖使用所需的對象時,會生成NullPointerException。
當ArrayIndexOutOfBoundsException數組的下標越界時發生。
當程序試圖在數組中存儲錯誤類型的數據時,會生成ArrayStoreException。
當FileNotFoundException嘗試訪問的文件不存在時發生。
IOException是由壹般I/O故障引起的,例如文件讀取故障。
將字符串轉換為數字數據失敗時,會生成NumberFormatException。
內存不足時會生成OutOfMemoryException。
當小程序試圖執行瀏覽器的安全設置不允許的操作時,會發生安全異常。
StackOverflowException是在系統的堆棧空間用完時產生的。
當程序試圖訪問字符串中不存在的字符位置時,會生成StringIndexoutofBoundsException。
以上異常基本都是我們在JAVA中可能遇到的異常。
Throwable類有兩個直接子類:Error和Exception。異常類對象是Java程序處理或丟棄的對象。Java提供了兩種異常模式,異常(運行時異常)和異常(檢查異常。所有checkedexceptions都繼承自java.lang.Exception,而運行時異常則繼承自java.lang.RuntimeException或java.lang.Error(其實java.lang.RuntimeException的上層也是java.lang.Exception)。它有對應於不同類型異常的各種子類。其中類RuntimeException表示由Java虛擬機在運行時生成的異常。
從程序的運行機制上看,運行時異常和被檢查異常是不同的,從邏輯上看,運行時異常和被檢查異常在使用目的上也是不同的。
壹般來說,檢查異常意味著必須處理這個異常,這意味著程序員應該已經知道他可能會收到壹個異常(因為他必須嘗試捕獲它),所以程序員應該能夠不同地處理這些不同的檢查異常。
運行時異常通常意味著程序中的錯誤,這將導致程序員無法處理它,並導致程序繼續執行。
Java的可控異常處理是通過五個關鍵字實現的:try、catch、throw、throws和finally。JB的在線幫助對這些關鍵字的解釋如下:
拋出:列出壹個方法可能拋出的異常。
Throw:將方法的控制權轉移給異常處理程序。
Try:打開異常處理語句。
Catch:捕獲異常。
最後:在終止程序之前運行它的代碼。
try語句
try語句用大括號{}指定了壹段代碼,這可能會丟棄壹個或多個異常。
catch語句
catch語句的參數類似於方法的聲明,包括異常類型和異常對象。異常類型必須是Throwable類的子類,指示catch語句處理的異常類型。異常對象由運行時系統在try指定的代碼塊中生成並捕獲,花括號包含對象的處理,其中可以調用對象的方法。
可以有多個catch語句,它們處理不同類的異常。Java運行時系統從上到下檢測每個catch語句處理的異常類型,直到找到具有匹配類型的catch語句。這裏的類型匹配是指catch處理的異常類型與生成的異常對象或其父類的類型完全相同,所以catch語句的順序應該是從特殊到壹般。
也可以使用catch語句處理多個異常類型,這種情況下其異常類型參數應該是這些異常類型的父類,catch語句的異常處理類型應該根據編程中的具體情況來選擇。
最終聲明
在try定義的代碼中,當壹個異常被丟棄時,後續的代碼將不會被執行。您可以通過finally語句指定壹段代碼。無論異常在try指定的程序塊中是否被丟棄,catch語句的異常類型是否與被丟棄異常的類型壹致,finally指定的代碼都會被執行,這提供了統壹的退出。通常,可以在finally語句中清除資源。例如關閉打開的文件。無論異常是否發生,finally中的語句都將被執行。
throws語句
Throws總是出現在函數頭中,表示成員函數可能拋出的各種異常。對於Exception的大多數子類,Java編譯器會強迫妳聲明成員函數中拋出的異常類型。如果異常類型是Error或RuntimeException或它們的子類,則此規則無效,因為這不是程序的正常部分所期望的。如果要顯式拋出RuntimeException,必須用throws語句聲明其類型。
Throw語句
Throw總是出現在函數體中拋出異常。程序會在throw語句後立即終止,後面的語句無法執行。然後在所有包含它的try塊中(可能在上層調用函數中),它會從裏到外尋找帶有匹配catch子句的try塊。所有方法都使用“throw”語句來拋出異常。Throw語句需要壹個單獨的throwable對象,它是任何Throwable類的子類。
例如:
布爾testEx()拋出異常{
boolean ret = true
嘗試
{
ret = testex 1();
}
捕捉(例外e)
{
System.out.println("testEx,catch exception ");
ret = false
扔e;
}
最後
{
System.out.println("testEx,最終;返回值= "+ret);
返回ret
}
}
4.JAVA錯誤:java.lang .錯誤
原因:
1.系統訪問的外部資源沒有關閉,造成外部資源的大量浪費,最終可能導致系統無法正常運行;
2.系統訪問的外部資源關閉次數過多,外部系統無法正常處理;
3.系統訪問的外部資源異常。
解決方案:
1.在訪問外部資源之前,首先檢查資源(如數據庫)是否可以正常連接或運行。
2.當訪問外部資源時,如果建立了連接,就必須關閉它,而且只能關閉壹次。
3.盡量在同壹個操作中享受外部資源,以減少這個操作對資源的消耗,提高程序的執行效率。
5.空指針錯誤:java.lang.NullPointerException
使用基本的JAVA數據類型,變量的值已經是默認值。如果沒有正常賦值,程序就無法編譯。因此,使用基本的JAVA數據類型(double、float、Boolean、char、int、long)壹般不會導致空指針異常。因此,空指針異常主要與對象的操作有關。
下面首先列出了可能出現空指針異常的幾種情況以及相應的解決方案:
無論對象是否為空,都直接開始使用它。
(JSP)代碼片段1:
out . println(request . getparameter("用戶名"));
描述:
代碼段1的作用很簡單,就是輸出用戶輸入的表字段“用戶名”的值。
描述:
上面的說法似乎找不到什麽語法錯誤,大多數情況下也遇不到什麽問題。但是,如果用戶在輸入數據時沒有提供表單字段“用戶名”的值,或者通過某種手段直接繞過表單,則request.getParameter(“用戶名”)的值為null(不是空字符串,而是空對象null。),out對象的println方法不能直接操作空對象,所以代碼段1所在的JSP頁面會拋出“java.lang.NullPointerException”異常。
即使對象可能為空,也會調用java.lang.Object的壹些方法或者對象本身,比如toString()、equals(Object obj)等等。
(JSP)代碼片段2:
string userName = request . getparameter(" userName ");
If (userName.equals("root "))
{....}
描述:
代碼段2的作用是檢測用戶提供的用戶名,如果是用戶名為“root”的用戶,就會執行壹些特殊的操作。
描述:
在代碼段2中,如果用戶沒有提供表單字段“username”的值,則字符串對象userName為空,因此無法直接將壹個空對象與另壹個對象進行比較。同樣,代碼段2所在的JSP頁面也會拋出(java.lang.NullPointerException)空指針錯誤。
(JSP)代碼片段3:
string userName = session . get attribute(" session . userName ")。toString();
描述:
代碼段3的功能是從會話中提取session.userName的值,並將該值賦給字符串對象userName。
描述:
壹般來說,如果用戶已經有過對話,就不會有問題;但如果此時重啟應用服務器,用戶沒有再次登錄,(也可能是用戶關閉了瀏覽器,但仍然打開了原來的頁面。)那麽,這個時候session的值就無效了,session中session.username的值就為空。直接對空對象執行toString()操作會導致系統拋出java.lang.NullPointerException。
解決方案:
為了保證要操作或引用的對象不為空,如果我們要操作或引用壹個對象,首先要檢查對象是否已經實例化,不為空;並在對象為空時將處理添加到系統中。
比如String對象用來保存用戶提交的結果;如果涉及到壹個對象的操作,首先檢查它是否為空,在檢查對象是否為空後,再選擇以下任意壹種處理方式:
處理方法1)當檢查到對象為空時,將對象值設置為空字符串或默認值;
處理方法2)當檢測到對象為空時,根本不執行操作,直接跳轉到其他處理。
處理3)當檢查對象為空時,提示用戶操作有錯誤。
以上述方式重寫代碼段2,得到:
模式1:
string userName = request . getparameter(" userName ");
//當變量值為空時,會轉換成默認的空字符串。
If(用戶名==空)
用戶名= " ";
If (userName.equals("root "))
{..........}
模式2:
string userName = request . getparameter(" userName ");
//當變量值為空時,將轉換為默認的空字符串,不進行相關操作。
If (usreName!=空)
{
If (userName.equals("root "))
{..........}
}
模式3:
string userName = request . getparameter(" userName ");
//當變量值為空時,將轉換為默認的空字符串,不進行相關操作。
If (usreName == null)
{
//提示用戶輸入信息為空。
}
事實上,上面提供的三種處理方法也適用於其他異常處理:
異常處理模式1)檢測異常的發生,並將對象值設置為空字符串或默認值;
異常處理方法2)檢測到異常時,根本不執行操作,直接跳轉到其他處理。
異常處理方法3)檢測到異常時,提示用戶操作有錯誤。
Struts常見錯誤摘要
默認情況下使用以下文件名,如struts-config.xml和application resources . properties。如果使用多個模塊或指定不同的資源文件名,這些名稱應該相應地修改。
1,“在屬性關鍵字XXX下找不到bean”
struts-config.xml中定義了壹個ActionForm,但是type屬性指定的類不存在,type屬性的值應該是Form類的全名。或者,在Action的定義中,name或attribute屬性指定的ActionForm不存在。
2、“在任何範圍內都找不到bean XXX”
在操作中,壹些對象將被請求。setattribute(),然後這些對象將被獲取並顯示在重定向的jsp文件中(使用tag或request.setAttribute()方法)。這個異常意味著jsp想要獲取壹個對象,但是在前面的操作中沒有在請求(session或servletContext)中設置該對象。
可能名字不對。請檢查jsp中的標簽壹般是name屬性或者getAttribute()方法的參數值。或者動作邏輯有問題,沒有執行setAttribute()方法就先轉了。
還有壹種可能,純粹是jsp文件問題,比如
3、“缺少密鑰“XXX”的消息”
缺少所需的資源,請檢查應用程序資源中的jsp文件中是否有所需的資源。屬性文件,例如:
& ltbean:message key = " msg . name . prompt "/& gt;
這行代碼會尋找msg.name.prompt資源,如果這個資源不在application resources . properties中就會出現這個異常,在使用多個模塊的時候,要註意指定要在模塊的struts-config-xxx.xml中使用的資源文件的名稱,否則當然找不到資源,這也是壹個容易犯的錯誤。
4、“bean老師的屬性XXX沒有getter方法”
這個異常消息非常清楚地表明jsp應該獲取bean的屬性,但是這個bean沒有這個屬性。您應該檢查jsp中標記的property屬性的值。例如,下面代碼中的cade應改為code:
& ltbean:write name = " teacher " property = " cade " filter = " true "/& gt;
5、“找不到ActionMappings或ActionFormBeans集合”
待解。
6、“無法檢索操作XXX的映射”
在。jsp
7、HTTP狀態404 - /xxx/xxx.jsp
Forward的path屬性指向的jsp頁面不存在。請檢查路徑和模塊。對於同壹模塊中的操作回合,路徑不應包含模塊名稱。模塊之間轉,記得用contextRelative="true "。
8.沒有異常信息,顯示空白頁。
可能是操作中使用的轉發名稱與struts-config.xml中定義的轉發名稱不匹配
元素類型“XXX”必須以匹配的結束標記“XXX”結束。
這是struts-config.xml文件的格式錯誤。仔細檢查它是否是壹個格式良好的xml文件。關於xml文件的格式,這裏就不贅述了。
10,“servlet操作的Servlet.init()引發了異常”
通常,這種異常會顯示有關ActionServlet的異常堆棧信息,該信息指示異常出現在哪壹行代碼中。我曾經遇到過以下提示:
java.lang.NullPointerException
位於org . Apache . struts . action . action servlet . parsemoduleconfigfile(action servlet . Java:1003)
位於org . Apache . struts . action . action servlet . initmoduleconfig(action servlet . Java:955)
要解決這個問題,首先下載struts的源碼包,然後在ActionServlet.java的1003行插入壹個斷點,對變量進行監控。很可惜我把struts-config.xml文件弄丟了,所以出現了上面的異常,應該是和CVS同步的時候不小心刪除了。
11,“沒有為驗證程序定義資源”
這是在使用驗證器插件時可能發生的異常。這時妳要檢查validation.xml文件,看看裏面用到的資源是否真的定義好了,表單的名字是否正確等等。