日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2异常处理_异常是什么?什么是常用类?

發(fā)布時間:2024/7/23 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2异常处理_异常是什么?什么是常用类? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一節(jié) 異常

1. 異常的概念

? 異常(Exception) 即例外,程序沒有按自己預想的結果運行出來,出現了非正常情況,即“程序得病了”。怎么讓我們寫的程序做出合理的處理,不至于崩潰是我們關注的核心。 異常機制就是當程序出現錯誤,程序如何安全退出的機制。
? 所謂錯誤是指該程序運行的過程中發(fā)生的一些例外事件(如:除0,數組下標越界,所要讀取的文件不存在)。


? Java異常類是Java提供的用于處理程序中錯誤的一種機制。設計良好的程序應該在異常發(fā)生時提供處理這些錯誤的方法,使得程序不會因為異常的發(fā)生而阻斷或發(fā)生不可預見的結果。
? Java程序的執(zhí)行過程中如出現例外事件,可以生成一個異常類對象,該異常對象封裝了例外事件的信息并將被提交給Java運行時系統(tǒng),這個過程稱為拋出( throw )異常
當Java運行時系統(tǒng)接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為捕獲(catch)異常。

2. 異常的分類

? JDK中定義了很多異常類,這些類對應了各種各樣可能出現的例外事件。我開著車走在路上,一頭豬沖在路中間,我剎車,這叫一個 異常。我開著車在路上,發(fā)動機壞了,我停車,這叫錯誤。系統(tǒng)處于不可恢復的崩潰狀態(tài)。發(fā)動機什么時候壞?我們普通司機能管嗎?不能。發(fā)動機什么時候壞是汽車廠發(fā)動機制造商的事。


? Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態(tài)鏈接失敗、虛擬機錯誤等,程序對其不做處理。Error 類層次描述了 Java 運行時系統(tǒng)內部錯誤和資源耗盡錯誤。這類錯誤是我們無法控制的,同時也是非常罕見的錯誤。所以在編程中,不去處理這類錯誤。Error 表明系統(tǒng) JVM 已經處于不可恢復的崩潰狀態(tài)中。我們不需要管他。 如:寫代碼時突然斷電,或者內存溢出。
? Exception:所有異常的父類,其子類對應了各種各樣可能出現的異常事件,一般需要用戶顯示地聲明或捕獲。

Runtime Exception

? Runtime Exception類是 Exception 類的子類,叫做運行時異常,Java 中的所有運行時異常都會直接或者間接地繼承自 RuntimeException 類。
? 這一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性可運行效率影響很大。因此由系統(tǒng)自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理);我們可以通過程序的健壯性來處理,不推薦使用異常處理機制來處理。例如:

NullPointerException: 當程序訪問只有引用沒有對象的成員屬性或成員方法。怎么處理?

ArithmeticException: 除數為 0ClassCastException:多態(tài)時類型轉換錯誤

ArrayIndexOutOfBoundsException: 訪問的元素下表超過數組長度

NumberFormatException: 數字格式異常!

CheckException(**需要處理的)

? Java 中凡是繼承自 Exception,而不繼承自 RuntimeException 類的異常都是非運行時異常,也叫檢查時異常。 如:IOException。 必須要對其進行處理,否則無法通過編譯。這類異常的產生不是程序本身的問題,通常由外界因素造成的。 為了預防這些異常產生時,造成程序的中斷或得到不正確的結果,Java 要求編寫可能產生這類異常的程序代碼時,一定要去做異常的處理。

3. 異常處理

1) 異常產生

? 之所以出現異常,是因為內部拋出了異常對象,這個異常對象的產生分為系統(tǒng)內部產生,或程序員手動拋出異常。

2) 異常捕獲 try catch finally

對于編譯(非運行)時異常( checked exception ),必須要對其進行處理,否則無法通過編譯。處理方式有兩種:

  • 異常捕獲
  • 異常處理

