Sự cố bạn gặp phải là Exception
được in thành System.err
trong khi mã của bạn được in thành System.out
.
Vì vậy, không có một lớp nặng tên (PascalCase
xin vui lòng), chúng tôi có thể làm:
public static void main(String[] args) throws Exception {
final System system = null;
system.out.println("Odd");
System.out.println(system.toString());
}
Và kết quả tôi nhận được là:
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)
Vì vậy, họ đang thực sự xen kẽ. tức là thứ tự của đầu ra là không xác định vì có hai luồng đầu ra được in ra bảng điều khiển.
Thay đổi mã để:
public static void main(String[] args) throws Exception {
final System system = null;
system.err.println("Odd");
System.err.println(system.toString());
}
Tạo kết quả mong muốn.
Bạn cũng có thể nắm bắt những ngoại lệ và in nó để System.out
để đạt được hiệu quả tương tự:
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);
}
}
T.B. Tôi chắc chắn bạn biết điều này, nhưng bạn không bao giờ nên gọi phương thức static
trên một phiên bản của class
. Bạn phải luôn gọi phương thức static
trên chính bản thân số class
. Vì vậy, trong ví dụ của bạn, bạn nên luôn luôn làm:
public static void main(String[] args) {
sample1 s = new sample1();
s=null;
sample1.method1();
s.method();
}
Nguồn
2015-06-19 07:20:00
@kocko Vì đó là thứ tự mà ông gọi là các phương pháp trong ... – immibis
Gọi một phương thức tĩnh trên một biến mẫu là kiểu mã hóa xấu để bắt đầu. Luôn gọi các phương thức tĩnh trên chính lớp đó: 'sample1.method1()' –
http://stackoverflow.com/questions/1883321/java-system-out-println-and-system-err-println-out-of-order – Marvin