本帖最后由 小爷邱烙 于 2014-12-7 11:44 编辑
这些都是大学课程里常讲的,对编程不一定有用,看看也挺有意思
java语言的诞生
java最初是为了解决跨芯片的程序开发,以应对计算机使用者频繁的更换更廉价高效的芯片。但这阶段java使用并不广泛。
计算机网络出现以后,连通到网络的计算机所使用的芯片各种各样,而这些计算机会有使用同一种软件的需求,java解决了这个问题,这使java飞速发展,java也成为一种适合网络开发的语言。这也就是java说的跨平台型。
现在java发展的一个方向是跨语言,也就是说让非java语言写的代码也可以在java虚拟机上执行。这也许能给java带来一次新的飞跃。
编程语言的发展阶段
机器语言:由0,1二进制组成的序列,由计算机硬件设计者定义,此时的计算机编程思想是面向机器编程。
汇编语言:使用单词来代替二进制,但没有太大改观,还是面向机器编程。
以上两种语言被称为低级语言。
高级语言:从C开始,有语法,使用高级语言编写源文件,源文件不能被机器直接执行,需要转化为机器指令
转化方法:1、编译,将源文件整个转化为机器指令,即目标程序。再由计算机执行目标程序
2、解释,逐行读取源文件,读取一行,转化为一条机器指令执行,再读取下一行
任何高级语言都必须配备编译器或者解释器,C语言是编译方式
java语言的处理方式
先将源文件编译为字节码(这不是编译方式:1、字节码不是针对特定机器的,是针对虚拟机的。2、字节码不能被机器直接执行),字节码文件以解释的方式被java运行环境执行(JVM包含解释器和类加载器),解释中出现错误,执行中断
java这种处理方式的原因:解释执行速度慢,而字节码与机器码非常相似,解释起来速度快
java的技术体系
java的技术体系包含:java程序设计语言,JVM虚拟机(各种平台的),java API,第三方类库,class文件格式
其中,java程序设计语言,虚拟机,java API组成了JDK,JDK中包含编译,执行java源文件的程序,以及一些调试,监察JVM的程序
java API中的javase API和JVM则组成了JRE
java的各个版本
JDK1.0:纯解释执行,包含JVM,Applet,AWT
JDK1.1:JDBC,JAR,JavaBean,RMI,内部类(InnerClass),反射
JDK1.2:代号竞技场
将java分为三个方向:j2se,j2ee,j2me
新技术:EJB,Java Plug-in,Java IDL,swing
JVM:第一次内置JIT编译器
语言增加:strictfp关键字,Collection集合类
之后Sun收购了HotSpot(一个虚拟机,非Sun开发),并将其一直作为JVM使用到现在,原JVM被淘汰
JDK1.3:代号美洲红隼,改进了API类库,增加了JNDI,Java 2D,Java Sound
JDK1.4:代号灰背隼,增加正则表达式,异常链,NIO,日志类,XML解析器,XSLT转换器
java至此成熟,各大公司参与支持java,Spring、Hibernate、Struts可以直接运行在该版本上,java的竞争对手.NET出现
JDK1.5:代号老虎,增加自动装箱拆箱,泛型,动态注解,枚举,可变长参数,foreach。对JVM内存模型进行改进,提供java.util.Concurrent并发包
这是一个大的改进版本
JDK1.6:代号野马,取消j2se,j2ee,j2me的叫法,改为javase,javaee,javame。提供动态语言支持,提供编译API,提供HTTP服务器API。对JVM的锁与同步,垃圾收集,类加载算法进行改动。
JDK1.6之后,java开源,出现OpenJDK
JDK1.7:代号海豚。还没开发完就被Oracle收购了
注:JVM及JDK中的Native方法由C++以及少量C实现。JDK plug:java中非开源的产权代码。
java对多线程的支持
java没有内置多线程机制,而是调用操作系统的多线程功能来实现的。其原理是线程间的快速切换。
classpath的配置
1、java\jre\lib\rt.jar的配置:一些java软件可能使用的是老版本类库,而JDK的各个版本可能是不兼容的,这些老版本类库在rt.jar中存放
2、tools.jar的配置:JDK中的一些工具(bin中的程序)都只是一个封皮,其调用的是tools.jar中的程序来实际执行的。
java的动态加载
一个程序应用其他类库,在编译时,不会把用到的类库内容写入到字节码文件中,而是执行时再调用类库。这样只要类库名不变,类库的更新就不需要改变字节码文件,即不用重新编译,而C++不是这样的,C++更新类库必须重新编译源文件
编译时指定JDK版本
javac命令的一个参数 -source 可以指定用哪个版本编译,不写默认当前安装版本。这个参数可以解决JDK各版本不兼容的问题。
|
|