ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java概述(建筑专业的Java小白)

2021-11-30 20:00:26  阅读:168  来源: 互联网

标签:Java 语言 虚拟机 跨平台 编译 小白 概述 运行


Java 简介

什么是 Java

Java 是一门面向对象编程语言,不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

诞生背景

任职于 Sun 公司 (Stanford University Network 斯坦福网络公司) 的詹姆斯 · 高斯林和麦克 · 舍林丹等人于 1990 年代初开发 Java 语言的雏形,最初被命名为 Oak,Oak 的目标是作为家用电器等小型系统的编程语言,用于电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun 公司放弃了该项计划。随着 1990 年代互联网的发展,Sun 公司发现 Oak 在互联网上应用的前景,于是改造了 Oak,于 1995 年 5 月以 Java 的名称正式发布。伴随着互联网的迅猛发展,Java 逐渐成为重要的网络编程语言。

三大版本

Java SE(J2SE,Java 2 Platform Standard Edition,标准版)

  • Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java EE 和 Java ME 提供基础。

Java EE(J2EE,Java 2 Platform Enterprise Edition,企业版)

  • Java EE 以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web2.0 应用程序。2018 年 2 月,Eclipse 宣布正式将 JavaEE 更名为 JakartaEE

Java ME(J2ME,Java 2 Platform Micro Edition,微型版)

  • Java ME 以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

语言特点与应用场景

Java 语言具有简单性、面向对象、分布式、健壮性、安全性、跨平台性、可移植性、多线程与动态性等特点。Java 语言可以编写桌面应用程序、Web 应用程序、分布式系统和嵌入式系统等 。Java 快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到超级计算机,从手机到互联网,Java 无处不在!

Java 技术体系

下图为 Oracle 官网提供的 Java 技术体系图

JVM、JRE 和 JDK 的关系

JVM

Java Virtual Machine 是 Java 虚拟机,Java 程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此 Java 语言可以实现跨平台。

JRE

Java Runtime Environment 包括 Java 虚拟机和 Java 程序所需的核心类库等。核心类库主要是 java.lang 包:包含了运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包

如果想要运行一个开发好的 Java 程序,计算机中只需要安装 JRE 即可。

JDK

Java Development Kit 是提供给 Java 开发人员使用的,其中包含了 Java 的开发工具,也包括了 JRE。所以安装了 JDK,就无需再单独安装 JRE 了。其中的开发工具:编译工具 (javac.exe),打包工具(jar.exe) 等

JVM&JRE&JDK 关系图

Java 语言特点

Java 语言是简单的

  1. Java 语言的语法与 C 语言和 C++ 语言很接近,从某种意义上讲,它是由 C 和 C++ 演变而来,使得大多数程序员很容易学习和使用。
  2. 对 C++ 来说进行了简化和一定的提高,如:使用接口代替了复杂的多重继承以及取消了指针,还通过实现垃圾自动回收机制,大大简化了程序员的资源释放管理工作。
  3. 提供了丰富的类库和 API 文档,以及第三方开发包工具包,还有大量的基于 Java 的开源项目,帮助程序设计人员参考学习,JDK 就是开放的源代码之一,读者可以通过分析项目的源代码,来提高自己的编程水平。

Java 语言是面向对象的

面向对象就是 Java 语言的基础,也是 Java 语言的重要特性。面向对象是指以对象为基本单元,包含属性和方法。对象的状态用属性表达,对象的行为用方法表达。

面向对象技术使得应用程序的开发变得简单易用,节省代码。总之,Java 语言是一个纯面向对象的程序设计语言。

Java 语言是分布式的

  1. 分布性主要包括两大方面,分别是操作分布和数据分布,其中操作分布指的是在多个不同的主机上布置相关操作,数据分布是将数据分别存放在多个网络中不同的主机上,借助的是 URL(统一资源定位符)访问网络对象,访问方式和访问本地系统相似。
  2. Java 语言具有一个强大的,易于使用的网络能力,这是非常适合于分布式计算程序的。
  3. Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口 (java.net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活) 机制也是开发分布式应用的重要手段。

