Problema con compilatore java

di il
11 risposte

Problema con compilatore java

Buongiorno ragazzi sono nuovo sul forum,in pratica ho un problema con un codice,compilandolo mi da il segueente errore "should be declare in a file named" ho iniziato ad usare java da poco e non capisco dove sia il problema,vi scrivo il codice grazie

public class MyException extends RuntimeException {}

public class Test {
public static void main(String[] args){
try {
method1();
}
catch (MyException ne) {
System.out.print("A");
}
}
public static void method1() {
try {
throw Math.random() > 0.5 ?new MyException() :new RuntimeException();
}
catch (RuntimeException re) {
System.out.print ("B");
}
}
}

11 Risposte

  • Re: Problema con compilatore java

    Usa i tag CODE
    class MyException extends RuntimeException {}
    senza public.

    Ci sono altre cose da correggere ma le lascio a te
  • Re: Problema con compilatore java

    Grazie della risposta,il codice è cosi come l'ho scritto perche sto facendo il simulatore d'esame per prendere la certificazione oracle e questo codice mi esce gia cosi
  • Re: Problema con compilatore java

    Ciao, premesso che non sono un esperto di Java, cercando in internet il tuo errore, ho letto che potrebbe dipendere dal nome del file .class che deve coincidere con quello della classe (è case sensitive anche in questo caso).
  • Re: Problema con compilatore java

    Allora se tolgo il "public" nella prima riga come dice Wiererstrass funziona e mi compila,altrimenti no,il file l'ho chiamato e compilato con Test.java
  • Re: Problema con compilatore java

    maracaibo25 ha scritto:


    Allora se tolgo il "public" nella prima riga come dice Wiererstrass funziona e mi compila,altrimenti no,il file l'ho chiamato e compilato con Test.java
    In un singolo file sorgente .java si possono mettere più definizioni di classi/interfacce/ecc... Ma solo una al massimo può essere marcata public. E se tale tipo public esiste, il nome fisico del file sorgente (estensione a parte) deve corrispondere esattamente al nome del tipo, es. public class EsempioDiProva { ...} allora EsempioDiProva.java, NON esempioDiProva.java Esempio_Di_Prova.java ecc...
  • Re: Problema con compilatore java

    Ok grazie
  • Re: Problema con compilatore java

    Ciao. visto che sto studiando java e sono arrivato ora alle eccezioni e le classi throwable, chi è così gentile da spiegarmi cosa fa questo programma?
    in particolare, non capisco cosa fa
    
    throw Math.random() > 0.5 ?new MyException() :new RuntimeException();
    
    lancia una eccezione di tipo MyException solo se il numero random è > 0.5, altrimenti una RuntimeException?

    perché se è cosi il mio pc lancia sempre una RuntimeException, perché stampa sempre "B"....
    ...ma poi, essendo MyException una sottoclasse di RuntimeException, non stamperà sempre e comunque B perché la prima a fare catch?
    Grazie.
  • Re: Problema con compilatore java

    tagan ha scritto:


    Ciao. visto che sto studiando java e sono arrivato ora alle eccezioni e le classi throwable, chi è così gentile da spiegarmi cosa fa questo programma?
    in particolare, non capisco cosa fa
    
    throw Math.random() > 0.5 ?new MyException() :new RuntimeException();
    
    lancia una eccezione di tipo MyException solo se il numero random è > 0.5, altrimenti una RuntimeException?

    perché se è cosi il mio pc lancia sempre una RuntimeException, perché stampa sempre "B"....
    ...ma poi, essendo MyException una sottoclasse di RuntimeException, non stamperà sempre e comunque B perché la prima a fare catch?
    Grazie.
    Era esattamente quello che intendevo con "ci sarebbero altre cose da correggere"
    No non funziona, prova a implementare tu di tuo un programma (è importante sperimentare da soli con le eccezioni in Java). Se non ne vieni a capo, qualche anima pia ti darà qualche dritta
  • Re: Problema con compilatore java

    tagan ha scritto:


    perché se è cosi il mio pc lancia sempre una RuntimeException
    No, quella riga

    throw Math.random() > 0.5 ?new MyException() :new RuntimeException();

    lancia "a caso" MyException oppure RuntimeException.

    tagan ha scritto:


    perché stampa sempre "B"....
    Perché il catch in method1() è in grado di catturare SIA RuntimeException, SIA MyException. Ovvero: MyException NON arriverà mai nel catch del main.
  • Re: Problema con compilatore java

    Però scambiando i due exception, ora stampa sia A che B.......(ho aggiunto un for per avere più casi)
    
    class MyException extends RuntimeException {}
    
    public class Test {
    	public static void main(String[] args){
    		for (int i=0; i< 10; i++) {
    			try {
    				method1();
    			}
    			catch (RuntimeException ne) {
    				System.out.println("A");
    			}
    		}
    	}
    	public static void method1() {
    		try {
    			throw Math.random() > 0.5 ?new MyException() :new RuntimeException();
    		}
    		catch (MyException re) {
    			System.out.println("B");
    		}
    	}
    }
    
    quindi questa istruzione Math.random() > 0.5 ?new MyException() :new RuntimeException(); non è ....come si chiama, l'opeatore ternario?
    se (numero casuale)>0.5; lancia MyException altrimenti RuntimeException?
    quindi se lancia MyException viene catturata dal metodo method1, altrimenti deve risalire fino al main....corretto?
  • Re: Problema con compilatore java

    tagan ha scritto:


    quindi questa istruzione Math.random() > 0.5 ?new MyException() :new RuntimeException(); non è ....come si chiama, l'opeatore ternario?
    se (numero casuale)>0.5; lancia MyException altrimenti RuntimeException?
    Sì, esatto.

    tagan ha scritto:


    quindi se lancia MyException viene catturata dal metodo method1, altrimenti deve risalire fino al main....corretto?
    Sì. Un catch(MyException e) cattura SOLO MyException (e possibili sottotipi, se esistessero) che estende RuntimeException. NON può catturare esattamente RuntimeException (che è più "sopra" nella gerarchia).

    Invece RuntimeException può catturare sia RuntimeException stessa che MyException. Ma con lo scambio, MyException comunque non arriva al main().
Devi accedere o registrarti per scrivere nel forum
11 risposte