[Java] Perché questo codice NON restituisce una NullPointerException?


Answers

Fondamentalmente stai chiamando un metodo statico come se fosse un metodo di istanza. Questo si risolve in una chiamata al metodo statico, quindi è come se avessi scritto:

A m = new A();
m.getNull();
System.out.println(A.getValue());

IMO il fatto che il tuo codice sia legale è un difetto di progettazione in Java. Ti permette di scrivere codice molto fuorviante, con Thread.sleep come esempio che uso sempre:

Thread thread = new Thread(someRunnable);
thread.start();
thread.sleep(1000);

Quale thread invia a dormire? Quello attuale, "ovviamente" ...

Question
public class Main
{
   public static void main(String []ar)
   {
      A m = new A();
      System.out.println(m.getNull().getValue());
   }
}

class A
{
   A getNull()
   {
      return null;
   }

   static int getValue()
   {
      return 1;
   }
}

Mi sono imbattuto in questa domanda in un libro SCJP. Il codice stampa 1 invece di un NPE come previsto. Qualcuno potrebbe spiegare la ragione dello stesso?




la funzione getNull restituisce un oggetto A. getValue è dichiarato come statico e ha solo bisogno di nome_classe per funzionare, come in A.getValue (). Perché getNull restituisce (di fatto) un oggetto A ... otterrai 1






Links