Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: programmare in java

  1. #1

    programmare in java

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: programmare in java

    Originariamente 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++..
    Io consiglio sempre The Java Programming Language, 4th Edition o la versione italiana Il Linguaggio Java - Manuale ufficiale - 4 Edizione
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ma una copia scaricabile direttamente dal web non esiste??ovviamente una buona..

  4. #4
    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++.

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da MacApp
    - Nei costruttori delle classi Java purtroppo (ed è causa di molti subdoli errori) il meccanismo virtuale funziona.
    Perchè purtroppo?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Nel sito linkato da MacApp
    Descrizione tecnica dell'errore:
    Il costruttore della base, viene eseguito prima dell'esecuzione del costruttore del figlio
    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.
    "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

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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).

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    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.
    Anche in C++ viene ovviamente chiamato prima.
    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.

    ;-)

  10. #10
    Originariamente inviato da andbin Il fatto è che in quel momento i campi di istanza delle sotto-classi non sono ancora stati inizializzati.
    generando comportamente indefiniti. In C++ la cosa non è possibile, proprio perché il meccanismo virtuale, sia nei costruttori che distruttori è disattivato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.