try代碼段包含可能產生例外的代碼

try代碼段后跟有一個或多個catch代碼段

每個catch代碼段聲明其能處理的一種特定類型的異常并提供處理的方法

當異常發(fā)生時,程序會中止當前的流程,根據獲取異常的類型去執(zhí)行相應的catch代碼段

一個 try 后面可以跟多個 catch,但不管多少個, 最多只會有一個catch 塊被執(zhí)行。

finally段的代碼無論是否發(fā)生異常都有執(zhí)行try語句
? try{…}語句制定了一段代碼,該段代碼就是一次捕獲并處理意外的范圍。
? 在執(zhí)行過程中,該段代碼可能會產生并拋出一種或幾種類型的異常對象,它后面的catch語句要分別對這些異常做相應的處理。
? 如果沒有意外產生,所有的catch代碼段都被略過不執(zhí)行。catch語句
? 在catch語句塊中是對異常進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產生的不同類型的異常對象。
? 在catch中聲明的異常對象封裝了異常事件發(fā)生的信息,在catch語句塊中可以使用這個對象的一些方法獲取這些信息。例如:
getMessage()方法,用來得到有關異常事件的信息
printStackTrace()方法,用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內容finally語句
? finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流程轉到程序的其它部分以前,能夠對程序的狀態(tài)作統(tǒng)一的管理。無論try所制定的程序塊中是否拋出異常,finally所指定的代碼都要被執(zhí)行。
通常在finally語句中可以進行資源的清除工作,如:
關閉打開的文件
刪除臨時文件

3) 向外 聲明( 拋出) 異常 throws


? 在產生異常的方法聲明后面寫上 throws 某一個 Exception 類型,如 throws Exception,將異常拋出到外面一層去
異常與重寫聲明
子類聲明的異常范圍不能超出父類的異常范圍

4. 使用自定義的異常

1)概念

? 所謂自定義異常,通常就是定義一個類,去繼承 Exception 類或者它的子類。因為異常必須直接或者間接地繼承自 Exception 類。通常情況下,會直接繼承自 Exception 類,一般不會繼承某個運行時的異常類。

2)步驟

使用自定義異常一般有如下步驟
1、 通過繼承java.lang.Exception類聲明自己的異常類
2、 在方法適當的位置生成自定義異常的實例,并用throw語句拋出
3、 在方法聲明部分用throws語句聲明該方法可能拋出的異常

第三節(jié) 常用類

1. 字符串相關類

1)String
不可變的字符序列
2)StringBuffer
可變字符序列,并且線程安全,但是效率低
3)StringBuilder
可變字符序列,線程 不安全,但是效率高 (一般用他!)

1)String

由于使用特別多,所以有特殊快捷的創(chuàng)建方式通過雙引號 "" 直接創(chuàng)建對象

構造方法

常用方法


還有 valueOf()系列,可以將基本類型的數據轉為字符串,當然一般不用這么麻煩
字符串分割 split()

2)StringBuffer和StringBuilder

這兩個類使用方式類似。一般用于做字符串拼接,刪除,替換,反轉,截取,插入等。
通過查看源碼,認識StringBuffer和StringBuilder的構造方式,以及與String的轉換方式

2. 包裝類?

JAVA并不是純面向對象的語言。Java語言是一個面向對象的語言,但是Java中的基本數據類型卻是不面向對象的。但是我們在實際使用中經常需要將基本數據轉化成對象,便于操作。比如:集合的操作中。例如使用Map對象要操作put()方法時,需要傳入的參數是對象而不是基本數據類型。為了解決這個不足,在設計類時為每個基本數據類型設計了一個對應的類進行代表,這樣八個和基本數據類型對應的類統(tǒng)稱為包裝類(Wrapper Class)。包裝類均位于java.lang包


