Problem polega na tym, że Exception
jest drukowany na System.err
, a kod jest drukowany na System.out
.
Tak, bez źle nazwie klasy (PascalCase
proszę) możemy zrobić:
public static void main(String[] args) throws Exception {
final System system = null;
system.out.println("Odd");
System.out.println(system.toString());
}
a wyjście pojawia się:
Exception in thread "main" java.lang.NullPointerException
Odd
at com.boris.testbench.App.main(App.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Więc oni faktycznie przeplatanego. tj. kolejność wyjścia to niezdefiniowana, ponieważ do konsoli są drukowane dwa strumienie wyjściowe.
zmiana kodu do:
public static void main(String[] args) throws Exception {
final System system = null;
system.err.println("Odd");
System.err.println(system.toString());
}
daje pożądany efekt.
Można też złapać wyjątek i wydrukować go do System.out
aby osiągnąć ten sam efekt:
public static void main(String[] args) throws Exception {
final System system = null;
system.out.println("Odd");
try {
System.out.println(system.toString());
} catch (RuntimeException ex) {
ex.printStackTrace(System.out);
}
}
PS: Jestem pewien, że o tym wiesz, ale nie powinieneś nigdy wywoływać metody static
na instancji urządzenia class
. Powinieneś zawsze wywoływać metodę static
na samym class
. Tak więc w twoim przykładzie zawsze powinieneś:
public static void main(String[] args) {
sample1 s = new sample1();
s=null;
sample1.method1();
s.method();
}
@kocko Ponieważ jest to kolejność, którą nazwał metodami w ... – immibis
Wywołanie metody statycznej dla zmiennej instancji jest na początku złym stylem kodowania. Zawsze wywoływaj statyczne metody na samej klasie: 'sample1.method1()' –
http://stackoverflow.com/questions/1883321/java-system-out-println-and-system-err-println-out-of-order – Marvin