java (請不要與 JavaScript 搞混) 是一種設計為與 Java 虛擬機 (JVM) 一起使用的多用途編程語言。一般稱呼安裝了相關工具使其可以開發并運行 Java 程序的電腦系統為 “Java 運行平臺”。使用這個標簽可以查找有關 Java 編程語言或者 Java 平臺工具的問題。
Java 是一種高性能、跨平臺、面向對象的編程語言和運行環境。Java 大部分語法起源于 C 和 C++,但是其對象模型簡于 C++,并且減少了低級功能。Java 應用均被編譯為字節碼(被稱為 class 文件),使其可以被 JVM(Java 虛擬機)執行,并獨立于不同的電腦體系。JVM 通過一個垃圾收集器(查看 garbage-collection)幫助管理內存,當對象不再使用時可以將其從內存中移除。Java 的系統類型是靜態、強類型、安全、聲明類型和顯式的。Java 支持反射、接口等與 C 和 C++ 相似的功能,例如 JNI(The Java Native Interface)。
Java 被設計為盡可能減少與電腦系統的依賴關系,可以允許應用開發者 “一處編寫,處處運行”(WORA):在一個平臺上執行的代碼不需重新編譯就能在其他機器上運行。Java 最初由 James Gosling 在 Sun Mircosystems 公司(2009年4月20日已被 Oracle 并購)設計,最初是于 1995 年作為 Sun Microsystems公司 Java 運行平臺的核心元件發行。
安裝工具用于開發和運行 Java 的電腦系統被 Sun(現為 Oracle)命名為 Java 運行平臺。各種具有平臺特性的工具可以幫助開發者更有效率地使用 Java 程序語言開發。
平臺包含兩個基本的軟件包:
在本節中,我們將進一步探討這兩個軟件包作為 Java 運行平臺的組成部分,其產生的作用。
作為參考的大部分 Java 實現方式都是開源的(the OpenJDK),由包括 Oracle,Apple,SAP 與 IBM 在內的大型企業提供支持。
極少的電腦可以直接運行 Java 程序。因此,Java 環境通常要求安裝合適的軟件組件。在 Windows 系統上,一般可以從 java.com 下載免費的 Java 運行環境(JRE)。在 Macintosh 系統上,當一個應用需要 Java 運行環境時,會在啟動時請求用戶下載 Java。在類 linux 系統上,Java 一般通過包管理器安裝。
Windows 和 Mac 平臺的開發者經常需要額外的工具,使用工具所需的免費 Java 開發包(JDK)必須從 Oracle下載并手動安裝。
Java 會被編譯為字節碼,然后由 JVM 通過編譯為原生代碼進行解析工作。編譯技術為動態編譯(JIT)。最初這被視為降低性能的做法,但是隨著 JVM 和 JIT 的發展,擔憂逐漸減少。在某些情況下,例如當一個舊版本的處理器需要向后兼容時,JVM 甚至快于原生代碼編譯速度。
注意:也有其他供應商存在,然而大部分都有授權費。對于 linux 和其他平臺,請查閱相關的操作系統文檔。
包含主要的 Java 版本,代號和發行時間:
最新的穩定版本:
更多的代號及發行日期請訪問 J2SE Code Names。要查看 JDK 的版本發行日志請訪問 Wikipedia 的 Java 版本歷史文章。
Java SE 8 正在發行并且可下載。
公共更新的結束日期(以前稱為結束生命)為:
你是 Java 初學者或者需要幫助使你的第一個 Java 程序運行?請參看 Oracle Java 教程開始部分。
詢問問題前,請使用右上角的搜索欄查找是否已被詢問(我們有很多相似的問題),并且閱讀《如何提出一個好的問題》,學習怎樣吸引 Jon Skeet 回答你的問題。
Java 程序需要堅持下列的命名規范以提高可讀性和降低意外錯誤出現的可能性。通過遵守這些命名規范,可以使他人閱讀你的代碼和幫助你時更加輕松。
類型名(類,接口,枚舉等等)應以大寫字母開頭,隨后的每個單詞首字母大寫。例如:String,ThreadLocal 和 NullPointerException。有時被稱為 pascal case(帕斯卡命名法)。
方法名應使用 camelCased(駝峰式命名法),即它們應以小寫字母開頭,隨后的每個單詞首字母大寫。例如:indexOf,PRintStackTrace,interrupt。
字段名應使用和方法名一樣的駝峰式命名法。
常量表達式命名(static final 不可變對象)應被寫為 ALL_CAPS形式,使用下劃線分割每個單詞。例如:YELLOW,DO_NOTHING_ON_CLOSE。這同樣應用于一個枚舉類(Enum)的變量命名。然而,static final 修飾可變對象時應使用駝峰式命名。
Hello World 程序的代碼為:
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}編譯和調用 Hello world 程序:
javac -d . HelloWorld.java java -cp . HelloWorldJava 源代碼被編譯為中間代碼形式(針對 Java 虛擬機 的字節碼指令),然后可以被 java 命令執行。
人們在 Java 主題下經常詢問的問題:
通用:
環境變量:
String,StringBuilder 與 toString:
SomeType@2f92e0f4?equals 與 hashCode:
equals() 和 == 有什么不同equals() 和 hashCode() 方法Java Platform SE API:
nextInt() 后跳過 nextLine()Map<Key, Value> 中的值LinkedList<> 而不是 ArrayList<>Arrays.asList()HashMap 與 Hashtable 之間的區別泛型:
List<Dog> 是 List<Animal> 的子類嗎?為什么 Java 的泛型不支持隱式多態?類與對象:
enum 對比 public static final字段的類有何優勢?算法與規范:
+= 操作調試:
NullPointerException 是什么,我應該如何修復?NoClassDefFoundError 錯誤?NoSuchMethodErrorThread 與多線程:
java.lang.Thread.interrupt() 做了什么?implements Runnable 對比 extends Thread與操作系統交互:
Runtime.exec(String) 只在一些命令下產生作用?(提交者們,請僅僅列出經常被詢問的問題。)
聊天室
原文鏈接: stackoverflow
翻譯: ImportNew.com - honoka
譯文鏈接: http://www.importnew.com/16689.html
新聞熱點
疑難解答