谈一谈对java简单的理解
最开始接触Java的时候一定是先听说书写一次,到处运行这句话。字面上来理解大体就是只需要编写一次Java代码,我就可以让代码运行在Windows、Linux等系统上而不需要针对不同的系统写不同的代码。Java语言把这种特性作为自己的招牌那自然是先前的编程语言没有实现这种特性。比如C语言,如果代码涉及到平台相关的头文件和库的话,在不同平台运行的时候就需要替换成不同平台的库。那Java是如何解决这个问题,让自己的代码可以跨平台呢?
没有什么是一个中间层无法解决的,如果有那就两个! ——某东北Coder
复杂度只能转移不会消失,既然处理不同平台这个复杂度开发者不想承受,那就要把这个复杂度转移到编程语言上,JVM(Java虚拟机)作为中间层将会承受这个复杂度。Java代码编写完成后进行编译生成class字节码文件,JVM解释执行class文件。JDK(Java Development Kit)Java软件开发工具包,里面包含了JVM,在网上搜索一下JDK下载,会发现不同平台需要下载不同的JDK,所以是Java代码运行在JVM上,JVM根据不同的平台有不同的实现。
上面说到Java代码执行的步骤是先编译生成class字节码文件,然后在JVM上解释执行,那是不是可以说Java就是一种解释执行语言呢,这也不太准确,我们大多数情况下都是使用的Oracle JDK提供的Hotspot JVM,Hotspot提供了JIT(Just-In-Time)编译器,就是动态编译器,JIT可以在运行时将热点代码编译成机器码,这样这些热点代码就属于编译执行而不是解释执行了。
JVM作为一个中间层自然不仅仅是可以用来跨平台这一个功能,还有就是垃圾回收(GC),写C的时候程序员可以手动分配和回收内存,用Java时大部份不需要手动操作内存,而且JVM可以帮我们自动回收内存。
上面提到的两个特性是Java作为编程语言有区别于其他的语言的特性,java还包括很多方面,比如下图这几部分。