文章目录
什么是Java
Java是一种通过解释方式来执行的语言,其语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序,可以运行在任何平台和设备上,如跨越IBM个人电脑、MAC苹果计算机、各种微处理器硬件平台,以及Windows、UNIX、OS/2、MAC OS等系统平台,真正实现“一次编写,到处运行”。
Java的诞生背景
Java诞生于1995年,但在此之前,Java的雏形已经酝酿了一段时间。最初,Java的开发是为了解决C/C++语言的一些弱点和安全性问题。Java最初被称为Oak(橡树),并计划在家用电器等智能物件的通信领域尝试采用新的语言。然而,这个尝试并不算成功。后来,随着互联网的发展,Java迎来了新的起点,并在浏览器上取得了重大突破。Java的发展背后有着Sun公司和Java之父詹姆斯·高斯林的努力。2009年,Java被Oracle(甲骨文)公司收购。
Java的三大版本
Java SE
Java SE是Java的标准版,主要用于桌面应用程序开发,同时也是Java的基础,它包含Java语言基础、JDBC(Java数据库连接性)操作、I/O(输入输出)、网络通信、多线程等技术。
Java SE的结构如下。
Java EE
Java EE是Java的企业版,主要用于开发企业级分布式的网络程序,如电子商务网站和ERP(企业资源规划)系统,其核心为EJB(企业Java组件模型)。
Java EE的结构如下。
Java ME
Java ME主要应用于嵌入式系统开发,如掌上电脑、手机等移动通信电子设备,现在大部分手机厂商所生产的手机都支持Java技术。
Java ME的结构如下。
Java的语言特点
简单性
- 语言语法简单明了,容易掌握。
- 使用接口取代了C++的多重继承,并取消了指针,因为指针和多重继承通常使程序变得复杂。
- 通过垃圾自动收集,大大简化了程序设计人员的资源释放管理工作。
- 提供了丰富的类库、API文档以及第三方开发包,另外还有大量基于Java的开源项目。JDK(Java开发者工具箱)已经开放源代码,可以通过分析项目的源代码,提高自己的编程水平。
面向对象
面向对象是Java语言的基础,也是Java语言的重要特性,它本身就是一种纯面向对象的程序设计语言。Java提倡万物皆对象,语法中不能在类外面定义单独的数据和函数,也就是说,Java语言最外部的数据类型是对象,所有的元素都要通过类和对象来访问。
分布性
Java的分布性包括操作分布和数据分布,其中操作分布是指在多个不同的主机上布置相关操作,而数据分布是将数据分别分布在多个不同的主机上,这些主机是网络中不同的成员。Java可以凭借URL(统一资源定位符)对象访问网络对象,访问方式与访问本地系统相同。
健壮性
Java语言的设计目标之一是能编写出多方面、可靠的应用程序。因此Java会检查程序在编译和运行的错误并消除错误。类型检查能帮助用户检查出许多在开发早期出现的错误,集成开发工具(如Eclipse、NetBeans、IntelliJ)的出现也是的编译和运行Java程序更加容易。
安全性
Java语言删除了类C语言中的指针和内存释放等语法,有效地避免了用户对内存的非法操作。Java程序代码要经过代码校验、指针校验等很多测试步骤才能够运行,所以未经允许的Java程序不可能出现损害系统平台的行为,而且使用Java可以编写出防病毒和防修改的系统。
体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地转换成本地机器代码。
可移植性
Java程序具有与体系结构无关的特性,可以非常方便的移植到网络上的不同计算机中。同时Java的类库也是实现了针对不同平台的接口,使得这些类库也可以被移植。
解释型
运行Java程序需要解释器,任何移植了JAva解释器的计算机或其他设备都可以用Java字节码进行解释执行。字节码独立于平台,它本身携带了许多编译时的信息,使得连接过程更加简单,开发过程更加迅速,更加探索性。
高性能
Java编译后的字节码是在解释器中运行的,所以它的速度比多数交互式应用程序提高了很多。另外字节码可以在程序运行时被翻译成特定平台的机器指令,从而进一步提高运行速度。
多线程
多线程机制能够使应用程序在同一时间并行执行多项任务,而且相应的同步机制可以保证不同线程能够正确地共享数据。使用多线程可以带来更好的交互能力和实时行为。
动态性
Java在很多方面比C和C++更能够适应发展的环境,可以动态调整库中的方法和增加变量,而客户端却不需要任何更改。在Java中进行动态调整是非常简单和直接的。
Java中JVM、JRE和JDK
JDK(java development kit)
编译环境。Java 开发工具包。JDK 是整个 Java 开发的核心,它集成了 JRE 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。JDK包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
通常在安装好JDK之后,JRE也会自动安装好
JRE (java runtime environment)
运行环境。负责装载用户自定义的类(分为从本地装载和从网络装载两种)和java API类。
JVM
平台软件,负责将字节码解释成机器码并提交操作系统执行。换句话说,JVM就是Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。jvm调用解释所需的类库lib,而jre包含lib类库。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行(跨平台性:不同的浏览器安装不同的java虚拟机,jvm将字节码与对应操作系统相映射,达到java程序的跨平台性)。
三者的关系
简单来说三者的关系是:JDK>JRE>JVM。
如果想要 运行 一个开发好的 Java 程序,计算机中只需要安装 JRE 即可。
联系与区别
1.我们利用JDK写了自己的JAVA代码程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
2.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。jdk是给开发人员使用的,jre和jvm是给普通用户使用。
3.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持(rt.jar)