Per curiosità,Perché il metodo finalize() in java.lang.Object è "protetto"?
Perché modificatore di accesso il metodo del finalize()
vengono prodotti come protected
. Perché non può essere public
? Qualcuno può spiegarmi qualche motivo specifico dietro a questo?
Inoltre, sono venuto a sapere che il metodo finalize()
viene chiamato una sola volta. Se lo chiamo due volte internamente al mio programma, cosa sta succedendo? Il garbage collector lo chiamerà di nuovo?
private void dummyCall() {
try {
finalize();
finalize();
} catch (Throwable e) {
e.printStackTrace();//NOT REACHES EXCEPTION
}
}
perché scriverebbe un metodo per richiamare finalize(). finalize() è invocato a distruzione di istanza da parte della JVM. non dovresti invocarlo. Puoi sovrascriverlo, nel caso in cui desideri un comportamento speciale al momento della distruzione ... – harschware
Sì. Personalmente non lo farei mai. Ma l'ho chiesto per curiosità dato che ho letto GC non lo invocherò se è già stato chiamato su un oggetto. Chi tiene traccia del fatto che questo metodo finalize() sia chiamato o meno è il mio dubbio. Non ho una spiegazione convincente per questa seconda domanda però. – bragboy
La vera domanda interessante è: perché * finalize() * è presente nella parte superiore della gerarchia di OO Java? Progetto LOC 200K qui e non abbiamo superato * finalize() * una sola volta. Alcuni potrebbero addirittura dire che è un odore di codice da sovrascrivere * finalize() * e alcuni eretici andrebbero oltre a dire che * finalize() * non esiste al livello OOA/OOD e che è presenza nella parte superiore di Java la gerarchia è una idiosincrasia (spezzata) di Java (e completamente non correlata al tuo spazio problematico).Alcune delle risposte in aumento qui considerate * finalize() * da spezzare/imperfezioni in un modo o nell'altro :) – SyntaxT3rr0r