本文目錄一覽:
JAVA異常問題
一句兩句說不清楚,給你個鏈接,介紹的比較詳細
log4j.properties 使用
一.參數意義說明
輸出級別的種類
ERROR、WARN、INFO、DEBUG
ERROR 為嚴重錯誤 主要是程序的錯誤
WARN 為一般警告,比如session丟失
INFO 為一般要顯示的信息,比如登錄登出
DEBUG 為程序的調試信息
配置日誌信息輸出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
1.org.apache.log4j.ConsoleAppender(控制台)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
配置日誌信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
控制台選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制台
FileAppender 選項
Threshold=DEBUF:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
RollingFileAppender 選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日誌信息格式中幾個符號所代表的含義:
-X號: X信息輸出時左對齊;
%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c: 輸出日誌信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日誌事件的線程名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個”%”字符
%F: 輸出日誌消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日誌具體信息
%n: 輸出一個回車換行符,Windows平台為”\r\n”,Unix平台為”\n”輸出日誌信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,”-“號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。
二.文件配置Sample1
log4j.rootLogger=DEBUG,A1,R
#log4j.rootLogger=INFO,A1,R
# ConsoleAppender 輸出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
# File 輸出 一天一個文件,輸出路徑可以定製,一般在根路徑下
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=blog_log.txt
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] – %m%n
文件配置Sample2
下面給出的Log4J配置文件實現了輸出到控制台,文件,回滾文件,發送日誌郵件,輸出到數據庫日誌表,自定義標籤等全套功能。
log4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
log4j.addivity.org.apache=true
###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
# Use this layout for LogFactor 5 analysis
########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (‘[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n’)
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
###################
#自定義Appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n
三.高級使用
實驗目的:
1.把FATAL級錯誤寫入2000NT日誌
2. WARN,ERROR,FATAL級錯誤發送email通知管理員
3.其他級別的錯誤直接在後台輸出
實驗步驟:
輸出到2000NT日誌
1.把Log4j壓縮包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目錄下
2.寫配置文件log4j.properties
# 在2000系統日誌輸出
log4j.logger.NTlog=FATAL, A8
# APPENDER A8
log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.A8.Source=JavaTest
log4j.appender.A8.layout=org.apache.log4j.PatternLayout
log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
3.調用代碼:
Logger logger2 = Logger.getLogger(“NTlog”); //要和配置文件中設置的名字相同
logger2.debug(“debug!!!”);
logger2.info(“info!!!”);
logger2.warn(“warn!!!”);
logger2.error(“error!!!”);
//只有這個錯誤才會寫入2000日誌
logger2.fatal(“fatal!!!”);
發送email通知管理員:
1. 首先下載JavaMail和JAF,
在項目中引用mail.jar和activation.jar。
2. 寫配置文件
# 將日誌發送到email
log4j.logger.MailLog=WARN,A5
# APPENDER A5
log4j.appender.A5=org.apache.log4j.net.SMTPAppender
log4j.appender.A5.BufferSize=5
log4j.appender.A5.To=chunjie@263.net
log4j.appender.A5.From=error@error.com
log4j.appender.A5.Subject=ErrorLog
log4j.appender.A5.SMTPHost=smtp.263.net
log4j.appender.A5.layout=org.apache.log4j.PatternLayout
log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
3.調用代碼:
//把日誌發送到mail
Logger logger3 = Logger.getLogger(“MailLog”);
logger3.warn(“warn!!!”);
logger3.error(“error!!!”);
logger3.fatal(“fatal!!!”);
在後台輸出所有類別的錯誤:
1. 寫配置文件
# 在後台輸出
log4j.logger.console=DEBUG, A1
# APPENDER A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
2.調用代碼
Logger logger1 = Logger.getLogger(“console”);
logger1.debug(“debug!!!”);
logger1.info(“info!!!”);
logger1.warn(“warn!!!”);
logger1.error(“error!!!”);
logger1.fatal(“fatal!!!”);
——————————————————————–
全部配置文件:log4j.properties
# 在後台輸出
log4j.logger.console=DEBUG, A1
# APPENDER A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
# 在2000系統日誌輸出
log4j.logger.NTlog=FATAL, A8
# APPENDER A8
log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender
log4j.appender.A8.Source=JavaTest
log4j.appender.A8.layout=org.apache.log4j.PatternLayout
log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
# 將日誌發送到email
log4j.logger.MailLog=WARN,A5
# APPENDER A5
log4j.appender.A5=org.apache.log4j.net.SMTPAppender
log4j.appender.A5.BufferSize=5
log4j.appender.A5.To=chunjie@263.net
log4j.appender.A5.From=error@error.com
log4j.appender.A5.Subject=ErrorLog
log4j.appender.A5.SMTPHost=smtp.263.net
log4j.appender.A5.layout=org.apache.log4j.PatternLayout
log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x – %m%n
全部代碼:Log4jTest.java
/*
* 創建日期 2003-11-13
*/
package edu.bcu.Bean;
import org.apache.log4j.*;
//import org.apache.log4j.nt.*;
//import org.apache.log4j.net.*;
/**
* @author yanxu
*/
public class Log4jTest
{
public static void main(String args[])
{
PropertyConfigurator.configure(“log4j.properties”);
//在後台輸出
Logger logger1 = Logger.getLogger(“console”);
logger1.debug(“debug!!!”);
logger1.info(“info!!!”);
logger1.warn(“warn!!!”);
logger1.error(“error!!!”);
logger1.fatal(“fatal!!!”);
//在NT系統日誌輸出
Logger logger2 = Logger.getLogger(“NTlog”);
//NTEventLogAppender nla = new NTEventLogAppender();
logger2.debug(“debug!!!”);
logger2.info(“info!!!”);
logger2.warn(“warn!!!”);
logger2.error(“error!!!”);
//只有這個錯誤才會寫入2000日誌
logger2.fatal(“fatal!!!”);
//把日誌發送到mail
Logger logger3 = Logger.getLogger(“MailLog”);
//SMTPAppender sa = new SMTPAppender();
logger3.warn(“warn!!!”);
logger3.error(“error!!!”);
logger3.fatal(“fatal!!!”);
}
}
JAVA異常的概念
本文重在Java中異常機制的一些概念。寫本文的目的在於方便我很長時間後若是忘了這些東西可以通過這片文章迅速回憶起來。
1. 異常機制
1.1
異常機制是指當程序出現錯誤後,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤後,程序執行的流程發生改變,程序的控制權轉移到異常處理器。
1.2
傳統的處理異常的辦法是,函數返回一個特殊的結果來表示出現異常(通常這個特殊結果是大家約定俗稱的),調用該函數的程序負責檢查並分析函數返回的結果。這樣做有如下的弊端:例如函數返回-1代表出現異常,但是如果函數確實要返回-1這個正確的值時就會出現混淆;可讀性降低,將程序代碼與處理異常的代碼混爹在一起;由調用函數的程序來分析錯誤,這就要求客戶程序員對庫函數有很深的了解。
1.3 異常處理的流程
1.3.1 遇到錯誤,方法立即結束,並不返回一個值;同時,拋出一個異常對象
1.3.2 調用該方法的程序也不會繼續執行下去,而是搜索一個可以處理該異常的異常處理器,並執行其中的代碼
2 異常的分類
2.1 異常的分類
2.1.1
異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。
2.1.2
Error和RuntimeException及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked)。
2.2 每個類型的異常的特點
2.2.1 Error體系
Error類體系描述了Java運行系統中的內部錯誤以及資源耗盡的情形。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。如果出現這種錯誤,除了儘力使程序安全退出外,在其他方面是無能為力的。所以,在進行程序設計時,應該更關注Exception體系。
2.2.2 Exception體系
Exception體系包括RuntimeException體系和其他非RuntimeException的體系
2.2.2.1 RuntimeException
RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。處理RuntimeException的原則是:如果出現RuntimeException,那麼一定是程序員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。
2.2.2.2 其他(IOException等等)
這類異常一般是外部錯誤,例如試圖從文件尾後讀取數據等,這並不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。
2.3 與C++異常分類的不同
2.3.1
其實,Java中RuntimeException這個類名起的並不恰當,因為任何異常都是運行時出現的。(在編譯時出現的錯誤並不是異常,換句話說,異常就是為了解決程序運行時出現的的錯誤)。
2.3.2
C++中logic_error與Java中的RuntimeException是等價的,而runtime_error與Java中非RuntimeException類型的異常是等價的。
3 異常的使用方法
3.1 聲明方法拋出異常
3.1.1 語法:throws(略)
3.1.2 為什麼要聲明方法拋出異常?
方法是否拋出異常與方法返回值的類型一樣重要。假設方法拋出異常確沒有聲明該方法將拋出異常,那麼客戶程序員可以調用這個方法而且不用編寫處理異常的代碼。那麼,一旦出現異常,那麼這個異常就沒有合適的異常控制器來解決。
3.1.3 為什麼拋出的異常一定是已檢查異常?
RuntimeException與Error可以在任何代碼中產生,它們不需要由程序員顯示的拋出,一旦出現錯誤,那麼相應的異常會被自動拋出。而已檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調用會拋出異常的庫函數(庫函數的異常由庫程序員拋出);客戶程序員自己使用throw語句拋出異常。遇到Error,程序員一般是無能為力的;遇到RuntimeException,那麼一定是程序存在邏輯錯誤,要對程序進行修改(相當於調試的一種方法);只有已檢查異常才是程序員所關心的,程序應該且僅應該拋出或處理已檢查異常。
3.1.4
注意:覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻並不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。
3.2 如何拋出異常
3.2.1 語法:throw(略)
3.2.2 拋出什麼異常?
對於一個異常對象,真正有用的信息時異常的對象類型,而異常對象本身毫無意義。比如一個異常對象的類型是ClassCastException,那麼這個類名就是唯一有用的信息。所以,在選擇拋出什麼異常時,最關鍵的就是選擇異常的類名能夠明確說明異常情況的類。
3.2.3
異常對象通常有兩種構造函數:一種是無參數的構造函數;另一種是帶一個字符串的構造函數,這個字符串將作為這個異常對象除了類型名以外的額外說明。
3.2.4
創建自己的異常:當Java內置的異常都不能明確的說明異常情況的時候,需要創建自己的異常。需要注意的是,唯一有用的就是類型名這個信息,所以不要在異常類的設計上花費精力。
3.3 捕獲異常
如果一個異常沒有被處理,那麼,對於一個非圖形界面的程序而言,該程序會被中止並輸出異常信息;對於一個圖形界面程序,也會輸出異常的信息,但是程序並不中止,而是返回用Ы緱媧�硌�分小?BR 3.3.1 語法:try、catch和finally(略)
控制器模塊必須緊接在try塊後面。若擲出一個異常,異常控制機制會搜尋參數與異常類型相符的第一個控制器隨後它會進入那個catch
從句,並認為異常已得到控制。一旦catch 從句結束對控制器的搜索也會停止。
3.3.1.1 捕獲多個異常(注意語法與捕獲的順序)(略)
3.3.1.2 finally的用法與異常處理流程(略)
3.3.2 異常處理做什麼?
對於Java來說,由於有了垃圾收集,所以異常處理並不需要回收內存。但是依然有一些資源需要程序員來收集,比如文件、網絡連接和圖片等資源。
3.3.3 應該聲明方法拋出異常還是在方法中捕獲異常?
原則:捕捉並處理哪些知道如何處理的異常,而傳遞哪些不知道如何處理的異常
3.3.4 再次拋出異常
3.3.4.1 為什麼要再次拋出異常?
在本級中,只能處理一部分內容,有些處理需要在更高一級的環境中完成,所以應該再次拋出異常。這樣可以使每級的異常處理器處理它能夠處理的異常。
3.3.4.2 異常處理流程
對應與同一try塊的catch塊將被忽略,拋出的異常將進入更高的一級。
4 關於異常的其他問題
4.1 過度使用異常
首先,使用異常很方便,所以程序員一般不再願意編寫處理錯誤的代碼,而僅僅是簡簡單單的拋出一個異常。這樣做是不對的,對於完全已知的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。另外,異常機制的效率很差。
4.2 將異常與普通錯誤區分開
對於普通的完全一致的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。只有外部的不能確定和預知的運行時錯誤才需要使用異常。
4.3 異常對象中包含的信息
一般情況下,異常對象唯一有用的信息就是類型信息。但使用異常帶字符串的構造函數時,這個字符串還可以作為額外的信息。調用異常對象的getMessage()、toString()或者printStackTrace()方法可以分別得到異常對象的額外信息、類名和調用堆棧的信息。並且後一種包含的信息是前一種的超集。
關於Java異常處理的throws
Java學習中常見的異常是什麼?
java程序中幾種常見的異常以及出現此異常的原因
1、java.lang.NullpointerException(空指針異常)
原因:這個異常經常遇到,異常的原因是程序中有空指針,即程序中調用了未經初始化的對象或者是不存在的對象。
經常出現在創建對象,調用數組這些代碼中,比如對象未經初始化,或者圖片創建時的路徑錯誤等等。對數組代碼
中出現空指針,是把數組的初始化和數組元素的初始化搞混淆了。數組的初始化是對數組分配空間,而數組元素的
初始化,是給數組中的元素賦初始值
2、 java.lang.ClassNotFoundException(指定的類不存在)
原因:當試圖將一個String類型數據轉換為指定的數字類型,但該字符串不滿足數值型數據的要求時,就拋出這個異
常。例如將String類型的數據”123456″轉換為數值型數據時,是可以轉換的的。但是如果String類型的數據中包含了
非數字型的字符,如123*56,此時轉換為數值型時就會出現異常。系統就會捕捉到這個異常,並進行處理
3、java.lang.ClassNotFoundExceptio(指定的類不存在)
原因:是因為類的名稱和路徑不正確,通常都是程序試圖通過字符串來加載某個類的時候可能會引發異常。例如:
調用Class.forName()、或者調用ClassLoad的finaSystemClass()、或者是LoadClass()時出現異常
4、java.lang.IndexOutOfBoundsException(數組下標越界異常)
原因:查看程序中調用的數組或者字符串的下標值是不是超出了數組的範圍,一般來說,顯示調用數組不太容易出這
樣的錯,但隱式調用就有可能出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是
事先聲明的,這個時候可以先查看一下數組的length,以免出現這個異常
5、java.lang.IllegalArgumentException(方法的參數錯誤)
例如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的會出現這個異常,如果程
序中存在這個異常,就要去檢查一下方法調用中的參數傳遞或參數值是不是有錯
6、java.lang.IllegalAccessException(沒有訪問權限)
當程序要調用一個類,但當前的方法即沒有對該類的訪問權限便會出現這個異常。如果程序中用了Package的情況下
有可能出現這個異常
7、java.lang.ArithmeticException(數學運算異常)
當數學運算中出現了除以零這樣的運算就會出這樣的異常。
8、java.lang.ClassCastException(數據類型轉換異常)
當試圖將對某個對象強制執行向下轉換,但該對象又不可轉換或又不可轉換為其子類的實例時將出現該異常
9、 java.lang.FileNotFoundException(文件未找到異常)
當程序打開一個不存在的文件來進行讀寫時將會引發該異常。該異常由FileInputStream,FileOutputStream,
RandomAccessFile的構造器聲明拋出,即使被操作的文件存在,但是由於某些原因不可訪問,比如打開一個
只有隻讀權限的文件並向其中寫入數據,以上構造方法依然會引發異常
10、java.lang.ArrayStoreException(數組存儲異常)
當試圖將類型為不兼容類型的對象存入一個Object[]數組時將引發異常
11、java.lang.NoSuchMethodException(方法不存在異常)
當程序試圖通過反射來創建對象,訪問(修改或讀取)某個方法,但是該方法不存在就會引發異常。
12、 java.lang.EOFException(文件已結束異常)
當程序在輸入的過程中遇到文件或流的結尾時,引發異常。因此該異常用於檢查是否達到文件或流的結尾
13、java.lang.InstantiationException(實例化異常)
當試圖通過Class的newInstance()方法創建某個類的實例,但程序無法通過該構造器來創建該對象時引發。
Class對象表示一個抽象類,接口,數組類,基本類型 。該Class表示的類沒有對應的構造器。
14、java.lang.InterruptedException(被中止異常)
當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。
15、java.lang.CloneNotSupportedException (不支持克隆異常)
當沒有實現Cloneable接口或者不支持克隆方法時,調用其clone()方法則拋出該異常
16、java.lang.OutOfMemoryException (內存不足錯誤)
當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤
17、java.lang.NoClassDefFoundException (未找到類定義錯誤)
當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤
常見JAVA運行時異常有哪些?
1、五種常見的異常:ClassCastException(類轉換異常)、IndexOutOfBoundsException(數組越界異常)、NullPointerException(空指針異常)、ArrayStoreException(數據存儲異常,操作數組時類型不一致)、BufferOverflowException(還有IO操作的,緩衝溢出異常)。
2、java運行時異常是可能在java虛擬機正常工作時拋出的異常。java提供了兩種異常機制。一種是運行時異常(RuntimeExepction),一種是檢查式異常(checked execption)。
檢查式異常:我們經常遇到的IO異常及sql異常就屬於檢查式異常。對於這種異常,java編譯器要求我們必須對出現的這些異常進行catch 所以 面對這種異常不管我們是否願意,只能自己去寫一堆catch來捕捉這些異常。
運行時異常:我們可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。
擴展資料:
Java特點
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載和多繼承特徵,並且不使用主文件,免去了預處理程序。
因為Java沒有結構,數組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用,實現自動的無用單元收集,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發上。
參考資料:百度百科-Java
java一般異常指的是什麼
作為一隻敬業的程序員,就是不能接受我的編程出現bug!可見我們對bug是如此的深惡痛覺!它已成為我們職業生涯中的攔路虎,所以今天精心為大家總結一下Java中常見的幾種異常,望大家多多注意。
1、java.lang.NullPointerException(空指針異常)
調用了未經初始化的對象或者是不存在的對象。經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針, 即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化, 依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)。
2、 java.lang.ClassNotFoundException指定的類不存在
這裡主要考慮一下類的名稱和路徑是否正確即可,通常都是程序試圖通過字符串來加載某個類時可能引發異常。比如:調用Class.forName();或者調用ClassLoad的finaSystemClass();或者LoadClass();
3、 java.lang.NumberFormatException字符串轉換為數字異常
當試圖將一個String轉換為指定的數字類型,而該字符串確不滿足數字類型要求的格式時,拋出該異常.如現在講字符型的數據「123456」轉換為數值型數據時,是允許的。但是如果字符型數據中包含了非數字型的字符,如123#56,此時轉換為數值型時就會出現異常。系統就會捕捉到這個異常,並進行處理。
4、java.lang.IndexOutOfBoundsException數組下標越界異常
查看調用的數組或者字符串的下標值是不是超出了數組的範圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變量表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候先查看一下數組的length,以免出現這個異常。
5、java.lang.IllegalArgumentException方法的參數錯誤
比如g.setColor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。
6、java.lang.IllegalAccessException沒有訪問權限
當應用程序要調用一個類,但當前的方法即沒有對該類的訪問權限便會出現這個異常。對程序中用了Package的情況下要注意這個異常。
7、java.lang.ArithmeticException數學運算異常
當算術運算中出現了除以零這樣的運算就會出這樣的異常。
8、java.lang.ClassCastException數據類型轉換異常
當試圖將對某個對象強制執行向下轉型,但該對象又不可轉換又不可轉換為其子類的實例時將引發該異常,如下列代碼。
Object obj = new Integer(0);
String str = obj;
9、 java.lang.FileNotFoundException文件未找到異常
當程序試圖打開一個不存在的文件進行讀寫時將會引發該異常。該異常由FileInputStream,FileOutputStream,RandomAccessFile的構造器聲明拋出,即使被操作的文件存在,但是由於某些原因不可訪問,比如打開一個只讀文件進行寫入,這些構造方法仍然會引發異常。
10、java.lang.ArrayStoreException數組存儲異常
當試圖將類型不兼容類型的對象存入一個Object[]數組時將引發異常,如
Object[] obj = new String[3]
obj[0] = new Integer(0);
11、java.lang.NoSuchMethodException方法不存在異常
當程序試圖通過反射來創建對象,訪問(修改或讀取)某個方法,但是該方法不存在就會引發異常。
12、 java.lang.NoSuchFiledException方法不存在異常
當程序試圖通過反射來創建對象,訪問(修改或讀取)某個filed,但是該filed不存在就會引發異常。
13、 java.lang.EOFException文件已結束異常
當程序在輸入的過程中遇到文件或流的結尾時,引發異常。因此該異常用於檢查是否達到文件或流的結尾
14、java.lang.InstantiationException實例化異常
當試圖通過Class的newInstance()方法創建某個類的實例,但程序無法通過該構造器來創建該對象時引發。Class對象表示一個抽象類,接口,數組類,基本類型 。該Class表示的類沒有對應的構造器。
15、java.lang.InterruptedException被中止異常
當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。
16、java.lang.CloneNotSupportedException 不支持克隆異常
當沒有實現Cloneable接口或者不支持克隆方法時,調用其clone()方法則拋出該異常。
17、java.lang.OutOfMemoryException 內存不足錯誤
當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤。
18、java.lang.NoClassDefFoundException 未找到類定義錯誤
當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤。
違背安全原則異常:SecturityException
操作數據庫異常:SQLException
輸入輸出異常:IOException
通信異常:SocketException
以上便是Java常見的幾種異常,希望各位同學都能編譯出完美的代碼,笑隱竹林中!編碼bug,江湖永無相見!
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/128474.html