【译】Java语言速览:StackOverflow
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 运行环境(JRE):用于运行 Java 应用和程序;
- Java 开发工具包(JDK):用于开发 Java 应用和程序。JDK 总是伴随着一个 JRE。
在本节中,我们将进一步探讨这两个软件包作为 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 版本,代号和发行时间:
- 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 ] (未发布)
最新的稳定版本:
- 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)
更多的代号及发行日期请访问 J2SE Code Names。要查看 JDK 的版本发行日志请访问 Wikipedia 的 Java 版本历史文章。
Java SE 8 正在发行并且可下载。
公共更新的结束日期(以前称为结束生命)为:
- 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
初始帮助
你是 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常用的IDE
- Eclipse IDE
- NetBeans IDE
- IntelliJ IDEA
- Spring Tool Suite(基于 Eclipse,包含用于 Spring 的插件)
- JDeveloper IDE
- Android Studio(基于 IntelliJ IDEA,主要用于 android 项目开发)
- BlueJ
初学者资源
- The Java Tutorials - 从在 Windows/Linux/Mac 上的 scratch 开始,覆盖大部分标准库。
- Generics
- Coding Bat (Java) - 学习部分基础之后,通过 Coding Bat 磨练和完善你的 Java 技术。
- Java 编程规范
- Stanford Java 视频课程
- Udemy Java 免费课程
- Edx 课程:Java 编程导论
日常帮助资源
进阶资源
免费 Java 编程图书与资源
- 《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》
常见问题
人们在 Java 主题下经常询问的问题:
通用:
环境变量:
String
,StringBuilder
与 toString
:
- 在 Java 中如何比较字符串?
- Java 中的 StringBuilder 与 StringBuffer
- 为什么当我在自己的 Java 项目中打印时得到
SomeType@2f92e0f4
? - Java 中的字符串常量
equals
与 hashCode
:
Java Platform SE API:
- 使用
nextInt()
后跳过nextLine()
- 在 Java 中比较日期
- Java:在迭代集合的过程中做高效地删除操作
- 如何排序
Map<Key, Value>
中的值 - 什么时候使用
LinkedList<>
而不是ArrayList<>
- 说明
Arrays.asList()
HashMap
与Hashtable
之间的区别
泛型:
类与对象:
算法与规范:
调试:
NullPointerException
是什么,我应该如何修复?- 堆栈追踪是什么?我应该如何使用才能调试自己的应用错误?
- 我应该如何避免检查 null?
- 为什么会出现
NoClassDefFoundError
错误? - Java 中的
NoSuchMethodError
Thread
与多线程:
与操作系统交互:
(提交者们,请仅仅列出经常被询问的问题。)
聊天室
原文链接: stackoverflow
翻译: ImportNew.com - honoka
译文链接: http://www.importnew.com/16689.html
【译】Java语言速览:StackOverflow的更多相关文章
- Java语言速览:StackOverflow
关于 java Java(请不要与 JavaScript 搞混)是一种设计为与 Java 虚拟机 (JVM) 一起使用的多用途编程语言.一般将安装了相关工具可以开发并运行 Java 程序的电脑系统称为 ...
- 考试应对(Java语法速览)
1.从命令行输入数据 格式:Scanner reader=new Scanner(System.in); 此reader对象可以使用的方法:nextBoolean(),nextByte(),nextS ...
- P1162_填涂颜色(JAVA语言)(速看!全洛谷最暴力解法!QAQ)
思路:看了看数据n<=30,于是我们可以暴力求解(主要是BFS学的不咋地~2333).枚举每个0的位置,看上下左右四个方向上是否都有1.都有1的话说明被1包围,即在闭合圈的内部,开个数组标记一下 ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- 用 Java 写个塔防游戏「GitHub 热点速览 v.21.37」
作者:HelloGitHub-小鱼干 本周 GitHub Trending 的主题词是:多语言.本周特推的 C 语言教程是大家都知道的阮一峰编写的,想必和他之前的技术文章类似,能起到科普作用.再来时 ...
- 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」
作者:HelloGitHub-小鱼干 你还记得那些 PHP 开发都去哪了吗?转 Golang 了!移动端现在流行什么?Flutter 编程.现在谷歌带着新的生产力语言来了,Carbon,代号:C++ ...
- 揭开周获 18k star 开源项目的神秘面纱「GitHub 热点速览 v.22.28」
本周 GitHub Trending 的项目重量十足,比如标题的一周获得 18k+ 的高性能 JS Runtime--bun,用性能来体现了它的"含金量".同样有重量的还有一行代码 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- 获取 Windows 密码「GitHub 热点速览 v.21.28」
作者:HelloGitHub-小鱼干 安全问题一直是 GitHub 的一大热点,因为数据安全问题诞生的各类自托管服务便是.而本周周榜上的 2 个和安全主题相关的项目,有些不同.mimikatz 是个老 ...
随机推荐
- ant安装配置
点击进入ant官网,找到下载选项. 选择下载安装文件.其余的源文件和手册的下载步骤完全相同. 可以下载官网上对应系统的最新版本.也可以在old ant 版本中选择自己需要的版本.笔者需要ant-1.9 ...
- SpringMVC处理MYSQL BLOB字段的上传
任务: uos.docfile的content字段是longblob类型的,通过页面将文件存储到这个字段里. 页面代码: <div class="box"> <d ...
- synchronized的功能拓展:重入锁(读书笔记)
重入锁可以完全代替synchronized关键字.在JDK5.0的早期版本中,重入锁的性能远远好于synchronized,但是从JDK6.0开始.JDK在synchronized上做了大量的优化. ...
- python可hash 不可hash类型
不可变类型是可hash #tuple str freezeset 可变类型是不可hash ##list set
- Nginx限制连接和请求
一.ngx_http_limit_conn_module对同一个ip/server的连接数做限制.配置指令:limit_conn_zone语法: limit_conn_zone $variable z ...
- jetty学习小结
1.什么是jetty? 开源HTTP服务器和Servlet引擎,是web应用的容器,同tomcat类似.由于其轻量灵活的特性,很多知名产品也应用了它,如maven.eclipse.hadoop.spa ...
- APP开发关于缓存
1 http://www.cnblogs.com/qianxudetianxia/archive/2012/02/20/2112128.html 1.1 http://blog.csdn.net/ln ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- Ansible 安装jdk
1. 在hosts文件添一个group,里面是你需要安装jdk的ip,如: [newhosts]192.168.2.155 ansible_ssh_user=hadoop ansible_ssh_pa ...
- thread.join() 方法存在的必要性是什么?
好久远的问题,为什么关注这个问题的人这么少? 或许是用到这个功能的情形比较少吧. 1.等待处理结果 为什么要用join()方法在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算 ...