Asıl sebep, bunun eski bir konudur. System.in,out,errSabitleri Java 1.0 parçası ... ve muhtemelen çok daha geriye idi. O zaman, tasarımın sorun yaşadığı açıktı, düzeltmek için çok geçti. Yapabilecekleri en iyi şey, System.setIn,setOut,setErrJava 1.1'deki yöntemleri eklemek ve ardından dil belirtimi sorunları 1 ile ilgilenmekti .
Bu, neden System.arraycopyadının Java adlandırma kurallarını ihlal ettiği statik bir yöntemin olduğu sorununa benzer .
Bunun "kötü tasarım" olup olmadığına gelince, sanırım öyle. Mevcut OO dışı işlemenin ciddi bir sorun olduğu durumlar vardır. (Bir Java programını çalıştıracak nasıl ... düşün içine onların "standart IO" dere gereksinimleri çatışma. Düşün zaman başka ... birim gerektirir bir akışlarını değiştirerek bu kodu test.)
Bununla birlikte, birçok şeyi yapmanın mevcut yolunun daha uygun olduğu argümanı ile de ilişki kurabilirim .
1 - Bu dikkat etmek ilginç System.in,out,err Değişkenlerin JLS'de "özel anlambilim" olarak özel olarak belirtildiğini . JLS, eğer bir finalalanın değerini değiştirirseniz, bu alanların haricinde davranışın tanımsız olduğunu söyler .