Java笔记整理(二)Java的简单介绍以及运行机制的进一步了解
一、Java的由来?
- Java作为一门非常纯粹的面向对象编程语言,已经诞生了有27年了。
- Java语言的诞生有点戏剧性,最初由美国Sun公司发起的"Green计划",由Gosling带领的团队准备为下一代智能家电编写一个通用控制系统,计划采用C++(微软开发的一门使用广泛的编程语言) 进行开发,但发现C++存在许多不利于开发的问题,想在C++的基础上,通过修改和扩展C++来开发一种面向对象的环境,但最后还是放弃了。于是他决定创造一种全新的语言:Oak,也就是Java的前身。
- 经过一段时间,Green操作系统以及Oak的程序设计语言和类库逐渐开发出来并以这个项目成立了一个Sun的子公司。他们致力于创建一种高度互动的设备,并参与电视机机顶盒的项目招标,但却失败了,使得这个项目差点夭折。
- 但Gosling看准了互联网和浏览器的兴起,对Oak进行改造并写出了Java的第一个浏览器:WebRunner,得到总公司的高度评价。
- 由于当时Oak这个商标已被注册,于是改名为Java,后一直发展至今。2009年,Sun公司被Oracle收购,JavaSE目前已经更新至Java12
要知道的几个概念:
1、JDK——Java Standard Edition Development Kit,Java标准版开发工具包
它是Sun提供的一套用于开发Java应用程序的开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、JRE以及常用的Java类库。
随着版本的更新迭代,JDK增加了许多的新特性,是Java变得越来越强大。
2、JRE——Java Runtime Environment,Java运行时环境,它是运行Java程序的必需条件。
3、JVM——Java Virtual Machine,Java虚拟机,Java语言里负责解释和执行字节码文件,就像一个抽象的计算机,它具有指令集并使用不同的存储区域。
三者的关系:
它负责执行指令,还要管理数据、内存和寄存器。
- Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:
- Java SE(Java Platform,Standard Edition)Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE是整个Java技术的核心和基础,它包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
- Java EE(Java Platform,Enterprise Edition)这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
- Java ME(Java Platform,Micro Edition)这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
二、 高级语言的运行机制以及Java的运行机制介绍
计算机高级语言按程序的执行方式可以分为编译型和解释型两种
首先讲一下编译和解释,它们是执行一段程序代码所必要的过程,因为计算机是"看不懂"高级语言的,它只懂机器语言,也就是01代码。
编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的,这个工作由编译器完成。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
解释是对源程序边翻译边执行,解释器就是在执行程序时,一条一条的解释成机器语言给计算机来执行,因此效率较低;
(1)编译型语言: 是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言的源代码一次性"翻译"成可被该平台硬件执行的机器码(01代码),并包装成该平台所能识别的可执行性程序的格式,这个转换过程成为编译(Compile)。(C、C++、Object-C、Pascal等高级语言都属于编译型语言)
(2) 解释型语言:是指使用专门的解释器将源程序逐行解释成特定平台上的机器码并立即执行的语言。(Ruby、Python、JavaScript等大多数脚本语言都属于解释型语言)
——摘自《疯狂Java讲义》
我的理解就是比如C、C++、Objective-C、等编译型语言都有自己特定的编译器用来把你写的代码翻译成你所在平台(也就是操作系统)能识别的机器码(就是CPU能够直接执行的代码)
因为不同操作系统不同CPU的指令集大多都有一定的差异( 都是人定的嘛),因此需要由对应的编译器来重新翻译,然后再交给操作系统和CPU去执行。
——而Java语言比较特殊,由Java编写的程序需要经过先编译、后解释两个步骤
—编译步骤:使用Javac命令启动Java编译器(Java.exe)将.java文件编译生成对应的.class文件,
这是一种与平台无关的,只符合JVM规范的字节码(见下图,使用javap -verbose .class文件名 的命令格式查看.class文件的内容)
—解释步骤:字节码与任何具体的平台都无关,因此它是不可执行的,因此必须使用Java解释器来解释, 即JVM
——JVM是Java程序跨平台的关键部分,前面说,字节码是与平台无关,那相同的字节码程序需要在不同的平台上运行,几乎是不可能的,所以就有了JVM这个转换器。
——JVM对应每个系统的虚拟机由官方提供,不同平台的JVM只需向Java的编译器提供相同的编程接口,也就是说,编译器只需要面向虚拟机,生成虚拟机能理解的代码,由JVM来解释执行
——Oracle公司为Java虚拟机制定了统一的标准以实现Java程序的平台无关性(一处编写,处处执行),具体定义了JVM的以下细节:
指令集、寄存器、类文件的格式、栈、垃圾回收堆、存储区
这是我的学习笔记,请大家多多指正!
---学习记录----