Như tôi biết cả hai lỗi và sai đều thuộc cùng một lớp PrintStream
. Ai có thể cho tôi biết chúng khác nhau như thế nào ... làm thế nào họ thay đổi hành vi của họ?sự khác biệt giữa system.out và system.err
Trả lời
Chúng đi tới các luồng stdout và stderr tương ứng. Trên hầu hết các hệ điều hành, chúng đều khác biệt và có thể được gửi đến các địa điểm khác nhau. Ví dụ, điều này có thể hữu ích nếu đầu ra của chương trình của bạn được phân tích bởi chương trình khác - nếu cần báo cáo lỗi, stderr thường là nơi tốt hơn vì bạn có thể thiết lập nó để thu hút sự chú ý của con người.
Sự khác biệt không rõ ràng bởi vì theo mặc định trong hầu hết các hệ điều hành chúng được ghi vào bàn điều khiển (cùng một tệp, bảng điều khiển cũng là một tệp). Tuy nhiên, bạn có thể có System.out
ghi vào một tệp và System.err
ghi vào bảng điều khiển (màn hình) - đây chỉ là một kịch bản.
Viết một chương trình mà phát ra cả hai thông điệp System.out và System.err, và cố gắng này:
java MyProgram > out.txt 2> err.txt # On a *NIX.
System.out
thông điệp sẽ đi đến out.txt và System.err
thông điệp sẽ để err.txt. Điểm cơ bản cần nhớ là nghĩ về System.out và System.err dưới dạng các luồng tới các tệp (đó là những gì chúng) thay vì một cơ chế để xuất ra trên màn hình, đó là những gì tôi cho là một người mới bắt đầu.
+1 cho ví dụ chuyển hướng. –
Chúng có cùng hành vi. Nhưng đầu tiên (ra) là một tham chiếu đến dòng đầu ra tiêu chuẩn (theo mặc định nó là một giao diện điều khiển). Và thứ hai (err) là một tham chiếu đến luồng lỗi tiêu chuẩn (theo mặc định nó là một giao diện điều khiển quá).
Nhưng nếu muốn, bạn có thể thay đổi tham chiếu hoặc bạn có thể thêm trình bao bọc/bộ lọc cho từng bộ lọc.
IDE của tôi, ví dụ, hiển thị đầu ra từ err
luồng có màu đỏ.
System.out gửi đầu ra tới luồng đầu ra tiêu chuẩn. System.err gửi đầu ra tới luồng lỗi chuẩn. Theo mặc định cả hai đều ghi vào bàn điều khiển.
Tuy nhiên, lợi ích là hai luồng có thể được chuyển hướng để bạn có thể có đầu ra system.out được chuyển hướng đến tệp nhật ký bình thường của mình và bạn có thể có đầu ra System.err được chuyển hướng đến nhật ký lỗi.
- 1. Race giữa System.out và System.err trong java
- 2. Chuyển hướng System.out và System.err sang slf4j
- 3. Sự khác biệt giữa $ (...) và `...`
- 4. Sự khác biệt giữa. và #
- 5. Sự khác biệt giữa $ * và $ @
- 6. Sự khác biệt giữa ". +" Và ". +?"
- 7. Sự khác biệt giữa "**/* /" và "** /"?
- 8. Sự khác biệt giữa = và: =
- 9. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 10. Sự khác biệt giữa Html.RenderAction và Html.Action
- 11. Sự khác biệt giữa cookie và phiên?
- 12. Sự khác biệt giữa '.' và "." trong java
- 13. Sự khác biệt giữa SimpleDB và S3
- 14. C++ - Sự khác biệt giữa (*). và ->?
- 15. Sự khác biệt giữa offsetHeight và clientHeight
- 16. Sự khác biệt giữa RDLC và SSRS
- 17. Sự khác biệt giữa "\ n" và Environment.NewLine
- 18. Sự khác biệt giữa qt và PyQt4
- 19. Sự khác biệt giữa AForge và OpenCV
- 20. Sự khác biệt giữa toFixed() và toPrecision()?
- 21. sự khác biệt giữa cacao và cocoatouch
- 22. Sự khác biệt giữa smtpClient.send() và smtpClient.SendAsync()?
- 23. Sự khác biệt giữa window.location.host và window.location.hostname
- 24. Sự khác biệt giữa DTLS và TLS
- 25. Sự khác biệt giữa Mealy và Moore
- 26. sự khác biệt giữa createRfcommSocketToServiceRecord và createRfcommSocket
- 27. Sự khác biệt giữa Arrays.sort() và Arrays.parallelSort()
- 28. sự khác biệt giữa orm và pdo
- 29. Sự khác biệt giữa nproc và ulimit?
- 30. Sự khác biệt giữa apc_add và apc_store?
http://en.wikipedia.org/wiki/Standard_streams – stacker