我最近想知道为什么java.lang.Runtime
和java.lang.System
对图书馆的加载,垃圾收集和类似的操作有相同的方法。是出于历史原因,为了方便,还是真的不同?这两个类都可以从JDK 1.0中获得...Java - 为什么System和Runtime类具有相同的方法?
9
A
回答
2
系统公开了各种各样的东西,它可能适合开发人员使用System for。
我会担心一个程序员直接与运行时间玩。为了系统调用这些方法,他们需要被暴露。
系统为运行时提供一个接口,以便访问适合程序员调用的运行时方法。调用System方法并让它们适当地进行委托。
0
如果您在方法System#load(String)
上寻找示例,您会看到它称为方法Runtime#load(String)
。 gc()
一样。所以这可能是由于历史原因。
+0
我不同意历史的观点。如果您看一下Java 1.0 API,您会发现,这些方法一直存在于System和Runtime中。 – Jonathan
4
我的猜测(记住,它的猜测)是为了方便,System
类中的方法。例如,System.gc();
是静态的,其中Runtime.gc();
是一种实例方法。这使得调用更容易,因为您不需要获得Runtime
实例。
相关问题
- 1. 为什么呼叫方法和异步方法具有相同的线程ID
- 2. 为什么@FunctionalInterface具有RUNTIME保留?
- 3. 为什么IList和ICollection的通用副本不具有相同的方法集?
- 4. 为什么PrintStream类具有printf和format方法,如果它们的行为方式相同?
- 5. 具有两种几乎相同的方法的Java抽象类
- 6. 具有静态方法的静态类和具有静态方法的常规类之间有什么不同?
- 7. 具有相同名称的java实例变量和方法
- 8. 为什么mouseover和moveout不适用于所有具有相同名称的类?
- 9. 与其类具有相同名称的方法是做什么的?
- 10. 具有相同通用方法的抽象类和接口
- 11. 具有相同名称的Php类和特征方法
- 12. 覆盖和重写的方法必须具有相同的可访问性,那么为什么Page.CreateChildControls()不同?
- 13. 为什么char =='L'和char!='L'具有相同的输出?
- 14. 为什么Int64和UInt64具有相同的大小
- 15. 为什么Transition.captureStartValues和Transition.captureEndValues具有相同属性的View?
- 16. 为什么TextAppearance和TextAppearance.Small具有相同的文本大小?
- 17. 为什么允许CountableRange具有相同的lowerBound和upperBound?
- 18. 为什么有那么多具有相同功能的Java框架?
- 19. 为什么我们需要System类来调用out.println()方法?
- 20. Java:不同包中具有相同名称的类的本地方法
- 21. 为什么org.lwjgl.opengl.GL43类没有glDrawElements方法?
- 22. 具有不同原始数据成员但相同方法的Java子类
- 23. System类在java中代表什么?
- 24. 为什么不同的HTML ID具有相同的风格?
- 25. 扩展使用类别具有相同方法的类名
- 26. 为什么java方法与对象而不是类相关?
- 27. 为什么具有相同数据的列表具有不同的大小?
- 28. 方法有相同类型的擦除
- 29. 方法具有相同的SOAPAction
- 30. 具有相同名称的方法
我不明白你想表达什么。如果Java不希望开发人员直接使用Runtime,那么它应该使其成为私有的而不是公共的。实际上,我们可以自由地调用Runtime的方法。 – Chao
@Richard Runtime类以不可移植的方式公开底层的JVM和OS环境。 System类公开了JVM和OS的一致可移植视图。 Runtime不能是私有的,因为包括System在内的许多类都需要调用它。也有限制直接调用方法的情况可能适用。 – BillThor
你的意思是我们应该总是喜欢使用System类,如果可能的话?快捷方式在某个地方可能是个好主意,但是像这样的API设计真的让人困惑。 – Chao