Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Originariamente inviato da abcd1000
    thx
    il mio problema è che, nel mio programma, mi sembra di poter dichiarare tutto statico
    non riesco a farmi un esempio in cui non potrei farlo

    io ho tutti metodi del tipo

    compileFile
    runFile
    saveFile
    searchWordInFile

    ecc..
    se il tuo progetto è di tipo procedurale (come può esserlo un semplice editor) è facile che sia così.
    L'uso di static lo capisci quando hai a che fare con più istanze della stessa classe.
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  2. #12
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    hai mica per le mani una classe semplice di cui uno potrebbe averne bisogno più istanze?

    così vedo perchè uno non potrebbe usare sempre la solita istanza

  3. #13
    Penso che con questa delucidazione ti sarà più chiaro:
    Mettiamo di avere diverse classi es:

    Dvd, Cassette, Cd ecc..

    Ora la classe Dvd ha un proprio codice che identifica il prodotto Dvd da quello delle Cassette , Cd

    Questo campo che accoglie il codice prodotto sarà statico.

    Ora nella classe Dvd ci sarà un ulteriore campo chiamato ad esempio
    codice_dvd , il quale non sarà statico perchè mi identifica ogni singolo Dvd .ce ne sarà uno per ogni oggetto Dvd perchè deve essere univoco.

  4. #14
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    capito thx

  5. #15
    esattamente....i campi statici di una classe sono condivisi da tutte le istanze della stessa e se ne viene cambiato uno cambiano tutte.

    posso metterci anke un po' del mio x aiutarti a capire bene la differenza tra metodi statici e non. Praticamente i metodi non static (di solito) accedono allo stato dell'oggetto su cui stai operando e vanno richiamati con la solita forma:

    <oggetto>.<nome metodo non statico> (<parametri>)

    i metodi statici invece non hanno un oggetto implicito che viene passato (come è stato giustamente detto) e quindi la loro forma è la seguente:

    <nome metodo non statico> (<parametri>)


    proprio per questo vanno chiamati (dall'esterno della classe) metendoci prima il nome della classe stessa che li contiene;
    ti faccio un esempio (si tratta di una classe che gestisce un Vector di interi)

    codice:
    import java.util.*;
    
    public class intVector {
      
      private Vector v;
    
      public intVector () {
        v = new Vector();
      }
    
      public void addElem (int k) {
        v.addElement(new Integer(k));
      }
    
      public int len () {
        return v.size();
      }
     
      public void setAt (int a , int index) {
        v.setElementAt(new Integer(a) , index);
      }
    
      public void removeElem (int index) {
        if (index < len()) v.removeElementAt(index);
      }
    
      public int get (int index) {
        return ((Integer) (v.elementAt(index))).intValue();
      }
    
    
      public static void swap (int index1 , int index2 , intVector p) {
        int tmp = p.get(index1);
        int tmp2 =p.get(index2);
        p.setAt(tmp , index2);
        p.setAt(tmp2 , index1);
      }
    
    }
    praticamente con questa classe se devi invocare un metodo qualsiasi (tranne swap) lo chiami come <oggetto intVector>.<metodo>
    altrimenti con la sintassi scritta prima.

    "e l'utilità di tutto questo casino?" dirai tu?

    serve...in praticolare in un caso (correggetemi se sbaglio)

    quando hai bisogno di una funzione particolare (e non di scrivere un intera classe per definire un nuovo Tipo di dato) che dati degli input ti dia un output...semplicissima..tipo la seguente:

    codice:
      public static void main (String [] args) {
        int a;
        a = fatt(3);
      }
    
      public int fatt (int a) {
        if (a<2) return 1;
        return a*fatt(a-1);
    }
    bene...questa cosa non te la compilerà mai...dato che fatt non è un metodo statico e quindi si aspetta di essere chiamato con un oggetto "dietro". C'è di più...se tu metti questo main e questa funzione nella classe di prima, per chiamare questo metodo x calcolare il fattoriale di 5 devi usare la scomoda (e inutile) procedura:

    intVector a;
    int k;
    .
    .
    .
    .
    k = a.fatt(5);

    perchè richiede (essendo non statico) un oggetto implicito. se invece fatt è statico basta fare come nel primo main e cioè:

    codice:
    int a = fatt(5);
    spero di non avere sparato cavolate (anche se effettivamente il compilatore mi sta dando ragione ma soprattutto spero di averti aiutato.

    ciauz!

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.