Java发展简史
在1991年时候,James Gosling(詹姆斯•高斯林)所在sun公司的工程师小组,需要设计一种小型计算机语言,该语言主要用于像电视机顶盒,家用电器等这样的消费类电子产品,这些电子产品有一个共同的特点:计算处理能力和内存都非常有限,所以要求:语言必须非常小且能够生成非常紧凑的代码,这样才能在这样的环境中执行,另外,由于不同的厂商选择不同的CPU,因此,要求该语言不能和特定的体系结构绑在一起,要求语言本身是中立的,也就是在不同的平台上运行(即跨平台)。
所以在sun公司内部成立了一个Green项目组,该小组的领导人是James
Gosling。他们开发出了一种语言,起初把它命名为Oak(橡树的意思,Gosling注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了),后来将名字改为java,Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。JAVA的标识也正是一杯正冒着热气的咖啡。经过多年的开发,最终于1995年正式确立.
java语言的用处(数据存储,数据分析,数据处理)
1.用于服务器程序---------银行,证券交易平台,电子商务后台等
2.Android应用---------安卓手机,各种移动设备,智能家电等
3.软件工具---------开发工具eclipse,IDEA等
4.嵌入式领域-------智能卡,传感器等
5.大数据技术----------Hadoop以及其他大数据处理技术
java被运用的程度
1.可独立运作的应用程序
2.嵌入网页的小程序
java语言的特点
1.开源(开放源码)
2.简单,高效,面向对象
3.平台无关性(java与平台无关,jvm与平台有关)
4.交互式特性
5.多线程机制
6.动态的内存管理机制
7.安全性
java语言体系的结构
1.JavaSE :Java standard(标准版)包括核心类 比如:数据库连接、接口定义、输入/输出、网络编程
2.JavaEE : Java企业版用于开发企业软件包含JavaSE 中的类,并且还包含用于开发企业级应用的类。比如:servlet、JSP、服务器
3.JavaME :Java Micro Edition(微缩版) JavaME 包含JavaSE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒
java语言运行机制
1.Java虚拟机可以理解为一个翻译器
2.对于不同的平台,有不同的虚拟机
3.java虚拟机机制屏蔽底部运行差别,“一次编译,随处运行”
通过编译工具将".java"文件转换为".class"文件,这段.class文件是一段包含着虚拟机指令、程序和数据片段的二进制文件,即字节码,通过不同平台jvm运行
JDK(java development kit)
JDK是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库
JRE(java runtime environment)
JRE是Java的运行环境,包括JVM标准实现及Java核心类库
JVM(java virtual machine)
JVM是java虚拟机,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序
SDK是Software Development Kit
SDK 一般指软件开发包,可以包括函数库、编译程序等,是给java应用程序开发者使用的
课后知识补充
JDK中提供了三个ClassLoader,根据层级从高到低为:
Bootstrap ClassLoader,主要加载JVM自身工作需要的类。
Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。
Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath)
JVM加载类的实现方式,我们称为 双亲委托模型:
如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。
双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。
假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它
下面关于面向对象的一些理解哪些是错误的( C )
A.面向对象的最重要的特性是支持继承、封装和多态
B.系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
C.函数式的语言必然是面向对象的语言
D.面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
E.过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
F.*Java和C++都是静态类型的面向对象编程语言
错误原因:C、函数式的语言必然是面向对象的语言 C语言不是面向对象,但是函数式。