java \t怎么从头开始_从头开始学习Java

java \t怎么从头开始

那么,您想用Java编程吗? 太好了,您来对地方了。 Java 101系列提供了Java编程的自指导性入门,从基础知识开始,涵盖了成为生产型Java开发人员需要了解的所有核心概念。 本系列是技术性的,其中包含大量代码示例,可帮助您在进行过程中掌握概念。 我将假定您已经具有一些编程经验,只是没有Java经验。

第一篇文章介绍Java平台,并解释其三个版本之间的区别:Java SE,Java EE和Java ME。 您还将了解Java虚拟机(JVM)在部署Java应用程序中的作用。 我将帮助您在系统上设置Java开发工具包(JDK) ,以便您可以开发和运行Java程序,并且可以开始使用典型Java应用程序的体系结构。 最后,您将学习如何编译和运行一个简单的Java应用程序。

为Java 12和新的JShell更新

本系列针对Java 12进行了更新,其中包括对新jshell的快速介绍:用于学习Java和对Java代码进行原型设计的交互式工具。

下载
下载本教程中示例应用程序的源代码。 由Jeff Friesen为JavaWorld创建。

什么是Java?

您可以将Java视为一种通用的,面向对象的语言,看起来很像C和C ++,但是它更易于使用,并且可以让您创建更强大的程序。 不幸的是,这个定义并没有使您对Java有太多的了解。 在2000年,Sun Microsystems(Java平台的创建者)以这种方式描述了Java:

Java是一种简单的,面向对象的,精通网络的,可解释的,健壮的,安全的,与体系结构无关的,可移植的,高性能,多线程,动态计算机语言。

让我们分别考虑每个定义。

Java是一种简单的语言 。 Java最初是使用C和C ++建模的,减去了一些潜在的令人困惑的功能。 指针,多个实现继承和运算符重载是Java之外的某些C / C ++功能。 C / C ++中未强制要求但Java必需的功能是垃圾回收功能,它可以自动回收对象和数组。

Java是一种面向对象的语言 。 Java的面向对象的焦点使开发人员可以适应Java以解决问题,而不是强迫我们处理问题以满足语言约束。 这与C之类的结构化语言不同。作为示例,Java使您可以专注于储蓄帐户对象,而C则需要您分别考虑储蓄帐户状态 (例如余额)和行为 (例如存款和取款)。

Java是一种精通网络的语言 。 Java 丰富的网络库使处理HTTP(超文本传输​​协议)和FTP(文件传输协议)之类的传输控制协议/互联网协议(TCP / IP)网络协议变得容易,并且简化了建立网络连接的任务。 此外,Java程序可以通过统一资源定位器(URL)通过TCP / IP网络访问对象,就像从本地文件系统访问对象一样容易。

Java是一种解释性语言 。 在运行时 ,Java程序通过虚拟机 (假设的平台的软件表示)和关联的执行环境在底层平台(例如Windows或Linux)上间接执行。 虚拟机通过解释将Java程序的字节码 (指令和关联的数据)转换为特定于平台的指令。 解释是弄清楚字节码指令的含义,然后选择等效的“固定”平台特定指令来执行的动作。 然后,虚拟机将执行这些特定于平台的指令。

解释使调试错误的Java程序更加容易,因为在运行时可以获得更多的编译时信息。 解释还可以将Java程序之间的链接步骤延迟到运行时为止,这可以加快开发速度。

Java是一种健壮的语言 。 Java程序必须可靠,因为它们用于从Blu-ray播放器到车辆导航或空中控制系统的消费类和关键任务应用程序中。 帮助Java变得强大的语言功能包括声明,在编译时和运行时进行重复类型检查(以防止版本不匹配问题),具有自动边界检查功能的真实数组以及省略指针。 (请参阅“ 基本Java语言功能 ”以开始使用Java语言类型,文字,变量等。)

Java的健壮性的另一个方面是,循环必须由布尔表达式而不是整数表达式(其中0为false且非零值为true)控制。 例如,Java不允许使用C风格的循环,例如while (x) x++; 因为循环可能不会在预期的地方结束。 相反,您必须显式提供布尔表达式,例如while (x != 10) x++; (这意味着循环将一直运行到x等于10为止)。

Java是一种安全的语言 。 Java程序用于联网/分布式环境。 由于Java程序可以迁移到网络的各种平台上并在网络的各种平台上执行,因此保护这些平台免受可能传播病毒,窃取信用卡信息或执行其他恶意行为的恶意代码很重要。 支持健壮性(如省略指针)的Java语言功能可与安全功能(如Java沙箱安全模型和公共密钥加密)一起使用。 这些功能共同防止病毒和其他危险代码在毫无戒心的平台上造成严重破坏。

从理论上讲,Java是安全的。 实际上, 已经检测和利用了各种安全漏洞 。 结果,Sun Microsystems和Oracle现在继续发布安全更新

Java是与体系结构无关的语言 。 网络基于各种微处理器和操作系统将具有不同体系结构的平台连接起来。 您不能期望Java生成特定于平台的指令,并使这些指令被网络中各种平台“理解”。 取而代之的是,Java生成与平台无关的字节码指令,每个平台都易于理解(通过JVM的实现)。

