2011-11-17 20 views
9

Zastanawiam się ostatnio, dlaczego oba modele java.lang.Runtime i java.lang.System mają te same metody ładowania biblioteki, zbierania śmieci i podobnych operacji. Czy to z powodów historycznych, dla wygody, czy naprawdę różnią się one od siebie? Obie klasy są dostępne z JDK 1.0 ...Java - dlaczego klasy System i Runtime mają identyczne metody?

Odpowiedz

2

System ujawnia różne rzeczy, które mogą być odpowiednie dla programisty do korzystania z Systemu.

Byłbym zaniepokojony programatorem grającym bezpośrednio z Runtime. Aby system mógł wywoływać metody, muszą być odsłonięte.

System zapewnia interfejs do środowiska wykonawczego, umożliwiający dostęp do metod wykonawczych odpowiednich dla programistów. Wezwij metody systemowe i pozwól im odpowiednio delegować.

+0

Nie rozumiem, co chcesz wyrazić. Jeśli java nie chce, aby programiści grali bezpośrednio w Runtime, powinien to uczynić prywatnym, a nie publicznym. W rzeczywistości możemy swobodnie wywoływać metody Runtime. – Chao

+0

@Richard Klasa wykonawcza udostępnia podstawowe środowisko JVM i OS w sposób, który może nie być przenośny. Klasa System udostępnia spójny przenośny widok JVM i systemu operacyjnego. Środowisko wykonawcze nie może być prywatne jako liczba klas, w tym System, należy je wywoływać. Istnieją również ograniczone przypadki, w których bezpośrednie odwoływanie się do metod może być właściwe. – BillThor

+0

Masz na myśli, że zawsze powinniśmy preferować używanie klasy System, jeśli to możliwe? Metody skrótów mogą być dobrym pomysłem gdzieś, ale taki projekt interfejsu API jest naprawdę mylący. – Chao

0

Jeśli szukasz przykładu w metodzie System#load(String), widzisz, że wywołuje on metodę Runtime#load(String). To samo dotyczy gc(). Tak jest najprawdopodobniej ze względów historycznych.

+0

Nie zgadzam się z argumentem historycznym. Jeśli spojrzysz na API Java 1.0, przekonasz się, że metody zawsze były obecne w System i Runtime. – Jonathan

4

Zgaduję (pamiętaj, to jest domysły), że metody w klasie System są dostępne dla wygody. Na przykład: System.gc(); jest statyczna, gdzie Runtime.gc(); jest metodą instancji. Ułatwia to wywoływanie, ponieważ nie trzeba uzyskiwać instancji Runtime.