Me preguntaba recientemente por qué tanto java.lang.Runtime
como java.lang.System
tienen los mismos métodos para cargar bibliotecas, recoger basura y operaciones similares. ¿Es por razones históricas, por conveniencia, o realmente difieren? Ambas clases están disponibles en JDK 1.0 ...Java: ¿por qué las clases System y Runtime tienen métodos idénticos?
Respuesta
El sistema expone varias cosas para las que un desarrollador puede usar el sistema.
Me preocuparía que un programador juegue directamente con el Runtime. Para que System llame a los métodos, deben estar expuestos.
El sistema proporciona una interfaz para el Runtime para permitir el acceso a los métodos Runtime que son apropiados para ser llamados por los programadores. Llame a los métodos del sistema y déjelos delegar apropiadamente.
Si busca por ejemplo en el método System#load(String)
, verá que llama al método Runtime#load(String)
. Lo mismo para gc()
. Por lo tanto, es muy probablemente por razones históricas.
No estoy de acuerdo con el argumento histórico. Si echa un vistazo a la API de Java 1.0, encontrará que los métodos siempre han estado presentes en Sistema y Tiempo de ejecución. – Jonathan
Mi suposición (recuerde, es una suposición), es que los métodos en la clase System
están ahí para su conveniencia. Por ejemplo, System.gc();
es estático, donde Runtime.gc();
es un método de instancia. Esto hace que la llamada sea más fácil de realizar, ya que no necesita obtener una instancia de Runtime
.
- 1. Llamando métodos idénticos en las clases base
- 2. ¿Por qué las clases abstractas en Java tienen constructores?
- 3. ¿Cómo implementar métodos idénticos con 2 y más clases?
- 4. ¿Por qué las clases generadas por JAXB tienen miembros protegidos y cómo puedo cambiar esto?
- 5. ¿Por qué las clases internas hacen accesibles los métodos privados?
- 6. Clases y métodos abstractos en Java, Herencia
- 7. compilador Java en Runtime
- 8. ¿Por qué las clases de Java no heredan las anotaciones de las interfaces implementadas?
- 9. Por qué los métodos de interfaz no tienen cuerpo
- 10. ¿Por qué declarar las clases Mapper y Reducer como estáticas?
- 11. ¿Qué complejidad tienen las operaciones en BigInteger de Java 7?
- 12. Java: ¿Por qué son necesarias las clases de contenedor?
- 13. ¿Por qué los métodos ruby no tienen alcance léxico?
- 14. ¿Por qué Android prefiere las clases estáticas
- 15. ¿Por qué las clases estáticas no pueden tener métodos y variables no estáticos?
- 16. ¿Por qué no serializar clases abstractas en Java?
- 17. javascript: ¿las cadenas primitivas tienen métodos?
- 18. ¿Por qué no puedo asignar intercambiablemente con dos estructuras que tienen contenidos idénticos?
- 19. ¿Las clases abstractas tienen un VTABLE?
- 20. ¿Por qué las variables locales tienen valores iniciales?
- 21. Java Voting System
- 22. informe de clases y métodos
- 23. ¿Por qué las clases de dirección Inet * no tienen constructores visibles?
- 24. Por qué las clases StAX no fueron adaptadas para ARM en Java 7
- 25. Mapa de dependencias para clases y métodos Java
- 26. ¿cuántas clases por paquete? métodos por clase? líneas por método?
- 27. ¿Por qué los métodos C++ a veces se definen dentro de las clases?
- 28. ¿Por qué Eclipse no actualiza las clases?
- 29. ¿Por qué Windows.Forms está en System y no en Microsoft?
- 30. ¿Por qué RetentionPolicy para @deprecated es RUNTIME?
No entiendo lo que le gustaría expresar. Si Java no quiere que los desarrolladores jueguen directamente con Runtime, debería hacerlo privado en lugar de público. En realidad, podemos llamar los métodos de Runtime libremente. – Chao
@Richard La clase Runtime expone el entorno JVM y OS subyacente de formas que pueden no ser portátiles. La clase del sistema expone una vista portátil consistente de JVM y OS. Runtime no puede ser privado ya que varias clases, incluido System, necesitan llamarlo. También hay casos limitados en los que llamar a los métodos directamente puede ser apropiado. – BillThor
¿Quiere decir que siempre deberíamos preferir usar la clase del sistema, si es posible? Los métodos abreviados pueden ser una buena idea en alguna parte, pero el diseño de API como este es realmente confuso. – Chao