在這八個類名中,除了Integer和Character類以后,其它六個類的類名和基本數據類型一致,只是類名的第一個字母大寫即可。
對于包裝類說,這些類的用途主要包含兩種:
a、作為和基本數據類型對應的類類型存在,方便涉及到對象的操作。
b、包含每種基本數據類型的相關屬性如最大值、最小值等,以及相關的操作方法(這些操作方法的作用是在基本類型數據、包裝類對象、字符串之間提供轉化!)。
包裝類和基本類型之間存在自動裝箱和自動拆箱操作,所以可以互相方便地切換。

3. 日期類

? 作為與我們息息相關的日期,在開發(fā)中也是很常見的。在程序中,日期的存儲也是個數字,是個長整型的數字。0代表1970年1月1日 00:00:00,而我們處于東八區(qū),所以為1970年1月1日 08:00:0 ,往前推,負數表示之前的時間,往后算正數表示之后的時間。
? 而在日常中,我們表示日期是使用字符串表示,如 1970年1月1日 08:15 、 1970/01/01 08:15 1970-01-01 08:15 等等,因此就涉及到 如何將長整型數與字符串互轉的問題,這也是學習的重點。

1) pre8常用日期相關類

(1) 當前時間

//當前毫秒數long timeNum =System.currentTimeMillis();System.out.println(timeNum);//當前日期Date nowDate =new Date();System.out.println(date);

(2) Date

//0 時間點 東八區(qū) 1970年1月1日 08:00:0 Date date =new Date(0L);System.out.println(date);//指定一個時間Date myDate =new Date(189712329239L);System.out.println(myDate);System.out.println(myDate.getTime()); //獲取長整型數字//修改時間myDate.setTime(0L);System.out.println(myDate);

(3) SimpleDateFormat 日期格式化,在日期格式化的過程中,會用到模板,這個在api中有詳細說明


字符串的表示形式與日期互換,使用日期轉換器SimpleDateFormat ,代碼如下:

public static void main(String[] args) throws ParseException { Date myDate2 =new Date(0L); //字符串的形式 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //轉字符串 String dateStr =dateFormat.format(myDate2); System.out.println(dateStr); //轉成日期 myDate = dateFormat.parse("2020-02-25 11:16:30"); //這里有異常 System.out.println(myDate.getTime());}

注意parse()存在 的異常ParseException

2) 8日期相關的常用api(1) jdk8的日期類

java8提供了更為簡介的,更明了的常用日期類

//今年System.out.println("今年"+Year.now());//6月System.out.println("月份:"+Month.FEBRUARY);//今天不包含時分秒LocalDate today = LocalDate.now();System.out.println("今天:"+today);//此時此刻LocalDateTime now = LocalDateTime.now();System.out.println("現在:"+now);//您的生日LocalDate yourBirthDate = LocalDate.of(1999, Month.JUNE, 15);System.out.println("生日:"+yourBirthDate);//您的學習時間LocalDateTime dateTime = LocalDateTime.of(2020, 2, 25, 12, 30,40);System.out.println("時間:"+dateTime);

(2) jdk8的格式化類

//日期轉換器DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//格式化日期字符串LocalDateTime now = LocalDateTime.now();String nowStr = now.format(formatter); //放入格式器System.out.println(nowStr);String dateStr= "2020-02-25 11:23:04";//轉成日期 LocalDateTime date= LocalDateTime.parse(dateStr, formatter);//放入格式器//獲取日System.out.println(date.getDayOfMonth());

(3) jdk8的間隔類

java8提供了方便計算的間隔相關的類 ,這部分了解即可。

