20145310 《Java程序設計》第5周學習總結

20145310 《Java程序設計》第5周學習總結

教材學習內容總結

本週主要進行第八章和第九章的學習。html

java中全部的錯誤都會打包爲對象,能夠try catch表明錯誤的對象後作一些處理。運用try、catch,還能夠在捕捉處理錯誤以後,嘗試恢復程序正常執行流程。java

import java.util.*;

public class AVE {


    public static void main(String[] args) {
       Scanner console =new Scanner (System.in);
       double sum=0;
        int count =0;
        while(true)
        {
           try{
       
           int number=console.nextInt();
            if(number==0)
            {
             break;
            }
            sum+=number;
            count++;
               }catch (InputMismatchException ex){
                   System.out.printf("略過非整數輸入:%s%n",console.next());
               }
        }
         System.out.printf("AVE %.2f%n",sum/count);
    }
    
}

程序運行結果:app

若是父類異常對象在子類異常前被捕捉,則catch子類異常對象的區塊將永遠不會被執行。誤會被包裝爲對象,這些對象是可拋出的,所以設計錯誤對象都繼承自java.lang.Throwable類。dom

在異常發生時,可以使用try 、catch處理當時可進行的異常處理,在catch區塊進行完部分錯誤處理以後,可使用throw(注意不是throws)將異常再拋出。學習

import java.io.*;
import java.util.Scanner;
public class FileUtil {
    public static String readFile(String name) throws FileNotFoundException{
        StringBuilder text = new StringBuilder();
        try{
            Scanner console = new Scanner (new FileInputStream(name));
            while(console.hasNext()){
                text.append(console.nextLine())
                        .append('\n');
            }
        }catch(FileNotFoundException ex){
            ex.printStackTrace();
            throw ex;
        }
        return text.toString();
    }
}

只有java是採用受檢異常的語言。ui

若收集的對象常常會有變更索引的狀況,也許考慮連接方式操做的List會比較好,像是隨時會有客戶端登陸或註銷的客戶端List,使用LinkedList會有比較好的效率。設計

在收集過程當中如有相同對象,則再也不重複收集,若是有這類需求,可使用Set接口的操做對象。code

public class StackTraceDemo1
{
    public static void main(String[] args)
    {
        try
        {
            c();
        }
        catch (NullPointerException ex)
        {
            ex.printStackTrace();
        }
    }

    static void c()
    {
        b();
    }

    static void b()
    {
        a();
    }

    static String a()
    {
        String text = null;
        return text.toUpperCase();
    }
}

查看堆棧追蹤最簡單的方法,就是直接調用異常對象的 printStackTrace()。htm

在使用 throw 重拋異常時,異常的追蹤堆棧起點,還是異常的發生根源,而不是重拋異常的地方,對象

public class StackTraceDemo2 {
    public static void main(String[] args) {
        try{
            c();
        }catch(NullPointerException ex){
            ex.printStackTrace();
        }
    }
    static void c(){
        try{
            b();
        }catch(NullPointerException ex) {
            ex.printStackTrace();
            throw ex;
        }
    }
    static void b(){
        a();
    }
    static String a(){
        String text = null;
        return text.toUpperCase();
    }
}

不管try區塊中有無異常,若撰寫finally區塊,則finally區塊必定會被執行

public class FinallyDemo {
    public static void main(String[] args) {
        System.out.println(test(true));
    }
    static int test(boolean flag){
        try{
            if(flag){
                return 1;
            }
        }finally{
            System.out.println("finally...");
        }
    }return 0;
}

收集對象的共同行爲定義在Collection中。

java.util.ArrayDeque操做了Deque接口,可使用ArrayDeque來操做容量有限的堆棧。

若是對象有操做Queue,並打算以隊列方式使用,且隊列長度受限,一般建議使用offer()、poll()與peek()等方法。

import java.util.*;
interface Request{
    void execute();
}
public class RequestQueue {
    public static void main(String[] args) {
        Queue requests = new LinkedList();
        offerRequestTo(requests);
        process(requests);
    }
    static void offerRequestTo(Queue requests){
        for(int i=1;i<6;i++){
            Request request = new Request(){
                public void execute(){
                    System.out.printf("處理數據%f%n",Math.random());
                }
            };
            requests.offer(request);
        }
    }
    static void process(Queue requests){
        while(requests.peek()!=null){
            Request rquest = (Request) request.poll();
            request.execute();
        }
    }
}

其餘(感悟、思考等,可選)

學習的東西愈來愈難了,光敲代碼是沒有用的,仍是要多思考,多練習,不然會學得很不紮實,好比上週考試的操做題就不會。因此之後還須要在java上投入更多的時間練習。

代碼託管截圖:

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 100/100 2/2 10/10 初步認識java
第二週 150/250 1/3 12/22 掌握Java基礎語法
第三週 537/787 2/4 20/42 認識對象,對象封裝
第四周 500/1287 1/5 20/62 繼承與多態,接口與多態
第五週 300/1587 1/6 20/82

參考資料

相關文章
相關標籤/搜索