java的发展历史
Java是在1991年由SUN公司的James Gosling(Java之父)及其团队所研发的一种编程语言,第一个版本耗时18个月,最开始命名为Oak(一种橡树)。Java现在广泛应用于各种大型互联网应用,其设计的最初动机主要是平台独立(即体系结构中立)语言的需要,可以嵌入到各种消费类电子设备(家用电器等),但市场反应不佳。
随着1990年代互联网的发展,SUN公司看到了Oak在互联网上的应用场景,在1995年更名为Java(印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名),随着互联网的崛起,Java逐渐称为重要的Web应用开发语言。Java的发展可以主要看JavaWeb的发展,Java也见证了互联网的发展过程。
发展至今,Java不仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系,Java 是几乎所有类型的网络应用程序的基础,也是开发和提供嵌入式和移动应用程序、游戏、基于 Web 的内容和企业软件的全球标准。
从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在!
java的特点
跨平台性:
Java 语言 程 序 运 行 时 提 供 了 平 台 的 独 立 性, 在Windows 9x、Windows NT、Solaris、Linux、MacOS以及其它平台上,都可以使用相同的代码。“一次编写,到处运行”, 即“Write Once,Run Anywhere!
使用简单、高效:
Java 去掉了 C 和 C++中最难正确应用的指针和最难理解的多重继承等技术; 通过垃圾
自动回收机制简化了程序内存管理; 对数据类型进行精简和统一, 在不同字长的计算机上
占用字节数相同,
面向对象:
什么是面向对象?
假如我们接到一个需求,需要把大象装进冰箱里!
面向过程的做法:打开冰箱门,把大象装进去,关上冰箱门。这是一个过程,我们会把这个过程拆分为三个小步骤并且去想办法实现他们。
面向对象的做法:冰箱调用开门的方法开门,大象调用移动位置的方法进入冰箱,冰箱调用关门方法把门关上。这种是把这个过程里的冰箱和大象抽象出来,冰箱是一个对象,大象是一个对象。冰箱拥有开门,关门的方法,大象拥有移动位置的方法。他们各自处理各自的事情,我们不用关心冰箱怎么开门关门,大象怎么把自己塞进去,我们只用告诉冰箱,嘿,我现在要你把大象装进去,你装好了告诉我
看起来好像面向过程更加简单,确实在一些简单的逻辑上,确实是面向过程更加简单一点,但是当你面对是一系列复杂的模块和功能或者在逻辑发生更改的时候。各司其职的面向对象思想变会将很多复杂的逻辑简单化。
Java的面向对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。在Java中,取而代之的是更简单的接口概念。而且与C++相比,Java提供了更丰富的运行时自省功能。
分布式(微服务)
Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
健壮性
1、Java语言是一种强类型语言,即在编译和运行时进行大量的类型检查,防止不匹配的数据类型的发生。Java 不提供指针, 从而杜绝了开发人员对指针的操作失误而造成系统崩溃的可能性。
2、Java语言设计有自动收集垃圾功能,防止了内存分配的错误
Java 采用自动垃圾回收机制(Auto Garbage Collection) 实现了内存分配和回收的自动管理, 效率和安全性大大提高。 在 C 语言中用 malloc() 申请内存, 用free() 释放内存空间。
3、Java语言设计了异常处理机制
安全性
Java适用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防
篡改的系统
从一开始,Java就设计成能够防范常见的各种攻击:
运行时堆栈溢出。蠕虫和病毒常用的攻击手段。
破坏自己进程空间之外的内存。
未经授权读写文件
可移植性
可移植性 指 源程序 可以用到 另一台机上,编译后能正确运行。
移植性高,指 源程序 不需改动或只需稍加改动,就能编译后正确运行。
也有人理解,可移植性包括可翻译性,例如,通过翻译程序翻译,或解释程序解释,就能在另一台机上(另一种操作系统或硬件平台)运行。
Java 采用解释与编译相结合, 先经编译成∗ .class 字节码, 然后再由JVM 解释执行, 实
现了程序运行效率和不同操作系统之间可移植性的完美结合。
与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。例
如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定
的其他大小。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题。
解释型
Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程。所以开发过程也变得更加快捷,更加具有探索性
使用专门的解释器将某种高级语言源程序逐条解释成特定平台的机器码指令并立即执行, 解释一句执行一句。 解释相当于翻译中的“口译”, 缺点是执行效率低, 且不能脱离解释 器 独 自 执 行; 优 点 是 可 移 植 性 强, 跨 平 台。 Basic、Ruby、Python 等都属于解释型语言。一般来说, 程序的可移植性和执行效率存在矛盾, 此消则彼长, 难以同时达到最优。 Java 语言根据自身的实际需要
采用了一种灵活的机制: 编译型和解释型的结合。 这也正是Java 能跨平台的根本原因。
高性能
尽管对解释后的字节码性能已经比较满意,但在有些场合下可能需要更加高效的性能。字节码可以(在运行时刻)动态的翻译成对应运行这个应用的特定cpu的机器码。
多线程
Java 在语言级别而不是操作系统级别上支持多线程程序设计。
Java在当时很超前。它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互响应和实时行为。并发程序设计绝非易事,但是Java在这方面表现出色,可以很好的管理这个工作。
c语言运行机制
1.编译(Compilation)
针对特定平台(CPU 和操作系统) , 使用编译器将某种高级语言源程序一次性“翻译”组装
成可在该平台直接运行的机器语言。 在 Windows 操作系统中一般为∗ .exe。 编译有较高的运
行效率, 缺点是可移植性差。 C、C++、PASCAL、FORTRAN 等高级语言都属于编译型语言。
Windows 下 C 语言的运行过程示意图如图1-3 所示。
java运行机制
使用专门的解释器将某种高级语言源程序逐条解释成特定平台的机器码指令并立即执行, 解释一句执行一句。 解释相当于翻译中的“口译”, 缺点是执行效率低, 且不能脱离解释 器 独 自 执 行; 优 点 是 可 移 植 性 强, 跨 平 台。 Basic、Ruby、Python 等都属于解释型语言。一般来说, 程序的可移植性和执行效率存在矛盾, 此消则彼长, 难以同时达到最优。 Java 语言根据自身的实际需要
采用了一种灵活的机制: 编译型和解释型的结合。 这也正是Java 能跨平台的根本原因。
Java 语言的运行过程如图 所示。
JVM,JRE,JDK
JVM
JVM(Java Virtual Machine) 指可以运行Java 字节码(∗ .class) 的虚拟计算机。 和真正
的计算机一样,JVM 具有自己的指令集并使用不同的存储区域, 负责执行指令和管理内存
与寄存器。 Sun 公司为 Solaris、 Windows、Linux、 Mac 等不同的操作系统和硬件开发了不
同的JVM, 这样字节码文件就可以在不同的操作系统JVM 支持下运行。 Java.exe 会调用
C:Program FilesJavajdk1.7.0_51jrebinclienta 或server 中的jvm. dll 来运行字节码
文件。
JRE
JRE(Java Runtime Environment) 面向Java 程序的使用者, 提供Java 运行环境, 主要由
JVM、API 类库、发布技术3 个部分构成。 如果只想运行别人开发的Java 程序,只安装JRE 即可。
JDK
JDK(Java Development Kit) 面向Java 程序的开发者, 提供Java 的开发环境和运行环
境, 主要由JRE 和编译、 运行、 调试Java 应用程序的各种工具和资源包构成。 如果想开发
Java 程序, 请安装相应版本的JDK。
除了Sun 公司发布的JDK 外,IBM、Oracle 等公司也发布了自己的JDK 版本。
为了更好地适应开发的需要,Java 的设计者为我们提供了3 种Java 平台。
• Java ME(Java Micro Edition) : 为机顶盒、 移动电话、 智能卡、PDA 等嵌入式消费电
子设备提供Java 解决方案。 随着移动开发平台的普及,Java ME 渐渐退居二线。
• JavaSE(JavaStandard Edition) : Java 平台的基础, 主要用来开发桌面应用.
• Java EE(Enterprise Edition) : JDK 1.5 以前称为J2EE,Java EE 构建在Java SE 之
上, 主要用来构建大规模基于 Web 的企业级应用和分布式网络应用程序。 从应用
上讲,Java EE 是目前企业级应用最出色的平台和最成功的解决方案
摘要:JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
一、JDK
JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK是java开发工具包,基本上每个学java的人都会先在机器 上装一个JDK,那他都包含哪几部分呢?在目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。有这样一个关系,JDK包含JRE,而JRE包 含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是 不同的)
总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
二、JRE
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
JRE是指java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 (jre里有运行.class的java.exe)
JRE ( Java Runtime Environment ),是运行 Java 程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的 地位就象一台PC机一样,我们写好的Win64应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
三、JVM
JVM(Java Virtual Machine),即java虚拟机, java运行时的环境,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
四、JDK、JRE、JVM三者的联系与区别
1.三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
2.三者区别:
a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
原文链接:https://blog.csdn.net/ancientear/article/details/79483592



