国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java--異常(Exception)

2019-11-06 06:49:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、異常的概述和分類

1、異常的概述:異常就是java程序在運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤。

2、異常的分類

(1)Error:服務(wù)器宕機(jī),數(shù)據(jù)庫(kù)崩潰等

(2)Exception

3、異常的繼承體系

Throwable

Error

Exception

 RuntimeException

二、JVM默認(rèn)是如何處理異常的

main函數(shù)收到這個(gè)問(wèn)題時(shí),有兩種處理方式:

自己將該問(wèn)題處理,然后繼續(xù)運(yùn)行

自己沒(méi)有針對(duì)的處理方式,只有交給調(diào)用main的jvm來(lái)處理

jvm有一個(gè)默認(rèn)的異常處理機(jī)制,就將該異常進(jìn)行處理.

并將該異常的名稱,異常的信息.異常出現(xiàn)的位置打印在了控制臺(tái)上,同時(shí)將程序停止運(yùn)行

三、try...catch的方式處理異常

異常處理的兩種方式

1、try…catch…finally

try catch

try catch finally

try finally 

2、throws

try...catch處理異常的基本格式

try…catch…finally

try:用來(lái)檢測(cè)異常

catch:用來(lái)捕獲異常

finally:釋放資源

try后面如果跟多個(gè)catch,那么小的異常放在前面,大的異常放在后面,根據(jù)多態(tài)原理,如果大的放                  在前面,就會(huì)將所有子類對(duì)象接收,后面的catch就沒(méi)有意義了;

Android開(kāi)發(fā)處理異常:try{}catch(Exception e){}

JavaEE服務(wù)端開(kāi)發(fā)處理異常:一般都是底層開(kāi)發(fā),從底層向上拋,如果使用try...catch會(huì)隱藏異常,

帶來(lái)巨大隱患,如果異常全部爆發(fā)那后果不堪設(shè)想

四、編譯期異常和運(yùn)行期異常的區(qū)別

Java中的異常被分為兩大類:編譯時(shí)異常和運(yùn)行時(shí)異常。

所有的RuntimeException類及其子類的實(shí)例被稱為運(yùn)行時(shí)異常,其他的異常就是編譯時(shí)異常

編譯時(shí)異常

Java程序必須顯示處理,否則程序就會(huì)發(fā)生錯(cuò)誤,無(wú)法通過(guò)編譯

運(yùn)行時(shí)異常

無(wú)需顯示處理,也可以和編譯時(shí)異常一樣處理

五、Throwable的幾個(gè)常見(jiàn)方法

1、getMessage()

獲取異常信息,返回字符串。

2、toString()

獲取異常類名和異常信息,返回字符串。

3、PRintStackTrace()

獲取異常類名和異常信息,以及異常出現(xiàn)在程序中的位置。返回值void。

六、throws的方式處理異常

定義功能方法時(shí),需要把出現(xiàn)的問(wèn)題暴露出來(lái)讓調(diào)用者去處理。

那么就通過(guò)throws在方法上標(biāo)識(shí)。

七、throw的概述以及和throws的區(qū)別

throw的概述

在功能方法內(nèi)部出現(xiàn)某種情況,程序不能繼續(xù)運(yùn)行,需要進(jìn)行跳轉(zhuǎn)時(shí),就用throw把異常對(duì)象拋出。

throws和throw的區(qū)別

throws

用在方法聲明后面,跟的是異常類名

可以跟多個(gè)異常類名,用逗號(hào)隔開(kāi)

表示拋出異常,由該方法的調(diào)用者來(lái)處理

throw

用在方法體內(nèi),跟的是異常對(duì)象名

只能拋出一個(gè)異常對(duì)象名

表示拋出異常,由方法體內(nèi)的語(yǔ)句處理

八、finally關(guān)鍵字的特點(diǎn)及作用

1、finally的特點(diǎn)

被finally控制的語(yǔ)句體一定會(huì)執(zhí)行

特殊情況:在執(zhí)行到finally之前jvm退出了(比如System.exit(0))

2、finally的作用

用于釋放資源,在IO流操作和數(shù)據(jù)庫(kù)操作中會(huì)見(jiàn)到

3、final,finally,finalize區(qū)別

(1)final可以修飾類:不能被繼承

修飾方法:不能被重寫(xiě)

修飾變量:只能賦值一次

(2)finally是try語(yǔ)句中的一個(gè)語(yǔ)句體,不能被單獨(dú)使用,用來(lái)釋放資源

(3)finalize是Object一個(gè)方法,當(dāng)垃圾回收期確定不存在該對(duì)象的更多引用時(shí),由對(duì)象的垃圾回收器調(diào)用此方法

九、異常注意事項(xiàng)

(1)子類重寫(xiě)父類方法時(shí),子類的方法必須拋出相同的異常或父類異常的子類

(2)如果父類拋出了多個(gè)異常,子類重寫(xiě)父類時(shí),只能拋出相同的異常或者是他的子集,子類不能拋出父類沒(méi)有的異常

