官术网_书友最值得收藏!

第2章 Java語言基礎

2.1 基本語法

實例018 輸出錯誤信息與調試信息

光盤位置:光盤\MR\02\018

高級

實用指數:

實例說明

程序開發中對于業務代碼的部分功能需要配合調試信息以確定代碼執行流程和數據的正確性,當程序出現嚴重問題時還要輸出警告信息,這樣可以在調試中完成程序開發。本實例將介紹如何輸出調試信息與錯誤提示信息,實例運行結果如圖2.1所示。

圖2.1 實例運行結果

關鍵技術

本實例使用System類中的out和err兩個成員變量來完成調試信息與錯誤信息的輸出,它們兩個都是System的類變量,也就是說是使用static關鍵字修飾的。out是標準調試信息的輸出流,err是標準錯誤信息輸出流。本實例中調用了兩個輸出流通用的println()方法來輸出一行數據。該方法的聲明如下:

        public void println(String x)

參數說明

x:被輸出到控制臺的字符串。

設計過程

創建PrintErrorAndDebug類,并完成該類的main()主方法,在該方法中分別輸出調試信息與錯誤信息,關鍵代碼如下:

        public class PrintErrorAndDebug{
            public static void main(String[]args){
              System.out.println("main()方法開始運行了。");
              //輸出錯誤信息
              System.err.println("在運行期間手動輸出一個錯誤信息:");
              System.err.println("\t該軟件沒有買保險,請注意安全");
              System.out.println("PrintErrorAndDebug.main()");
              System.out.println("main()方法運行結束。");
            }
        }

秘笈心法

System類的out與err是兩個類成員變量,不用創建System類的實例對象就可以直接使用。雖然都是標準輸出流,但是應該靈活運用它們完成不同的信息輸出。out主要是輸出調試信息的輸出流,在Eclipse控制臺中以黑色字體標識;而err是錯誤信息的標準輸出流,用于輸出緊急錯誤信息,所以在Eclipse控制臺中以紅色字體顯示。

實例019 從控制臺接收輸入字符

光盤位置:光盤\MR\02\019

高級

實用指數:

實例說明

System類除了out和err兩個輸出流之外,還有in輸入流的實例對象作為類成員,它可以接收用戶的輸入。本實例通過該輸入流實現從控制臺接收用戶輸入文本,并提示該文本的長度信息,實例運行結果如圖2.2所示。

圖2.2 實例運行結果

關鍵技術

本實例的關鍵技術用到了System類的輸入流,也就是類變量in,它可以接收用戶的輸入信息,并且是標準的輸入流實例對象。另外,Scanner類是Java的掃描器類,它可以從輸入流中讀取指定類型的數據或字符串。本實例使用Scanner類封裝了輸入流對象,并使用nextLine()方法從輸入流中獲取用戶輸入的整行文本字符串,該方法的聲明如下:

        public String nextLine()

該方法從掃描器封裝的輸入流中獲取一行文本字符串作為方法的返回值。

設計過程

創建InputCode類,在該類的主方法中創建Scanner掃描器來封裝System類的in輸入流,然后提示用戶輸入身份證號碼,并輸出用戶身份證號碼的位數,關鍵代碼如下:

    public class InputCode {
        public static void main(String[]args){
            Scanner scanner=new Scanner(System.in);    //創建輸入流掃描器
            System.out.println("請輸入你的身份證號:");    //提示用戶輸入
            String line=scanner.nextLine();            //獲取用戶輸入的一行文本
            //打印對輸入文本的描述
            System.out.println("原來你身份證號是"+line.length()+"位數字的啊");
        }
    }

秘笈心法

InputStream輸入流以字節為單位來獲取數據,而且需要復雜的判斷并創建字節數組作為緩沖,最主要的是字節轉換為字符時容易出現中文亂碼的情況。所以對于字符數據的讀取,應該使用掃描器進行封裝,然后獲取字符串類型的數據。

實例020 重定向輸出流實現程序日志

光盤位置:光盤\MR\02\020

高級

實用指數:

實例說明

System類中的out成員變量是Java的標準輸出流,程序常用它來輸出調試信息,out成員變量被定義為final類型的,無法直接重新復制,但是可以通過setOut()方法來設置新的輸出流。本實例利用該方法實現了輸出流的重定向,把它指向一個文件輸出流,從而實現了日志功能。程序運行后繪制控制臺提示運行結束信息,如圖2.3所示;但是在運行過程中的步驟都保存到了日志文件中,如圖2.4所示。

圖2.3 控制臺運行結果

圖2.4 日志文件內容

關鍵技術

本實例應用的關鍵技術是調用了System類的setOut()方法改變了輸出流,System類的out、err和in成員變量是final類型的,不能直接賦值,要通過相應的方法來改變流。下面分別介紹改變這3個成員變量的方法。

(1)setOut()方法

該方法用于重新分配System類的標準輸出流,該方法的聲明如下:

        public static void setOut(PrintStream out)

參數說明

