<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ゞ沉默是金ゞ

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

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

     答:不正確,應為float f=3.4f

    2. 當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?

     答:是引用傳遞。

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

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

    4. Error與Exception有什么區別?

     答:Error(錯誤)表示系統級的錯誤和程序不必處理的異常,是java運行環境中的內部錯誤或者硬件問題,比如,內存資源不足等,對于這種錯誤,程序基本無能為力,除了退出運行外別無選擇。

          Exception(違例)表示需要捕捉或者需要程序進行處理的異常,它處理的是因為程序設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的。

    5. 談談final, finally的區別。

     答:final是修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract,又被聲明為final。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

          Finally是在異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話),只要有finally語句塊,無論程序如何運行,它都必然被執行到。

    6. String s = new String("xyz");創建了幾個String Object?

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

    7. short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?

     答:第一個有錯誤,因為s1=s1+1,不能把s1強制轉為int類型的
                           第二個沒有錯誤,因為s1+=1的時候會把short類型的s1自動轉型為int類型 

    8. 數組有沒有length()這個方法? String有沒有length()這個方法?

     答:數組沒有,String有。

    9. Overload和Override的區別

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

    10. abstract class和interface有什么區別?

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

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

    11. 構造器Constructor是否可被override?

     答:構造器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();

      }


      }
     

    請問輸出結果為:

      FatherClass Create+

      FatherClass Create

      ChildClass Create

    22. 多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?
      答:多線程有三種實現方法,分別為:
      ① 實現Runnable接口,覆蓋Run()方法。
      ② 繼承Thread,覆蓋Run()方法。
      ③ 繼承TimerTask,覆蓋Run()方法。
      同步的實現是在方法前加synchronized,在調用wait()和notify()。
    23. 請說出你所知道的線程同步的方法
      答:1. synchronized 方法:通過在方法聲明中加入 synchronized關鍵字來聲明 synchronized 方法。
                2. synchronized 塊:通過 synchronized關鍵字來聲明synchronized 塊。
    24. 當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
      答:不可以。synchronized 方法都必須獲得調用該方法的類實例的鎖方能執行,否則所屬線程阻塞,方法一旦執行,就獨占該鎖,直到從該方法返回時才將鎖釋放,此后被阻塞的線程才能獲得該鎖,重新進入可執行狀態。
    25. 用JAVA SOCKET編程,實現簡單的Echo功能
      如: 客戶端從鍵盤輸入 hi (當用戶輸出exit 退出程序),服務端響應為 hi(服務器要求為多線程)
      解:服務器程序:
    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

      }

      從下列選項中選擇兩個正確的答案放在 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的區別


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


    16. JAVA類實現序例化的方法是?


      答:JAVA類要實現序列化,對應的類必須先實現Serializable和 Externalizable這兩種接口,然后就可以調用ObjectOutputStream的witeObject()方法來保存對象以及通過 ObjeatInputStream的readObjeact()方法來讀取保存的對象。


    17. Collection框架中實現比較要實現什么接口?


      答:要實現Comparable接口,并實現這個接口的唯一方法cpmparaTo(),接受一個Object對象,在這個方法中可以定義對象的排序規則。


    18. 介紹JAVA中的Collection 框架結構 , 并畫出來


      <>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. 編程題::寫一個滿足Singleton模式的類出來

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

    public class Singleton {

      
    private Singleton(){}

      
    //在自己內部定義自己一個實例,是不是很奇怪?
      
    //注意這是private 只供內部調用

      
    private static Singleton instance = new Singleton();

      
    //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問  
      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()可以訪問單態類。

    上面第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以后就不用再生成了。

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

    一般認為第一種形式要更加安全些。

    使用Singleton注意事項
    有時在某些情況下,使用Singleton并不能達到Singleton的目的,如有多個Singleton對象同時被不同的類裝入器裝載;在EJB這樣的分布式系統中使用也要注意這種情況,因為EJB是跨服務器,跨JVM的。

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

    在Pet Store中ServiceLocator有兩種,一個是EJB目錄下;一個是WEB目錄下,我們檢查這兩個ServiceLocator會發現內容差不多,都是提供EJB的查詢定位服務,可是為什么要分開呢?仔細研究對這兩種ServiceLocator才發現區別:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator屬于資源定位,理所當然應該使用Singleton模式。但是在EJB中,Singleton模式已經失去作用,所以ServiceLocator才分成兩種,一種面向WEB服務的,一種是面向EJB服務的。

    Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類 線程 內存等概念有相當的了解。

    總之:如果你的應用基于容器,那么Singleton模式少用或者不用,可以使用相關替代技術。

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

      解:

    import java.io.*;

      
    class interceptString 

      


      String interceptStr; 

      
    int interceptByte; 

      
    public interceptString(String str,int bytes) 

      


      interceptStr
    =str; 

      interceptByte
    =bytes; 

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

      }
     

      
    public void interceptIt() 

      


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

      System.out.println(
    "截取后斷數為:"+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 ゞ沉默是金ゞ 閱讀(2002) 評論(18)  編輯  收藏 所屬分類: Java SE

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

    7. short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?

     答:兩個錯誤都是一樣的,后者只是加法的寫法不一樣,兩個錯誤都是因為s1是short型而1是整型相加后數據類型就變為整型了,與s1定義為short型有矛盾,必須進行強制類型轉換才正確。

    請在編譯器中試試看??

    本來想收藏的,但是看到有錯誤........
      回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享
    2009-03-04 13:06 | wangbing
    單例類需要加上鎖,不然多線程調用還是會創建多個實例。

      回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享
    2009-03-04 15:13 | Vagrant
    有問題、有問題......  回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享
    2009-03-04 15:55 | wangkun
    6. String s = new String("xyz");創建了幾個String Object?
    是兩個對象,但是不是一個字符對象,一個引用對象~!是一個在字符串緩沖區一個對象和一個字符對象。
    7. short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?

     答:第一個有錯,第二個沒有錯誤。

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

    20. 編程題::寫一個滿足Singleton模式的類出來
    單例類需要加上鎖,不然多線程調用還是會創建多個實例


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

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


    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";
    }

    權威書籍如core java等都有類似“The Java programming language always uses call by value”的話,舉以上例子是為了以理服人,而非以書服人。
      回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享[未登錄]
    2009-03-05 19:43 | 水煮魚
    第二題(到底是值傳遞還是引用傳遞? ) 出的很垃圾!
    always by value in Java!無論怎么傳,傳的都是 “引用”的值!不知道 什么是引用就無語了!  回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享[未登錄]
    2009-03-10 17:41 | 無語
    昨天被這套題目鄙視了,第二題面試官煞有介事的說這個你做錯了,引用傳遞(我的答案是值傳遞,傳遞的是引用的拷貝值),無語了。還有變態的第6題幾個String對象的問題。我的答案是1個或2個,如果常量池中沒有"XYZ"這個對象系統會在堆中和棧中各創建一個,如果常量池中已經有了則只會在堆中創建一個。面試官告訴我我的理解有誤,這不是String a = "XYZ" ,暈死  回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享
    2009-03-11 09:05 | ゞ沉默是金ゞ
    @無語
    引用傳遞傳遞的不是引用的拷貝值,常量池中沒有"XYZ"這個對象也不會在堆中和棧中各創建一個,對象置于堆中,引用置于棧中。
    你上網多查查這些資料即可  回復  更多評論
      
    # re: Java應用基礎:網友精選25個Java試題分享
    2009-03-13 13:30 | 寒風
    謝謝分享……  回復  更多評論
      
    主站蜘蛛池模板: 永久免费不卡在线观看黄网站| 亚洲黄色在线观看网站| 国产人妖ts在线观看免费视频| 国语成本人片免费av无码 | 亚洲一区二区三区日本久久九| 亚洲精品乱码久久久久久自慰| 亚洲午夜无码久久久久| 久久乐国产精品亚洲综合| 久久精品国产亚洲AV不卡| 亚洲国产成人a精品不卡在线| 免费成人午夜视频| 亚洲日韩精品无码专区网站| 国产av无码专区亚洲国产精品| 亚洲愉拍99热成人精品热久久| 亚洲精品中文字幕乱码三区| 亚洲AV本道一区二区三区四区| 91天堂素人精品系列全集亚洲| 亚洲综合丁香婷婷六月香| 亚洲欧洲AV无码专区| 边摸边吃奶边做爽免费视频网站| 九九九国产精品成人免费视频| a级片免费在线观看| 亚洲一区二区在线免费观看| 日本免费xxxx色视频| 色吊丝最新永久免费观看网站| 免费一级毛片正在播放| 久久久久亚洲AV综合波多野结衣| 亚洲国产第一站精品蜜芽| 666精品国产精品亚洲| 亚洲精品无码国产片| 青青草97国产精品免费观看 | 亚洲欧美日韩综合久久久久| 特黄aa级毛片免费视频播放| 国产真人无码作爱免费视频| 69视频免费在线观看| 成人免费无码大片a毛片软件 | 亚洲高清视频免费| 午夜电影免费观看| 狠狠亚洲婷婷综合色香五月排名| 亚洲综合国产精品| 久久久久久亚洲精品无码|