JavaRush /Java Blog /Random-TW /第 21 級。有關該級別主題的面試問題的答案
zor07
等級 31
Санкт-Петербург

第 21 級。有關該級別主題的面試問題的答案

在 Random-TW 群組發布
第 21 級。第 1 級主題的面試問題的答案
  1. 列出類別方法Object

    • equals()
    • hashCode()
    • toString()
    • getClass()
    • notify()
    • notifyAll()
    • wait()
    • wait(long timeOut)
    • wait(long timeOut, int nanos)
  2. 為什麼需要equals方法hashCode

    用於比較物件。

    此方法的目的equals是透過比較物件的內部內容來判斷物件內部是否相同。這個equals工作很慢,首先比較物件的雜湊碼,如果雜湊碼相等,則進行檢查equals

  3. 如果您覆蓋 equals 但不覆蓋,會發生什麼hashCode

    最初hashCode是一個隨機數。

    Java 中的集合在使用 比較物件之前equals總是使用方法來尋找/比較它們hashCode()。如果相同的物件有不同hashCode,那麼這些物件將被認為是不同的 - 根本不可能使用它們進行比較equals

  4. 為什麼這些方法是wait, notifynotifyAll

    有時程式可能會出現這樣的情況:執行緒進入了程式碼區塊synchronized,阻塞了監視器,無法進一步工作,因為 一些資料仍然丟失:例如,它應該處理的文件尚未加載或類似的東西。為了解決這個問題,發明了一個方法wait()。呼叫此方法會導致執行緒釋放監視器並“暫停”。

    要取消暫停,需要使用方法notifynotifyAll該方法notify“解凍”一個隨機線程,該方法notifyAll- 給定監視器的所有“凍結”線程。

  5. 如何正確克隆一個物件?

    兩種類型的克隆。

    克隆預設物件:

    • Cloneable在您的類別中新增一個接口
    • 重寫該方法clone並呼叫其中的基本實作:
    class Point implements Cloneable
    {
     int x;
     int y;
    
     public Object clone()
     {
      return super.clone();
     }
    }

    clone或者你可以自己編寫該方法的實作:

    class Point
    {
     int x;
     int y;
    
     public Object clone()
     {
      Point point = new Point();
      point.x = this.x;
      point.y = this.y;
      return point;
     }
    }
  6. 為什麼需要該方法finalize()以及它是如何運作的?

    如果您還記得的話,這finalize()是一個特殊的方法,在垃圾收集器銷毀物件之前會在物件上呼叫該方法。

    此方法的主要目的是釋放使用的外部非Java資源:關閉檔案、I/O流等。

    finalize()工作不穩定。

    這種方法並沒有達到人們對其的期望。finalizeJava 機器可以根據需要延遲物件的銷毀以及方法的呼叫。而且,它根本不保證這個方法會被呼叫。在很多情況下,為了“最佳化”,它不會被呼叫。

  7. 有什麼不同finalfinallyfinalize

    • final- 修改器
    • 字段無法更改,方法被覆蓋
    • 類別不能被繼承
    • 此修飾符僅適用於類別、方法和變數(也是局部變數)
    • 標記為final唯讀的方法參數;嘗試更改它們將導致編譯錯誤。
    • Переменные final не инициализируются по умолчанию, им необходимо явно присвоить meaning при объявлении or в конструкторе, иначе – ошибка компиляции
    • Если final переменная содержит ссылку на an object, an object может быть изменен, но переменная всегда будет ссылаться на тот же самый an object
    • Также это справедливо и для массивов, потому что массивы являются an objectми, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
    • Если класс объявлен final и abstract (взаимоисключающие понятия), произойдет ошибка компиляции
    • Так How final класс не может наследоваться, его методы никогда не могут быть переопределены

    finally — блок в связке try-catch-finally, code в котором выполнится независимо от того вылетело ли исключение в блоке try or нет. Используется для освобождения ресурсов.

    finalize — метод в классе Object см 6.

  8. What такое try-with-resources?

    Это специальная конструкция try, называемая try-with-resources, в которой Обрати внимание – после try следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блока try, обозначенного скобками {}. Когда выполнение команд блока try закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок (), будет вызван метод close();

  9. Чем отличаются методы wait(1000) и sleep(1000)?

    sleep() приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLE

    wait() меняет состояние потока на WAITING

    может быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае wait(int) с аргументом состояние будет TIMED_WAITING

  10. В чем отличие i++ и ++i?

    • ++i, i сначала увеличивается на 1, затем участвует в выражении.
    • i++, i сначала участвует в выражении, затем увеличивается на 1.
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION