2012-04-05 53 views
38

我在訪問中被問到用什麼編程語言來實現Java。我驚呆了:我從來沒有想到這一點。我只知道Java中的核心Java類。什麼編程語言用於開發Java?

什麼編程語言用於開發Java?

+1

Java核心是用Java編寫,是U問什麼語言都寫在編譯器,並翻譯Java來?或者你在問JVM嗎? – Churk 2012-04-05 11:54:11

+4

http://stackoverflow.com/q/1220914/1130032 – Ved 2012-04-05 11:55:21

+2

http://stackoverflow.com/questions/410320/what-is-java-written-in – OguzOzkeroglu 2012-04-05 11:57:33

回答

64

同樣的問題已經通過誰在這裏Wiki Answers

Java語言是一種語言規範編寫Sun的JDK實現 檢查的人的一個回答規範。那就像 問:「你用德語寫法語嗎?」

我假設提問者真正想知道的是「什麼 語言是JDK開發的?」也就是說,什麼是潛在 語言整個Java虛擬機和類庫發達

答案是:爲虛擬機,它因人而異,因爲有多個不同的 VM實現。但是,類庫總是用Java編寫,因爲它們打算使用Java VM 本身運行。某些使用JNI(Java本地接口)的庫可能部分用各種其他語言編寫,因爲它們是 ,旨在用於JVM之外。

Sun/Oracle VM是用C++編寫的。 BEA/Weblogic/Oracle VM是用C編寫的 。IBM的J9是(我相信)用C++編寫的。有幾個虛擬機實際上是用Java編寫的,有一個甚至是用Lisp編寫的。 絕大多數JVM還包含彙編器代碼以加速某些「熱門」區域的某些 。

+4

「你不用語言寫一種語言」這並非總是如此。 GCC自2012年起用C++編寫([引文](https://www.quora.com/C-programs-are-compiled-using-gcc-which-itself-is-written-in-C-so-how ),而Scala編譯器是用Scala編寫的([引用](http://stackoverflow.com/a/19580470/1478636))。這兩個頁面都引用了[bootstrapping]的過程(https://en.wikipedia.org/wiki/Bootstrapping_(編譯器))來完成此操作。 – 2017-05-18 20:56:46

+1

你沒有得到它。 「語言」是不需要「書寫」的描述。它只是需要描述。即使*如果*這個規範包含引導機制(我相信它沒有),這個描述仍然只是一個描述。 – ospf 2018-01-05 08:49:15

-1

Java運行在JVM-java虛擬機上。 JVM的實現有所不同。

+4

不完全......有幾種實現方式,最常見的一種(Sun/Oracle JVM)是​​用C++編寫的。 – s1lence 2012-04-05 12:06:27

+1

該死的你誤導教授!感謝您的更正:) – RyanS 2012-04-05 13:03:08

1

基本上java是通過Java中的本機api使用C語言。你可以像Object類一樣檢查java中任何類的源代碼,並檢查是否每當它想使用C語言時,它們都會在java中調用native API。

like public native int hashCode();你不要的語言寫一個 語言,這是一個 -

12

由Oracle在其上執行Java代碼的Java虛擬機(JVM)是​​用C++編寫的。

存在其他方面的其他虛擬機,其他語言實現,甚至一些甚至Java本身。其中一些列表可在wikipedia here上找到。

爲了理解您必須知道的Java虛擬機在構建項目時執行由Java編譯器生成的bytecode。該字節碼適用於所有可能的操作系統和平臺,因此可用於特定平臺的虛擬機。(這就是Java如何實現跨系統兼容性)

還有幾個Java編譯器。 (將Java代碼編譯爲字節碼的那些)最常見的是由oracle編寫的javac編譯器,主要由C編寫。有關這些here的更多信息。

6

的Java庫(java.lang, java.util etc, often referred to as the Java API)是自己用Java編寫的,雖然方法標記爲native.

太陽JVM是用C,你的機器上JVM運行是platform-dependent executable,因此可能已經原文任何語言
Oracle JVM(HotSpot)寫入C++ programming language。提供了Oracle

Java編譯器是用Java編寫本身..