Java語言速覽:StackOverflow
關于 java
Java(請不要與 JavaScript 搞混)是一種設計為與 Java 虛擬機 (JVM) 一起使用的多用途編程語言。一般將安裝了相關工具可以開發并運行 Java 程序的電腦系統稱為 “Java 運行平臺”。使用這個標簽可以(在StackOverflow上)查找有關 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 運行環境(JRE):用于運行 Java 應用和程序;
- Java 開發工具包(JDK):用于開發 Java 應用和程序。JDK 總是伴隨著一個 JRE。 </ul>
- JDK 1.0 (1996/01/23)
- JDK 1.1 (1997/02/19)
- J2SE 1.2 [Playground] (1998/12/08)
- J2SE 1.3 [Kestrel] (2000/05/08)
- J2SE 1.4 [Merlin] (2002/02/06)
- J2SE 5.0 [Tiger] (2004/09/30)
- Java SE 6 [Mustang] (2006/12/11)
- Java SE 7 [Dolphin] (2011/07/28)
- Java SE 8 [JSR 337] (2014/03/18)
- Java SE 9 [TBD ] (未發布) </ul>
- Java Standard Edition 8 Update 51 (1.8.0_51) – (2015/07/14)
- Java Standard Edition 7 Update 79 (1.7.0_79) – (2015/04/14) </ul>
- J2SE 1.4 – 2008/10
- J2SE 5.0 – 2009/10
- Java SE 6 – 2013/02
- Java SE 7 – 2015/04
- Java SE 8 – 2017/09 </ul>
在本節中,我們將進一步探討這兩個軟件包作為 Java 平臺的組成部分產生的作用。
背景
作為參考的大部分 Java 實現方式都是開源的(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:你的第一個程序
Hello World 程序代碼為:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
編譯和調用 Hello world 程序:
javac -d . HelloWorld.java java -cp . HelloWorld
Java 源代碼被編譯為中間代碼(針對 Java 虛擬機 的字節碼指令),然后可以被 java
命令執行。
更多信息:
- Java 維基頁面
- JDK 維基頁面
- JRE 維基頁面
- Oracle 的 Java 下載頁面 </ul>
- Eclipse IDE
- NetBeans IDE
- IntelliJ IDEA
- Spring Tool Suite(基于 Eclipse,包含用于 Spring 的插件)
- JDeveloper IDE
- Android Studio(基于 IntelliJ IDEA,主要用于 Android 項目開發)
- BlueJ </ul>
- Oracle 的 Java 教程 :在 Windows、Linux、Mac 上從零開始,覆蓋大部分標準庫。
- Generics
- Coding Bat (Java) :學習部分基礎之后,通過 Coding Bat 磨練和完善你的 Java 技術。
- Java 編程規范
- Stanford Java 視頻課程
- Udemy Java 免費課程
- Edx 課程:Java 編程導論 </ul>
- Java SE 文檔
- Java 7 API 參考手冊
- Java 8 API 參考手冊 </ul>
- Java 語言與虛擬機說明
- 其他可以在 JVM 上與 Java 混合使用的開發語言 </ul>
- 《Linux 開發 Java 應用》(Carl Albing 與 Michael Schwarz 合著,PDF)
- 《如何像一名電腦科學家一樣思考》
- 《Spring IO Guides》
- 《The Java EE7 Tutorial》(PDF)
- 《Java Thin-Client Programming》
- 《Oracle’s Java Tutorials》
- 《Thinking in Java》
- 《OSGi in Practice》(PDF)
- 《Category wise tutorials – J2EE》
- 《Java Example Codes and Tutorials – J2EE》
- 《Java Design Pattern Video Training》 </ul>
- Java 與 JavaScript 有什么不同
- 我如何將自己的 Java 程序轉換為 .exe 文件 </ul>
- 在環境變量中設置多種 jar 包 </ul>
- 在 Java 中如何比較字符串?
- Java 中的 StringBuilder 與 StringBuffer
- 為什么當我在自己的 Java 項目中打印時得到
SomeType@2f92e0f4
? - Java 中的字符串常量 </ul>
equals()
和==
有什么不同- 在 Java 中重寫
equals()
和hashCode()
方法
</ul>
- 使用
nextInt()
后跳過nextLine()
- 在 Java 中比較日期
- Java:在迭代集合的過程中做高效地刪除操作
- 如何排序
Map<Key, Value>
中的值 - 什么時候使用
LinkedList<>
而不是ArrayList<>
- 說明
Arrays.asList()
HashMap
與Hashtable
之間的區別
</ul>
List<Dog>
是List<Animal>
的子類嗎?為什么 Java 的泛型不支持隱式多態?- Java 泛型:PECS 是什么?
- 原型是什么?為什么我們不應使用?
- 如何創建一個泛型數組? </ul>
- Java 是按引用傳遞的嗎?
- Java
enum
對比public static final
字段的類有何優勢? - public、protected、private 與 default 之間有什么區別 </ul>
- 為什么我不能正確地打印一個 double 類型?
- 為什么整數做除法運算會返回 0?
- Java 的
+=
操作
</ul>
NullPointerException
是什么,我應該如何修復?- 堆棧追蹤是什么?我應該如何使用才能調試自己的應用錯誤?
- 我應該如何避免檢查 null?
- 為什么會出現
NoClassDefFoundError
錯誤? - Java 中的
NoSuchMethodError
</ul>
java.lang.Thread.interrupt()
做了什么?- 無法通過打印語句查看循環中的變量改變
implements Runnable
對比extends Thread
</ul>
- 為什么
Runtime.exec(String)
只在一些命令下產生作用?
</ul>
- Stack Overflow 的 Java 聊天室
- java-and-android-era </ul> 原文鏈接: stackoverflow 翻譯: ImportNew.com - honoka
開發Java常用的IDE
初學者資源
日常幫助資源
進階資源
免費 Java 編程圖書與資源
常見問題
人們常問的 Java 問題:
一般問題:
環境變量:
String
,StringBuilder
與 toString
:
equals
與 hashCode
:
Java Platform SE API:
泛型:
類與對象:
算法與轉換:
調試:
Thread
與多線程:
與操作系統交互:
(提交者們,請僅僅列出經常被詢問的問題。)
聊天室
譯文鏈接: http://www.importnew.com/16689.html