Java是一种可移植的语言 。 架构中立有助于可移植性。 但是,与平台无关的字节码指令相比,Java的可移植性更多。 考虑到整数类型的大小不能改变。 例如,无论在何处处理32位整数(例如,具有16位寄存器的平台,具有32位寄存器的平台或平台),都必须始终对32位整数类型进行签名并占用32位。与64位寄存器)。 Java的库也有助于可移植性。 必要时,它们提供了类型,这些类型以最可移植的方式将Java代码与特定于平台的功能连接起来。

Java是一种高性能语言 。 解释产生的绩效水平通常绰绰有余。 对于非常高性能的应用程序场景,Java使用即时编译,该编译可以分析解释的字节码指令序列,并将经常解释的指令序列编译为平台特定的指令。 随后尝试解释这些字节码指令序列将导致执行等效的平台特定指令,从而提高性能。

Java是一种多线程语言 。 为了提高必须一次完成多个任务的程序的性能,Java支持线程执行的概念。 例如,在等待来自网络连接的输入时管理图形用户界面(GUI)的程序使用另一个线程来执行等待,而不是对这两个任务都使用默认的GUI线程。 这样可以使GUI保持响应状态。 Java的同步原语允许线程在它们之间安全地通信数据而不会破坏数据。 (请参阅Java 101系列中其他地方讨论的Java 线程编程 。)

Java是一种动态语言 。 由于程序代码和库之间的互连是在运行时动态发生的,因此无需显式链接它们。 结果,当某个程序或其一个库发展时(例如,为了修复错误或提高性能),开发人员只需要分发更新的程序或库。 尽管动态行为导致发生版本更改时要分发的代码较少,但是此分发策略也可能导致版本冲突。 例如,开发人员从库中删除类类型,或对其重命名。 当公司分发更新的库时,依赖于类类型的现有程序将失败。 为了大大减少此问题,Java支持接口类型 ,就像两方之间的合同一样。 (请参阅Java 101系列其他地方讨论的接口,类型和其他面向对象的语言功能 。)

解开这个定义会教会我们很多有关Java的知识。 最重要的是,它揭示了Java既是语言又是平台。 在本教程的后面,您将了解有关Java平台组件的更多信息,即Java虚拟机和Java执行环境。

Java的三个版本:Java SE,Java EE和Java ME

Sun Microsystems于1995年5月发布了Java 1.0软件开发工具包(JDK)。第一个JDK用于开发桌面应用程序和applet,随后Java演变为涵盖企业服务器和移动设备编程。 将所有必需的库存储在单个JDK中会使JDK太大而无法分发,尤其是因为1990年代的分发受到小尺寸CD和缓慢的网络速度的限制。 由于大多数开发人员不需要所有最新的API(桌面应用程序开发人员几乎不需要访问企业Java API),因此Sun将Java分为三个主要版本。 这些最终被称为Java SE,Java EE和Java ME:

  • Java平台标准版(Java SE)是用于开发客户端应用程序(在桌面上运行)和小程序(在Web浏览器中运行的Java平台。 请注意,出于安全原因,不再正式支持applet。
  • Java平台企业版(Java EE )是建立在Java SE之上的Java平台,它专门用于开发面向企业的服务器应用程序。 服务器端应用程序包括Java servletJava servlet是类似于applet的Java程序,但是在服务器而不是客户端上运行。 Servlet符合Java Servlet API
  • Java平台微型版(Java ME)也是基于Java SE构建的。 它是用于开发MIDlet的Java平台, MIDlet是在移动信息设备上运行的Java程序,而Xlet是在嵌入式设备上运行的Java程序。

Java SE是Java的基础平台,也是Java 101系列的重点。 代码示例将基于撰写本文时的最新Java版本。

Java平台和JVM

Java既是编程语言,也是运行已编译Java代码的平台。 该平台主要由JVM组成,但还包含一个支持JVM在基础(本机)平台上执行的执行环境。 JVM包括几个用于加载,验证和执行Java代码的组件。 图1显示了Java程序如何在此平台上执行。

j101学习java fig1 杰夫·弗里森

图1. Java应用程序的体系结构:JVM提供了一个类加载器,一个字节码验证器和一个解释器/即时编译器,用于加载,验证和执行类文件。

在该图的顶部是一系列程序类文件,其中一个被称为主类文件。 Java程序至少包括主类文件,它是要加载,验证和执行的第一个类文件。

JVM将类加载委托给其类加载器组件。 类加载器从各种来源加载类文件,例如文件系统,网络和存档文件。 它们将JVM与类加载的复杂性隔离开来。

加载的类文件存储在内存中,并表示为从Class类创建的对象。 加载后,字节码验证程序将验证各种字节码指令,以确保它们有效且不会损害安全性。

如果类文件的字节码无效,则JVM终止。 否则,它的解释器组件一次解释一个指令的字节码。 解释识别字节码指令并执行等效的本机指令。

某些字节码指令序列执行得比其他指令序列更频繁。 当解释器检测到这种情况时,JVM的即时(JIT)编译器会将字节码序列编译为本机代码,以加快执行速度。

在执行期间,解释器通常会遇到执行另一个类文件的字节码(属于程序或库)的请求。 发生这种情况时,类加载器将加载类文件,并且字节码验证程序将在执行之前验证加载的类文件的字节码。 同样在执行期间,字节码指令可能会要求JVM打开文件,在屏幕上显示某些内容,发出声音或执行其他需要与本机平台合作的任务。 JVM通过使用其Java本机接口(JNI)桥接技术与本机平台交互以执行任务来做出响应。

翻译自: https://www.infoworld.com/article/2076075/core-java-learn-java-from-the-ground-up.html

java \t怎么从头开始

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值