Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-04-2009, 18:11   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[JAVA] Eccezioni checked ed uncheked...mi aiutate a fare chiarezza ?!?!

Ho da poco iniziato a studiare per un secondo esame di programmazione OO...nel programma del corso si parla di eccezioni cheked e di eccezini unchecked.

Da quello che ho capito le prime estendono la classe Exception e basta (ma non la classe Runtime Exception figlia di Exception) mentre le seconde estendono la classe RuntimeException.

Ma che significa esattamente? Che le uncheked sono eccesioni riferite ad eventi eccezionali che avvengono a runtime (che ne sò tipo provo ad accedere all'(n+1)esimo elemento di un array di n elementi e mi viene restituita una IndexOutOfBoundException) mentre le checked? Quando le uso? Ho qualche dubbio.

A logica dire che un possibile caso d'uso potrebbe essere questo: ho un metodo fact che riceve un intero e ne restituisce il fattoriale, per avere senso tale parametro deve essere >0...quindi potrei scrivere una mia eccezione checked (quindi estendendo Exception) che viene sollevata se il parametro è <= 0 e per esempio potrebbe gestirla cabiandogli segno e facendo comunque eseguire il metodo che ora potrebbe calcolare il fattoriale (se è 0 boo magari fà qualche altra cosa)...questo perchè l'evento eccezionale è stato in qualche modo previsto prima come una possibilità che potrebbe accadere...

Fila come discorso?

Poi altro dubbio...se dichiaro un'eccezione come checkd la devo dichiarare per forza nell'header della mia routine e devo per forza scrivere il codice che la gestisce, giusto?

Cos'è il mascheramento di un'eccezione? (questa cosa non l'ho proprio capita)

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 18:33   #2
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Detta in poche righe praticamente quando vai a creare una classe o metodo definendolo "generatore" di proabile eccezione a tempo di esecuzione hai queste due possibilità, definirlo come una Exception o come una RuntimeException:

Codice:
public void method() throws Exception {

}

public void method() throws RuntimeException {
		
}
La differenza sostanziale è che con le Exception dai la possibilità al codice che andrà a utilizzare tale metodo/classe di catturare l'eccezione e gestirla, mentre con la RuntimeException non c'è nessuna possibilità di catturare l'eccezione a livello del codice (il famoso try{ } catch(Exception e) { }) e ti troverai l'errore solotanto a tempo di esecuzione.

Quà trovi spiegato tutto anche con dei chiari esempi ....

http://tutorials.jenkov.com/java-exc...xceptions.html
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 19:13   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
l'eccezione non controllata può essere catturata esattamente come l'eccezione controllata e in più può essere gestita tramite un UncaughtExceptionHandler.

Detto questo in Java l'unica certezza è che i progettisti hanno introdotto le eccezioni non controllate perchè esistono condizioni di impossibilità al raggiungimento di uno scopo per un blocco di codice talmente "pervasive" che costringere ogni volta il programmatore ad usare un blocco try-catch avrebbe ammazzato il linguaggio sul nascere.

Basti pensare alla divisione in cui il divisore sia una variabile (incombe la DivisionByZeroException) o all'accesso ad un membro (la nota NullPointerException).

E' difficile trovare una sistemazione teorica per la suddivisione controllata/non controllata.

Una volta stabilito che l'eccezione è appunto una condizione di impossibilità al raggiungimento di uno scopo da parte di un blocco di istruzioni per causa esterna al blocco stesso cosa potremmo dire, che l'eccezione dev'essere controllata lo scopo del blocco se è veramente importamente? Fa un po' ridere .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 19:17   #4
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da Frank1962 Guarda i messaggi
Detta in poche righe praticamente quando vai a creare una classe o metodo definendolo "generatore" di proabile eccezione a tempo di esecuzione hai queste due possibilità, definirlo come una Exception o come una RuntimeException:

Codice:
public void method() throws Exception {

}

public void method() throws RuntimeException {
		
}
La differenza sostanziale è che con le Exception dai la possibilità al codice che andrà a utilizzare tale metodo/classe di catturare l'eccezione e gestirla, mentre con la RuntimeException non c'è nessuna possibilità di catturare l'eccezione a livello del codice (il famoso try{ } catch(Exception e) { }) e ti troverai l'errore solotanto a tempo di esecuzione.

Quà trovi spiegato tutto anche con dei chiari esempi ....

http://tutorials.jenkov.com/java-exc...xceptions.html

mmm quindi praticamente mi stai dicendo che una unchecked exception non posso mai gestirla nel codice?

Mi sorgono ancora più dubbi...sul mio libro dice che le checked exception devo per forza gestirle scrivendo il codice che gestisce la situazione eccezionale altrimenti avrò un errore in fase di compilazione ma non mi dice che è vietato fare try catcth con le unchecked exception...anzi riporta questo codice d'esempio:

Codice:
try{ x = y[n];}
catch(IndexOutOfBoundsException e){
     // CODICE CHE GESTISCE IndexOutOfBoundsException
}

i = Array.search(z,x)
La IndexOutOfBoundsException non dovrebbe essere una unchecked exception? Però quì la sta gestendo...

Come mai?

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 21:23   #5
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
Tu, puoi gestire entrambi i tipi di eccezioni, catturandole.
Nel caso delle unchecked, non sei costretto a gestirle, nel senso che non è necessario ogni due righe verificare con un try-catch una NullPointerException.
Invece sei costretto* a gestire con un try-catch l'altro tipo di eccezioni tipo:
Codice:
try{
...
 metodoCheSeNeFrega();
..
}catch(IOException){System.out.println("eccezione catturata");}
*In realtà, potresti in questo caso non mettere un try-catch piuttosto mettere nel metodo scatenante l'eccezionethrows IOException che di fatto dice "non mi interessa di gestire ora l'eccezione, se ne occupino i metodi di livello più alto"

Faccio l'esempio:
Codice:
void metodoCheGestisce(){
 try{
 void metodoCheSeNeFrega();
}catch(IOException){System.out.println("hai cercato di convertire una stringa che non è un numero);}


void metodoCheSeNeFrega() throws IOException{
 throw new IOException();
}
Spero di essere stato chiaro quando dico metodo di livello più alto (nell'esempio metodoCheGestisce())
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer

Ultima modifica di gokan : 30-04-2009 alle 22:55. Motivo: Corretto l'esempio
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 22:21   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Se vuoi approfondire l'argomento, ci sono un paio di link:

Does Java need Checked Exceptions?
The Trouble with Checked Exceptions
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 22:34   #7
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da gokan Guarda i messaggi
Invece sei costretto* a gestire con un try-catch l'altro tipo di eccezioni tipo:
Peccato che la NumberFormatException sia unchecked.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 22:47   #8
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Peccato che la NumberFormatException sia unchecked.
oops hai ragione
correggo l'esempio. però la spiegazione spero resti valida
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2009, 05:17   #9
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi

Come mai?

Grazie
Andrea
perchè aveva torto! ....mi domando comunque cosa succede se ho un classe/libreria non documentata, come faccio a capire quali classi/metodi dovrei gestire con una try{ }catch{} nell'eventualità che mi dovessero generare questo tipo di Exception....
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2009, 10:47   #10
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da gokan Guarda i messaggi
Tu, puoi gestire entrambi i tipi di eccezioni, catturandole.
Nel caso delle unchecked, non sei costretto a gestirle, nel senso che non è necessario ogni due righe verificare con un try-catch una NullPointerException.
Invece sei costretto* a gestire con un try-catch l'altro tipo di eccezioni tipo:
Codice:
try{
...
 metodoCheSeNeFrega();
..
}catch(IOException){System.out.println("eccezione catturata");}
*In realtà, potresti in questo caso non mettere un try-catch piuttosto mettere nel metodo scatenante l'eccezionethrows IOException che di fatto dice "non mi interessa di gestire ora l'eccezione, se ne occupino i metodi di livello più alto"

Faccio l'esempio:
Codice:
void metodoCheGestisce(){
 try{
 void metodoCheSeNeFrega();
}catch(IOException){System.out.println("hai cercato di convertire una stringa che non è un numero);}


void metodoCheSeNeFrega() throws IOException{
 throw new IOException();
}
Spero di essere stato chiaro quando dico metodo di livello più alto (nell'esempio metodoCheGestisce())
In pratica qui mi stai dicendo:
Codice:
try{
...
 metodoCheSeNeFrega();
..
}catch(IOException){System.out.println("eccezione catturata");}
mmm temo di non aver capito bene cosa intendi quì sigh
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2009, 19:36   #11
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Quote:
Originariamente inviato da Frank1962 Guarda i messaggi
perchè aveva torto! ....mi domando comunque cosa succede se ho un classe/libreria non documentata, come faccio a capire quali classi/metodi dovrei gestire con una try{ }catch{} nell'eventualità che mi dovessero generare questo tipo di Exception....
Eclipse?
O comunque se non gestisci una checked non compila
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2009, 14:21   #12
gokan
Senior Member
 
L'Avatar di gokan
 
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
In pratica qui mi stai dicendo:
Codice:
try{
...
 metodoCheSeNeFrega();
..
}catch(IOException){System.out.println("eccezione catturata");}
mmm temo di non aver capito bene cosa intendi quì sigh
Li intendevo farti capire che nel primo metodo
metodoCheSeNeFrega()
non gestivi l'eccezione, ma ammettevi che poteva generare un 'eccezione.
Nel secondo,
metodoCheGestisce()
invece, l'hai gestita tramite un try-catch.

bye
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer
gokan è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 09:53   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Provo a fare un riassunto schematico?

La mamma di tutte le eccezioni:
java.lang.Throwable
Quote:
The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause.
Un primo figliuolo, che non si vede in giro molto spesso:
java.lang.Error (extends java.lang.Throwable)
Lasciamolo stare, per il momento.

L'altra figlia, sorella di Error e molto più famosa:
java.lang.Exception (extends java.lang.Throwable)
Quote:
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
Questa ragazza ha moltissimi figli.
Normalmente un figlio di Exception che viene lanciato da un metodo, deve per forza essere gestito al livello del chiamante di quel metodo, in un blocco try-catch.
Il chiamante può gestire la situazione come vuole, ma deve catturare l'eccezione.
Queste sono le eccezioni "checked".

Tra tutte le numerosissime figlie che Exception ha generato nel clan del JDK, una in particolare è la pecora nera della famiglia:
java.lang.RuntimeException (extends Exception)
Quote:
RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.
Un metodo che lancia codesta eccezione o le eccezioni che l'hanno come madre non obbliga il chiamante a catturarla con il costrutto try-catch: il chiamante è libero di non catturarla, se invece vuole può catturarla e gestirla come meglio crede.
In pratica queste sono le eccezioni "unchecked".
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 04-05-2009 alle 10:34.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 10:17   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Facciamo un esempio

Facciamo un esempio della differenza tra eccezioni "checked" e "unchecked" dal punto di vista del chiamante.

Supponiamo di dover istanziare un oggetto di tipo java.io.FileInputStream.
Usiamo il costruttore che prende come parametro una String, che rappresenta il "path name" del file:
Quote:
FileInputStream(String name)
Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system.
Ora, consultando i javadoc notiamo che il metodo costruttore potrebbe lanciare due eccezioni:
Quote:
public FileInputStream(String name) throws FileNotFoundException

Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system. A new FileDescriptor object is created to represent this file connection.

First, if there is a security manager, its checkRead method is called with the name argument as its argument.

If the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading then a FileNotFoundException is thrown.

Parameters:
name - the system-dependent file name.
Throws:
FileNotFoundException - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
SecurityException - if a security manager exists and its checkRead method denies read access to the file.
La domanda è: dobbiamo catturarle?

Consultando i javadoc per la classe FileNotFoundException si scopre che questa estende IOException la quale estende Exception: abbiamo dunque a che fare con un'eccezione "checked", dobbiamo quindi catturarla (inoltre notiamo che è citata nella clausola throws del metodo stesso).

Consultiamo ora i javadoc per la classe SecurityException, e scopriamo così che essa estende RuntimeException: dunque è di tipo "unchecked", e non siamo obbligati a catturarla (però potremmo volerlo fare lo stesso, la scelta è nostra).

Il codice che istanzierà il nostro oggetto FileInputStream dovrà quindi gestire il caso in cui viene lanciata una FileNotFoundException, invece pe la SecurityException non occorre fare nulla: scegliamo di non gestirla, in questo caso.
Codice:
String filePath = "un file path espresso come stringa e ricavato in qualche modo dall'applicazione";
...
...
FileInputStream fileStream = null;
try
{
    fileStream = new FileInputStream(filePath);
    // seguono istruzioni che utilizzano il file aperto
    ...
}
catch (FileNotFoundException ex)
{
    // segue gestione dell'eccezione che dipende da come si
    // vuole gestire la faccenda
    ...
}
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 04-05-2009 alle 10:35.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 10:33   #15
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Per concludere, ti linko delle info utili (tutorial dal sito della Sun) su come creare/lanciare le proprie eccezioni (tutto in inglese ovviamente):
- How to Throw Exceptions
- Creating Exception Classes

queste sopra sono solo due parti diell'intero argomento:
- Lesson: Exceptions
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
EU AI Cloud, il cloud sovrano di SAP per...
God of War: la serie TV entra in pre-pro...
Stampante HP in super offerta: la multif...
Maxi offerta su Roborock S8 MaxV Ultra: ...
Ron Gilbert, il creatore di Monkey Islan...
AMD, aumento dei prezzi per i processori...
I migliori regali di Natale a meno di 50...
Sorprese post Black Friday: questi TV 4K...
NVIDIA perde quota, AMD e Intel guadagna...
Il cloud ibrido al centro delle strategi...
Amazon sorprende: avviatori, compressori...
Super ribassi Bose su Amazon: QuietComfo...
Instagram cambia rotta: basta lavoro ibr...
AirPods Pro 3 a prezzo bomba, ma le AirP...
Prezzi giù su Oral-B: spazzolini elettri...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v