2012-05-09 7 views
8

Ho letto in alcuni articoli che c'è qualcosa chiamato Inizializzazione di blocchi in java; dove possiamo eseguire alcuni compiti di inizializzazione Quando la classe viene caricata o viene creata un'istanza.Esiste un costrutto come Java che inizializza i blocchi in C++?

Oltre ai metodi e ai costruttori, i blocchi di inizializzazione sono il terzo posto in un programma Java in cui è possibile eseguire le operazioni.

class InitDemo 
{ 
    static int y; 
    int x; 
{ 
    y = 10; 
    x = 0; 
} 
} 

chiedo se non v'è tale Paradigme in C++? Grazie.

+0

C non ha il concetto di classi "caricate" e la sua vista della statica è completamente diversa da quella di Java. Quindi, a parte gli inizializzatori statici, non c'è nulla di simile. –

+1

(In sostanza, il blocco 'static' in Java è il costruttore della classe, perché le classi sono (semi) oggetti a pieno titolo.Le classi C++ non sono oggetti.) –

+0

Grazie per le informazioni, che è stato utile. –

risposta

4

È necessario sottolineare che in Java esistono due diverse forme di blocchi di inizializzazione. Il semplice blocco {...}, senza la parola chiave static, è solo un po 'di swizzling del compilatore - il testo nel blocco viene aggiunto in primo piano a tutti i costruttori definiti - nessun segmento di codice separato viene generato. Un blocco che inizia static {..., d'altra parte, è un blocco di inizializzazione statico e una procedura (semi-) corretta a sé stante (chiamata, non a caso, "statica").

Il blocco static viene eseguito solo una volta, immediatamente (con alcune precisazioni) dopo la classe viene caricata. L'inizializzatore non statico è (in quanto viene copiato nei costruttori) eseguito ogni volta che viene eseguito un costruttore, e quindi è generalmente inappropriato per init statico.

2

In poche parole, C++ non ha un equivalente diretto di questo costrutto Java.

Per ottenere un comportamento simile, è necessario impostare x e dai costruttori di InitDemo (che è possibile eseguire anche in Java).

+0

Sì in effetti Aix, vedo che a differenza di Java costruttori rimangono l'unico * posto fo initilizing assegnamenti per C++. –

+0

@ Blood-HaZaRd: Praticamente. In Java, un blocco di inizializzazione (non statico) è solo un modo per inserire codice comune in ogni costruttore. – NPE

+0

Sì e accanto a ciò ci sono due blocchi di intostazione statici di due sapori e non statici che ritengo sia utile. –

Problemi correlati