Java 语言是多线程的

多线程机制使应用程序在同一时间并行执行多项任务,Java 语言提供多线程之间的同步机制,这些相应的同步机制可以很好的保证不同线程,能够正确的共享数据。多线程机制使程序具有更好的交互性和实时性。

Java 语言是高性能的

  1. Java 是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java 设计者制作了 “及时” 编译程序,它能在运行时把 Java 字节码翻译成特定 CPU(中央处理器)的机器代码,也就是实现全编译了。Java 字节码格式设计时考虑到这些 “及时” 编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
  2. 与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。

Java 语言是跨平台的

  1. 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。
  2. 在 Java 语言中,Java 自带的虚拟机很好地实现了跨平台性。Java 源代码经过编译后生成二进制的字节码是与平台无关的,Java 虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是 Java 的能够 Write once, run anywhere(一次编译,到处运行) 的原因。Java 虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得 Java 语言具备跨平台性。

Java 语言是可移植的

可移植性来源于跨平台性性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。

Java 语言是安全的

在 Java 语言中删除了类似于 C 语言中的指针和内容释放等语法,有效的避免了非法操作内存,代码要经过校验之后才能够运行,所以未经允许的 Java 程序不可能出现损害系统平台的行为,最大的好处就是,Java 可以编写防病毒和可修复的系统,Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击,从而可以提高系统的安全性。

Java 语言是健壮的

Java 语言的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。

Java 语言是动态的

  1. Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类,这也有利于软件的升级。
  2. Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

Java 是编译型还是解释型语言

1. 编译型语言和解释型语言

编译型语言

定义:在程序运行之前,通过编译器将源程序编译成机器码 (可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高,可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

总结:执行速度快、效率高;依靠编译器、跨平台性差些。

代表语言:C、C++、Pascal、Object-C 以及 Swift。

解释型语言

定义:解释型语言的源代码不是直接翻译成机器码,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

总结:执行速度慢、效率低;依靠解释器、跨平台性好。

代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby。

混合型语言

定义:既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕,就出现了半编译,半解释型语言。

比如 C#,C# 在编译的时候不是直接编译成机器码而是中间码,.NET 平台提供了中间语言运行库运行中间码,中间语言运行库类似于 Java 虚拟机。.NET 在编译成 IL 代码后,保存在 dll 中,首次运行时由 JIT 在编译成机器码缓存在内存中,下次直接执行。严格来说混合型语言属于解释型语言,C# 更接近编译型语言。

Java 即是编译型的,也是解释型语言,总的来说 Java 更接近解释型语言

  • 可以说它是编译型的。因为所有的 Java 代码都是要编译的,.java 不经过编译就什么用都没有。同时围绕 JVM 的效率问题,会涉及一些如 JIT、AOT 等优化技术,例如 JIT 技术,会将热点代码编译成机器码。而 AOT 技术,是在运行前,通过工具直接将字节码转换为机器码。
  • 可以说它是解释型的。因为 Java 代码编译后不能直接运行,它是解释运行在 JVM 上的,所以它是解释运行的。

2. 动态类型语言和静态类型语言

动态类型语言

动态类型语言:在运行期间才去做数据类型检查的语言,说的是数据类型。动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

代表语言:Python、Ruby、Erlang、JavaScript、Swift、PHP、Perl。

静态类型语言

静态类型语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。

代表语言:C、C++、C#、Java、Object-C。

3. 动态语言和静态语言

动态语言

动态类型语言和动态语言是完全不同的两个概念。

动态语言:说的是运行时改变结构,说的是代码结构。在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。

代表语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如 Java、C、C++。

标签:Java,语言,虚拟机,跨平台,编译,小白,概述,运行
来源: https://www.cnblogs.com/gkstudy/p/15625846.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有