Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [JAVA] Cannot make a static reference to the non-static method

    Sto imparando il linguaggio in questione, e vorrei da voi sapere quale errore concettuale sto compiendo nel seguente codice:

    codice:
    package mypackage;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class IO 
        {
        public static void main (String args[]) 
            {
            ...
            // Copia un file.
        	File file1 = new File("C:/tmo/myfile1.txt");
            File file2 = new File("C:/tmo/myfile2.txt");
            this.myFileCopy(file1,file2);
            }
    
        private boolean myFileCopy(File src,File dst) throws IOException
            {  
            ...
            }
        }

    [.:: JaguarXF ::.]
    __________________

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    L'errore è quello di utilizzare la parola chiave "this" (e anche se non la metti è intesa implicitamente).
    Non puoi, da un contesto statico, invocare o fare riferimenti a oggetti che non siano statici. Questo per un problema molto semplice: i contesti statici (siano essi metodi o oggetti) esistono indipendentemente dalle istanze dell'oggetto (sono richiamabili semplicemente utilizzando il nome della classe, senza aver istanziato alcun oggetto della suddetta classe). Quelli non statici, ovviamente no: dipendono sempre da un'istanza della classe.

    Ora: nel tuo codice cerchi di richiamare dal mail (che è un metodo statico) il metodo myFileCopy() che non è statico. E questo produce l'errore.

    La cosa può essere risolta, nel tuo specifico caso, apponendo il modificatore static al metodo myFileCopy:
    codice:
    private static boolean myFileCopy(File src,File dst) throws IOException {
       ...
    }
    Prova a cercare anche nel forum. Troverai parecchie discussioni sullo stesso errore.

    PS: Dimenticavo... "this" è il puntatore implicito all'istanza corrente ed è ovviamente non statico.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Grazie, immaginavo una cosa del genere ma non ne ero certo - programmo ad oggetti con PHP da anni, quindi conosco il dominio, ma mi riesce difficile a volte entrare nel "nuovo mondo JAVA".

    Quindi (ti faccio una domanda) da main io devo per forza istanziare altre classi*, che, a loro volta, possono però chiamare reciprocamente i loro metodi interni con il qualificatore "this".
    Ovvero, questa limitazione vale solo per le classi statiche.
    Corretto?

    * oppure ovviamente chiamare metodi statici.

    E grazie 1000.

    [.:: JaguarXF ::.]
    __________________

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Corretto.
    Da notare che la cosa non è reciproca. Ovvero, da un contesto statico non è possibile referenziare nulla di non statico, ma è possibile il contrario: da un contesto non statico io posso referenziare qualunque cosa (sia essa statica o meno).

    Dal main, generalmente, si istanzia un oggetto della classe stessa. Il main è il metodo dal quale inizia un programma. La consuetudine più diffusa è quella di creare un oggetto della classe che si sta definendo.
    Un piccolo esempio:
    codice:
    public class MiaClasse extends ... implements ... {
    
       // Costruttore della classe
       public MiaClasse() {
          ...
       }
    
       public static void main(String [] args) {
          MiaClasse mc = new MiaClasse();
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2026 vBulletin Solutions, Inc. All rights reserved.