java lang >/ - Perché questo codice NON restituisce una NullPointerException?





2 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" ...

ita processing string
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






Related