A meno che non vi sia un codice simile, i puntatori nulli throw new NullPointerException();
si verificano in genere quando viene utilizzata un'espressione che risulta essere null
. Quindi, la mia domanda è, perché il messaggio per il puntatore nullo non contiene l'espressione che restituisce null?perché l'eccezione puntatore nullo non fornisce l'espressione null?
risposta
Non so per certo, ma immagino che il motivo potrebbe essere che ci potrebbero essere problemi di prestazioni importanti se la JVM dovesse essere in grado di riportare l'espressione precisa che ha gettato l'eccezione.
Per lo meno, richiederebbe modifiche al formato del file di classe per includere informazioni di posizione del codice sorgente (veramente) finemente granulose ... più fini rispetto ai numeri di riga.
In ogni caso, la domanda è discutibile ... perché non lo è.
Solo perché java è un linguaggio di programmazione, non smetterei di mettere in discussione la sua implementazione! – MozenRath
@MozenRath - Beh, se vuoi una risposta vera, stai chiedendo alle persone sbagliate. Chiedi al team di Java. OTOH, se stai effettivamente "mettendo in discussione" Java (cioè criticandolo), allora SO non è un posto appropriato per farlo; vedi le FAQ. –
Ho capito .. grazie però! – MozenRath
NullPointerException
si verifica quando si tenta di dereferenziare un null
, non quando lo si crea o ne ha uno solo. La traccia di stack contiene la linea, e questo è buono come si ottiene, e JVM non sa da dove viene il null
, non tiene traccia di tali cose quando cerca di sfogliare il bytecode il più velocemente possibile.
In caso di problemi di debug tali situazioni, si può sempre diviso variabile espressione e l'uso temporaneo:
String tmp = myObj.getSomething();
String result = tmp.substring(1);
Se prima linea di cui sopra getta NullPointerException (con traccia dello stack che mostra è venuto da quella linea, non dall'interno myObj.getSomething()
), sai che myObj era nullo. Se la seconda riga lancia NullPointerException, lo tmp
è nullo, ovvero myObj.getSomething()
restituito null. Se si nota quindi che myObj.getSomething()
può effettivamente restituire null in una situazione normale, è possibile aggiungere quindi il tipo di codice if (tmp != null) { ... } else { ... }
.
Detto abbastanza: traccia dello stack. –
- 1. NULL == puntatore
- 2. Perché non cancella il puntatore su NULL?
- 3. Why String.valueOf (null) sta causando un'eccezione del puntatore nullo?
- 4. Perché sottrarre un puntatore nullo in offsetof()?
- 5. Perché il "questo" puntatore è nullo in un delegato?
- 6. Come catturare l'eccezione puntatore nullo?
- 7. Perché "fopen" restituisce un puntatore NULL?
- 8. Iteratore equivalente al puntatore nullo?
- 9. Dereferenziare un puntatore nullo
- 10. C puntatore nullo aritmetica
- 11. Eliminazione di un puntatore nullo
- 12. Perché strncpy non è nullo?
- 13. L'array di stringhe senza dimensione iniziale fornisce un'eccezione di puntatore nullo
- 14. Qual è la differenza tra un puntatore nullo e un puntatore NULL?
- 15. Perché l'interfaccia Set non consente elementi null?
- 16. Puntatore nullo Eccezione in ActionBar
- 17. Ordina per null/non nullo con ICriteria
- 18. Java: eccezione puntatore nullo quando unboxing Integer?
- 19. SQL è nullo e = null
- 20. Quale di questi creerà un puntatore nullo?
- 21. tenta di accedere a un puntatore nullo
- 22. CGRectDivide con puntatore NULL
- 23. Eccezione puntatore Null avvio IntentService
- 24. Visual C++/CLI (CLR) Puntatore nullo
- 25. Perché non si può chiamare un metodo su un puntatore nullo in Java?
- 26. Catch delle eccezioni del puntatore nullo
- 27. Posso utilizzare "ottimizzazione puntatore nullo" per i miei tipi non puntatore?
- 28. Puntatore nullo Eccezione su file URI?
- 29. Puntatore nullo su ExpandedView per ActionBar Search
- 30. Come evitare il puntatore nullo in View.getDrawingCache()?
Potresti postare qualche esempio per illustrare cosa stai cercando di chiedere? La traccia di stack fornisce il numero di riga in cui si verifica l'eccezione. –
Di fronte alle ottimizzazioni, ecc, tutto ciò che di solito è noto al runtime è "questa cosa che doveva essere un riferimento è in realtà' null' ". Tale riferimento potrebbe essere stato calcolato altrove, in qualsiasi momento nel passato. –