LocalDate today = LocalDate.now();LocalDate birthDate = LocalDate.of(1999, 3, 15);//時期間隔 年月日Period p = Period.between(birthDate, today);System.out.printf(p.getYears()+"年"+p.getMonths()+"d"+p.getDays()+"日");LocalDate startDate = LocalDate.of(1993, 8, 19);LocalDate endDate = LocalDate.of(1994, Month.JANUARY,16);//期量單位 間隔long between =ChronoUnit.YEARS.between(startDate, endDate); System.out.println("兩年之間的差 : " + between); //0 不是1不滿一年不計算在內between =ChronoUnit.MONTHS.between(startDate, endDate); System.out.println("兩月之間的差 : " + between); //4 不是5不滿一月不計算在內 //瞬間 Instant inst1 = Instant.now();Instant inst2 = inst1.minus(Duration.ofSeconds(10));System.out.println("毫秒相隔 : " + Duration.between(inst1, inst2).toMillis());System.out.println("秒相隔 : " + Duration.between(inst1, inst2).getSeconds());

4. Math類

? java.lang.Math 提供了一系列靜態(tài)方法用于科學計算;其方法的參數和返回值類型一般為 double 型。

5.File類

File 代表文件和目錄路徑名的抽象表示形式
File 類的常見構造方法:public File(String pathname)
? 以 pathname 為路徑創(chuàng)建 File 對象,如果 pathname 是相對路徑,則默認的當前路徑在系 統(tǒng)屬性 user.dir 中存儲。 File 的靜態(tài)屬性 separator 存儲了當前系統(tǒng)的路徑分隔符。
常見的方法

public boolean canRead() public boolean canWrite() public boolean exists() public boolean isDirectory() public boolean isFile() public boolean isHidden() public long lastModified() public long length() public String getName() public String getPath()代碼示例import java.io.File;/** * 程序 -->文件? 需要建立聯系? ?* 抽象為 File 類 *? * 1、文件夾 與文件 抽象-->File? ?* 2、分割符:? *? ? ?路徑分隔符:? ; pathSeparator? ? *? 目錄分隔符:? ? ? ? /? ?separator? *? 靜態(tài)常量:1、構建 FileFile(String pathname) File(File parent, String child) File(String parent, String child) */ public class FileDemo01 { /** * @param args */ public static void main(String[] args) { System.out.println(File.pathSeparator); System.out.println(File.separator); //絕對路徑 與文件建立聯系 File src = new File("E:est03.gif"); src = new File("E:/test/03.gif"); src = new File("E:"+File.separator+"test"+File.separator+"03.gif"); System.out.println(src.exists()); //相對路徑 File src2 = new File("E:/test","03.gif"); src2 = new File(new File("E:/test"),"03.gif"); System.out.println(src.exists()); } } import java.io.File; import java.io.FilenameFilter; import java.io.IOException;/* 1、創(chuàng)建對象 new File(完整路徑) →絕對路徑 new File(上級路徑,本名); →相對路徑 new File(上級抽象表示形式, 本名) 2、方法 1)區(qū)分目錄 or 文件isFile() isDirectory() 2)獲取路徑 名稱 getPath() getAbsolutePath() getName() 3)判斷文件是否存在 exists() 4)創(chuàng)建文件 createNewFile() 5)創(chuàng)建目錄 mkdir() →創(chuàng)建一層,確保父路徑存在,如果父路徑不存在,不能創(chuàng)建 mkdirs() →父路徑不存在,全部創(chuàng)建 6)列表listFiles() 7)刪除文件delete() return !new File(dir,name).isDirectory(); } }); for(File temp:subFiles){ System.out.println(temp); } } //delete() src2 = new File(“E:/test”,”03.gif”); boolean flag2 =src2.delete(); System.out.println(flag2); }}


通過 File 對象創(chuàng)建空文件或目錄(在該對象所指的文件或目錄不存在的情況下)。

public boolean createNewFile()throws IOException public boolean delete() public boolean mkdir()mkdirs()/** *遞歸打印文件夾 */ public static void printName(File src){ if(null ==src){ return; } System.out.println(src.getPath()); if(src.isDirectory()){ for(File sub:src.listFiles()){ printName(sub); } } } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的2异常处理_异常是什么?什么是常用类?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。