ゞ沉默是金ゞ

          魚離不開水,但是沒有說(shuō)不離開哪滴水.
          posts - 98,comments - 104,trackbacks - 0

          1. float型float f=3.4是否正確?

           答:不正確,應(yīng)為float f=3.4f

          2. 當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?

           答:是引用傳遞。

          3. 在java中一個(gè)類被聲明為final類型,表示了什么意思?

           答:表示該類不能被繼承,意味著它不能再派生出新的子類,不能作為父類被繼承,是頂級(jí)類。

          4. Error與Exception有什么區(qū)別?

           答:Error(錯(cuò)誤)表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,是java運(yùn)行環(huán)境中的內(nèi)部錯(cuò)誤或者硬件問題,比如,內(nèi)存資源不足等,對(duì)于這種錯(cuò)誤,程序基本無(wú)能為力,除了退出運(yùn)行外別無(wú)選擇。

                Exception(違例)表示需要捕捉或者需要程序進(jìn)行處理的異常,它處理的是因?yàn)槌绦蛟O(shè)計(jì)的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的。

          5. 談?wù)刦inal, finally的區(qū)別。

           答:final是修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract,又被聲明為final。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

                Finally是在異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話),只要有finally語(yǔ)句塊,無(wú)論程序如何運(yùn)行,它都必然被執(zhí)行到。

          6. String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?

           答:創(chuàng)建了兩個(gè),new String("xyz")是一個(gè)對(duì)象,“xyz”一個(gè)對(duì)象,他們2個(gè)存放在堆區(qū)中,而s只是一個(gè)指向 new String("xyz")的引用變量,存放于棧區(qū)中。

          7. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?

           答:第一個(gè)有錯(cuò)誤,因?yàn)閟1=s1+1,不能把s1強(qiáng)制轉(zhuǎn)為int類型的
                                 第二個(gè)沒有錯(cuò)誤,因?yàn)閟1+=1的時(shí)候會(huì)把short類型的s1自動(dòng)轉(zhuǎn)型為int類型 

          8. 數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?

           答:數(shù)組沒有,String有。

          9. Overload和Override的區(qū)別

           答:方法的覆蓋(Overriding)和重載(Overloading)是 Java多態(tài)性的不同表現(xiàn)。覆蓋(Overriding)是父類與子類之間多態(tài)性的一種表現(xiàn),重載(Overloading)是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被覆蓋 (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法可以改變返回值的類型。

          10. abstract class和interface有什么區(qū)別?

           答:聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法

            接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口

          11. 構(gòu)造器Constructor是否可被override?

           答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

          12. 是否可以繼承String類?

           答:String類是final類所以不可以繼承。

          13. 題目如下:

           父類:
           

          public class FatherClass
          {
            
          public FatherClass()
            
          {
                System.out.println(
          "FatherClass Create");
             }


            }
           

                    子類:

           

          public class ChildClass extends FatherClass

            
          {

            
          public ChildClass()

            
          {

            System.out.println(
          "ChildClass Create");

            }


            
          public static void main(String[] args)

            
          {

            FatherClass fc 
          = new FatherClass();

            ChildClass cc 
          = new ChildClass();

            }


            }
           

          請(qǐng)問輸出結(jié)果為:

            FatherClass Create+

            FatherClass Create

            ChildClass Create

          22. 多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
            答:多線程有三種實(shí)現(xiàn)方法,分別為:
            ① 實(shí)現(xiàn)Runnable接口,覆蓋Run()方法。
            ② 繼承Thread,覆蓋Run()方法。
            ③ 繼承TimerTask,覆蓋Run()方法。
            同步的實(shí)現(xiàn)是在方法前加synchronized,在調(diào)用wait()和notify()。
          23. 請(qǐng)說(shuō)出你所知道的線程同步的方法
            答:1. synchronized 方法:通過(guò)在方法聲明中加入 synchronized關(guān)鍵字來(lái)聲明 synchronized 方法。
                      2. synchronized 塊:通過(guò) synchronized關(guān)鍵字來(lái)聲明synchronized 塊。
          24. 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
            答:不可以。synchronized 方法都必須獲得調(diào)用該方法的類實(shí)例的鎖方能執(zhí)行,否則所屬線程阻塞,方法一旦執(zhí)行,就獨(dú)占該鎖,直到從該方法返回時(shí)才將鎖釋放,此后被阻塞的線程才能獲得該鎖,重新進(jìn)入可執(zhí)行狀態(tài)。
          25. 用JAVA SOCKET編程,實(shí)現(xiàn)簡(jiǎn)單的Echo功能
            如: 客戶端從鍵盤輸入 hi (當(dāng)用戶輸出exit 退出程序),服務(wù)端響應(yīng)為 hi(服務(wù)器要求為多線程)
            解:服務(wù)器程序:
          import java.io.*

            
          import java.net.*

            
          public class MyServer extends Thread

            
          private Socket cq ; 

            
          public MyServer(Socket cq) 

            


            
          this.cq = cq; 

            }
           

            
          public void run() 

            


            
          try 

            


            BufferedReader in
          =new BufferedReader(new InputStreamReader(cq.getInputStream())); 

            PrintWriter out
          =new PrintWriter(cq.getOutputStream()); 

            
          while(true

            


            String str
          =in.readLine(); 

            System.out.println(str); 

            out.println(
          "message: "+str); 

            out.flush(); 

            
          if(str.equals("exit")) 

            
          break

            }
           

            }
           

            
          catch(IOException e) 

            


            System.out.println(e.message()); 

            }
           

            }
           

            
          public static void main(String[] args) throws IOException

            ServerSocket server
          =new ServerSocket(8009); 

            
          while(true

            


            Socket s
          =server.accept(); 

            
          new MyServer(s).start(); 

            }
           

            }
           

            }
          客戶端程序:
          import java.net.*

            
          import java.io.*

            
          public class MyClient

            
          public static void main(String[] args)throws Exception 

            


            Socket server
          =new Socket("localhost",8009); 

            BufferedReader in
          =new BufferedReader(new InputStreamReader(server.getInputStream())); 

            PrintWriter out
          =new PrintWriter(server.getOutputStream()); 

            BufferedReader br
          =new BufferedReader(new InputStreamReader(System.in)); 

            
          while(true

            


            String str
          =br.readLine(); 

            out.println(str); 

            out.flush(); 

            
          if(str.equals("exit"))

            
          break

            }
           

            System.out.println(in.readLine()); 

            }
           

            server.close(); 

            }
           

            }

          14. public class OuterClass {

            private double d1 = 1.0;

            //insert code here ~~ line 3

            }

            從下列選項(xiàng)中選擇兩個(gè)正確的答案放在 line 3 中(C E)

            A. class InnerOne{


            public static double methoda() {return d1;}


            }


            B. public class InnerOne{


            static double methoda() {return d1;}


            }


            C. private class InnerOne{


            double methoda() {return d1;}


            }


            D. static class InnerOne{


            protected double methoda() {return d1;}


            }


            E. abstract class InnerOne{


            public abstract double methoda();


            }


          15. STRING與STRINGBUFFER的區(qū)別


            答:STRING的長(zhǎng)度是不可變的,一旦一個(gè)String對(duì)象被創(chuàng)建,包含在這個(gè)實(shí)例中的內(nèi)容(“字符串”)不可以被更改,直至這個(gè)對(duì)象被銷毀,因此,指向一個(gè) String對(duì)象的變量實(shí)質(zhì)上是一個(gè)常量,String對(duì)象也被稱為常量對(duì)象;STRINGBUFFER的長(zhǎng)度是可變的,可以通過(guò) StringBuffer的append()、insert()、reverse()、setCharAt()、setLength()等方法,可以對(duì)這個(gè)字符串中的內(nèi)容修改。如果你對(duì)字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法


          16. JAVA類實(shí)現(xiàn)序例化的方法是?


            答:JAVA類要實(shí)現(xiàn)序列化,對(duì)應(yīng)的類必須先實(shí)現(xiàn)Serializable和 Externalizable這兩種接口,然后就可以調(diào)用ObjectOutputStream的witeObject()方法來(lái)保存對(duì)象以及通過(guò) ObjeatInputStream的readObjeact()方法來(lái)讀取保存的對(duì)象。


          17. Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)什么接口?


            答:要實(shí)現(xiàn)Comparable接口,并實(shí)現(xiàn)這個(gè)接口的唯一方法cpmparaTo(),接受一個(gè)Object對(duì)象,在這個(gè)方法中可以定義對(duì)象的排序規(guī)則。


          18. 介紹JAVA中的Collection 框架結(jié)構(gòu) , 并畫出來(lái)


            <>Collection


            <>Set


            <>List


            HashSet


            Tree set


            ArrayList


            Vector


          19. 編程題:列出某文件夾下的所有文件 (文件夾從命令行輸入)


            解:

          import java.io.*

            
          public class listFile 

            


            
          public static void main (String[] args) 

            


            String s
          =""

            InputStreamReader ir
          =new InputStreamReader(System.in); 

            BufferedReader in 
          = new BufferedReader(ir); 

            
          try 

            s 
          = in.readLine(); 

            File f
          =new File(s); 

            File[] files
          =f.listFiles(); 

            
          for(int i=0;i 

            


            
          if(files[i].isFile()) 

            


            System.out.println(
          "文件:"+files[i]); 

            }
           

            
          else 

            


            System.out.println(
          "目錄:"+files[i]); 

            }
           

            }
           

            in.close(); 

            }
           

            
          catch (IOException e) 

            


            e.printStackTrace(); 

            }
           

            }
           

            }

          20. 編程題::寫一個(gè)滿足Singleton模式的類出來(lái)

          一般Singleton模式通常有幾種形式:

          public class Singleton {

            
          private Singleton(){}

            
          //在自己內(nèi)部定義自己一個(gè)實(shí)例,是不是很奇怪?
            
          //注意這是private 只供內(nèi)部調(diào)用

            
          private static Singleton instance = new Singleton();

            
          //這里提供了一個(gè)供外部訪問本class的靜態(tài)方法,可以直接訪問  
            public static Singleton getInstance() {
              
          return instance;   
             }
           
          }
           
           

          第二種形式:

          public class Singleton 
            
          private static Singleton instance = null;

            
          public static synchronized Singleton getInstance() {

            
          if (instance==null)
              instance=
          new Singleton();
            
          return instance;   }
           

          }
           

           

          使用Singleton.getInstance()可以訪問單態(tài)類。

          上面第二中形式是lazy initialization,也就是說(shuō)第一次調(diào)用時(shí)初始Singleton,以后就不用再生成了。

          注意到lazy initialization形式中的synchronized,這個(gè)synchronized很重要,如果沒有synchronized,那么使用getInstance()是有可能得到多個(gè)Singleton實(shí)例。關(guān)于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的討論,有興趣者進(jìn)一步研究。

          一般認(rèn)為第一種形式要更加安全些。

          使用Singleton注意事項(xiàng)
          有時(shí)在某些情況下,使用Singleton并不能達(dá)到Singleton的目的,如有多個(gè)Singleton對(duì)象同時(shí)被不同的類裝入器裝載;在EJB這樣的分布式系統(tǒng)中使用也要注意這種情況,因?yàn)镋JB是跨服務(wù)器,跨JVM的。

          我們以SUN公司的寵物店源碼(Pet Store 1.3.1)的ServiceLocator為例稍微分析一下:

          在Pet Store中ServiceLocator有兩種,一個(gè)是EJB目錄下;一個(gè)是WEB目錄下,我們檢查這兩個(gè)ServiceLocator會(huì)發(fā)現(xiàn)內(nèi)容差不多,都是提供EJB的查詢定位服務(wù),可是為什么要分開呢?仔細(xì)研究對(duì)這兩種ServiceLocator才發(fā)現(xiàn)區(qū)別:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator屬于資源定位,理所當(dāng)然應(yīng)該使用Singleton模式。但是在EJB中,Singleton模式已經(jīng)失去作用,所以ServiceLocator才分成兩種,一種面向WEB服務(wù)的,一種是面向EJB服務(wù)的。

          Singleton模式看起來(lái)簡(jiǎn)單,使用方法也很方便,但是真正用好,是非常不容易,需要對(duì)Java的類 線程 內(nèi)存等概念有相當(dāng)?shù)牧私狻?/p>

          總之:如果你的應(yīng)用基于容器,那么Singleton模式少用或者不用,可以使用相關(guān)替代技術(shù)。

          21. 編程:編寫一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個(gè),如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個(gè)”

            解:

          import java.io.*;

            
          class interceptString 

            


            String interceptStr; 

            
          int interceptByte; 

            
          public interceptString(String str,int bytes) 

            


            interceptStr
          =str; 

            interceptByte
          =bytes; 

            System.out.println(
          "字符串為:'"+interceptStr+"';字節(jié)數(shù)為:"+interceptByte); 

            }
           

            
          public void interceptIt() 

            


            
          int interceptCount; interceptCount=(interceptStr.length()%interceptByte==0)?(interceptStr.length()/interceptByte):(interceptStr.length()/interceptByte+1); 

            System.out.println(
          "截取后斷數(shù)為:"+interceptCount); 

            
          for (int i=1;i<=interceptCount ;i++ ) 

            
          if (i==interceptCount) 

            


            System.out.println(interceptStr.substring((i
          -1)*interceptByte,interceptStr.length())); 

            }
           else 

            


            System.out.println(interceptStr.substring((i
          -1)*interceptByte,(i*interceptByte))); 

            }
           

            }
           

            }
           

            
          public static void main(String[] args) 

            


            String s
          =""

            InputStreamReader ir
          =new InputStreamReader(System.in); 

            BufferedReader in 
          = new BufferedReader(ir); 

            
          try 

            s 
          = in.readLine(); 

            interceptString ss 
          = new interceptString(s,4); 

            ss.interceptIt(); 

            in.close(); 

            }
           catch (IOException e) 

            
          { e.printStackTrace();} 

            }
           

            }
          posted on 2009-03-04 12:27 ゞ沉默是金ゞ 閱讀(2007) 評(píng)論(18)  編輯  收藏 所屬分類: Java SE

          FeedBack:
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享[未登錄]
          2009-03-04 13:00 | bluesky
          11. 構(gòu)造器Constructor是否可被override?
           答:可以。
          **********************************************
          構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

          7. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?

           答:兩個(gè)錯(cuò)誤都是一樣的,后者只是加法的寫法不一樣,兩個(gè)錯(cuò)誤都是因?yàn)閟1是short型而1是整型相加后數(shù)據(jù)類型就變?yōu)檎土耍cs1定義為short型有矛盾,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換才正確。

          請(qǐng)?jiān)诰幾g器中試試看??

          本來(lái)想收藏的,但是看到有錯(cuò)誤........
            回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-04 13:06 | wangbing
          單例類需要加上鎖,不然多線程調(diào)用還是會(huì)創(chuàng)建多個(gè)實(shí)例。

            回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-04 15:13 | Vagrant
          有問題、有問題......  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-04 15:55 | wangkun
          6. String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
          是兩個(gè)對(duì)象,但是不是一個(gè)字符對(duì)象,一個(gè)引用對(duì)象~!是一個(gè)在字符串緩沖區(qū)一個(gè)對(duì)象和一個(gè)字符對(duì)象。
          7. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?

           答:第一個(gè)有錯(cuò),第二個(gè)沒有錯(cuò)誤。

          11. 構(gòu)造器Constructor是否可被override?
          不能
          24. 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
          可以,synchronized只是鎖定加了synchronized關(guān)鍵字的方法。其他線程可以進(jìn)入其他方法。
          19. 編程題:列出某文件夾下的所有文件
          我覺得此題主要是考遞歸算法吧~!

          20. 編程題::寫一個(gè)滿足Singleton模式的類出來(lái)
          單例類需要加上鎖,不然多線程調(diào)用還是會(huì)創(chuàng)建多個(gè)實(shí)例


            回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-04 16:48 | heyang
          現(xiàn)在Java初學(xué)者找工作不僅僅是邁過(guò)門檻的問題了,他們最大的困難是直接面對(duì)有經(jīng)驗(yàn)者的競(jìng)爭(zhēng)。  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 07:52 | loocky
          第6題的答案是完全錯(cuò)誤的,new String("xyz") 是一個(gè)對(duì)象 "xyz"也是一個(gè)對(duì)象,引用不是一個(gè)只是reference 到new String("xyz") 這個(gè)對(duì)象上,是存了一個(gè)地址而已,請(qǐng)看深入JAVA虛擬機(jī)第二版,曹曉剛翻譯的那本  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 07:53 | loocky
          第20題答案也不對(duì),這樣不敢保證單例,用雙檢查造單例才是最穩(wěn)妥的辦法  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 09:10 | ゞ沉默是金ゞ
          @wangkun
          謝謝你的關(guān)注,我已修改面試6題  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 09:14 | ゞ沉默是金ゞ
          @bluesky
          我已修改,謝謝關(guān)注!  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 09:18 | ゞ沉默是金ゞ
          @Vagrant
          已修改,請(qǐng)關(guān)注。。。  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 09:29 | ゞ沉默是金ゞ
          @wangbing
          @loocky
          幫忙再看單例模式,謝謝  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 13:51 | 鄭暉
          本來(lái)不想湊熱鬧,難得博主從善如流,我就重復(fù)在http://www.aygfsteel.com/xcp/archive/2009/03/01/base25.html中跟帖的內(nèi)容(那位博主比你先貼出同樣內(nèi)容的貼子)——

          如果你了解指針,就知道Java永遠(yuǎn)是按值傳遞的。
          Java通過(guò)引用能改變對(duì)象的值,但不能改變對(duì)象引用本身。本質(zhì)上,Java傳入的是引用對(duì)象的地址值。考慮一下,你能否寫一個(gè)swap函數(shù)void swap(Object a, Object b)將兩個(gè)引用對(duì)象交換?Java不能,C也不能,但在C++中可以通過(guò)&符號(hào)、C#中可以通過(guò)關(guān)鍵詞ref來(lái)完成pass by reference。
            回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 15:02 | ゞ沉默是金ゞ
          @鄭暉
          2個(gè)引用變量只想2個(gè)對(duì)象,能改變引用變量指向的對(duì)象,但是不能改變對(duì)象本身。引用變量是存放于棧內(nèi)存中的,而對(duì)象本身是存放于堆內(nèi)存中的。一旦創(chuàng)建對(duì)象,那對(duì)象在內(nèi)存中所占用的內(nèi)存地址是不可改變的  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-05 17:37 | 鄭暉
          @ゞ沉默是金ゞ
          首先澄清一點(diǎn),所謂Java按值傳遞,這個(gè)值不是對(duì)象本身的值,而是對(duì)象引用的值。下面分別以java、c++和c#為例來(lái)驗(yàn)證是否能改變一個(gè)傳入的字符串對(duì)象的引用(其他類型的對(duì)象同理)。


          java:
          static void change(String s)// 按值傳遞,s不變
          {
          s = "changed";
          }

          c++:
          void change(string s) // 按值傳遞,s不變
          {
          s = "changed";
          }
          void change(string& s) // 按引用傳遞,s改變
          {
          s = "changed";
          }

          c#:

          static void change(string s) // 按值傳遞,s不變
          {
          s = "changed";
          }

          static void change(ref string s) // 按引用傳遞,s改變
          {
          s = "changed";
          }

          權(quán)威書籍如core java等都有類似“The Java programming language always uses call by value”的話,舉以上例子是為了以理服人,而非以書服人。
            回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享[未登錄]
          2009-03-05 19:43 | 水煮魚
          第二題(到底是值傳遞還是引用傳遞? ) 出的很垃圾!
          always by value in Java!無(wú)論怎么傳,傳的都是 “引用”的值!不知道 什么是引用就無(wú)語(yǔ)了!  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享[未登錄]
          2009-03-10 17:41 | 無(wú)語(yǔ)
          昨天被這套題目鄙視了,第二題面試官煞有介事的說(shuō)這個(gè)你做錯(cuò)了,引用傳遞(我的答案是值傳遞,傳遞的是引用的拷貝值),無(wú)語(yǔ)了。還有變態(tài)的第6題幾個(gè)String對(duì)象的問題。我的答案是1個(gè)或2個(gè),如果常量池中沒有"XYZ"這個(gè)對(duì)象系統(tǒng)會(huì)在堆中和棧中各創(chuàng)建一個(gè),如果常量池中已經(jīng)有了則只會(huì)在堆中創(chuàng)建一個(gè)。面試官告訴我我的理解有誤,這不是String a = "XYZ" ,暈死  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-11 09:05 | ゞ沉默是金ゞ
          @無(wú)語(yǔ)
          引用傳遞傳遞的不是引用的拷貝值,常量池中沒有"XYZ"這個(gè)對(duì)象也不會(huì)在堆中和棧中各創(chuàng)建一個(gè),對(duì)象置于堆中,引用置于棧中。
          你上網(wǎng)多查查這些資料即可  回復(fù)  更多評(píng)論
            
          # re: Java應(yīng)用基礎(chǔ):網(wǎng)友精選25個(gè)Java試題分享
          2009-03-13 13:30 | 寒風(fēng)
          謝謝分享……  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 鹤山市| 宣化县| 虹口区| 阿瓦提县| 重庆市| 敦煌市| 梁平县| 本溪市| 鲁甸县| 麻栗坡县| 平潭县| 会宁县| 海安县| 博野县| 新昌县| 新余市| 衡东县| 宣威市| 永胜县| 华蓥市| 应用必备| 高邑县| 乌兰浩特市| 清远市| 宁陵县| 麻城市| 福清市| 兴海县| 肃南| 西安市| 天等县| 桐庐县| 三原县| 仙游县| 温泉县| 商水县| 合江县| 天津市| 西峡县| 甘洛县| 财经|