第八週課程總結&實驗報告(六)

##第八週課程總結&實驗報告(六) ###課程總結 本週主要講解了異常類及其處理以及java的多線程:java

1.全部的異常都是從Throwable繼承而來的,是全部異常的共同祖先。 2.Throwable有兩個子類,Error和Exception。其中Error是錯誤,對於全部的編譯時期的錯誤以及系統錯誤都是經過Error拋出的。這些錯誤表示故障發生於虛擬機自身、或者發生在虛擬機試圖執行應用時,如Java虛擬機運行錯誤(Virtual MachineError)、類定義錯誤(NoClassDefFoundError)等。這些錯誤是不可查的,由於它們在應用程序的控制和處理能力之 外,並且絕大多數是程序運行時不容許出現的情況。對於設計合理的應用程序來講,即便確實發生了錯誤,本質上也不該該試圖去處理它所引發的異常情況。在 Java中,錯誤經過Error的子類描述。 3.Exception,是另一個很是重要的異常子類。它規定的異常是程序自己能夠處理的異常。異常和錯誤的區別是,異常是能夠被處理的,而錯誤是無法處理的。 4.Checked Exception 可檢查的異常,這是編碼時很是經常使用的,全部checked exception都是須要在代碼中處理的。它們的發生是能夠預測的,正常的一種狀況,能夠合理的處理。好比IOException,或者一些自定義的異常。除了RuntimeException及其子類之外,都是checked exception。 5.Unchecked Exception RuntimeException及其子類都是unchecked exception。好比NPE空指針異常,除數爲0的算數異常ArithmeticException等等,這種異常是運行時發生,沒法預先捕捉處理的。Error也是unchecked exception,也是沒法預先處理的。編程

代碼中的異常處理實際上是對可檢查異常的處理。 1. 經過try...catch語句塊來處理:數組

e.g.多線程

try
{
   // 程序代碼
}catch(ExceptionName e1)
{
   //Catch 塊
}

Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 後面的 catch 塊就會被檢查。 若是發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是同樣。 2. 另外,也能夠在具體位置不處理,直接拋出,經過throws/throw到上層再進行處理,具體的,若是一個方法沒有捕獲到一個檢查性異常,那麼該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。也可使用 throw 關鍵字拋出一個異常,不管它是新實例化的仍是剛捕獲到的。測試

finally關鍵字 finally 關鍵字用來建立在 try 代碼塊後面執行的代碼塊。 不管是否發生異常,finally 代碼塊中的代碼總會被執行。 在 finally 代碼塊中,能夠運行清理類型等收尾善後性質的語句。 finally 代碼塊出如今 catch 代碼塊最後,語法以下:this

try{

  // 程序代碼

}catch(異常類型1 異常的變量名1){

  // 程序代碼

}catch(異常類型2 異常的變量名2){

  // 程序代碼

}finally{

  // 程序代碼

}

2.多線程 進程和線程的區別編碼

線程不能看作獨立應用,而進程能夠 進程有獨立的地址空間,相互不影響,線程只是進程的不一樣執行路徑 線程沒有獨立的地址空間,多進程的程序比多線程的程序健壯 進程的切換比線程的切換開銷大 Java對操做系統提供的功能進行封裝,包括進程和線程 運行一個程序會產生一個進程,進程至少包含一個線程 每一個進程對應一個JVM實例,多個線程共享JVM裏的堆 Java採用單線程編程模型,程序會自動建立主線程 主線程能夠建立子線程,原則上要後於子線程完成執行操作系統

start和run方法的區別線程

調用start方法會建立一個新的子線程並啓動 run方法只是Thread的一個普通方法的調用設計

多線程的實現有兩種方法:繼承Thread類和使用Runnable接口 Thread類不共享資源,Runnable接口可共享資源。

class 類名稱 extends Thread{
      屬性...;
      方法...;
      public void run(){
             線程主體;
    }
}

###實驗報告 ####實驗六 Java異常 實驗目的 理解異常的基本概念; 掌握異常處理方法及熟悉常見異常的捕獲方法。 實驗要求 練習捕獲異常、聲明異常、拋出異常的方法、熟悉try和catch子句的使用。 掌握自定義異常類的方法。

實驗內容 編寫一個類,在其main()方法中建立一個一維數組,在try字句中訪問數組元素,使其產生ArrayIndexOutOfBoundsException異常。在catch子句裏捕獲此異常對象,而且打印「數組越界」信息,加一個finally子句,打印一條信息以證實這裏確實獲得了執行。 自定義異常類的使用 車站檢查危險品的設備,若是發現危險品會發出警告。編程模擬設備發現危險品。 技術方案: 編寫一個Exgeption的子類DangerException,該子類能夠建立異常對象,該異常對象調用toShow()方法輸出「危險物品」。編寫一個Machine類,該類的方法checkBag(Goods goods)當發現參數goods是危險品時(goods的isDanger屬性是true)將拋出DangerException異常。 程序在主類的main()方法中的try-catch語句的try部分讓Machine類的實例調用checkBag(Goods goods)的方法,若是發現危險品就在try-catch語句的catch部分處理危險品。 源代碼 ··· package test;

public class test2 {

public static void main(String[] args) {
    int a[]= {5,6,8,9,10};
    try {
        for(int i=0;i<5;i++) {
            System.out.println(a[i]);
        }
    }catch(Exception e) {
        e.getStackTrace();
        System.out.println("數字越界");
    }finally {
        System.out.println("一直輸出");
    }

}

}

··· 實驗截圖:

/這道題目審題的時候不當心漏掉了,剛剛問了下室友才發現/ 源代碼: Maechine機械類

package test;

import java.util.ArrayList;

public class Maechine {
    private String name;
    Goods goods;
    
    public boolean isDanger(String name) {
    	 ArrayList<String> list0 = new ArrayList<String>() {
             {

                 add("汽油");
                 add("槍");
                 
                 add("酒精");
                 add("刀具");
                 
             }
         };
        boolean flag=false;
        int size =list0.size();
        for(int i=0;i<size;i++) {
            if(name.equals(list0.get(i))) {
            flag = true;
            break;
            }
        }
        return flag;   
    }
    
    
    public void checkBag(Goods goods) throws DangerException {
        name=goods.getName();
        if(isDanger(name)) {
            throw new DangerException(goods.getName());
        }
        else {
            System.out.println(goods.getName());
            System.out.println(goods.getName()+"不是危險品");
        }
    }
    
}

商品類Goods

package test;

public class Goods {
	private String name;
	
	public Goods(String name) {
		this.name=name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

異常類DangerException

package test;

public class DangerException extends Exception {
	
	private String info;
	
	public DangerException(String info) {
		this.info=info;
	}
	public void toShow() {
		System.out.println(info);
	}
}

測試類test

package test;

import java.util.ArrayList;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>() {
			{

				add("汽油");
				add("槍");
				add("麪包");
				add("酒精");
				add("刀具");
				add("水果");
			}
		};
		Scanner scan=new Scanner(System.in);
		int i=scan.nextInt();
		String name = list.get(i);
		Goods good = new Goods(name);

		try {
			Maechine mc = new Maechine();
			mc.checkBag(good);
		} catch (DangerException e) {
			e.toShow();
			System.out.println(good.getName() + "是危險品");
		}
	}
}

實驗截圖:

相關文章
相關標籤/搜索