/* ************************************************************************* * Abbiamo visto come le classi siano una definizione astratta degli * oggetti da istanziare, i quali poi avranno ognuno una copia personale * sia dei metodi che delle variabili, per cui scrivendo in una variabile * di un oggetto, non si cambia il valore delle copie di quella variabile * negli altri oggetti istanza della stessa classe. Infatti se scriviamo * in cane1.numerozampe non si modifica cane2.numerozampe, essendo queste * due variabili indipendenti, e tra l'altro inaccessibili dall'esterno * del proprio oggetto, essendo private. * Pero' tale variabile si puo' definire statica, ossia si puo' fare in * modo che tale variabile esista al massimo in una copia, anche se si * istanziano svariati oggetti. In questo modo, tale variabile sara' * condivisa da tutti gli oggetti istanziati dalla classe, e scrivere * in essa da uno degli oggetti significhera' cambiarne il valore in tutti * gli altri. Per dichiarare statica una variabile, basta usare "static": * * static int numerozampe; * * Vediamo il suo uso. ************************************************************************ */ import java.io.*; // Include le funzioni I/O standard di base. /* ********************************************************************** */ public class Jlez10a { // Da qua inizia la classe Jlez10a /////////////////////////////////////////////////////////////////////////// // Il main... /////////////////////////////////////////////////////////////////////////// public static void main(String args[]) // Definiamo il metodo Main. { // Inizio del main() // Istanzio 2 oggetti della classe animale animale cane1 = new animale(); animale cane2 = new animale(); // Azzeriamo usando i 2 mettizampe (come se numerozampe non fosse static). cane1.mettizampe(0); // Azzeriamo cane2.mettizampe(0); // Non servirebbe, gia' azzerato prima. // Scriviamo 40 in cane1.numerozampe cane1.mettizampe(40); // In realta' abbiamo modificato anche cane2. // Verifichiamo che la variabile, essendo static, e' una sola, condivisa, // infatti sia cane1 che cane2 risulteranno avere 40 zampe. System.out.println("\nStato del cane1: zampe = " + cane1.leggizampe()); System.out.println("Stato del cane2: zampe = " + cane2.leggizampe()); } // Fine del metodo principale Main() } // Fine della classe Jlez10a /* ************************************************************************* * Definiamo la classe animale. Generera' il file animale.class. * Il compilatore dara' un warning (attenzione) perche' sarebbe preferibile * separare il listato della classe e compilarlo a parte in un file * chiamato animale.java. Comunque la compilazione avviene lo stesso. ************************************************************************ */ class animale { // Definisco la classe animale private static int numerozampe=0; // Variabile privata STATICA // Ora scriviamo i metodi pubblici della classe animale: /*-------------------------------------------------------------------------* * mettizampe: definisce il numero di zampe dell'animale. * parametri: in entrata il num. di zampe in formato int. *-------------------------------------------------------------------------*/ public void mettizampe(int l) { numerozampe = l; // Scrive il valore nella variabile privata "numerozampe". } /*-------------------------------------------------------------------------* * leggizampe: legge e restituisce il num. di zampe dell'animale. * parametri: in uscita il num. di zampe in formato int. *-------------------------------------------------------------------------*/ public int leggizampe() { return numerozampe; } } // Fine della classe animale /* ************************************************************************* * Fate molta attenzione all'uso di static, perche' cambia molto la logica * di funzionamento delle classi. Se non sapeste che numerozampe e' * static, leggendo solo il main vi aspettereste un risultato diverso. ************************************************************************ */