Asıl sebep, bunun eski bir konudur. System.in,out,err
Sabitleri 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,setErr
Java 1.1'deki yöntemleri eklemek ve ardından dil belirtimi sorunları 1 ile ilgilenmekti .
Bu, neden System.arraycopy
adı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 final
alanın değerini değiştirirseniz, bu alanların haricinde davranışın tanımsız olduğunu söyler .