隨筆 - 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)編輯 收藏
               摘要: 類與對象 【學(xué)習(xí)目標(biāo)】本章主要介紹類類型的定義、構(gòu)造函數(shù)與析構(gòu)函數(shù)的定義與作用、友元函數(shù)與友元類的聲明與作用、派生類的定義與作用、虛函數(shù)和多態(tài)性的概念、靜態(tài)數(shù)據(jù)成員的聲明與定義、模板類的定義與實例化等內(nèi)容。通過本章的學(xué)習(xí),要求同學(xué)們:掌握類的概念,類類型的定義格式,類與結(jié)構(gòu)的關(guān)系,類與操作符重載,類的成員屬性,類的封裝性,類的繼承性,構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用,this指針的含義,類對象的...  閱讀全文
          posted @ 2011-10-09 22:03 Java_liyadong 閱讀(325) | 評論 (0)編輯 收藏
               摘要: 1 類和結(jié)構(gòu)類和結(jié)構(gòu)可以看作是創(chuàng)建對象的模板。每個對象都包括數(shù)據(jù),并提供處理和訪問數(shù)據(jù)的方法。類定義了每個對象(實例)包含什么樣的數(shù)據(jù)與功能1.1封裝“封裝”有時被稱為面向?qū)ο蟮木幊痰牡谝粋€支柱或原則。根據(jù)封裝的原則,類或結(jié)構(gòu)可以指定其每個成員對于該類或結(jié)構(gòu)外部的代碼的可訪問性。可將無意在類或程序集外部使用的方法和變量隱藏起來,以減小編碼錯誤或遭惡意利用的可能性。1.2&n...  閱讀全文
          posted @ 2011-10-09 21:58 Java_liyadong 閱讀(363) | 評論 (0)編輯 收藏
          1.變更的概念
              變量就是系統(tǒng)為程序分配的一塊內(nèi)存單元,用來存儲各種類型的數(shù)據(jù)。根據(jù)所存儲的數(shù)據(jù)類型的不同,有各種不同類型的變量。變量名代表這塊內(nèi)存中的數(shù)據(jù) 。
          2.java的變量類型
          java編程基礎(chǔ)-變量及變量的作用域
          3.變量字節(jié)大小及有效取值范圍
          byte占用一個字節(jié),數(shù)字大小為-27—27-1
          short占用兩個字節(jié),數(shù)字大小為-215—215-1
          int占用四個字節(jié),數(shù)字大小為-231—231-1
          long占用八個字節(jié),數(shù)字大小為-263—263-1
          float占用四個字節(jié),數(shù)字大小為1.4E-45~3.4E+38 , -1.4E-45~-3.4E+38 。用二進制的指數(shù)形式表示一個浮點數(shù)的格式,如:101*22  , 101*2-3
          double占用八個字節(jié),數(shù)字大小為4.9E-324~1.7E+308, -4.9E-324~-1.7E+308 。
          char占兩個字節(jié),數(shù)字大小為0—216-1,是unicode編碼。字符的本來面目,我們?yōu)槭裁纯梢灾苯訉⒁粋€數(shù)字賦給字符變量。
          Boolean占一個字節(jié),其取值只有兩個,true和false。
          4.基本數(shù)據(jù)類型之間的轉(zhuǎn)換

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

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

          byte b=3;

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

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

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

          byte a;

          int b;

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

          5.變量的作用域

              變量要先定義,后使用,但也不是在變量定義后的語句一直都能使用前面定義的變量。我們可以用大括號將多個語句包起來形成一個復(fù)合語句,變量只能在定義它的復(fù)合語句中使用。
          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.局部變量的初始化

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

           

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

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

          Java 的循環(huán)語句有for,while 和 do-while 。這些語句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個循環(huán)重復(fù)執(zhí)行同一套指令直到一個結(jié)束條件出現(xiàn)。你將看到,Java 有適合任何編程所需要的循環(huán)結(jié)構(gòu)。

           

          5.2.1 while 語句

          while 語句是Java 最基本的循環(huán)語句。當(dāng)它的控制表達式是真時,while 語句重復(fù)執(zhí)行一個語句或語句塊。它的通用格式如下:

           

          while(condition) {

          // body of loop

          }

           

           

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

           

          下面的while 循環(huán)從10開始進行減計數(shù),打印出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--;

           

           

          }

          }

          }

           

           

          當(dāng)你運行這個程序,它將“tick”10次:

           

          tick 10

          tick 9

          tick 8

          tick 7

          tick 6

          tick 5

          tick 4

          tick 3

          tick 2

          tick 1

           

           

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

           

          int a = 10, b = 20;

           

          while(a > b)

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

           

           

          while 循環(huán)(或Java 的其他任何循環(huán))的循環(huán)體可以為空。這是因為一個空語句(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的中間點。它產(chǎn)生的輸出如下:

           

          Midpoint is 150

           

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

           

          5.2.2 do-while 循環(huán)

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

           

          do {

          // body of loop

          } while (condition);

           

           

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

           

          // 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);

          }

          }

           

           

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

          do {

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

          } while(--n > 0);

           

           

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

           

          do-while 循環(huán)在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環(huán)體至少執(zhí)行一次。下面的程序是一個實現(xiàn)Java 選擇和重復(fù)語句的很簡單的幫助系統(tǒng):

           

          // 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;

           

           

          }

          }

          }

           

           

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

           

          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 循環(huán)用來驗證用戶是否輸入了有效的選擇。如果沒有,則要求用戶重新輸入。因為菜單至少要顯示一次,do-while 循環(huán)是完成此任務(wù)的合適語句。

           

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

           

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

           

          5.2.3 for 循環(huán)

          在第2章曾使用過一個for循環(huán)的簡單格式。你將看到,for循環(huán)是一個功能強大且形式靈活的結(jié)構(gòu)。下面是for 循環(huán)的通用格式:

           

          for(initialization; condition; iteration) {

          // body

          }

           

           

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

           

           

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

          下面是使用for 循環(huán)的“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 循環(huán)中聲明循環(huán)控制變量

           

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

           

          // 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

           

           

           

          本篇文章來源于 黑基網(wǎng)-中國最大的網(wǎng)絡(luò)安全站點 原文鏈接:file:///C:/Documents%20and%20Settings/Administrator/桌面/網(wǎng)頁學(xué)習(xí)資料/java%20循環(huán)語句-知識-黑基網(wǎng).htm

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

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

          1.if語句

          if語句的基本語法是:

          if{邏輯表達式}

          語句1;

          [else

          語句2:

          ]

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

          iF(x)

          {…}

          應(yīng)該寫作:

          int X=3;

          if(x!=O)

          {…}

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

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

          對象類型并不是把實際的值(這里是實例)賦給了對象類型的變量,而是賦給的一個參考指針。這樣,源對象類型的變量和新的這個變量實際上是指向的同一個實例,如果使用其中一個讓實例改變,那么相應(yīng)的另一個所指向的實例也會改變。這里我們可以借用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 ”);

          }

          }
          復(fù)制代碼
          運行結(jié)果:

          c:\java Project\Reference>;java ReferenceTest

          a.height = 10

          a.    height = 30 afer change to b

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

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

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

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

          n        = = 、! = 

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

          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) ) ;

          }

          }
          復(fù)制代碼

          運行結(jié)果:

          Is refernce a = = b ? false

          Is refernce a = = c ? true

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

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

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

          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 );

          }

          }
          復(fù)制代碼

          運行結(jié)果:

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

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

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

          ->;        位移運算

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

          ->;        位邏輯運算

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

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

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

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

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

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

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

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

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


          Java語法總結(jié) - 基本數(shù)據(jù)類型

          Java不是純的面向?qū)ο蟮恼Z言,不純的地方就是這些基本數(shù)據(jù)類型不是對象。當(dāng)然初期Java的運行速度很慢,基本數(shù)據(jù)類型能在一定程度上改善性能。如果你想編寫純的面向?qū)ο蟮某绦颍冒b器類是取代基本數(shù)據(jù)類型就可以了。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          16、浮點類型的科學(xué)表示法。在數(shù)學(xué)中e代表自然對數(shù)(Math.E給出了double值),而在Java中e代表10的冪次。浮點型的數(shù)可以這樣表示float f = 1e-27f; 代表1乘以10的負(fù)27次冪。
          posted @ 2011-10-09 21:31 Java_liyadong 閱讀(226) | 評論 (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 閱讀(214) | 評論 (0)編輯 收藏
          Java中的main()方法詳解
           
          在Java中,main()方法是Java應(yīng)用程序的入口方法,也就是說,程序在運行的時候,第一個執(zhí)行的方法就是main()方法,這個方法和其他的方法有很大的不同,比如方法的名字必須是main,方法必須是public static void 類型的,方法必須接收一個字符串?dāng)?shù)組的參數(shù)等等。
           
          在看Java中的main()方法之前,先看一個最簡單的Java應(yīng)用程序HelloWorld,我將通過這個例子說明Java類中main()方法的奧秘,程序的代碼如下:
           
          /** 
          * Java中的main()方法詳解 
          */
           
          public class HelloWorld { 
              public static void main(String args[]) { 
                  System.out.println("Hello World!"); 
              } 
          }
           
          一、先說類:
           
          HelloWorld 類中有main()方法,說明這是個java應(yīng)用程序,通過JVM直接啟動運行的程序。
          既然是類,java允許類不加public關(guān)鍵字約束,當(dāng)然類的定義只能限制為public或者無限制關(guān)鍵字(默認(rèn)的)。
           
          二、再說main()方法
           
          這個main()方法的聲明為:public static void main(String args[])。必須這么定義,這是Java的規(guī)范。
           
          為什么要這么定義,和JVM的運行有關(guān)系。
          當(dāng)一個類中有main()方法,執(zhí)行命令“java 類名”則會啟動虛擬機執(zhí)行該類中的main方法。
           
          由于JVM在運行這個Java應(yīng)用程序的時候,首先會調(diào)用main方法,調(diào)用時不實例化這個類的對象,而是通過類名直接調(diào)用因此需要是限制為public static。
           
          對于java中的main方法,jvm有限制,不能有返回值,因此返回值類型為void。
          main方法中還有一個輸入?yún)?shù),類型為String[],這個也是java的規(guī)范,main()方法中必須有一個入?yún)ⅲ惣?xì)必須String[],至于字符串?dāng)?shù)組的名字,這個是可以自己設(shè)定的,根據(jù)習(xí)慣,這個字符串?dāng)?shù)組的名字一般和sun java規(guī)范范例中mian參數(shù)名保持一致,取名為args。
           
          因此,main()方法定義必須是:“public static void main(String 字符串?dāng)?shù)組參數(shù)名[])”。
           
          三、main()方法中可以throw Exception
           
          因此main()方法中可以拋出異常,main()方法上也可以聲明拋出異常。
           
          比如,下面這個寫法是正確的:
          public class TestMain { 
                  public static void main(String[] args) throws Exception { 
                          System.out.println("哈哈哈哈哈"); 
                          throw new Exception(""); 
                  } 
          }
           
          運行結(jié)果:
          哈哈哈哈哈 
          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()方法中字符串參數(shù)數(shù)組作用
           
          main()方法中字符串參數(shù)數(shù)組作用是接收命令行輸入?yún)?shù)的,命令行的參數(shù)之間用空格隔開。
           
          下面給出一個例子,看看如何初始化和使用這個數(shù)組的。
          /**
          * 打印main方法中的輸入?yún)?shù) 
          */
           
          public class TestMain { 
              public static void main(String args[]){ 
                  System.out.println("打印main方法中的輸入?yún)?shù)!"); 
                  for(int i=0;i<args.length;i++){ 
                      System.out.println(args[i]); 
                  } 
              } 
          }
           
          執(zhí)行方法和運行結(jié)果
          D:\Study\basetest\src>javac TestMain.java 

          D:\Study\basetest\src>java TestMain 1 2 3 
          打印main方法中的輸入?yún)?shù)! 


           
           
          五、給出HelloWorld的另外一個版本
           
          /** 
          * 變態(tài)版的HelloWorld.呵呵 
          */
           
          public class HelloWorld2 { 
              static { 
                  System.out.println("Hello Wordld!"); 
              } 
              public static void main(String args[]){ 
                  System.exit(0); 
              } 
          }
           
          這個main()方法執(zhí)行的內(nèi)容就一句"System.exit(0);" ,目的是讓程序正常結(jié)束。那“HelloWorld!”是從哪里打印的,秘密就是在static打印的,因為static代碼塊的內(nèi)容會在main調(diào)用前調(diào)用。
           
          總結(jié):
          main方法作為一個特殊的規(guī)范,與普通的方法有很大區(qū)別,限制很多,理解其原理需要學(xué)習(xí)JVM相關(guān)知識。是Java中學(xué)習(xí)中大障礙。這是我對main原理和使用的總結(jié),歡迎各位在此討論。
          posted @ 2011-10-09 21:27 Java_liyadong 閱讀(208) | 評論 (0)編輯 收藏
          僅列出標(biāo)題  下一頁
          主站蜘蛛池模板: 天气| 烟台市| 郯城县| 齐齐哈尔市| 四会市| 太保市| 新乡县| 永州市| 新安县| 苗栗市| 云阳县| 广元市| 建平县| 宁城县| 罗山县| 抚顺市| 禄劝| 清流县| 玉树县| 太和县| 靖州| 黑河市| 河池市| 长海县| 建湖县| 塔城市| 二连浩特市| 荥阳市| 资源县| 左贡县| 叙永县| 思茅市| 炉霍县| 罗定市| 林州市| 拜泉县| 玉龙| 万盛区| 祁门县| 固阳县| 县级市|