第3章•語法入門語法入門語法入門語法入門–第一個Java程式–文字模式下與程式互動–資料、運算–流程控制第一個Java程式•定義類別(Class)•定義區塊定義區塊定義區塊定義區塊(Block)•定義main()方法(Method)•撰寫陳述(Statement)publicclassHelloJava{publicstaticvoidmain(String[]args){System.out.println(嗨嗨嗨嗨!!!!我的第一個我的第一個我的第一個我的第一個Java程式程式程式程式!!!!);}}給C使用者的第一個Java程式•給了C使用者類似printf()的功能publicclassHelloJavaForC{publicstaticvoidmain(String[]args){System.out.printf(%s!這是您的第一個Java程式!\n,C語言Fan);}}System.out.printf(%s!這是您的第二個Java程式!,C語言Fan).println();System.out.printf(%s!這是您的第%d個Java程式!\n,C語言Fan,3);為程式加入註解•原始碼檔案中被標註為註解的文字,編譯器不會去處理它/*作者作者作者作者::::良葛格良葛格良葛格良葛格*功能功能功能功能::::示範示範示範示範printf()方法方法方法方法*日期日期日期日期::::2005/4/30*/publicclassThirdJavaForC{publicstaticvoidmain(String[]args){//printf()是是是是J2SE5.0的新功能的新功能的新功能的新功能,,,,必須安裝必須安裝必須安裝必須安裝JDK5.0才能編譯才能編譯才能編譯才能編譯System.out.printf(%s!!!!這是您的第這是您的第這是您的第這是您的第%d個個個個Java程式程式程式程式!!!!\n,C語言語言語言語言Fan,3);}}為程式加入註解•不能用巢狀方式來撰寫多行註解•多行註解可以包括單行註解/*註解文字1……bla…bla/*註解文字2……bla…bla*/*//*註解文字1……bla…bla//註解文字2……bla…bla*/使用Scanner取得輸入•在J2SE5.0中,可以使用java.util.Scanner類別取得使用者的輸入•可以使用這個工具的next()功能,來取得使用者的輸入字串Scannerscanner=newScanner(System.in);System.out.print(請輸入您的名字:);System.out.printf(哈囉!%s!\n,scanner.next());System.out.print(請輸入一個數字:);System.out.printf(您輸入了%d!\n,scanner.nextInt());使用BufferedReader取得輸入•BufferedReader建構時接受java.io.Reader物件–可使用java.io.InputStreamReaderBufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));System.out.print(請輸入一列文字,可包括空白:);Stringtext=bufferedReader.readLine();System.out.println(您輸入的文字:+text);標準輸入輸出串流•System類別中的靜態物件out–提供標準輸出串流(Stream)輸出–通常對應至顯示輸出(終端機輸出)–可以將輸出重新導向至一個檔案–javaHelloJavaHelloJavaResult.txt•System標準輸入串流in–在程式開始之後它會自動開啟,對應至鍵盤或其它的輸入來源標準輸入輸出串流•標準錯誤輸出串流err–在程式執行後自動開啟,將指定的字串輸出至顯示裝置或其它指定的裝置–err會立即顯示錯誤訊息–err輸出串流的訊息不會被重新導向System.out.println(使用out輸出訊息);System.err.println(使用err輸出訊息);javaErrDemoErrDemoResult.txt使用err輸出訊息輸出格式控制跳格(一個Tab鍵)\t游標移至行首\r換行\n換頁\f倒退一個字元\b以8進位數指定Unicode字元輸出\xxx以16進位數指定Unicode字元輸出\uxxxx雙引號\單引號'\'反斜線\\作用控制字元System.out.println(\u0048\u0065\u006C\u006C\u006F);輸出格式控制•若是使用J2SE5.0或更高的版本//輸出19的十進位表示System.out.printf(%d%n,19);//輸出19的八進位表示System.out.printf(%o%n,19);//輸出19的十六進位表示System.out.printf(%x%n,19);輸出日期/時間的前置,詳請看線上API文件%t,%T將true或false輸出(或TRUE、FALSE,使用%B)。另外,非null值輸出是true,null值輸出是false%b,%B以字元方式輸出,提供的數必須是Byte、Short、Character或Integer%c,%C將字串格式化輸出%s,%S將浮點數以16進位方式輸出,提供的數必須是Byte、Short、Integer、Long、或BigInteger%x,%X以8進位整數方式輸出,提供的數必須是Byte、Short、Integer、Long、或BigInteger%o使用科學記號輸出浮點數,以16進位輸出整數部份,以10進位輸出指數部份,提供的數必須是Float、Double、BigDecimal%a,%A將浮點數以10進位方式輸出,並使用科學記號,提供的數必須是Float、Double或BigDecimal%e,%E將浮點數以10進位方式輸出,提供的數必須是Float、Double或BigDecimal%f以10進位整數方式輸出,提供的數必須是Byte、Short、Integer、Long、或BigInteger%d在字串中顯示%%%作用格式字元輸出格式控制•可以在輸出浮點數時指定精度–System.out.printf(example:%.2f%n,19.234);–example:19.23•可以指定輸出時,至少要預留的字元寬度–System.out.printf(example:%6.2f%n,19.234);–example:19.23–補上一個空白在前端基本的資料型態(Primitivetype)•整數–短整數(short)(佔2個位元組)–整數(int)(佔4個位元組)–長整數(long)(佔8個位元組)•位元組–專門儲存位元資料–佔一個位元組•浮點數–浮點數(float)(佔4個位元組)–倍精度浮點數(double)(佔8個位元組)基本的資料型態(Primitivetype)•字元字元字元字元–採Unicode編碼–前128個字元編碼與ASCII編碼相容–每個字元資料型態佔兩個位元組–可儲存的字元範圍由'\u0000'到'\uFFFF'•布林數–佔記憶體2個位元組–可儲存true與false兩個數值基本的資料型態(Primitivetype)System.out.printf(short\t數值範圍:%d~%d\n,Short.MAX_VALUE,Short.MIN_VALUE);System.out.printf(int\t數值範圍:%d~%d\n,Integer.MAX_VALUE,Integer.MIN_VALUE);System.out.printf(long\t數值範圍:%d~%d\n,Long.MAX_VALUE,Long.MIN_VALUE);System.out.printf(byte\t數值範圍:%d~%d\n,Byte.MAX_VALUE,Byte.MIN_VALUE);System.out.printf(float\t數值範圍:%e~%e\n,Float.MAX_VALUE,Float.MIN_VALUE);System.out.printf(double\t數值範圍:%e~%e\n,Double.MAX_VALUE,Double.MIN_VALUE);變數、常數•在Java中要使用變數,必須先宣告變數名稱與資料型態•使用int、float、double、char等關鍵字來宣告變數名稱並指定其資料型態–不可以使用數字作為開頭–不可以使用一些特殊字元,像是*&^%之類–不可以與Java內定的關鍵字同名intage;//宣告一個整數變數doublescope;//宣告一個倍精度浮點數變數變數、常數•鼓勵用清楚的名稱來表明變數的作用•不可以宣告變數後,而在未指定任何值給它之前就使用它•編譯器在編譯時會回報這個錯誤intageOfStudent;intageOfTeacher;variablevarmightnothavebeeninitialized變數、常數•使用「指定運算子」'='來指定變數的值intageOfStudent=5;doublescoreOfStudent=80.0;charlevelOfStudent='B';System.out.println(年級\t得分\t等級);System.out.printf(%4d\t%4.1f\t%4c,ageOfStudent,scoreOfStudent,levelOfStudent);變數、常數•宣告變數名稱的同時,加上“final”關鍵字來限定•這個變數一但指定了值,就不可以再改變它的值finalintmaxNum=10;maxNum=20;cannotassignavaluetofinalvariablemaxNum算術運算•加(+)、減(-)、乘(*)、除(/)、餘除運算子(%)–System.out.println(1+2*3);–System.out.println(1+2+3/4);–System.out.println((double)(1+2+3)/4);算術運算•這段程式會印出什麼結果?•使用下面的方法inttestNumber=10;System.out.println(testNumber/3);inttestNumber=10;System.out.println(testNumber/3.0);System.out.println((double)testNumber/3);算術運算•將精確度大的值指定給精確度小的變數時,由於在精確度上會有遺失,編譯器會認定這是一個錯誤inttestInteger=0;doubletestDouble=3.14;testInteger=testDouble;System.out.println(testInteger);possiblelossofprecisionfound:doublerequired:inttestInteger=testDouble^1error算術運算•必須明確加上轉換的限定字,編譯器才不會回報錯誤•'%'運算子是餘除運算子testInteger=(int)testDouble;count=(count+1)%360;比較、條件運算•大於()、不小於(=)、小於()、不大於(=)、等於(==)、不等於(!=)System.out.println(105結果+(105));System.out.println(10=5結果+(10=5));System.out.println(105結果+(105));System.out.println(10=5結果+(10=5));System.out.println(10==5結果+(10==5));System.out.println(1