(3)如果被重寫(xiě)的方法沒(méi)有異常拋出,那么子類的方法絕對(duì)不可以拋出異常,如果子類方法內(nèi)有異常發(fā)生,那么子類只能try,不能throws

如何使用異常處理

原則:如果該功能內(nèi)部可以將問(wèn)題處理,用try,如果處理不了,交由調(diào)用者處理,這是用throws

區(qū)別:

后續(xù)程序需要繼續(xù)運(yùn)行就try

后續(xù)程序不需要繼續(xù)運(yùn)行就throws

如果JDK沒(méi)有提供對(duì)應(yīng)的異常,需要自定義異常

public class ExceptionClass {	public static void main(String[] args) throws AgeOutException {		/*		 *     一、異常的概述和分類					1、異常的概述:異常就是Java程序在運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤。					2、異常的分類						(1)Error:服務(wù)器宕機(jī),數(shù)據(jù)庫(kù)崩潰等						(2)Exception					3、異常的繼承體系					  Throwable						Error							Exception							RuntimeException		       二、JVM默認(rèn)是如何處理異常的					main函數(shù)收到這個(gè)問(wèn)題時(shí),有兩種處理方式:						自己將該問(wèn)題處理,然后繼續(xù)運(yùn)行						自己沒(méi)有針對(duì)的處理方式,只有交給調(diào)用main的jvm來(lái)處理						jvm有一個(gè)默認(rèn)的異常處理機(jī)制,就將該異常進(jìn)行處理.						并將該異常的名稱,異常的信息.異常出現(xiàn)的位置打印在了控制臺(tái)上,同時(shí)將程序停止運(yùn)行		       三、try...catch的方式處理異常				    異常處理的兩種方式					1、try…catch…finally						try catch						try catch finally						try finally 					2、throws				 try...catch處理異常的基本格式					try…catch…finally					try:用來(lái)檢測(cè)異常					catch:用來(lái)捕獲異常					finally:釋放資源				 try后面如果跟多個(gè)catch,那么小的異常放在前面,大的異常放在后面,根據(jù)多態(tài)原理,如果大的放在前面				  就會(huì)將所有子類對(duì)象接收,后面的catch就沒(méi)有意義了;				 Android開(kāi)發(fā)處理異常:try{}catch(Exception e){}				 JavaEE服務(wù)端開(kāi)發(fā)處理異常:一般都是底層開(kāi)發(fā),從底層向上拋,如果使用try...catch會(huì)隱藏異常,				 帶來(lái)巨大隱患,如果異常全部爆發(fā)那后果不堪設(shè)想		       四、編譯期異常和運(yùn)行期異常的區(qū)別					 Java中的異常被分為兩大類:編譯時(shí)異常和運(yùn)行時(shí)異常。					             所有的RuntimeException類及其子類的實(shí)例被稱為運(yùn)行時(shí)異常,其他的異常就是編譯時(shí)異常					   編譯時(shí)異常						 Java程序必須顯示處理,否則程序就會(huì)發(fā)生錯(cuò)誤,無(wú)法通過(guò)編譯					   運(yùn)行時(shí)異常						   無(wú)需顯示處理,也可以和編譯時(shí)異常一樣處理		       五、Throwable的幾個(gè)常見(jiàn)方法					 1、getMessage()						      獲取異常信息,返回字符串。					 2、toString()						      獲取異常類名和異常信息,返回字符串。					 3、printStackTrace()						      獲取異常類名和異常信息,以及異常出現(xiàn)在程序中的位置。返回值void。		       六、throws的方式處理異常					定義功能方法時(shí),需要把出現(xiàn)的問(wèn)題暴露出來(lái)讓調(diào)用者去處理。					那么就通過(guò)throws在方法上標(biāo)識(shí)。		       七、throw的概述以及和throws的區(qū)別			      throw的概述					在功能方法內(nèi)部出現(xiàn)某種情況,程序不能繼續(xù)運(yùn)行,需要進(jìn)行跳轉(zhuǎn)時(shí),就用throw把異常對(duì)象拋出。				  throws和throw的區(qū)別					 throws						 用在方法聲明后面,跟的是異常類名						 可以跟多個(gè)異常類名,用逗號(hào)隔開(kāi)						 表示拋出異常,由該方法的調(diào)用者來(lái)處理					 throw						 用在方法體內(nèi),跟的是異常對(duì)象名						 只能拋出一個(gè)異常對(duì)象名						 表示拋出異常,由方法體內(nèi)的語(yǔ)句處理		       八、finally關(guān)鍵字的特點(diǎn)及作用				  1、finally的特點(diǎn)					     被finally控制的語(yǔ)句體一定會(huì)執(zhí)行					     特殊情況:在執(zhí)行到finally之前jvm退出了(比如System.exit(0))				  2、finally的作用					     用于釋放資源,在IO流操作和數(shù)據(jù)庫(kù)操作中會(huì)見(jiàn)到			      3、final,finally,finalize區(qū)別			        (1)final可以修飾類:不能被繼承			                             修飾方法:不能被重寫(xiě)			                             修飾變量:只能賦值一次			        (2)finally是try語(yǔ)句中的一個(gè)語(yǔ)句體,不能被單獨(dú)使用,用來(lái)釋放資源			        (3)finalize是Object一個(gè)方法,當(dāng)垃圾回收期確定不存在該對(duì)象的更多引用時(shí),由對(duì)象的垃圾回收器調(diào)用此方法		        九、異常注意事項(xiàng)					  (1)子類重寫(xiě)父類方法時(shí),子類的方法必須拋出相同的異常或父類異常的子類					  (2)如果父類拋出了多個(gè)異常,子類重寫(xiě)父類時(shí),只能拋出相同的異常或者是他的子集,子類不能拋出父類沒(méi)有的異常					  (3)如果被重寫(xiě)的方法沒(méi)有異常拋出,那么子類的方法絕對(duì)不可以拋出異常,如果子類方法內(nèi)有異常發(fā)生,那么子類只能try,不能throws				   如何使用異常處理						原則:如果該功能內(nèi)部可以將問(wèn)題處理,用try,如果處理不了,交由調(diào)用者處理,這是用throws						區(qū)別:							后續(xù)程序需要繼續(xù)運(yùn)行就try							后續(xù)程序不需要繼續(xù)運(yùn)行就throws				   如果JDK沒(méi)有提供對(duì)應(yīng)的異常,需要自定義異常		 * */				demo();		div();		moreCatch();		moreCatch1();		throwable();//		throwss();		finallys();	}	private static void finallys() {		System.out.println("==========finally===========");		try{			System.out.println(10/0);		}catch (Exception e) {			System.out.println("程序異常");		}finally {			System.out.println("我執(zhí)行了");		}	}	private static void throwss() throws AgeOutException {		System.out.println("==========throws===========");		Person p = new Person();		p.setAge(-10);		System.out.println(p.getAge());		System.out.println();	}	private static void throwable() {		System.out.println("==========Throwable===========");		try{			System.out.println(10/0);		}catch (Exception e) {			System.out.println(e.getMessage());			System.out.println(e);   //默認(rèn)調(diào)用toString方法			e.printStackTrace();     //jvm默認(rèn)調(diào)用此方法處理異常		}		System.out.println();	}	private static void moreCatch1() {		System.out.println("==========多個(gè)catch,JDK7===========");		int[] arr = {11,22,33};		int a = 10;		int b = 0;		//JDK7處理多個(gè)異常添加  |或 運(yùn)算符		try {			System.out.println(a/b);;			System.out.println(arr[5]);		} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {			System.out.println("異常了");		}	}	private static void moreCatch() {		System.out.println("==========多個(gè)catch===========");		int[] arr = {11,22,33};		int a = 10;		int b = 0;		try {			int x = a/b;			System.out.println(arr[5]);			arr = null;			System.out.println(arr[4]);		} catch (ArithmeticException e) {			System.out.println("出錯(cuò)了,除數(shù)為0了");		}catch (ArrayIndexOutOfBoundsException e){			System.out.println("數(shù)組索引越界");		}catch (Exception e){			System.out.println("其他異常");		}	}	private static void demo() {		int[] arr = {11,22,33};//		arr = null;//		System.out.println(arr[0]);  //NullPointerException//		System.out.println(arr[5]);  		//異常信息從下往上看,第二行指出異常在哪一行,第一行指出哪種類型異常		/*Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5   		at com.lin.exception.ExceptionClass.main(ExceptionClass.java:27)*/	}	private static void div() {		System.out.println("==========try...catch===========");		try{			int x = 10/0;			System.out.println(x);		}catch(ArithmeticException a){			System.out.println("出錯(cuò)了,除數(shù)為0了");		}		System.out.println("處理異常可以繼續(xù)往下執(zhí)行,不處理直接崩潰");	}}class Person{	private int age;	private String name;		public Person() {		super();	}	public Person(int age, String name) {		super();		this.age = age;		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) throws AgeOutException {		if(age >= 0 && age <= 150){			this.age = age;		}else{//			throw new Exception("年齡非法");			throw new AgeOutException("年齡非法");		}	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}}class AgeOutException extends Exception{	public AgeOutException() {		super();	}	public AgeOutException(String message) {		super(message);	}}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷波县| 诸城市| 贵定县| 长岭县| 垣曲县| 盐边县| 北辰区| 台山市| 高清| 太和县| 万盛区| 图木舒克市| 江城| 密云县| 宜宾县| 廊坊市| 英超| 华蓥市| 历史| 高清| 宁都县| 华阴市| 望江县| 封丘县| 滦南县| 枞阳县| 杭州市| 满洲里市| 县级市| 呈贡县| 抚远县| 宁晋县| 安图县| 杂多县| 普陀区| 军事| 贵溪市| 武平县| 醴陵市| 息烽县| 昭苏县|