-
Listar métodos de clase
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
¿Por qué se necesitan & métodoshashCode
?Se utiliza para comparar objetos.
El propósito del método
equals
es determinar si los objetos son internamente idénticos comparando el contenido interno de los objetos. Estoequals
funciona lentamente, primero se comparan los códigos hash de los objetos y, si los códigos hash son iguales, se realiza una verificación.equals
-
¿Qué sucede si anulas iguales pero no anulas
hashCode
?Inicialmente
hashCode
, un número aleatorio.equals
Las colecciones en Java siempre las buscan/comparan usando el método antes de comparar objetos usandohashCode()
. Y si objetos idénticos tienen diferenteshashCode
, entonces los objetos se considerarán diferentes; simplemente no será posible compararlos usandoequals
. -
¿Por qué los métodos son
wait
,notify
,notifyAll
?A veces, en un programa puede haber una situación en la que un hilo ha entrado en un bloque de código
synchronized
, ha bloqueado el monitor y no puede seguir funcionando, porque Todavía faltan algunos datos: por ejemplo, aún no se ha cargado el archivo que debería procesar o algo así. Se inventó un método para resolver este problemawait()
. Llamar a este método hace que el hilo libere el monitor y se "pause".Para reanudar la pausa, se utilizan métodos
notify
.notifyAll
El métodonotify
"descongela" un hilo aleatorio, el métodonotifyAll
- todos los hilos "congelados" de un monitor determinado. -
¿Cómo clonar un objeto correctamente?
Dos tipos de clonación.
Para clonar un objeto predeterminado:
- Añade una interfaz
Cloneable
a tu clase - Anule el método
clone
y llame a la implementación base en él:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
O puedes escribir la implementación del método
clone
tú mismo:class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
- Añade una interfaz
-
¿Por qué es necesario el método
finalize()
y cómo funciona?Si recuerda, este
finalize()
es un método especial que se llama a un objeto antes de que el recolector de basura lo destruya.El objetivo principal de este método es liberar recursos externos no Java usados: cerrar archivos, flujos de E/S, etc.
finalize()
Funciona inestable.Este método no está a la altura de las expectativas depositadas en él. La máquina Java puede retrasar la destrucción de un objeto, así como la llamada de un método,
finalize
todo el tiempo que quiera. Además, no garantiza que se llame a este método en absoluto. En muchas situaciones, por motivos de "optimización" no se llama así. -
Cuál es la diferencia
final
,finally
,finalize
?final
- modificador- Los campos no se pueden cambiar, los métodos se anulan
- Las clases no se pueden heredar
- Este modificador solo se aplica a clases, métodos y variables (también variables locales)
- Los argumentos del método marcados como son
final
de solo lectura; intentar cambiarlos resultará en un error de compilación. - Переменные
final
не инициализируются по умолчанию, им необходимо явно присвоить significado при объявлении o в конструкторе, иначе – ошибка компиляции - Если final переменная содержит ссылку на un objeto, un objeto может быть изменен, но переменная всегда будет ссылаться на тот же самый un objeto
- Также это справедливо и для массивов, потому что массивы являются un objetoами, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
- Если класс объявлен
final
иabstract
(взаимоисключающие понятия), произойдет ошибка компиляции - Так Cómo
final
класс не может наследоваться, его методы никогда не могут быть переопределены
finally
— блок в связкеtry-catch-finally
, código в котором выполнится независимо от того вылетело ли исключение в блокеtry
o нет. Используется для освобождения ресурсов.finalize
— метод в классеObject
см 6. -
Qué такое
try-with-resources
?Это специальная конструкция
try
, называемаяtry-with-resources
, в которой Обрати внимание – послеtry
следуют круглые скобки, где объявляются переменные и создаются un objetoы. Эти un objetoы можно использовать внутри блокаtry
, обозначенного скобками{}
. Когда выполнение команд блокаtry
закончится, независимо от того – нормально оно закончилось o было исключение, для un objetoа, созданного внутри круглых скобок()
, будет вызван методclose()
; -
Чем отличаются методы
wait(1000)
иsleep(1000)
?sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLEwait()
меняет состояние потока на WAITINGможет быть вызвано только у un objetoа владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае
wait(int)
с аргументом состояние будет TIMED_WAITING -
В чем отличие
i++
и++i
?++i
,i
сначала увеличивается на 1, затем участвует в выражении.i++
,i
сначала участвует в выражении, затем увеличивается на 1.
GO TO FULL VERSION