java異常中throw和throws的區(qū)別及說明
java異常throw和throws的區(qū)別
throws和throw
throws:用來聲明一個方法可能產生的所有異常,不做任何處理而是將異常往上傳,誰調用我我就拋給誰。
- 用在方法聲明后面,跟的是異常類名
- 可以跟多個異常類名,用逗號隔開
- 表示拋出異常,由該方法的調用者來處理
- throws表示出現異常的一種可能性,并不一定會發(fā)生這些異常
throw:則是用來拋出一個具體的異常類型。
- 用在方法體內,跟的是異常對象名
- 只能拋出一個異常對象名
- 表示拋出異常,由方法體內的語句處理
- throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常
分別介紹
throws在方法后邊聲明異常,其實就是自己不想對異常做出任何的處理,告訴別人自己可能出現的異常,交給別人處理,然別人處理
package com.xinkaipu.Exception;
class Math{
? ? public int div(int i,int j) throws Exception{
? ? ? ? int t=i/j;
? ? ? ? return t;
? ? }
}public class ThrowsDemo {
? ? public static void main(String args[]) throws Exception{
? ? ? ? Math m=new Math();
? ?}
}throw:就是自己處理一個異常,有兩種方式要么是自己捕獲異常try...catch代碼塊,要么是拋出一個異常(throws 異常)
package com.xinkaipu.Exception;
public class TestThrow
{
public static void main(String[] args)
{
try
{
//調用帶throws聲明的方法,必須顯式捕獲該異常
//否則,必須在main方法中再次聲明拋出
throwChecked(-3);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
//調用拋出Runtime異常的方法既可以顯式捕獲該異常,
//也可不理會該異常
throwRuntime(3);
}
public static void throwChecked(int a)throws Exception
{
if (a > 0)
{
//自行拋出Exception異常
//該代碼必須處于try塊里,或處于帶throws聲明的方法中
throw new Exception("a的值大于0,不符合要求");
}
}
public static void throwRuntime(int a)
{
if (a > 0)
{
//自行拋出RuntimeException異常,既可以顯式捕獲該異常
//也可完全不理會該異常,把該異常交給該方法調用者處理
throw new RuntimeException("a的值大于0,不符合要求");
}
}
}解析java中的throw和throws關鍵字
throws關鍵字
1.1 作用
向上拋異常,把異常交給調用處處理,實際上自身并沒有處理異常。
1.2 原理
一旦方法體出現異常,仍會在異常代碼出生成一個異常類的對象,當此對象滿足throws后的異常類型時,就會被拋出,異常代碼后續(xù)的代碼,均不執(zhí)行。
1.3 如何用
- 1.3.1 語法
訪問權限修飾符 返回值類型 方法名(形參列表) throws 異常類型(異常類){
//實際書寫的位置是形參列表的最后一個括號后面
}
//出現編譯時異常,又不想自己處理,那就可以考慮向上拋出異常- 1.3.2 示例代碼
package Work;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class TestDog {
public static void main(String[] args) {
try {
f1();
} catch (Exception e) {
System.out.println("處理了");
System.out.println(e.getMessage());
}
System.out.println("后面的代碼");
}
public static void f1() throws FileNotFoundException {
FileOutputStream fileOutputStream=new FileOutputStream("d:\\bc.md");
//只要處理了異常,后面的代碼都會順利執(zhí)行
System.out.println("執(zhí)行了沒有");
}
}- 1.3.3 示例代碼運行截圖

throw關鍵字
2.1 作用
手動制造一個異常,不符合條件的時候我們可以考慮去拋出一個異常,在調用處對異常進行邏輯的處理
2.2 如何用
- 2.2.1 語法
訪問權限修飾符 返回值類型 方法名(形參列表) {
throw new Exception("展示的異常信息");
}- 2.2.3 示例代碼
Dog類
package Work;
public class Dog {
private String name;
//名字
private String type;
//類型
private int age;
//年齡
public Dog() {
}
public Dog(String name, String type, int age) throws Exception{
this.name = name;
this.type = type;
setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getAge() {
return age;
}
public void setAge(int age) throws Exception{
if(age<0||age>10){
throw new Exception("年齡非法");
}
this.age = age;
}
}Test類
package Work;
public class Test{
public static void main(String[] args) {
try {
Dog d1=new Dog("旺財","哈士奇",-9);
} catch (Exception e) {
//輸入有誤就打印異常信息
System.out.println(e.getMessage());
}
System.out.println("后面的代碼");
}
}- 2.2.4 示例代碼運行截圖

總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java ThreadPoolExecutor 并發(fā)調用實例詳解
這篇文章主要介紹了java ThreadPoolExecutor 并發(fā)調用實例詳解的相關資料,需要的朋友可以參考下2017-05-05

