salve a tutti..vorrei imparare a programmare in java..qualche esperto di voi mi potrebbe consigliare un ottimo manuale??ho già buone conoscenze di C++..
Grazie
salve a tutti..vorrei imparare a programmare in java..qualche esperto di voi mi potrebbe consigliare un ottimo manuale??ho già buone conoscenze di C++..
Grazie
Io consiglio sempre The Java Programming Language, 4th Edition o la versione italiana Il Linguaggio Java - Manuale ufficiale - 4 EdizioneOriginariamente inviato da thedreamer84
salve a tutti..vorrei imparare a programmare in java..qualche esperto di voi mi potrebbe consigliare un ottimo manuale??ho già buone conoscenze di C++..
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ma una copia scaricabile direttamente dal web non esiste??ovviamente una buona..
Se conosci bene il C++ devi sapere che:
- Nei costruttori delle classi Java purtroppo (ed è causa di molti subdoli errori) il meccanismo virtuale funziona.
- Le classi non hanno un distruttore a la C++.
Perchè purtroppo?Originariamente inviato da MacApp
- Nei costruttori delle classi Java purtroppo (ed è causa di molti subdoli errori) il meccanismo virtuale funziona.
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
http://www.isidoroghezzi.net/java_subdolo_errore_1.htmlOriginariamente inviato da Alex'87
Perchè purtroppo?
come qualunque buona filosofia di programmazione ObjectOriented prevede, aggiungo io.Nel sito linkato da MacApp
Descrizione tecnica dell'errore:
Il costruttore della base, viene eseguito prima dell'esecuzione del costruttore del figlio
Quando si istanzia una classe che ne estende un'altra, la classe madre viene sempre istanziata per prima, in quanto presupposto essenziale per la costruzione della figlia.
Se questo non accade in C++, non è una pecca di Java...
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
La questione evidenziata nella pagina linkata a dire il vero non centra nulla (direttamente) con i metodi e l'override. Centra invece con il processo di inizializzazione degli oggetti. Quando un oggetto viene istanziato, a tutti i campi di istanza viene innanzitutto assegnato il rispettivo valore di "default" (a seconda del tipo).Originariamente inviato da MacApp
http://www.isidoroghezzi.net/java_subdolo_errore_1.html
Quando un costruttore viene invocato, la prima cosa che fa è o la invocazione di un altro costruttore in overload nella stessa classe o la invocazione di un costruttore nella super-classe.
Ma i campi di istanza restano al valore di default finché il super-costruttore non ha terminato.
Solo dopo che il super-costruttore ha terminato allora vengono inizializzati i campi di istanza ed eseguiti gli init-block di istanza, il tutto in rigoroso ordine testuale (cioè nell'ordine in cui sono disposti nel sorgente).
In sostanza vuol dire che se un super-costruttore invoca un metodo di istanza di cui è stato fatto un override nella sotto-classe, questo viene invocato senza problemi (e non è qui la questione subdola). Il fatto è che in quel momento i campi di istanza delle sotto-classi non sono ancora stati inizializzati.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Anche in C++ viene ovviamente chiamato prima.Originariamente inviato da LeleFT
come qualunque buona filosofia di programmazione ObjectOriented prevede, aggiungo io.
Quando si istanzia una classe che ne estende un'altra, la classe madre viene sempre istanziata per prima, in quanto presupposto essenziale per la costruzione della figlia.
Se questo non accade in C++, non è una pecca di Java...
Ciao.![]()
Ciò che viene giustamente impedito in C++ è che nel costruttore del padre possa essere invocato un metodo derivato (in realtà permette la chiamata, ma chiama il metodo del padre NON quello del figlio).
Invece in Java sì, quindi in generale tale invocazione lavorerà su dati del figlio che ancora non sono stati costruiti generando comportamenti indefiniti.
So bene che non è facile da capire. Perciò è subdolo, in molti non lo vedono, con conseguenze spesso disastrose.
;-)
generando comportamente indefiniti. In C++ la cosa non è possibile, proprio perché il meccanismo virtuale, sia nei costruttori che distruttori è disattivato.Originariamente inviato da andbin Il fatto è che in quel momento i campi di istanza delle sotto-classi non sono ancora stati inizializzati.