JAVA复习一 — JAVA语言概述
1. Java 语言发展简史
1990 年年末, Sun 公司预料到嵌入式系统将在未来的家用电器领域大展伸手,于是 Sun 公司成立了一个 James Gosling 领导的 Green 计划, 准备为下一代智能家电编写一个通用的控制系统. 最初考虑使用的是C++语言,但是很多成员包括 Sun 的首席科学家 Bill Roy 发现 C++ 和可用的 API 在某些方面存在很大的问题,而且该小组使用的是嵌入式平台,可用的系统资源极其有限,并且很多成员发现 C++ 太复杂,以至于很多开发者经常错误使用.而且 C++ 缺少垃圾回收机制,可移植性,分布式和多线程等功能. Bill Roy 提议在 C++ 的基础上开发一种面向对象的环境,于是,Gosling试图修改和扩展 C++ 来满足这个要求,但是后来他放弃了.他决定放弃而开发一种新的语言 : Oak.
1992 年的夏天, Green 计划已经完成了新平台的部分功能,包括 Green 操作系统. Oak 的程序设计语言, 类库等.同年 11 月,Green计划被转化成 “FirstPeron” 有限公司,一个 Sun 公司的全资子公司.
FirstPerson 团队致力于创建一种高度互动的设备,当时代华纳公司发布了一个关于电视机顶盒的征求提议书, FirstPerson 团队改变了他们的目标,作为对征求提议书的响应,提出了一个机顶盒平台的提议,但是有线电视业界觉得FirstPerson平台基于用户过多的控制权,因此 FirstPerson 的投标 败给了 CGI.同时,与 3DO 公司的另外一笔关于机顶盒的交易也没有成功,此时,可怜的 Green 项目几乎接近夭折,甚至 Green 项目组的一半成员也调到了其他的项目组.
1994年夏天, 互联网和浏览器的出现不仅给过大互联网的用户带来了福音,也给Oak语言带来了新的生机,Gosling立即意识到这是一个机会,于是对Oak进行了小规模的改造,到了1994年秋,小组中的 Naughton 和 Jsonathan Payne 完成了第一个 java 语言的网页浏览器. WebRunner . Sun公司实验室主任观看了浏览器的演示,对该浏览器的效果给予了高度评价,当时Oak已被别人注册,于是知得将 Oak(橡树) 改名为 Java(咖啡)
Sun公司在1995年年初发布了java语言,Sun公司直接把java放在互联网上,免费给大家使用,甚至连源代码都不保密,几个月后,java成了互联网上最热门的宝贝,竟有10W多次的下载量,然后互联网上就有数不清的java小程序(Applet),演示者各种小动画,小游戏等… java语言出来之前,网页实质上就是一张纸,不会有任何动态的内容,有了java语言之后,浏览器的功能被扩大了,java程序员可以直接在浏览器里运行,可以直接与远程服务器交互,用java语言编程,可以在互联网上像传输电子邮件一样方便的传送程序文件.
1995年虽然推出了java,但这只是一种语言,要想开发更加复杂的应用程序,必须要有一个强大的开发类库,1996年,发布了 JDK1.0 这个版本包括两个部分 : 运行环境(JRE) 和 开发环境(JDK). 运行环境包括 : 核心API,继承API,用户界面 API , 发布技术, java虚拟机(JVM) 5个部分; 开发环境包括java的编译器.
1997年发布了 JDK1.1 JDK1.1 增加了 JIT(即时编译) 编译器, JIT 和传统的编译器不同,传统的编译器是编译一条,然后运行完将其扔掉,而 JIT 编译器会将经常用到的指令保存在内存中,当下次调用的时候不需要重新编译了,通过这种方式使得JDK在效率上有了很大的提升.
但是在1996年底的时候,Flash 的出现对 java 产生了不小的冲击, 因为当时java的的用途大多数是在网页应用,而flash是一种更加简单的画图设计软件,使用Flash几乎无需任何编程语言知识,这使得Flash逐渐蚕食了java在网页的应用.
到1998年底,java成了互联网上最广泛使用的语言,但是他并没有找到一个准确的定位,也没有找到他必须存在的理由,直到1998年2月,Sun发布了Java历史上最重要的版本JDK1.2,伴随着JDK1.2一同发布的还有 JSP/Servlet.EJB 等规范,并将java分成了 J2EE J2ME J2SE 三个版本
- J2ME : 主要用于控制移动设备和信息家电等有限存储的设备
- J2EE : java技术应用中最广泛的部分,J2EE提供了企业应用开发相关的解决方案.
- J2SE : 整个java技术的核心和基础,他是J2ME 和 J2EE 的编程的基础.
这标志着java开始进军企业,桌面以及移动三个领域,标志着java进入java2的时代,这个时代的java是飞速发展.
不仅如此,java还将API分为三类 :
- 核心API
- 可选API
- 特殊API
2002年java发布了最稳定的版本 JDK1.4,JDK1.4已经可以使用java实现大多数应用了.在此期间,涌现出大量基于java的开源框架 : Struts2 hibernate spring 等,大量企业应用服务器开始涌现 : WebLogic WebSphere JBoss等,这标志着java进入了飞速发展的时期.
2004年,Sun发布了万众期待的JDK1.5,同时Sun将JDK1.5改为JavaSE5.0
2006年,Sun公司发布了JDK1.6.
2009年,Oracle 收购了 Sun 公司 , Oracle 扛起了 java 的大旗.
2011年,Oracle如约发布了 JDK1.7
2014年,Oracle发布了JDK1.8
2. Java程序运行机制
java语言是一种特殊的高级语言,他既具有解释型语言的特征,也具有编译型语言的特征,应为java语言要经过先编译,后解释两个步骤.
java语言比较特殊,用java语言编写的程序需要经过编译的步骤,但是编译的步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(.class文件),当然,字节码不是可执行的,必须使用Java虚拟机解释执行,因此可以认为 : java语言既是编译型语言也是解释型语言.
java语言里负责解释执行的字节码文件是java虚拟机,即JVM,JVM是可运行java字节码文件的虚拟计算机**.所有平台的JVM向编译器提供的接口是相同的**.JVM是java跨平台的关键部分,只要为不同平台是实现了相应的虚拟机,编译后的java字节码就可以从该平台上运行.
3. JVM JRE JDK 区别
JDK : JDK 全称为 Java SE Development Kit , 即 java 标准开发包, 是 Sun 提供的一套用于 开发 应用程序的开发包,他提供了编译,运行Java程序所提供的各种工具和资源,包括 Java 编译器, Java运行时环境(JRE) , 以及常用的类库.
JRE : java运行时环境,是运行java所必需的条件.
JDK 包含 JRE JRE 包含 JVM
JRE中不仅包含JVM还包含其他的类加载器,字节码校验器以及大量的基础类库等其他的环境支持.
如果单纯的运行应用程序只需要安装 JRE , 如果要开发应用程序需要安装 JDK.
4. 第一个Java程序
- 编辑Java源程序 :
public class HelloWorld{
public static void main(String args[]){
System.out.println("Hello World");
}
}
- 编译Java源程序
javac -d destdir srcFile
上面命令中 -d destdir 是 javac 的命令选项,用以指定编译生成的字节码文件的存放路径,destdir只需要是本地磁盘上的一个有效路径即可 而SRCFile 是 Java 源文件所在的位置,这个位置既可以是绝对路径,也可以是相对路径. 通常,总是将生成的字节码文件放在当前路径下,当前路径可以用 “.” 来表示.在命令行窗口进入 HelloWorld.java 文件所在路径,在该路径下输入如下命令
javac -d . HelloWorld.java
则会在该路径下生成一个 HelloWorld.class 文件.
- 运行java程序
java java类名
eg:
java HelloWorld //注意 : 没有.class
5. Java程序的基本规则
1. java程序的组织形式
java程序是一种纯粹的面向对象的程序设计语言,因此java程序必须以类(.class)的形式存在,类(class)是java程序中最小的程序单位,java程序中不允许可执行语句和方法单独存在,所有的程序部分必须放在类里面.
最简单的java程序 :
class Test{}
这个程序绝对正确,编译时可以通过编译,没有任何的问题. 但是运行时会报找不到main方法的错误.
实际上java解释器规定java程序必须包含main方法,而且必须是public static void main(String args[]){}
的形式,java虚拟机从这个main方法开始执行,因此 main方法是程序的入口.
2. java源文件的命名规则
- java源文件的后缀必须是.java,不能为其他文件的后缀名.
- java程序源文件的主文件名可以是任意的,但是有一种情况例外 : 如果 java 程序的源代码里定义了一个 public 类,则该源文件名必须与该 public 类的类名相同. 因此一个java源文件中最多只能有一个 public 类.
6. 垃圾回收机制
1. 传统的 C/C++ 语言的缺点
传统的C/C++语言需要程序员负责回收已经分配的内存,显式的进行垃圾回收,但是显式的垃圾回收是一件比较困难的事情,因为程序员不知道内存应该何时被释放,如果一些分配出去的内存得不到及时的回收就会引起系统的运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏.
- 程序忘记及时回收无用内存导致内存泄漏,降低系统性能.
- 程序错误的回收系统的核心类库的内存导致系统崩溃.
2. 什么是垃圾回收机制
与 C/C++ 不同,Java语言不需要程序员进行直接控制内存回收,而是通过JRE在CPU空闲或者内存不足的情况下自动在后台进行的,回收那些不再使用的内存,这种机制被称为垃圾回收机制.
3. java虚拟机显著的优先
- 垃圾回收机制可以很好的提供编程效率. 没有垃圾回收机制时,需要花时间来解决一个难懂的存储器问题.
- 垃圾回收机制保证程序的完整性.是Java语言安全性策略的重要部分.
4. 垃圾回收机制的特点
- 垃圾回收机制的工作目标是回收无用对象的内存空间,这些内存空间都是JVM堆内存里的内存空间,垃圾回收只能回收内存资源.
- 为了更快的让垃圾回收机制回收那些不再使用的对象,可以将该对象的引用变量设置为null,通过这种方式暗示垃圾回收机制可以回收该对象.
- 垃圾回收的不可预知性由于不同的JVM采用了不同的回收机制和不同的垃圾回收算法,因此他回收时间是不可预知的.
- 现在的JVM有多种不同的垃圾回收实现.