Java(不要与JavaScript或JScript或JS混淆)是一种通用的,静态类型的,面向对象的编程语言,旨在与Java虚拟机(JVM)结合使用。“Java平台”是已安装用于开发和运行Java程序的工具的计算系统的名称。将此标记用于涉及Java编程语言或Java平台工具的问题。
Java的是高层次的,与平台无关的,面向对象,函数编程语言和运行时环境。
Java语言的大部分语法来自C和C ++,但它的对象模型比后者更简单,并且它的低级设施更少。Java应用程序通常编译为字节码(称为类文件),可由JVM(Java虚拟机)执行,与计算机体系结构无关。JVM通常会进一步将代码编译为本机机器代码以优化性能。
JVM在垃圾收集器的帮助下管理内存(请参阅垃圾收集),以便在对象不再使用时处理从内存中删除对象。Java的打字规则是静态的,强大的,安全的,主格的和清晰的。Java支持通过JNI(Java Native Interface)反射和与C和C ++接口等功能。
Java旨在实现尽可能少的实现依赖性,旨在允许应用程序开发人员编写一次,在任何地方运行,或者有时编写一次,在任何地方运行(在一个平台上执行的代码不需要重新编译以在另一个平台上运行)。Java最初由Sun Microsystems 的James Gosling开发(于2010年1月27日与Oracle Corporation完全合并),并于1995年作为Sun Microsystems Java平台的核心组件发布。Java于1991年6月由James Gosling作为一个名为“Oak”的项目启动。
在Java平台是由Sun(现在是Oracle)提供给计算已安装的工具,用于开发和运行Java程序的系统的名称。该平台具有各种工具,可以帮助开发人员有效地使用Java编程语言。
该平台包含两个基本软件包:
Java运行时环境(JRE):运行 Java应用程序和applet所必需的。 Java Development Kit(JDK):开发 Java应用程序和applet所必需的。JDK附带一个JRE。 在本节中,我们将进一步详细探讨Java平台的这两个软件组件的作用。
背景 Java的主要参考实现是开源(OpenJDK),并得到包括Oracle,Apple,SAP和IBM在内的主要公司的支持。
很少有计算机可以直接运行Java程序。因此,通常通过安装合适的软件组件来使Java环境可用。在Windows计算机上,这通常是通过下载免费的Java Runtime Environment(Java.com中的 JRE)来完成的。在Macintosh计算机上,当需要启动Java的应用程序时,系统会提示用户下载Java。在类似Linux的系统上,Java通常是通过包管理器安装。
开发人员经常需要其他工具,这些工具可以在免费的Java开发工具包中找到,Windows和Mac必须从Oracle下载并手动安装。
Java被编译成字节码,然后由JVM编译成本机机器代码。编译是在即时(JIT)中完成的。这最初被视为性能损失,但JVM和JIT编译的改进使这一点不再受到关注。在某些情况下,出于向后兼容的原因,JVM甚至可能比编译为针对旧版本处理器的本机代码更快。从Java 9开始,它可以提前编译(AOT)。
注意:存在其他供应商,但几乎所有供应商都有许可费。对于Linux和其他平台,请参阅操作系统文档。
版本 值得注意的Java版本,代码名称(在[]括号中)和发布日期(在括号中)包括:
Java SE 12 [JSR 386] (March 19, 2019) Java SE 11 [JSR 384] (September 25, 2018) Java SE 10 [JSR 383] (March 20, 2018) Java SE 9 [JSR 376] (September 21, 2017) Java SE 8 [JSR 337] (March 18, 2014) Java SE 7 [Dolphin] (July 28, 2011) Java SE 6 [Mustang] (December 11, 2006) J2SE 5.0 [Tiger] (September 30, 2004) J2SE 1.4 [Merlin] (February 6, 2002) J2SE 1.3 [Kestrel] (May 8, 2000) J2SE 1.2 [Playground] (December 8, 1998) JDK 1.1 (February 19, 1997) JDK 1.0 (January 23, 1996) JDK Beta (1995) 最新的稳定版本:
Java Standard Edition 12 (12.0.1) - (April 16, 2019) Java Standard Edition 11 (11.0.2) - (January 15, 2019) Java Standard Edition 10 (10.0.2) - (July 17, 2018) Java Standard Edition 9 (9.0.4) - (January 16, 2018) Java Standard Edition 8 Update 212 (1.8.0_212) - (April 16, 2019) Java Standard Edition 7 Update 80 (1.7.0_80) - (April 14, 2015) 有关更多代码名称和发布日期,请访问J2SE代码名称。要查看每个JDK版本的发行说明,请访问有关Java版本历史的Wikipedia文章。
Java SE 可供下载。
该公用更新结束(以前称为寿命结束,也被称为EOPU)日期从甲骨文免费提供的分布是:
Java SE 12 - September 2019 for OpenJDK Java SE 11 - At least September 2022 for AdoptOpenJDK Java SE 10 - September 2018 Java SE 9 - March 2018 Java SE 8 - January 2019 (commercial user) | December 2020 (personal user) Java SE 7 - Apr 2015 Java SE 6 - Feb 2013 J2SE 5.0 - Oct 2009 J2SE 1.4 - Oct 2008 初步帮助 Java新手或需要帮助才能运行第一个Java程序?请参阅“ 入门”中的“ Oracle Java教程”部分。
在提出问题之前,请先搜索一下是否有问题(我们有许多重复,有些在下面列出的常见问题解答),并阅读写完善问题以了解如何让Jon Skeet回答您的问题。
命名约定 Java程序应遵循以下命名约定,以提高可读性并减少意外错误的可能性。通过遵循这些命名约定,您可以更轻松地让其他人理解您的代码并为您提供帮助。
类型名称(类,接口,枚举等)应以大写字母开头,并将每个后续单词的首字母大写。例子包括:String,ThreadLocal,和NullPointerException。这有时称为PascalCase。 方法和字段名称应该是camelCased; 也就是说,它们应以小写字母开头,并将每个后续单词的第一个字母大写。例如:indexOf,printStackTrace,interrupt。 常量表达式名称(static final不可变对象)应该写在ALL_CAPS_SNAKE_CASE中,下划线分隔每个单词。例子:YELLOW,DO_NOTHING_ON_CLOSE。这也适用于Enum类的值。但是,static final对非可变对象的引用应该是camelCased。 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 适用于Java的IDE Eclipse IDE(eclipse) 在线运行Java代码 NetBeans IDE(netbeans) IntelliJ IDEA(intellij-idea) Spring Tool Suite(基于Eclipse的spring-tool-suite,包含使用Spring的工具) JDeveloper IDE(jdeveloper) Android Studio(基于IntelliJ IDEA的android-studio,主要用于处理Andriod项目) BlueJ(bluej) ideone - 具有其他流行语言支持的在线IDE。 Sublime Text(sublimetext) 初学者的资源 Java教程 - 在Windows / Linux / Mac上从头开始,涵盖了大部分标准库。Oracle 的Java关键字参考列表非常好地补充了Java教程。 泛型 Codecademy(Java) - 学习编程的基础知识。 编码蝙蝠(Java) - 在学习了一些基础知识后,使用Coding Bat优化和磨练您的Java技能。 Java编程语言的代码约定 斯坦福Java视频讲座 Udemy关于Java的免费课程 Edx关于Java计算简介的课程 关于Java的Coursera课程 日常更新资源 Java SE文档 Java 7 API参考 Java 8 API参考 Java 9 API参考 Java 10 API参考 Java 11 API参考 Java 12 API参考 高级资源 Java语言和虚拟机规范 可以在JVM上与Java混合使用的其他语言 Java指南8 Angelika Langer 的 Definitive Java Generics Advanced FAQ Java框架,库和软件 令人敬畏的Java框架,库和软件列表。 有用的Java链接 Java编程书籍和资源 Carl Albing和Michael Schwarz在Linux上进行Java应用程序开发(PDF) 如何像计算机科学家一样思考 Spring IO指南 首先是Java Java EE 7教程(PDF) Java瘦客户端编程 Oracle的Java教程 用Java思考 有效的Java(PDF) 有效的Java第3版 OSGi实践(PDF) 类别明智的教程 - J2EE Java示例代码和教程 - J2EE Java设计模式视频培训 代码搜索Java示例 全球Java交叉引用引擎 Java 101教程 Java EE 8教程项目 经常问的问题 人们经常会问以下Java主题:
一般:
Java和JavaScript之间的区别。 如何将我的java程序转换为.exe文件 类路径:
在类路径中设置多个jar。 String,StringBuilder和toString:
如何比较Java中的字符串? StringBuilder和StringBuffer之间的区别 SomeType@2f92e0f4打印物体时为什么会出现? Java中字符串的不变性 equals并且hashCode:
equals()和之间的区别== 重写equals()和hashCode() Java Platform SE API:
nextLine()使用后跳绳nextInt() 比较日期 在java.util.Date和java.time.LocalDate之间转换 迭代集合时删除项目,避免ConcurrentModificationException 如何Map<Key,Value>在Java中对值进行排序? 什么时候LinkedList结束ArrayList? Arrays.asList() HashMap与Hashtable?之间的差异? 集和列表之间的区别? 泛型:
什么是Java中意味着什么? 是List子类List吗?为什么Java的泛型不是隐式多态的(为什么不是集合协变)? Java Generics:什么是PECS? 什么是原始类型,为什么我们不应该使用它? 如何创建通用数组? 如何实例化泛型类型变量 类和对象:
Java是否通过引用传递? Java枚举与具有公共静态最终字段的类相比有什么优势? public,protected,private和default之间的区别 算术和转换:
为什么我不能正确打印双面? 整数除法返回0 Java的+ =, - =,* =,/ =复合赋值运算符 调试:
什么是堆栈跟踪,如何使用它来调试应用程序错误? 什么是NullPointerException,我该如何解决? 什么是ArrayIndexOutOfBoundsException,我该如何预防呢? 如何避免空检查? 我为什么得到一个NoClassDefFoundError? 我为什么得到一个NoSuchMethodError? Thread 和多线程:
怎么java.lang.Thread.interrupt()办? while循环没有看到更改的值,除非其中有print语句 implements Runnable 与 extends Thread 与操作系统交互:
为什么要Runtime.exec(String)为某些命令而不是所有命令工作? (编辑,请只列出这实际上问题是常见的。)
聊天室 Stack Overflow聊天室为Java Stack Overflow聊天室:Java和Android时代 Java的Gitter聊天室
来源于:https://stackoverflow.com/tags/java/info