隨筆 - 26  文章 - 2  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1. PrintStream myout = new PrintStream(new FileOutputStream(new File("D:/log.log")));        
          2. System.setOut(myout);         
          3. System.setErr(myout);
          posted @ 2011-11-18 00:15 Java_liyadong 閱讀(251) | 評論 (0)編輯 收藏
               摘要: 類與對象 【學習目標】本章主要介紹類類型的定義、構造函數與析構函數的定義與作用、友元函數與友元類的聲明與作用、派生類的定義與作用、虛函數和多態性的概念、靜態數據成員的聲明與定義、模板類的定義與實例化等內容。通過本章的學習,要求同學們:掌握類的概念,類類型的定義格式,類與結構的關系,類與操作符重載,類的成員屬性,類的封裝性,類的繼承性,構造函數和析構函數的作用,this指針的含義,類對象的...  閱讀全文
          posted @ 2011-10-09 22:03 Java_liyadong 閱讀(324) | 評論 (0)編輯 收藏
               摘要: 1 類和結構類和結構可以看作是創建對象的模板。每個對象都包括數據,并提供處理和訪問數據的方法。類定義了每個對象(實例)包含什么樣的數據與功能1.1封裝“封裝”有時被稱為面向對象的編程的第一個支柱或原則。根據封裝的原則,類或結構可以指定其每個成員對于該類或結構外部的代碼的可訪問性。可將無意在類或程序集外部使用的方法和變量隱藏起來,以減小編碼錯誤或遭惡意利用的可能性。1.2&n...  閱讀全文
          posted @ 2011-10-09 21:58 Java_liyadong 閱讀(363) | 評論 (0)編輯 收藏
          1.變更的概念
              變量就是系統為程序分配的一塊內存單元,用來存儲各種類型的數據。根據所存儲的數據類型的不同,有各種不同類型的變量。變量名代表這塊內存中的數據 。
          2.java的變量類型
          java編程基礎-變量及變量的作用域
          3.變量字節大小及有效取值范圍
          byte占用一個字節,數字大小為-27—27-1
          short占用兩個字節,數字大小為-215—215-1
          int占用四個字節,數字大小為-231—231-1
          long占用八個字節,數字大小為-263—263-1
          float占用四個字節,數字大小為1.4E-45~3.4E+38 , -1.4E-45~-3.4E+38 。用二進制的指數形式表示一個浮點數的格式,如:101*22  , 101*2-3
          double占用八個字節,數字大小為4.9E-324~1.7E+308, -4.9E-324~-1.7E+308 。
          char占兩個字節,數字大小為0—216-1,是unicode編碼。字符的本來面目,我們為什么可以直接將一個數字賦給字符變量。
          Boolean占一個字節,其取值只有兩個,true和false。
          4.基本數據類型之間的轉換

          自動類型轉換(也叫隱式類型轉換)

          實現這種轉換要滿足兩個條件,第一是兩種類型彼此兼容,第二是目標類型的取值范圍大于源類型。如,當byte型向int型轉換時,由于int型取值范圍大于byte型,就會發生自動轉換。所有的數字類型,包括整型和浮點型彼此都可以進行這樣的轉換。如:

          byte b=3;

          int x=b;
          強制類型轉換(也叫顯式類型轉換)

          當兩種類型彼此不兼容,或目標類型取值范圍小于源類型時,自動轉換無法進行,這時就需要進行強制類型轉換。強制類型轉換的通用格式如下:

          目標類型 變量=(目標類型)值,如:

          byte a;

          int b;

          a=(byte)b;
          表達式的數據類型自動提升
          所有的byte型、short型和char的值將被提升到int型。
          如果一個操作數是long型,計算結果就是long型;
          如果一個操作數是float型,計算結果就是float型;
          如果一個操作數是double型,計算結果就是double型。

          5.變量的作用域

              變量要先定義,后使用,但也不是在變量定義后的語句一直都能使用前面定義的變量。我們可以用大括號將多個語句包起來形成一個復合語句,變量只能在定義它的復合語句中使用。
          public class TestScope
          {
              public static void main(String[] args)
             {
                  int x = 12;          
                       {
                             int q = 96;  // x和q都可用
                             int x = 3;//錯誤的定義,Java中不允許有這種嵌套定義
                             System.out.println("x is "+x);
                             System.out.println("q is "+q);
                       }
                      q = x;    
                      System.out.println("x is "+x);     
             }

          6.局部變量的初始化

              在一個函數或函數里而把代碼塊中定義的變量稱為局部變量,局部變量在函數或代碼塊被執行時創建,在函數或代碼塊結束時被銷毀。局部變量在進行取值操作前必須被初始化或進行過賦值操作,否則會出現編譯錯誤!

           

          posted @ 2011-10-09 21:38 Java_liyadong 閱讀(4119) | 評論 (0)編輯 收藏

          Java 的循環語句有for,while 和 do-while 。這些語句創造了我們通常所稱的循環(loops)。你可能知道,一個循環重復執行同一套指令直到一個結束條件出現。你將看到,Java 有

          Java 的循環語句有for,while 和 do-while 。這些語句創造了我們通常所稱的循環(loops)。你可能知道,一個循環重復執行同一套指令直到一個結束條件出現。你將看到,Java 有適合任何編程所需要的循環結構。

           

          5.2.1 while 語句

          while 語句是Java 最基本的循環語句。當它的控制表達式是真時,while 語句重復執行一個語句或語句塊。它的通用格式如下:

           

          while(condition) {

          // body of loop

          }

           

           

          條件condition 可以是任何布爾表達式。只要條件表達式為真,循環體就被執行。當條件condition 為假時,程序控制就傳遞到循環后面緊跟的語句行。如果只有單個語句需要重復,大括號是不必要的。

           

          下面的while 循環從10開始進行減計數,打印出10行“tick”。

           

          // Demonstrate the while loop.

          class While {

          public static void main(String args[]) {

          int n = 10;

           

           

          while(n > 0) {

          System.out.println("tick " + n);

          n--;

           

           

          }

          }

          }

           

           

          當你運行這個程序,它將“tick”10次:

           

          tick 10

          tick 9

          tick 8

          tick 7

          tick 6

          tick 5

          tick 4

          tick 3

          tick 2

          tick 1

           

           

          因為while 語句在循環一開始就計算條件表達式,若開始時條件為假,則循環體一次也不會執行。例如,下面的程序中,對println( ) 的調用從未被執行過:

           

          int a = 10, b = 20;

           

          while(a > b)

          System.out.println("This will not be displayed");

           

           

          while 循環(或Java 的其他任何循環)的循環體可以為空。這是因為一個空語句(null statement) (僅由一個分號組成的語句)在Java 的語法上是合法的。例如,下面的程序:

           

          // The target of a loop can be empty.

          class NoBody {

          public static void main(String args[]) {

           

           

          int i, j;

          i = 100;

          j = 200;

           

           

          // find midpoint between i and j

          while(++i < --j) ; // no body in this loop

           

           

          System.out.println("Midpoint is " + i);

          }

          }

           

           

          該程序找出變量i和變量j的中間點。它產生的輸出如下:

           

          Midpoint is 150

           

          該程序中的while 循環是這樣執行的。值i自增,而值j自減,然后比較這兩個值。如果新的值i仍比新的值j小,則進行循環。如果i等于或大于j,則循環停止。在退出循環前,i 將保存原始i和j的中間值(當然,這個程序只有在開始時i比j小的情況下才執行)。正如你看到的,這里不需要循環體。所有的行為都出現在條件表達式自身內部。在專業化的Java 代碼中,一些可以由控制表達式本身處理的短循環通常都沒有循環體。

           

          5.2.2 do-while 循環

          如你剛才所見,如果while 循環一開始條件表達式就是假的,那么循環體就根本不被執行。然而,有時需要在開始時條件表達式即使是假的情況下,while 循環至少也要執行一次。換句話說,有時你需要在一次循環結束后再測試中止表達式,而不是在循環開始時。幸運的是,Java 就提供了這樣的循環:do-while 循環。do-while 循環總是執行它的循環體至少一次,因為它的條件表達式在循環的結尾。它的通用格式如下:

           

          do {

          // body of loop

          } while (condition);

           

           

          do-while 循環總是先執行循環體,然后再計算條件表達式。如果表達式為真,則循環繼續。否則,循環結束。對所有的Java 循環都一樣,條件condition 必須是一個布爾表達式。下面是一個重寫的“tick”程序,用來演示do-while 循環。它的輸出與先前程序的輸出相同。

           

          // Demonstrate the do-while loop.

          class DoWhile {

          public static void main(String args[]) {

          int n = 10;

           

           

          do {

          System.out.println("tick " + n);

          n--;

           

           

          } while(n > 0);

          }

          }

           

           

          該程序中的循環雖然在技術上是正確的,但可以像如下這樣編寫更為高效:

          do {

          System.out.println("tick " + n);

          } while(--n > 0);

           

           

          在本例中,表達式“-- n > 0 ”將n值的遞減與測試n是否為0組合在一個表達式中。它的執行過程是這樣的。首先,執行-- n 語句,將變量n遞減,然后返回n的新值。這個值再與0比較,如果比0大,則循環繼續。否則結束。

           

          do-while 循環在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環體至少執行一次。下面的程序是一個實現Java 選擇和重復語句的很簡單的幫助系統:

           

          // Using a do-while to process a menu selection

          class Menu {

           

           

          public static void main(String args[])

          throws java.io.IOException {

          char choice;

           

           

          do {

          System.out.println("Help on:");

          System.out.println(" 1. if");

          System.out.println(" 2. switch");

          System.out.println(" 3. while");

          System.out.println(" 4. do-while");

          System.out.println(" 5. for ");

          System.out.println("Choose one:");

          choice = (char) System.in.read();

           

           

          } while( choice < '1' || choice > '5');

           

          System.out.println(" ");

           

          switch(choice) {

           

          case '1':

          System.out.println("The if: ");

          System.out.println("if(condition) statement;");

          System.out.println("else statement;");

           

           

          break;

           

          case '2':

          System.out.println("The switch: ");

          System.out.println("switch(expression) {");

          System.out.println(" case constant:");

          System.out.println(" statement sequence");

          System.out.println(" break;");

          System.out.println(" // ...");

          System.out.println("}");

          break;

           

           

          case '3':

          System.out.println("The while: ");

          System.out.println("while(condition) statement;");

          break;

           

           

          case '4':

          System.out.println("The do-while: ");

          System.out.println("do {");

           

           

          System.out.println(" statement;");

          System.out.println("} while (condition);");

          break;

           

          case '5':

          System.out.println("The for: ");

          System.out.print("for(init; condition; iteration)");

          System.out.println(" statement;");

          break;

           

           

          }

          }

          }

           

           

          下面是這個程序執行的一個樣本輸出:

           

          Help on:

           

          1. if

          2. switch

          3. while

          4. do-while

          5. for

          Choose one:

          4

          The do-while:

          do {

           

          statement;

          } while (condition);

           

           

          在程序中,do-while 循環用來驗證用戶是否輸入了有效的選擇。如果沒有,則要求用戶重新輸入。因為菜單至少要顯示一次,do-while 循環是完成此任務的合適語句。

           

          關于此例的其他幾點:注意從鍵盤輸入字符通過調用System.in.read( ) 來讀入。這是一個Java 的控制臺輸入函數。盡管Java 的終端 I/O (輸入/輸出)方法將在第12章中詳細討論,在這里使用System.in.read ( ) 來讀入用戶的選擇。它從標準的輸入讀取字符(返回整數,因此將返回值choice 定義為字符型)。默認地,標準輸入是按行進入緩沖區的,因此在你輸入的任何字符被送到你的程序以前,必須按回車鍵。

           

          Java 的終端輸入功能相當有限且不好使用。進一步說,大多數現實的Java 程序和applets (小應用程序)都具有圖形界面并且是基于窗口的。因此,這本書使用終端的輸入并不多。然而,它在本例中是有用的。另外一點:因為使用System.in.read ( ) ,程序必須指定throws java.io.IOException 子句。這行代碼對于處理輸入錯誤是必要的。這是Java 的異常處理的一部分,將在第10章討論。

           

          5.2.3 for 循環

          在第2章曾使用過一個for循環的簡單格式。你將看到,for循環是一個功能強大且形式靈活的結構。下面是for 循環的通用格式:

           

          for(initialization; condition; iteration) {

          // body

          }

           

           

          如只有一條語句需要重復,大括號就沒有必要。

           

           

          for循環的執行過程如下。第一步,當循環啟動時,先執行其初始化部分。通常,這是設置循環控制變量值的一個表達式,作為控制循環的計數器。重要的是你要理解初始化表達式僅被執行一次。下一步,計算條件condition 的值。條件condition 必須是布爾表達式。它通常將循環控制變量與目標值相比較。如果這個表達式為真,則執行循環體;如果為假,則循環終止。再下一步執行循環體的反復部分。這部分通常是增加或減少循環控制變量的一個表達式。接下來重復循環,首先計算條件表達式的值,然后執行循環體,接著執行反復表達式。這個過程不斷重復直到控制表達式變為假。

          下面是使用for 循環的“tick”程序:

           

          // Demonstrate the for loop.

          class ForTick {

          public static void main(String args[]) {

          int n;

           

           

          for(n=10; n>0; n--)

          System.out.println("tick " + n);

          }

          }

           

           

          for 循環中聲明循環控制變量

           

          控制for循環的變量經常只是用于該循環,而不用在程序的其他地方。在這種情況下,可以在循環的初始化部分中聲明變量。例如,下面重寫了前面的程序,使變量 n 在for循環中被聲明為整型:

           

          // Declare a loop control variable inside the for.

          class ForTick {

          public static void main(String args[]) {

           

           

          // here, n is declared inside of the for loop

          for(int n=10; n>0; n--)

          System.out.printl

           

           

           

          本篇文章來源于 黑基網-中國最大的網絡安全站點 原文鏈接:file:///C:/Documents%20and%20Settings/Administrator/桌面/網頁學習資料/java%20循環語句-知識-黑基網.htm

          posted @ 2011-10-09 21:37 Java_liyadong 閱讀(1057) | 評論 (0)編輯 收藏
          分支語句根據一定的條件,動態決定程序的流程方向,從程序的多個分支中選擇一個或幾個來執行。分支語句共有兩種:if語句和switeh語句

          分支語句根據一定的條件,動態決定程序的流程方向,從程序的多個分支中選擇一個或幾個來執行。分支語句共有兩種:if語句和switeh語句。

          1.if語句

          if語句的基本語法是:

          if{邏輯表達式}

          語句1;

          [else

          語句2:

          ]

          if語句中的else子句是可選的。if關鍵字之后的邏輯表達式必須得到一個邏輯值,不能像其他語言那樣以數值來代替。因為Java不提供數值與邏輯值之間的轉換。例如, C語言中的語句形式:

          iF(x)

          {…}

          應該寫作:

          int X=3;

          if(x!=O)

          {…}

          if語句的含義是:當邏輯表達式結果為true時,執行語句1,然后繼續執行if后面的語句。當邏輯表達式為false時,如果有else子句,則執行語句2,否則跳過該if語句,繼續執行后面的語句。語句1和語句2既可以是單語句,也可以是語句塊。

          posted @ 2011-10-09 21:34 Java_liyadong 閱讀(416) | 評論 (0)編輯 收藏
          運算符
          同大多數的編程語言一樣,Java語言也包含了許多的運算符。如果大家學習過C或者C++,會發現下面介紹的各種Java的運算符都與之類似。
          3.1.1 賦值運算符 =
                這是任何編程語言的最基本的運算符,它用來給變量指定一個值。對于基本類型來說,賦值都便于理解,將新的值賦給變量并保存在變量中供使用。但對于對象類型來說,這里就有一點區別,特別需要提醒大家注意。

          對象類型并不是把實際的值(這里是實例)賦給了對象類型的變量,而是賦給的一個參考指針。這樣,源對象類型的變量和新的這個變量實際上是指向的同一個實例,如果使用其中一個讓實例改變,那么相應的另一個所指向的實例也會改變。這里我們可以借用C里面的指針的概念來方便理解,但實際上Java是不具有指針的概念和定義的。

          我們通過下面的例子可以進一步來理解這個概念。

          import java.awt.Dimension;

          class ReferenceTest {

            Dimension a = new Dimension ( 5,10 );

            System.out.println (“a.height = ” + a.height ) ;

            Dimension b = a ;

            b.height = 30 ;

            System.out,println (“a.height = ” + a.height + “after change to b ”);

          }

          }
          復制代碼
          運行結果:

          c:\java Project\Reference>;java ReferenceTest

          a.height = 10

          a.    height = 30 afer change to b

          另外,賦值運算符還可以和其他的運算符,聯合組成新的賦值符。如*=、/=、+=、-=等等,這于C或者C++類似。

          3.1.2 比較運算符
          比較運算符是用來對相同數據類型的變量進行大小或者是否相等、相同的比較,返回的是Boolean類型的值。因此也就大概分為兩類。

          n        >;、>;=、<、<=

          這是比較變量的大小關系,與我們學過的任何編程語言相同,就不再介紹了。

          n        = = 、! = 

          這是比較變量是否相等或相同。這對于平常的比較基本類型的變量容易理解,只是我們要強調一下對對象類型的比較。與我們前面介紹的賦值運算符類似的是,它也是進行的對其參考指針的比較,而并不是比較兩個內容上的差別。我們可以借助下面的例子來理解。

          import java.awt.Button

          class CompareRefernce {

              public static void main ( String [ ] args ) {

                Button a = new Button ( “Exit”);

                Button b = new Button ( “Exit”);

                Button c = a;

                System.out.println ( “Is refernce a = = b ? ” + ( a = = b) ) ;

                System.out.println ( “Is refernce a = = c ? ” + ( a = = c) ) ;

          }

          }
          復制代碼

          運行結果:

          Is refernce a = = b ? false

          Is refernce a = = c ? true

          3.1.3 instanceof運算符
                這個是Java語言特殊的一個運算符,它是用來測試其對象是否屬于某類或其超類。但是這里需要提醒大家的是,如果你使用instanceof來比較不是一個繼承關系樹上的類,Java能夠編譯通過,但運行的時候會報錯。另外,你可以對null對象使用這個運算符,只是無論對于什么類測試的結果都是false。

          3.1.4 算術運算符
          加+、減-、乘*、除/和取模%運算,這與其他的編程語言類似,不再詳述。

          3.1.5 自增++、自減--運算符
          Java的自增和自減運算符,與C語言類似,同樣需要注意的是其放置的位置不同,可能的結果也不同。如果放置在變量的前面,表示先自增(減)再參與下步運算,而如果放置在后面則表示先參與運算再自增(減)。如下的例子說明了自增運算符的使用:

          class IncDec{

              public static void main ( String [ ] args ) {

                int a = 1;

                int b = 1;

                int c;

          int d;

          c = ++b;

          d = a++;

          c++;

                System.out.println ( “a = ” + a );

                System.out.println ( “b = ” + b );

                System.out.println ( “c = ” + c );

                System.out.println ( “d = ” + d );

          }

          }
          復制代碼

          運行結果:

          a = 2
          b = 2
          c = 3
          d = 1

          3.1.6 字符串連接運算符 +
                Java語言與C語言類似,也使用+作為連接字符串的運算符,這實際是對String類重載了+運算符。

          3.1.7 位運算符
          包括位移運算和位邏輯運算,這也與C語言相似。

          ->;        位移運算

                >;>;右移、<<左移、>;>;>;無符號右移。

          ->;        位邏輯運算

          &與、|或、^異或、~非運算,這于其他的編程語言類似,不再詳述。

          3.1.8 邏輯運算符
                與&&、或||,這于其他的編程語言類似,不再詳述。只是需要提醒大家不要把它們和位邏輯運算符混淆,這也是初學者最容易犯的錯誤。

          3.1.9 條件運算符 ?:
                這與C語言完全相同,具體不再解釋。

          3.1.10 類型轉換
                我們在編寫程序的時候經常需要對變量的類型進行轉換,Java語言與其他的編程語言類似,也提供兩種類型轉換方式,即顯式轉換和隱式轉換。轉換的對象可分為兩類,一是基本類型,二是對象類型。

          這里需要掌握這樣一個要點。對于基本類型來說,凡是大轉小(以類型的寬度考慮)需要使用顯式轉換,也就是需要在變量前面強制給出需要轉換成的類型。而對小轉大來說,系統會自行進行隱式轉換。

          對于對象類型來說,也與之類似。凡是超類轉子類則需要使用顯式強制轉換,而子類轉超類系統可自行進行隱式轉換。另外還需要注意的一點是,對于不在一個繼承關系樹上的類要進行強制轉換,Java編譯可通過,但實際運行會出錯。

          3.2 equals()方法
                equals()方法實際與= =運算符作用相同,也是用來比較相同類型的兩個變量是否相同或相等。只是有點區別的是,對于String類來說,它重載equals()方法,使用它不是比較兩個參考指針的區別,而是實際對所指向的具體內容進行比較,這也滿足了平時我們對比較字符串的實際需求。當然,對其他類來說,你也可以重載equals()方法,使其滿足你的實際需要,來比較兩個對象類型的變量。

          3.3 優先級 
                與其他編程語言類似的,Java語言的運算符同樣涉及到優先級別的問題,書上130頁從高到低給出了所有運算符的優先級。建議大家,如果對某些運算符之間的優先級不是很清楚的時候,可以使用()來改變它們的優先級關系。

          3.4 方法的參數傳遞
                最后,簡單討論一下方法的傳遞的問題。Java語言的參數傳遞類型主要可以分為兩種,值傳遞和引用傳遞。借助C語言的概念,我們知道,第一種就是把參數值直接復制成方法體的參數,這樣對方法體中的參數的改變不會影響到調用它的參數。而對于第二種,參數的引用(或者說是個指針)被傳遞給了方法體的參數,該引用用來訪問調用中指定的實際參數。這樣,對方法體參數的改變將會影響到調用方法體的參數。
                由于沒有指針的概念,Java的參數傳遞相對比較簡單。對于一般的基本類型來說,都采用的是值傳遞;而對于對象類型則是使用的引用傳遞
          posted @ 2011-10-09 21:32 Java_liyadong 閱讀(227) | 評論 (0)編輯 收藏


          Java語法總結 - 基本數據類型

          Java不是純的面向對象的語言,不純的地方就是這些基本數據類型不是對象。當然初期Java的運行速度很慢,基本數據類型能在一定程度上改善性能。如果你想編寫純的面向對象的程序,用包裝器類是取代基本數據類型就可以了。

          1、基本類型的存儲空間。byte--8位,short--16位,int--32位,long--64位,float--32位,double--64位。這六種數字類型都是有符號的。固定的存儲空間正是Java可移植性、跨平臺的原因之一!

          2、基本類型的存在導致了Java OOP的不純粹性。因為基本類型不是對象,一切皆對象是個小小的謊言。這是出于執行效率的權衡。

          3、使用公式-2的(位數-1)次冪到2的(位數-1)次冪-1確定整數類型的范圍(byte、short、int、long)。

          4、char是16位Unicode字符或者說是16位無符號整數,范圍從0到65535。即便如此,可以強制轉換非法的數據,如:char c1 = (char) 10000;  char c2 = (char) -200;。可以從二進制存儲的角度理解這點。

          5、整數有八進制(以0開頭的整數)、十進制、十六進制(以0x或0X開頭的整數)表示。

          6、char可以用單引號表示單個字符,如:'良'。也可以用unicode值'"ucafe'(四位十六進制數)。

          7、布爾型boolean。布爾型只能是true或者false,并且測試它為真還是假。它不能進行任何其他的運算,或者轉化為其他類型。
          正例:boolean b1 = 1 > 2;    反例:int seen = button.isVisible();
          實踐:簡潔是美德,請不要這樣寫:if ( is == true && done == false ) ,只有新手才那么寫。
          對于任何程序員 if ( whether && !done ) 都不難理解吧。所以去掉所有的==fasle 和 ==true。

          8、默認的浮點類型是雙精度(double),要想要一個float必須在浮點數后面加F或者f。如:float pi = 3.14;是錯誤的。

          9、默認的整數類型是int型,要想使用長整型可在后面加“l”或“L”,如:1000L。(小寫l容易被誤認為1,不推薦用)

          10、float可以精確到7位有效數字,第8位的數字是第9位數字四舍五入上取得的;double可以精確到16位有效數字,第17位的數字是第18位數字四舍五入上取得的。蓋茨到底有多少錢?要用double表示,用float是裝不下的……

          11、如果要求精確的答案,請不要使用float和double,因為它們是為了在廣域數值范圍上提供較為精確的快速近似運算而精心設計的。然而,它們沒有提供完全精確的結果。尤其是對貨幣計算尤為不適合,因為要讓一個float或double精確地表達0.1(或者10的任何)

          12、BigInteger支持任意精度的整數。BigDecimal支持任意精度的定點數。

          13、初始化無論怎么強調都不過分!Java為所有的成員變量提供了默認初始化:byte、short、 int、long--0  float--0.0f double--0.0  boolean--false  char--'"u0000',特別地對象類型的引用全被初始化為null。(注意!除了數組之外的局部變量是得不到這種優待的,需要你自己初始化。另外,默認初始化的值是你想要的嗎?所以最好明確地對變量進行初始化,一般是在構造函數中。)

          14、基本類型之間的轉化。Java的類型檢查很嚴格,從低精度轉換到高精度是無須顯式轉換的,double d = 123;。但是反過來,進行窄化轉換,由高精度向低精度,或者一種類型到另一種類型,則必須使用強制類型轉化。Java提供了安全轉化機制,但是結果是否是期望的,你自己保證吧。
          double d = 12.5;
          float f = (int) d; //結果不是13,而是12!
          浮點型轉化為整型時,不進行四舍五入,直接截斷小數點后面的數。

          15、提升。各種基本數據類型進行混合運算,結果會是表達能力最強的那種。如:int和long運算,結果是long,整型和浮點型運算結果是浮點型。特殊的一點是:只要類型比int小(如char、byte、short),那么在運算之前,這些值會自動地轉換成int。例子:
          byte b1 = 12;
          byte b2 = b1 + 1; //在編譯時出錯了!因為b1+1已經是int型了!切記!

          16、浮點類型的科學表示法。在數學中e代表自然對數(Math.E給出了double值),而在Java中e代表10的冪次。浮點型的數可以這樣表示float f = 1e-27f; 代表1乘以10的負27次冪。
          posted @ 2011-10-09 21:31 Java_liyadong 閱讀(225) | 評論 (0)編輯 收藏
          public class TestMethod {
          public static void main(String[] args) {
          m();
          m2(2);
          m3('3', 4);
          m4(4, 6);
          int i = m4(4, 6);
          System.out.println(i);
          }
          public static void m() {
          //return;
          System.out.println("ok");
          System.out.println("hello");
          }
          public static void m2(int i) {
          if(i > 3) 
          return;
          System.out.println(i);
          }
          public static void m3(int i, int j) {
          System.out.println(i + j);
          }
          public static int m4(int i, int j) {
          return i > j ? i : j;
          }
          }
          posted @ 2011-10-09 21:28 Java_liyadong 閱讀(213) | 評論 (0)編輯 收藏
          Java中的main()方法詳解
           
          在Java中,main()方法是Java應用程序的入口方法,也就是說,程序在運行的時候,第一個執行的方法就是main()方法,這個方法和其他的方法有很大的不同,比如方法的名字必須是main,方法必須是public static void 類型的,方法必須接收一個字符串數組的參數等等。
           
          在看Java中的main()方法之前,先看一個最簡單的Java應用程序HelloWorld,我將通過這個例子說明Java類中main()方法的奧秘,程序的代碼如下:
           
          /** 
          * Java中的main()方法詳解 
          */
           
          public class HelloWorld { 
              public static void main(String args[]) { 
                  System.out.println("Hello World!"); 
              } 
          }
           
          一、先說類:
           
          HelloWorld 類中有main()方法,說明這是個java應用程序,通過JVM直接啟動運行的程序。
          既然是類,java允許類不加public關鍵字約束,當然類的定義只能限制為public或者無限制關鍵字(默認的)。
           
          二、再說main()方法
           
          這個main()方法的聲明為:public static void main(String args[])。必須這么定義,這是Java的規范。
           
          為什么要這么定義,和JVM的運行有關系。
          當一個類中有main()方法,執行命令“java 類名”則會啟動虛擬機執行該類中的main方法。
           
          由于JVM在運行這個Java應用程序的時候,首先會調用main方法,調用時不實例化這個類的對象,而是通過類名直接調用因此需要是限制為public static。
           
          對于java中的main方法,jvm有限制,不能有返回值,因此返回值類型為void。
          main方法中還有一個輸入參數,類型為String[],這個也是java的規范,main()方法中必須有一個入參,類細必須String[],至于字符串數組的名字,這個是可以自己設定的,根據習慣,這個字符串數組的名字一般和sun java規范范例中mian參數名保持一致,取名為args。
           
          因此,main()方法定義必須是:“public static void main(String 字符串數組參數名[])”。
           
          三、main()方法中可以throw Exception
           
          因此main()方法中可以拋出異常,main()方法上也可以聲明拋出異常。
           
          比如,下面這個寫法是正確的:
          public class TestMain { 
                  public static void main(String[] args) throws Exception { 
                          System.out.println("哈哈哈哈哈"); 
                          throw new Exception(""); 
                  } 
          }
           
          運行結果:
          哈哈哈哈哈 
          Exception in thread "main" java.lang.Exception:    
            at maintest.TestMain.main(TestMain.java:11) 
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
            at java.lang.reflect.Method.invoke(Method.java:585) 
            at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) 

          Process finished with exit code 1
           
          四、main()方法中字符串參數數組作用
           
          main()方法中字符串參數數組作用是接收命令行輸入參數的,命令行的參數之間用空格隔開。
           
          下面給出一個例子,看看如何初始化和使用這個數組的。
          /**
          * 打印main方法中的輸入參數 
          */
           
          public class TestMain { 
              public static void main(String args[]){ 
                  System.out.println("打印main方法中的輸入參數!"); 
                  for(int i=0;i<args.length;i++){ 
                      System.out.println(args[i]); 
                  } 
              } 
          }
           
          執行方法和運行結果
          D:\Study\basetest\src>javac TestMain.java 

          D:\Study\basetest\src>java TestMain 1 2 3 
          打印main方法中的輸入參數! 


           
           
          五、給出HelloWorld的另外一個版本
           
          /** 
          * 變態版的HelloWorld.呵呵 
          */
           
          public class HelloWorld2 { 
              static { 
                  System.out.println("Hello Wordld!"); 
              } 
              public static void main(String args[]){ 
                  System.exit(0); 
              } 
          }
           
          這個main()方法執行的內容就一句"System.exit(0);" ,目的是讓程序正常結束。那“HelloWorld!”是從哪里打印的,秘密就是在static打印的,因為static代碼塊的內容會在main調用前調用。
           
          總結:
          main方法作為一個特殊的規范,與普通的方法有很大區別,限制很多,理解其原理需要學習JVM相關知識。是Java中學習中大障礙。這是我對main原理和使用的總結,歡迎各位在此討論。
          posted @ 2011-10-09 21:27 Java_liyadong 閱讀(207) | 評論 (0)編輯 收藏
          僅列出標題  下一頁
          主站蜘蛛池模板: 北海市| 邵阳市| 屯留县| 灵丘县| 宁阳县| 黎平县| 黄骅市| 黑山县| 乌兰浩特市| 绍兴市| 嫩江县| 宽甸| 商洛市| 荣成市| 保定市| 上蔡县| 阿图什市| 海盐县| 自治县| 吴江市| 兴文县| 离岛区| 呼玛县| 北安市| 汨罗市| 崇左市| 渝北区| 武胜县| 北流市| 榆林市| 图木舒克市| 金川县| 花垣县| 萍乡市| 东明县| 临漳县| 龙陵县| 凤台县| 页游| 南澳县| 沂水县|