JavaRush /Java Blog /Random-JA /レベル 21. レベルのトピックに関するインタビューの質問への回答
zor07
レベル 31
Санкт-Петербург

レベル 21. レベルのトピックに関するインタビューの質問への回答

Random-JA グループに公開済み
レベル 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. 等しいをオーバーライドするがオーバーライドしない場合はどうなりますかhashCode?

    最初はhashCode乱数です。

    Java のコレクションは、を使用してオブジェクトを比較する前に、equals常に メソッド を使用してコレクションを検索/比較しますhashCode()。また、同一のオブジェクトに異なる がある場合hashCode、それらのオブジェクトは異なるものとみなされます。それらを使用して比較することは単純に不可能ですequals

  4. メソッドがwaitnotify、であるのはなぜですかnotifyAll?

    プログラムでは、スレッドがコードのブロックに入りsynchronized、モニターがブロックされ、それ以上動作できない状況が発生することがあります。一部のデータがまだ不足しています。たとえば、処理すべきファイルがまだロードされていないなどです。この問題を解決する方法が発明されましたwait()。このメソッドを呼び出すと、スレッドはモニターを解放して「一時停止」します。

    一時停止を解除するには、メソッドが使用されますnotifynotifyAllこのメソッドはnotify、ランダムな 1 つのスレッドを「フリーズ解除」します。このメソッドは、notifyAll指定されたモニターの「フリーズされた」すべてのスレッドを「フリーズ解除」します。

  5. オブジェクトを正しく複製するにはどうすればよいですか?

    クローン作成には 2 種類あります。

    デフォルトのオブジェクトのクローンを作成するには:

    • 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()動作が不安定。

    この方法は期待に応えられません。Java マシンは、オブジェクトの破棄やメソッドの呼び出しをfinalize好きなだけ遅らせることができます。さらに、このメソッドが呼び出されるという保証はまったくありません。多くの状況では、「最適化」のためにこの関数は呼び出されません。

  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