out:新的PrintStream輸出流對象。

(2)setErr()方法

該方法將重新分配System類的標準錯誤輸出流,該方法的聲明如下:

        public static void setErr(PrintStream err)

參數說明

err:新的PrintStream輸出流對象。

(3)setIn()方法

該方法將重新設置System類的in成員變量,即標準輸入流。

設計過程

創建RedirectOutputStream類,編寫該類的main()主方法,在該方法中保存System類的out成員變量為臨時變量,然后創建一個新的文件輸出流,并把這個輸出流設置為System類新的輸出流。在程序關鍵位置輸出調試信息,這些調試信息將通過新的輸出流保存到日志文件中。最后恢復原有輸出流并輸出程序運行結束信息,關鍵代碼如下:

        import java.io.FileNotFoundException;
        import java.io.PrintStream;
        public class RedirectOutputStream{
            public static void main(String[]args){
              try{
                  PrintStream out=System.out; //保存原輸出流
                  PrintStream ps=new PrintStream("./log.txt"); //創建文件輸出流
                  System.setOut(ps); //設置使用新的輸出流
                  int age=18; //定義整型變量
                  System.out.println("年齡變量成功定義,初始值為18");
                  String sex="女"; //定義字符串變量
                  System.out.println("性別變量成功定義,初始值為女");
                  //整合兩個變量
                  String info="這是個"+sex+"孩子,應該有"+age+"歲了。";
                  System.out.println("整合兩個變量為info字符串變量,其結果是:"+info);
                  System.setOut(out); //恢復原有輸出流
                  System.out.println("程序運行完畢,請查看日志文件。");
              }catch(FileNotFoundException e){
                  e.printStackTrace();
              }
            }
        }

秘笈心法

參考本實例的做法,可以把err標準錯誤輸出流也重定向到其他位置。例如,可以定義在與標準輸出流相同的文件輸出流中,但是在輸出錯誤信息時,添加“警告:”字樣,這樣可以為日志添加信息級別。

實例021 自動類型轉換與強制類型轉換

光盤位置:光盤\MR\02\021

高級

實用指數:

實例說明

Java基本數據類型之間存在自動類型轉換與強制類型轉換兩種轉換方法。本實例將演示這兩種類型轉換的用法,實例運行結果如圖2.5所示。注意long類型向低類型short轉換時發生的數據丟失。

圖2.5 實例運行結果

設計過程

創建TypeConversion類,在該類的主方法中創建各種基本類型的變量,在輸出語句中分別輸出所有變量累加值。注意每次累加值的數據類型,所有整數運算都被自動轉換為int類型之后再進行運算,所有浮點數值都被自動轉換為double類型再進行運算。最后把高類型數據向低類型數據進行強制類型轉換,并注意運算結果是否丟失數據,關鍵代碼如下:

        public class TypeConversion{
            public static void main(String[]args){
              byte b=127;
              char c='W';
              short s=23561;
              int i=3333;
              long l=400000L;
              float f=3.14159F;
              double d=54.523;
              //低類型向高類型自動轉換
              System.out.println("累加byte等于:"+b);
              System.out.println("累加char等于:"+(b+c));
              System.out.println("累加short等于:"+(b+c+s));
              System.out.println("累加int等于:"+(b+c+s+i));
              System.out.println("累加long等于:"+(b+c+s+i+l));
              System.out.println("累加float等于:"+(b+c+s+i+l+f));
              System.out.println("累加double等于:"+(b+c+s+i+l+f+d));
              System.out.println("把long強制類型轉換為int:"+(int)l);          //高類型到低類型的強制轉換
              System.out.println("把int強制類型轉換為short:"+(short)l);       //高類型到低類型轉換會丟失數據
              System.out.println("把double強制類型轉換為int:"+(int)d);        //實數到整數轉換將舍棄小數部分
              System.out.println("把short強制類型轉換為char:"+(char)s);       //整數到字符類型的轉換將獲取對應編碼的字符
            }
        }

秘笈心法

在輸出語句中,經常對輸出的數字添加一個描述前綴,如“他的年齡是:45”。但是如果45是一個數學加法的公式,那么很容易出現錯誤的運算。首先第一個數字與字符串會通過+符號實現字符串連接,而其后的所有數字加法運算都會被看作字符串的連接操作。解決辦法是把所有數字加法用括號括起來。

主站蜘蛛池模板: 刚察县| 崇州市| 东阿县| 安塞县| 蒙阴县| 桐梓县| 宁陕县| 呼和浩特市| 手游| 石台县| 金乡县| 什邡市| 桃江县| 栾川县| 平泉县| 喀喇沁旗| 高平市| 黔东| 刚察县| 永平县| 和平县| 平和县| 阜南县| 寿阳县| 新津县| 佛坪县| 商河县| 万全县| 凌云县| 襄城县| 高阳县| 鄂托克前旗| 德惠市| 绥江县| 二连浩特市| 静海县| 凤凰县| 汉沽区| 太康县| 霍城县| 财经|