System.outđược khai báo là public static final PrintStream out.
Nhưng bạn có thể gọi System.setOut()để chỉ định lại nó.
Huh? Làm thế nào điều này là có thể nếu nó final?
(cùng điểm áp dụng cho System.invà System.err)
Và quan trọng hơn, nếu bạn có thể thay đổi các trường cuối cùng tĩnh công khai, điều này có nghĩa là gì đối với các đảm bảo (nếu có) finalcung cấp cho bạn? (Tôi chưa bao giờ nhận ra và cũng không mong đợi System.in/out/err hoạt động như finalcác biến)