Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Perchè non posso spezzare la formula e la dichiarazione di variabile?

    Perchè non posso spezzare la formula e la dichiarazione di variabile?

    Ovvero perché questo codice é giusto:

    codice:
    // Demonstrate static variables, methods, and blocks.
    class UseStatic {
      int b;
      int a = 3;
        void meth(int x) {
    	System.out.println("Blocco non statico inizializzato");
    	b = a*4;
        System.out.println("x = " + x);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
      }
    }  
    class Esempio {public static void main(String args[]) {
    	UseStatic oggetto = new UseStatic();
        oggetto.meth(42);
      }
    }
    questo è ancora giusto:

    codice:
    // Demonstrate static variables, methods, and blocks.
    class UseStatic {
    int a = 3;
    int b = a*4;
        void meth(int x) {
    	System.out.println("Blocco non statico inizializzato");
        System.out.println("x = " + x);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
      }
    }  
    class Esempio {public static void main(String args[]) {
    	UseStatic oggetto = new UseStatic();
        oggetto.meth(42);
      }
    }
    e quest'altro è ancora sbagliato:

    codice:
    // Demonstrate static variables, methods, and blocks.
    class UseStatic {
    int a = 3;
    int b;
    b=a*4;
        void meth(int x) {
    	System.out.println("Blocco non statico inizializzato");
        System.out.println("x = " + x);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
      }
    }  
    class Esempio {public static void main(String args[]) {
    	UseStatic oggetto = new UseStatic();
        oggetto.meth(42);
      }
    }

  2. #2
    Perché una cosa è l'inizializzazione di un campo della classe (dichiaro che la classe ha quel campo lì e di default ha quel valore lì), un'altra è l'assegnamento di un valore ad un campo.
    Quest'ultima è un'istruzione che, per come è stato progettato il linguaggio, non può stare fuori da un metodo (come tutte le istruzioni "normali"); in ogni caso, per eseguire istruzioni qualunque al momento della creazione della classe basta metterle nel distruttore.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da MItaly
    Perché una cosa è l'inizializzazione di un campo della classe (dichiaro che la classe ha quel campo lì e di default ha quel valore lì), un'altra è l'assegnamento di un valore ad un campo.
    Quest'ultima è un'istruzione che, per come è stato progettato il linguaggio, non può stare fuori da un metodo (come tutte le istruzioni "normali"); in ogni caso, per eseguire istruzioni qualunque al momento della creazione della classe basta metterle nel distruttore.
    Nel mio testo deve eserci scritto ma mi sarà sfuggito, grazie mille! Mamma mia quante sfaccettature e microregolette bisogna conoscere!!!

  4. #4
    Ma in realtà è piuttosto semplice:
    dentro al corpo di una classe ci sono dichiarazioni di campi e metodi, punto e basta, non ci possono essere istruzioni di altro tipo (che vanno invece all'interno vari metodi, e in particolare nel costruttore se devono essere eseguite al momento della creazione di un oggetto); tuttavia, l'inizializzazione dei campi può essere parte della loro dichiarazione, e per questo motivo è concessa.

    (nota comunque che non è una regola "assoluta" - in C++, che pure ha sintassi simile a Java per dichiarazione di variabili e classi, l'inizializzazione diretta di campi in quella maniera è concessa solo dall'ultima revisione dello standard, prima non era possibile)
    Amaro C++, il gusto pieno dell'undefined behavior.

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.