-
Répertorier les méthodes de classe
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Pourquoi & méthodes sont-elles nécessaireshashCode
?Utilisé pour comparer des objets.
Le but de la méthode
equals
est de déterminer si les objets sont identiques en interne en comparant le contenu interne des objets. Celaequals
fonctionne lentement, d'abord les codes de hachage des objets sont comparés, et si les codes de hachage sont égaux, une vérification est effectuée par rapport àequals
-
Que se passe-t-il si vous remplacez equals mais ne remplacez pas
hashCode
?Initialement
hashCode
, un nombre aléatoire.equals
Les collections en Java les recherchent/comparent toujours à l'aide de la méthode avant de comparer les objets à l'aide dehashCode()
. Et si des objets identiques ont des valeurs différenteshashCode
, alors les objets seront considérés comme différents - il ne sera tout simplement pas possible de les comparerequals
. -
Pourquoi les méthodes
wait
,notify
,notifyAll
?Parfois, dans un programme, il peut y avoir une situation où un thread est entré dans un bloc de code
synchronized
, a bloqué le moniteur et ne peut plus fonctionner, car certaines données manquent encore : par exemple, le fichier qu'il doit traiter n'a pas encore été chargé ou quelque chose comme ça. Une méthode a été inventée pour résoudre ce problèmewait()
. L’appel de cette méthode entraîne la libération du moniteur par le thread et sa « pause ».Pour reprendre la pause, des méthodes sont utilisées
notify
.notifyAll
La méthodenotify
« dégèle » un thread aléatoire, la méthodenotifyAll
– tous les threads « gelés » d'un moniteur donné. -
Comment cloner correctement un objet ?
Deux types de clonage.
Pour cloner un objet par défaut :
- Ajoutez une interface
Cloneable
à votre classe - Remplacez la méthode
clone
et appelez-y l'implémentation de base :
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
Ou vous pouvez écrire vous-même l’implémentation de la méthode
clone
:class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
- Ajoutez une interface
-
Pourquoi cette méthode est-elle nécessaire
finalize()
et comment fonctionne-t-elle ?Si vous vous en souvenez, il
finalize()
s'agit d'une méthode spéciale qui est appelée sur un objet avant que le garbage collector ne le détruise.L'objectif principal de cette méthode est de libérer les ressources externes non Java utilisées : fichiers de fermeture, flux d'E/S, etc.
finalize()
fonctionne de manière instable.Cette méthode n’est pas à la hauteur des attentes placées en elle. La machine Java peut retarder la destruction d'un objet, ainsi que l'appel d'une méthode,
finalize
aussi longtemps qu'elle le souhaite. De plus, cela ne garantit pas du tout que cette méthode sera appelée. Dans de nombreuses situations, par souci d'« optimisation », cela n'est pas appelé. -
Quelle est la différence
final
,finally
,finalize
?final
- modificateur- Les champs ne peuvent pas être modifiés, les méthodes sont remplacées
- Les classes ne peuvent pas être héritées
- Ce modificateur s'applique uniquement aux classes, méthodes et variables (également aux variables locales)
- Les arguments de méthode marqués comme sont en
final
lecture seule ; toute tentative de les modifier entraînera une erreur de compilation. - Переменные
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