0x01 JAVA基础介绍
Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。
由于我之前有较长时间的C++开发经验,故在JAVA的学习中更倾向于比较总结两者的异同,以C++延伸的方式进行学习。
从JAVA发展历程来讲,其发展腾飞的机遇在于和浏览器的合作发布,故其在web应用中发展迅速,而后在后来的移动设备发展过程中,由于JAVA开发简单,工具链成熟,有较多的从业人员,故移动端也成为JAVA占领的高地。
JAVA技术一般包括JAVA语言、JAVA执行环境和JAVA类库。
0x02 JAVA环境介绍
JAVA属于静态解释型语言,虽然JAVA也有编译器,但编译器只是从JAVA源码编译成了JAVA字节码的”中间件“,字节码并不能直接执行,而是一种与平台无关的统一中间代码,该代码仍需要不同平台中的JAVA虚拟机进行解释执行,故仍认为其属于解释型语言。
其编译解释及API调用过程如下图所示,由于JAVA虚拟机在解释过程中的巨大开销导致的性能问题,JAVA先后研发了JIT,HotSpot等技术提高JAVA的执行性能。
JIT技术即即时编译运行技术,该技术使JAVA代码在运行时进行编译和优化,然后再运行,并将编译的结果进行缓存,再次运行时直接使用。该技术提升了执行速度但是会在应用程序的初始执行中导致轻微或明显的延迟,因此,JIT编译器必须在编译时间和希望生成的代码质量之间进行权衡。
HotSpot技术即是在JIT技术的基础上增加了自适应优化,该技术的核心在于使JAVA虚拟机同时使用解释技术和JIT技术,在初次运行时仅使用解释执行,但会在运行过程中会记录代码块的调用频率,而后将大量调用的代码块(即性能热点)使用JIT技术进行编译,后在使用这些模块时直接调用编译后的结果,同时兼顾了编译时间和运行速度。
0x03 语言特性
面向对象
跨平台性
跨平台性是Java主要的特性之一,跨平台使得用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。
实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码写成的“半成品”,这个“半成品”会在Java虚拟机(解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的访问工作。主要注意的是,尽管已经存在一个进行代码翻译的解释层,有些时候Java的字节码代码还是会被JIT编译器进行二次编译。
自动垃圾回收
对象的创建和放置都是在存储器堆栈上面进行的。当一个对象没有任何引用的时候,Java的自动垃圾收集机制就发挥作用,自动删除这个对象所占用的空间,释放存储器以避免存储器泄漏。
注意程序员不需要修改finalize方法,自动垃圾收集也会发生作用。但是存储器泄漏并不是就此避免了,当程序员疏忽大意地忘记解除一个对象不应该有的引用时,存储器泄漏仍然不可避免。
0x04 基本语法
- 大小写敏感:Java是大小写敏感的,这就意味着标识符
Hello
与hello
是不同的。 - 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如
MyFirstJavaClass
。 - 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,例如
myFirstJavaMethod
。 - 源文件名:源文件名必须和文件内名字唯一且公开(由public 关键词修饰)的类名相同。当保存文件的时候,你应该使用该类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为
.java
。(如果文件名和类名不相同则会导致编译错误)。 - 主方法入口:所有的Java程序由
public static void main(String[] args)
方法开始执行。
0x05 关键字
0x06 开发环境
我使用的开发环境是VSCODE,JAVA开发和调试只需要安装JDK及VSCODE的JAVA插件即可。其中JDK是JAVA的开发API,其安装时还安装了用于JAVA调试的JRE,JRE是JAVA的运行时环境,包含了JVM的标准实现及JAVA的一些类库,VSCODE中的JAVA插件主要用于辅助JAVA代码的编写及调试。
首先从JAVA官网中获取JAVA最新的JDK进行安装,安装完成后在VSCODE中搜索extension pack for java安装即可。