Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152

    [Java] Domanda stupida su "static"

    Ciao a tutti, ho un dubbio sicuramente qualcuno mi potrà aiutare dato che la domanda è abbastanza banale.
    Quand'è che devo usare "static" quando sto istanziando un oggetto? mi è capitato di dover creare una classe Rettangolo e dopo il costruttore e i vari metodi (dove nn appare mai "static") all'improvviso mi accorgo che il libro scrive il seguente metodo

    ...

    codice:
    public static Rettangolo intersezione(Rettangolo r1, Rettangolo r2){
    ....
    io l'avevo scritto senza static dato che è un oggetto istanza! qualcuno mi potrebbe levare sto dubbio x capire qnd devo metterlo e qnd no?

  2. #2
    Questo dovrebbe aiutarti a capire il suo uso: http://download.oracle.com/javase/tu...classvars.html

  3. #3
    Per invocare un metodo serve sempre un'istanza, ma a volte ci sono metodi molto semplici che prendono input ed elaborano un output senza la necessità di conservare uno stato, per cui è possibile dichiararlo static in modo che la sua invocazione non richieda la creazione di un'istanza. E' una semplice comodità in quanto i metodi statici possono essere invocati semplicemente utilizzando il nome della classe che lo contiene ed il nome del metodo stesso. Un primo esempio che mi viene in mente è il metodo parseInt() della classe Integer il quale è invocabile semplicemente mediante l'istruzione:

    codice:
    int valore = Integer.parseInt("10");
    e non è necessario creare un'istanza della classe Integer come nel caso, ad esempio, del metoto intVal() per la cui invocazione è necessario creare un'istanza della classe Integer:

    codice:
    Integer valore = new Integer(10);
    int val = valore.intVal();
    Ovviamente l'utilizzo di metodi statici può avere i propri svantaggi in quanto un metodo statico può accedere solamente ad attributi statici.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    Credo di aver capito! in pratica mi conviene usarlo quando dopo aver crato un oggetto voglio fargli fare delle operazioni da me definite e da me invocate con l'operatore "." non so tipo

    public static Tipo nomemetodo(Tipo var)
    ....
    classe.nomemetodo(Tipo var)


    moooolto in generale è cosi che va usato giusto? grazie per l aiuto!!!

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da keykode20
    moooolto in generale è cosi che va usato giusto? grazie per l aiuto!!!
    Non è che si capisca molto di quello che hai scritto...

    In generale un metodo si dichiara statico quando quello che fa non è legato a quella particolare instanza della classe ma è un qualcosa di più generale.

    Ad esempio, prendi la class Math. Come saprai contiene metodi che implementano varie funzioni matematiche (seno, coseno, tangente, radice ecc). Questi metodi sono dichiarati tutti come static in quanto sono metodo di utilità.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    152
    Quando NON metto static l'operazione che sto implementando vale solo per la classe stessa e non posso usarla altrove? ad esempio se ho
    codice:
    class Punto{
    private x;
    private y;
    public Punto(double xx, double yy){
    this.x=xx;
    this.y=yy;
    }
    public void trasla(double dx, double dy){
    this.x=this.x+dx;
    this.y=this.y+dy;
    }
    }
    non potrò mai fare una cosa del genere nel main
    codice:
    Punto.trasla(5,6);

    mentre nel caso in cui ho sempre nella classe Punto

    codice:
    public static double distanza(Punto p1, Punto p2){
    double qd;                                                                            //quadrato distanza
    qd=Math.sqrt(Math.pow(p1.getX()-p2.getX(),2)+Math.pow(p1.getY()-p2.getY(),2));
    		return qd;
    	}
    posso invocare nel main il metodo distanza cosi
    codice:
    Punto a1,a2;
    a1=new Punto(2,2);
    a2=new Punto(1,1);
    System.out.println(Punto.distanza(a1,a2));

    scusate per la rottura di scatole ma sono un pò confuso e non riesco a risolvere questo dubbio

  7. #7
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    la parola chiave static serve a identificare un metodo o un attributo di classe.

    esempio
    codice:
    public Class Prova
    {
         public static int i=0;
         public int j=0;
    
         public Prova()
         {
              i++;
              j++;
         }
    }
    nel main se scrivi System.out.println(Prova.i); non ti da errore perchè i è un attributo della classe Prova se invece System.out.println(Prova.j); ti darà errore perchè j è un attributo di istanza ed è quindi necessario instanziare una variabile di tipo Prova

    inoltre prova a vedere cosa ti stampa se nel main fai questo
    Prova a=new Prova();
    System.out.println("I valori i e j nell'istanza a hanno valore "+a.i+" e "+a.j);
    Prova b=new Prova();
    System.out.println("I valori i e j nell'istanza b hanno valore "+b.i+" e "+b.j);

    //OUTPUT
    I valori i e j nell'istanza a hanno valore 1 e 1
    I valori i e j nell'istanza b hanno valore 2 e 1

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.