Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    137

    Compilare una classe che istanzia un oggetto di un'altra classe.

    Ciao a tutti.
    Sono abbastanza neofita di java, ma non di OO, e sto facendo delle prove per capirne bene sintassi e funzionamento.
    Ho creato una classe Orologio in un package "clock", che astrae come dice il nome i metodi di un orologio.
    Poi ho creato una classe per provarla ProvaOrologio con il main che istanzia l'oggetto Orologio.
    codice:
    package clock;
    
    public class ProvaOrologio {
    	public static void main(){
    		Orologio a = new Orologio(12,00);
    		System.out.println(a.getOra());
    		a.tick();
    		System.out.println("L'ora è: "+a.getOra());
    	}
    }
    quando vado a compilarla mi da errore:

    $ javac -cp . ProvaOrologio.java
    ProvaOrologio.java:5: cannot find symbol
    symbol : class Orologio
    location: class clock.ProvaOrologio
    Orologio a = new Orologio(12,00);
    ^
    ProvaOrologio.java:5: cannot find symbol
    symbol : class Orologio
    location: class clock.ProvaOrologio
    Orologio a = new Orologio(12,00);
    ^
    2 errors

    Cosa sbaglio? Devo includere la classe Orologio in qualche modo?
    $Pippo... la variabile preferita dall'ingegnere!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Compilare una classe che istanzia un oggetto di un'altra classe.

    Originariamente inviato da Cosmy
    Cosa sbaglio? Devo includere la classe Orologio in qualche modo?
    Stai usando i package. La regola fondamentale: i nomi e la struttura dei package si devono sempre "riflettere" nella struttura delle directory. Quindi i tuoi file .class devono stare sotto una directory "clock" e in "classpath" deve essere specificata (con path assoluto o relativo) la directory che contiene questa "clock".
    Anche i sorgenti è bene che seguano la stessa struttura.

    Quindi es.

    C:\Esempi\clock\Orologio.java
    C:\Esempi\clock\ProvaOrologio.java

    Ti posizioni in C:\Esempi e lanci:

    javac -cp . clock\ProvaOrologio.java

    e compila sia l'uno che l'altro sorgente mettendo i .class sotto "clock".

    Quindi:

    java -cp . clock.ProvaOrologio

    E visto che sono entrambi nello stesso package, non c'è bisogno in ProvaOrologio di "importare" qualcosa per usare Orologio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    137
    si la struttura era corretta ma evidentemente dovevo compilare ad un livello inferiore.
    Ora però al momento di eseguire la classe mi dice:
    Exception in thread "main" java.lang.NoSuchMethodError: main

    eppure il main c'è
    $Pippo... la variabile preferita dall'ingegnere!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cosmy
    si la struttura era corretta ma evidentemente dovevo compilare ad un livello inferiore.
    Ora però al momento di eseguire la classe mi dice:
    Exception in thread "main" java.lang.NoSuchMethodError: main

    eppure il main c'è
    Non l'ho notato prima, comunque il main() deve essere:

    public static void main(String[] args)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    137
    hai ragione..
    anche se non capisco questa limitazione
    $Pippo... la variabile preferita dall'ingegnere!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cosmy
    anche se non capisco questa limitazione
    Non è una "limitazione" .... ad un programma si possono passare degli argomenti ... no? E appunto il main() li riceve in un array di String.
    Il runtime cerca il metodo main() con quella signature ... quindi non puoi dichiararlo diversamente!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.