Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [java] sulle classi, roba da poco :-)

    Nel mio file primo.java ho il seguente codice che prevede la creazione di una classe libro e un qualche cosa che poi alla fine mi deve dire l'autore del libro:

    public class primo
    {
    public class Libro{
    String autore;
    String titolo;


    public Libro(String a, String t)
    {
    autore = a;
    titolo = t;

    }
    public String getAutore()
    {
    return autore;
    }
    public String getTitolo()
    {
    return titolo;
    }

    }


    public static void main(String args[]){
    System.out.print("Eccomi! \nBenvenuto nel mondo java");
    Libro libro1 = new Libro("Pippo", "Libro di pippo");
    Libro libro2 = new Libro("Pluto", "Libro di pluto");
    String autore1 = libro1.getAutore();
    System.out.print(autore1);
    }

    }


    Andando a compilare sto esempio mi da un errore del tipo:
    Non static variable this cannot be referenced from a static context
    Libro libro1 = new Libro("Pippo", "Libro di pippo");

    e mette una freccetta sotto la n di new. La stessa cosa per libro due.
    Ora so di essere niubbo ma secondo voi dove sbaglio? L'errore secondo me sta nel fatto che la classe libro non deve stare dove sta ma devo portarla dentro al main ma non ne sono sicuro, secondo voi?
    Sto giusto provando a fare qualche cosa per imparare quindi siate clementi.... errore docet!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non mi era mai capitata una situazione del genere...
    Il problema non stà nel fatto che la classe debba essere portata dentro al main, in quanto all'interno di un metodo di solito non si definiscono classi (la cosa è possibile, ma inutile).

    Credo che il problema sia una finezza: la tua classe Libro è una classe interna, quindi può essere referenziata, all'esterno (in quanto public) tramite la seguente dicitura:
    codice:
    prova.Libro l = new prova.Libro();
    All'interno della tua classe, questo si traduce in questo modo:
    codice:
    Libro l = new this.Libro();
    Questo provoca un errore, perchè all'interno di un contesto statico (public static void main(String [] args) ) non si possono referenziare variabili o metodi non statici (ed il this è una variabile non statica).

    Il tuo problema si risolve facilmente utilizzando un costruttore per la classe primo e creando un oggetto della stessa classe:
    codice:
    public class primo { 
       public class Libro { 
          String autore; 
          String titolo; 
    
          public Libro(String a, String t) {
             autore = a; 
             titolo = t; 
          } 
    
          public String getAutore() { 
             return autore; 
          } 
    
          public String getTitolo() { 
             return titolo; 
          } 
    
       } 
    
       public primo() {
          System.out.print("Eccomi! \nBenvenuto nel mondo java"); 
          Libro libro1 = new Libro("Pippo", "Libro di pippo"); 
          Libro libro2 = new Libro("Pluto", "Libro di pluto"); 
          String autore1 = libro1.getAutore(); 
          System.out.print(autore1); 
       }
    
       public static void main(String args[]){ 
          primo p = new primo();
       } 
    }
    PS: Ricordati di usare i tag [*CODE] e [*/CODE] senza l'asterisco, ovviamente, per mantenere l'indentazione del codice, che risulta così più leggibile.


    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 Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Alternativamente, come ti ha già detto LeleFT, potevi scrivere:

    Codice PHP:
    public class primo{
      
      public class 
    Libro
        
    String autore
        
    String titolo
        
        public 
    Libro(String aString t){ 
          
    autore a
          
    titolo t
        } 
        public 
    String getAutore(){ 
          return 
    autore
        } 
        public 
    String getTitolo(){ 
          return 
    titolo
        }
      }
      
      public static 
    void main(String args[]){ 
        
    System.out.print("Eccomi! \nBenvenuto nel mondo java"); 
        
    primo pri = new primo();
        
    primo.Libro libro1 pri.new Libro("Pippo""Libro di pippo"); 
        
    Libro libro2 pri.new Libro("Pluto""Libro di pluto");   
        
    String autore1 libro1.getAutore(); 
        
    System.out.print(autore1); 
      } 

    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

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.