-
列出类方法
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
为什么需要
equals
方法hashCode
?用于比较对象。
该方法的目的
equals
是通过比较对象的内部内容来判断对象内部是否相同。这个equals
工作很慢,首先比较对象的哈希码,如果哈希码相等,则进行检查equals
-
如果您覆盖 equals 但不覆盖,会发生什么
hashCode
?最初
hashCode
是一个随机数。Java 中的集合在使用 比较对象之前
equals
总是使用方法来查找/比较它们hashCode()
。如果相同的对象有不同hashCode
,那么这些对象将被认为是不同的 - 根本不可能使用它们进行比较equals
。 -
为什么这些方法是
wait
,notify
?notifyAll
有时程序可能会出现这样的情况:线程进入了代码块
synchronized
,阻塞了监视器,无法进一步工作,因为 一些数据仍然丢失:例如,它应该处理的文件尚未加载或类似的东西。为了解决这个问题,发明了一种方法wait()
。调用此方法会导致线程释放监视器并“暂停”。要取消暂停,需要使用方法
notify
。notifyAll
该方法notify
“解冻”一个随机线程,该方法notifyAll
- 给定监视器的所有“冻结”线程。 -
如何正确克隆一个对象?
两种类型的克隆。
克隆默认对象:
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; } }
-
为什么需要该方法
finalize()
以及它是如何工作的?如果您还记得的话,这
finalize()
是一个特殊的方法,在垃圾收集器销毁对象之前会在对象上调用该方法。该方法的主要目的是释放使用的外部非Java资源:关闭文件、I/O流等。
finalize()
工作不稳定。这种方法没有达到人们对其的期望。
finalize
Java 机器可以根据需要延迟对象的销毁以及方法的调用。而且,它根本不保证这个方法会被调用。在很多情况下,为了“优化”,它不会被调用。 -
有什么不同
final
,finally
,finalize
?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. -
What такое
try-with-resources
?Это специальная конструкция
try
, называемаяtry-with-resources
, в которой Обрати внимание – послеtry
следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блокаtry
, обозначенного скобками{}
. Когда выполнение команд блокаtry
закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок()
, будет вызван методclose()
; -
Чем отличаются методы
wait(1000)
иsleep(1000)
?sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLEwait()
меняет состояние потока на WAITINGможет быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае
wait(int)
с аргументом состояние будет TIMED_WAITING -
В чем отличие
i++
и++i
?++i
,i
сначала увеличивается на 1, затем участвует в выражении.i++
,i
сначала участвует в выражении, затем увеличивается на 1.
GO TO FULL VERSION