Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [java] perchè nn funziona questo codice?

    premetto che il codice è stupido e mi serve solo per capire come mai nn riesco a compilare classi separate. mi potreste aiutare?
    secondo voi perchè mi da errore sulla compilazione di questo codice?

    codice:
    public class prova{
    class Ciao{
    		private String x;
    		public Ciao(){
    			x="ciao";
    		}
    
    		public String toString(){
    			return x;
    		}
    
    }
    
    	public static void main(String[] args){
    		c=new Ciao();
    		System.out.println(c);
    	}
    	private Ciao c;
    }
    l'errore che mi dà è il seguente: non-static variable c cannot be referenced from a static context
    c=new Ciao();

    scusate ma cosa vuol dire? ho provato anche a disinstallare e reinstallare la jvm ma nn funziona ugualmente! perchè??

  2. #2
    Perchè la classe Ciao si trova dentro prova
    Quindi ho fai new prova.Ciao oppure togli fuori la classe Ciao da prova

  3. #3
    il problema è che se metto le due classi in file diversi mi dà lo stesso errore! nn riesco a capire perchè!! precisamene mi dà l'errore "cannot resolve symbol". Ma perchè mi dà errore se la classe Ciao è dentro la stessa cartella? e questo nn me lo fa solo con questa classe, ma con tutte le classi strutturate in questo modo!

    edit: se le metto nello stesso file me le compila, però mi dà questo errore: "Exception in thread main java.lang.NoClassDefFoundError: prova"
    perchè diavolo mi dice questa cosa? ho anche provato a disinstallare e reinstallare la jvm ma nn succede niente!

  4. #4
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Se vuoi usare l'esempio da te fatto devi fare:

    Codice PHP:
    public class prova{
      
      class 
    Ciao{

        private 
    String x;
        public 
    Ciao(){

          
    x="ciao";
        }

        public 
    String toString(){
          return 
    x;
        }
      }

      public static 
    void main(String[] args){

        
    Ciao c = new prova().new  Ciao();
        
    System.out.println(c);
      }

    Sinceramente non riesco a capire che errore ti dia se li metti in 2 file differenti.
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  5. #5
    ho fatto così però mi dà l'errore che ho messo prima! nn riesco a capire nemmeno io perchè mi dice questa cosa! ora controllo l'errore che mi dà se lo metto in file diversi e poi ti dico.

    edit: ecco quello che mi dice

    cannot resolve symbol
    symbol : class Ciao
    location: class prova
    Ciao c=new Ciao();

    le classi sono organizzate in questo modo
    codice:
     public class prova{
    
    
    	public static void main(String[] args){
    		Ciao c=new Ciao();
    		System.out.println(c);
    
    
    
    	}
    
    }
    codice:
     public class Ciao{
    	private String x;
    	public Ciao(){
    		x="ciao";
    	}
    
    	public String toString(){
    		return x;
    	}
    
    }
    vorrei riuscire a capire, nn voglio arrivare a reinstallare il so per qualche strano motivo!
    grazie a tutti!!

  6. #6
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ho provato il codice separato in due file e usando JBuilder va tutto ok; se, invece utilizzo una shell dos digitando:

    javac Ciao.java la compilazione è ok
    javac prova.java ho gli stessi errori che hai tu

    se però faccio:

    javac *.java va tutto ok
    tra l'altro se lancio l'applicativo con
    java prova
    ho un errore che non ho mai visto, spero che qulcuno me lo spieghi; allego l'immagine della mia shell dos
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  7. #7
    @ gogetassj4dp

    io lo scriverei così:

    codice:
    public class prova {
    	public static void main(String[] args){
    		c=new Ciao();
    		System.out.println(c);
    	}
    	private static Ciao c;
    } 
    
    class Ciao {
    	private String x;
    	public Ciao(){
    		x="ciao";
    	}
    
    	public String toString(){
    		return x;
    	}
    }
    ti dà quell'errore perchè hai dichiarato la variabile c "non static" e quindi rappresenta lo stato di un oggetto istanziato. Non può essere usata, quindi, da un metodo statico come main. Sarebbe come scrivere una classe tipo

    codice:
    public class Uomo {
    	private int altezza;
    	
    	public Uomo(int a) {
    		altezza = a;	
    	}
    	
    	public static void main(String[] args) {
    		Uomo u1 = new Uomo(180);
    		Uomo u2 = new Uomo(170);
    		
    		//System.out.println(altezza);
    	}
    }
    la linea commentata non compila perchè cosa si vuole stampare? L'altezza di u1 o di u2?
    Se invece dichiari static la variabile altezza allora la consideri come variabile di classe, ovvero indipendente dall'istanza.

    @ Angelo1974

    mai visto un errore simile, ma non riesco a leggerlo bene (l'immagine è troppo piccola)...

    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  8. #8
    Ciao c=new Ciao();

    non

    c=new Ciao();

    Almeno penso sia questo il problema, bisogna specificare il tipo di variabile.

  9. #9
    Originariamente inviato da Lucis
    @ gogetassj4dp

    io lo scriverei così:

    codice:
    public class prova {
    	public static void main(String[] args){
    		c=new Ciao();
    		System.out.println(c);
    	}
    	private static Ciao c;
    } 
    
    class Ciao {
    	private String x;
    	public Ciao(){
    		x="ciao";
    	}
    
    	public String toString(){
    		return x;
    	}
    }
    ti dà quell'errore perchè hai dichiarato la variabile c "non static" e quindi rappresenta lo stato di un oggetto istanziato. Non può essere usata, quindi, da un metodo statico come main. Sarebbe come scrivere una classe tipo

    codice:
    public class Uomo {
    	private int altezza;
    	
    	public Uomo(int a) {
    		altezza = a;	
    	}
    	
    	public static void main(String[] args) {
    		Uomo u1 = new Uomo(180);
    		Uomo u2 = new Uomo(170);
    		
    		//System.out.println(altezza);
    	}
    }
    la linea commentata non compila perchè cosa si vuole stampare? L'altezza di u1 o di u2?
    Se invece dichiari static la variabile altezza allora la consideri come variabile di classe, ovvero indipendente dall'istanza.

    @ Angelo1974

    mai visto un errore simile, ma non riesco a leggerlo bene (l'immagine è troppo piccola)...

    nn capisco perchè dovrei dichiare una variabile in quel modo dato che fino ad oggi è sempre andata! nn riesco proprio a capire! cmq io ho scritto nel main Ciao c=new Ciao() e cmq se chiamo System.out.println(c) dovrebbe richiare il medoto toString, io nn ho scritto di stampare un campo dell'oggetto Ciao come può essere x che è una variabile privata

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    A me funziona perfettamente. Ho i due file separati prova.java e Ciao.java in una cartella. Entro nella cartella dal prompt dei comandi. Digito javac *.java e la compilazione va a buon fine. Lancio il programma prova attraverso il comando java e ottengo il seguente output:
    codice:
    D:\Ciao>java prova
    ciao
    Il problema nel primo programma da te postato era dovuto al fatto che dichiaravi una variabile globale (un oggetto d'istanza) e tentavi di istanziarlo in un contesto statico: il main. All'interno dei contesti statici (come il main) si possono istanziare e usare solo oggetti statici o locali all'ambiente 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

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.