-
Listar métodos de classe
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Por que os & métodos são necessárioshashCode
?Usado para comparar objetos.
O objetivo do método
equals
é determinar se os objetos são internamente idênticos, comparando o conteúdo interno dos objetos. Issoequals
funciona lentamente, primeiro os códigos hash dos objetos são comparados e, se os códigos hash forem iguais, é feita uma verificaçãoequals
-
O que acontece se você substituir equals, mas não substituir
hashCode
?Inicialmente
hashCode
, um número aleatório.equals
Coleções em Java sempre procuram/comparam-nas usando o método antes de comparar objetos usandohashCode()
. E se objetos idênticos tiverem diferenteshashCode
, então os objetos serão considerados diferentes - simplesmente não será possível compará-los com elesequals
. -
Por que os métodos são
wait
,notify
,notifyAll
?Às vezes, um programa pode passar por uma situação em que um thread entrou em um bloco de código
synchronized
, bloqueou o monitor e não pode continuar trabalhando, porque ainda faltam alguns dados: por exemplo, o arquivo que deveria processar ainda não foi carregado ou algo parecido. Um método foi inventado para resolver este problemawait()
. Chamar esse método faz com que o thread libere o monitor e "pause".Para retomar, são usados métodos
notify
.notifyAll
O métodonotify
“descongela” um thread aleatório, o métodonotifyAll
– todos os threads “congelados” de um determinado monitor. -
Como clonar um objeto corretamente?
Dois tipos de clonagem.
Para clonar um objeto padrão:
- Adicione uma interface
Cloneable
à sua classe - Substitua o método
clone
e chame a implementação base nele:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
clone
Ou você mesmo pode escrever a implementação do método :class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
- Adicione uma interface
-
Por que o método é necessário
finalize()
e como funciona?Se você se lembra, este
finalize()
é um método especial chamado em um objeto antes que o coletor de lixo o destrua.O objetivo principal deste método é liberar recursos externos não Java usados: fechar arquivos, fluxos de E/S, etc.
finalize()
funciona instável.Este método não corresponde às expectativas nele depositadas. A máquina Java pode atrasar a destruição de um objeto, bem como a chamada de um método,
finalize
pelo tempo que desejar. Além disso, não garante que esse método seja chamado. Em muitas situações, por uma questão de “otimização” não é chamado. -
Qual é a diferença
final
,finally
,finalize
?final
- modificador- Os campos não podem ser alterados, os métodos são substituídos
- As classes não podem ser herdadas
- Este modificador só se aplica a classes, métodos e variáveis (também variáveis locais)
- Os argumentos do método marcados como são
final
somente leitura; tentar alterá-los resultará em um erro de compilação. - Переменные
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