Vari dubbi Java pt.2

di il
6 risposte

Vari dubbi Java pt.2

1) Differenza tra annotazione e commento in Java?

2) "Ciascuna classe che non estende un'altra classe estende automaticamente la classe Object."
- E' estesa automaticamente in fase di compilazione?

3) Modificatori d'accesso per il costruttore?
Trovo insensato fare un costruttore che non sia pubblico, non potrei istanziare un oggetto di quella classe in un'altra classe,
tuttavia Eclipse non mi segnala errore se il costruttore è privato\protetto\default. Quindi?

4) Firma del metodo
- Quando mi fu posta la domanda sulla firma del metodo risposi che era formata dal nome del metodo + tipi e numero di parametri
Mi dissero che dovevo fermarmi a "nome metodo + tipi", non trovo pace su questa cosa.
Dato che proprio tra un costruttore di default e un costruttore parametrizzato passa la differenza del NUMERO di parametri.

public Persona(){} e public Persona(String nome){this.nome=nome;}

Io qui ho un chiaro esempio di come due metodi con lo stesso nome non si differenzino solo dal TIPO, ma anche dal NUMERO, dato che il primo costruttore ha 0 parametri e il secondo 1.

6 Risposte

  • Re: Vari dubbi Java pt.2

    Carmine2898 ha scritto:


    1) Differenza tra annotazione e commento in Java?
    I "commenti" sono principalmente solo per i programmatori che leggono il sorgente. A parte il caso dei "javadoc" comment che iniziano con /** e che contengono la documentazione scritta nel formato appropriato per javadoc.

    Le "annotazioni" (solo da Java 5 in poi) invece sono "metadati" agganciati specificatamente agli elementi del programma (classi, costruttori, metodi, field, ecc...). Ed hanno una politica di retention a 3 livelli per cui una annotation può stare solo nel sorgente, o anche nel .class, o anche disponibile a runtime.

    Carmine2898 ha scritto:


    2) "Ciascuna classe che non estende un'altra classe estende automaticamente la classe Object."
    - E' estesa automaticamente in fase di compilazione?
    Sì, una classe che non usa espressamente extends X, estende implicitamente Object. Questo lo "sa" e fa il compilatore.

    Carmine2898 ha scritto:


    3) Modificatori d'accesso per il costruttore?
    Qualunque (uno solo ovviamente) dei 3 modificatori di accesso: public / protected / private
    A parte le eventuali annotation, un costruttore non permette altri modificatori.

    Carmine2898 ha scritto:


    Trovo insensato fare un costruttore che non sia pubblico, non potrei istanziare un oggetto di quella classe in un'altra classe
    Non solo è possibile e lecito avere un costruttore private ma questo è utile per certi tipi di design o per classi particolari.
    Se una classe ha solo metodi statici di "utilità", NON ha senso istanziarla. E in tal caso tipicamente si mette un singolo costruttore private vuoto.
    Inoltre serve anche per design particolari come nel pattern Singleton.

    Carmine2898 ha scritto:


    4) Firma del metodo
    - Quando mi fu posta la domanda sulla firma del metodo risposi che era formata dal nome del metodo + tipi e numero di parametri
    Mi dissero che dovevo fermarmi a "nome metodo + tipi", non trovo pace su questa cosa.
    La signature (firma) di un metodo è data da: 1) nome e 2) parametri (chiaramente tipi/numero). Il tipo di ritorno di per sé NON è considerato come parte della signature.
    Nel sorgente di 1 classe, due metodi NON possono differire solo per il tipo di ritorno.

    Carmine2898 ha scritto:


    public Persona(){} e public Persona(String nome){this.nome=nome;}
    Infatti qui hai 2 costruttori in overload.
  • Re: Vari dubbi Java pt.2

    Sì infatti non ho mai pensato questo: "Nel sorgente di 1 classe, due metodi NON possono differire solo per il tipo di ritorno."
    Comunque perfetto, tutto chiaro. Grazie
  • Re: Vari dubbi Java pt.2

    Carmine2898 ha scritto:


    Sì infatti non ho mai pensato questo: "Nel sorgente di 1 classe, due metodi NON possono differire solo per il tipo di ritorno."
    Ma la cosa più "shockante" (per chi non lo sa...) è che a livello di bytecode, cioè nel .class, due metodi POSSONO differire SOLO per il tipo di ritorno.
  • Re: Vari dubbi Java pt.2

    Mi dispiace ma non riesco a seguirti ahah
    So cos'è il bytecode ma non riesco a immaginare la scena di due metodi che differiscono per tipo di ritorno a livello bytecode :/
  • Re: Vari dubbi Java pt.2

    Carmine2898 ha scritto:


    Mi dispiace ma non riesco a seguirti ahah
    So cos'è il bytecode ma non riesco a immaginare la scena di due metodi che differiscono per tipo di ritorno a livello bytecode :/
    No, ok .. lascia perdere (per ora). Dicevo così ... solo per aggiungere qualcosina in più. E' una "finezza" talmente particolare che non tutti la sanno e/o riescono a comprenderla.
    Basta solo dire che la JVM tratta le cose in modo un po' più "ampio" rispetto alle regole del linguaggio Java in sé per come è stato specificato.
    Questa caratteristica, cioè che a livello di bytecode due metodi possono differire anche solo per il tipo di ritorno, credo che prima di Java 5 non sia mai stata sfruttata (almeno così mi pare). Da Java 5 è sfruttata di nascosto da alcune nuove regole introdotte proprio in Java 5, una è quella del tipo di ritorno "covariante".

    Idem, se non hai idea, sorvola (per ora).
  • Re: Vari dubbi Java pt.2

    Va bene. Un giorno comprenderò ahah
Devi accedere o registrarti per scrivere nel forum
6 risposte