Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11

    [JAVA]newbie istanziamento classe

    salve a tutti,
    è il mio primo post e premetto che sono un neofita del linguaggio java.
    a questo punto passo al dunque.
    sto provando a realizzare una semplicissima classe e a "usarla", ma ho dei problemi.
    come supporto uso un libro che mi ha introdotto ai concetti base. solo che il compilatore sembra non apprezzarli :P ho fatto anke delle ricerche con google, senza peraltro trovare risposte esaurienti, cioe mi dicono la stessa cosa del libro.

    codice:
    public class test{
    
    public class persona{
    	
    	//costruttore
    	public persona(String nome,int n){
    		Nome=nome;
    		avs=n;
    	    }
    	//metodo
    	public void stampa(){
    		System.out.println(this.Nome);
    		System.out.println(this.avs);
    	    }
    	
    	//campi istanze
    	private String Nome;
    	private int avs;
    	
    	
      }
    
    public static void main(String[] args){
    	persona pers=new persona("Enea",1234);
    	pers.stampa();
    	 
    			
               }
    }
    errore sulla linea dove istanzio =>
    codice:
    persona pers=new persona("Enea",1234);
    errore:

    No enclosing instance of type test is accessible. Must qualify the allocation with an enclosing instance of type test (e.g. x.new A() where x is an instance of test).


    togliendo i parametri ovvero:
    persona pers=new persona();

    l' errore diventa:

    The constructor test.persona() is undefined

    il che mi fa pensare che sbaglio a realizzare il costruttore...:master:


    ----------------------


    avete dei suggerimenti?
    grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Invece di


    persona pers=new persona("Enea",1234);

    fai


    test.persona pers = test.new persona("Enea",1234);


    persona è una classe interna


    edit: ah, http://java.sun.com/docs/codeconv/CodeConventions.pdf
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11
    ciao e grazie mille per la risposta.

    ho provato a fare la cosa che mi hai detto ma mi da questo errore

    test.persona pers=test.new persona("Enea",1234);

    errore:
    test cannot be resolved

    ma perchè.. non lo so...
    :berto:


  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    La classe 'persona' è una "inner class". Le inner class hanno delle caratteristiche particolari e la loro istanziazione deve seguire delle regole altrettanto specifiche.

    Se come deduco, sei agli inizi con Java, ti consiglio caldamente di evitare di usare costrutti di questo tipo. Insomma ... non complicarti la vita. Nessun libro su Java sicuramente parte in quarta a spiegare inner class o cose del genere.

    Parti dalle basi: identificatori, tipi di dati, array, variabili, modificatori, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    magari qualcuno poteva sprecarsi a dare una soluzione invece di dire sempre vatti a studiare qua e là:

    cmq puoi istanziare persona per esempio così:

    codice:
    public class test{
    	
    	void personaInstance(){
    		persona persona = new persona("enea",1234);
    		persona.stampa();
    	}
     
         class persona{ 
        	String Nome;
        	int avs;
            public persona(String nome,int n){
    		Nome=nome;
    		avs=n;
    	    }
            public void stampa(){
        		System.out.println(this.Nome);
        		System.out.println(this.avs);
        	    }
         }
         
         public static void main(String args[]){
        	 test test = new test();
        	 test.personaInstance();
        	 
         }
    }
    il tuo problema l'ho risolto così...nella classe contenitore ho creato un metodo che istanzia la tua classe interna e manda in stampa l'istanza....nn è la soluzione più comoda però intanto potresti vedere come funziona una classe interna ....innanzitutto lei ha accesso a tutti i dati della classe ke la contiene ma nn è vero l'opposto di conseguenza una variabile dikiarata nella classe contenitore può essere visualizzata e quindi stampata dalla classe interna....p.s. un consiglio nomi package e metodi in minuscolo nomi classi in maiuscolo ...ovvero class Persona metodo stampa()

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Questo funziona:


    Codice PHP:
    public class Test {
        public static class 
    Persona {
              
    // campi istanze
              
    private String nome;
              private 
    int avs;
        
              
    // costruttore
              
    public Persona(String nome,int avs){
                  
    this.nome nome;
                  
    this.avs avs;
              }
              
              
    // metodo
              
    public void stampa() {
                  
    System.out.println(this.nome);
                   
    System.out.println(this.avs);
            }
        }

        public static 
    void main(String[] args) {
           
    Test.Persona p = new Test.Persona("Enea",1234);
           
    p.stampa();
        }

    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11
    vi ringrazio per le soluzioni proposte,
    ho capito quale era il mio problema: "inner class"
    ho risolto a mio modo creando due files distinti.

    Persona.java:

    codice:
    public class Persona{
    	
    	//costruttore
    	public  Persona(String nome,int n){
    		Nome=nome;
    		avs=n;
    	}
    	//metodo
    	public void stampa(){
    		System.out.println(this.Nome);
    		System.out.println(this.avs);
    	}
    	
    	//campi istanze
    	private  String Nome;
    	private  int avs;
    	
    	
    }
    e un alro file che testa questa classe:

    PersonaT.java
    codice:
    public class PersonaT{
    
    
     public static void main(String[] args){
    	Persona pers=new Persona("Enea",1234);
    	pers.stampa();
     }
    }
    ringrazio tutti per avermi risposto con soluzioni interessanti

    GRAZIE

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.