JavaRush /Java 博客 /Random-ZH /第 21 级。有关该级别主题的面试问题的答案
zor07
第 31 级
Санкт-Петербург

第 21 级。有关该级别主题的面试问题的答案

已在 Random-ZH 群组中发布
第 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