Java语言基础总结

1.基础概念理解

1.1 Java语言特点

  • Java语言依靠JVM实现了平台的无关性,一次编译,到处运行。

  • 面向对象特性。Java的面向对象特性与C++旗鼓相当,Java与C++的主要不同点在于多继承,在Java中,取而代之的是更简单的接口概念。

  • Java 语言支持多线程,内置多线程机制,而 C++ 语言必须调用操作系统的多线程功能。

  • 面向对象开发,具有封装、继承、多态的特点。

  • 既是编译型语言,又是解释型语言,编译与解释并存。

  • 支持网络编程,Java能够极大地简化网络编程。

1.2 Java和C++的联系与区别

Java与C++都是高级程序设计语言,具有面向对象的特点,但也存在一些不同之处(不然为啥名字不一样。。。)

  • 均为面向对象型语言,具有三大特性:封装、继承、多态

  • Java语言放弃了指针机制,不支持通过指针对内存的访问,因此使得编程更方便,程序更安全。

  • Java通过JVM的GC机制对内存进行管理,自动优化内存,释放空间,不需要手动回收内存。

  • Java只支持类的单继承,C++支持多继承,但Java支持接口的多继承,同样可以实现C++多继承的效果。

  • Java的字符串或者字符数组中不存在'\0'来表示最后一位结束字符。

1.3 JVM与字节码

JVM:即Java 虚拟机,是运行 Java 字节码的虚拟机。JVM 有针对不同操作系统的特定实现,目的是使用相同的字节码,它们都会给出相同的结果。

字节码:即扩展名为 .class 的文件。在 Java 中,JVM 可以理解的代码就叫做 字节码 ,它不面向任何特定的处理器,只面向虚拟机。

Java 语言通过字节码的方式,将程序源代码先编译成字节码文件,再由字节码解释成机器码,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

1.4 JDK与JRE

JDK :即 Java Development Kit,是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,另外还有编译器(javac)和其他工具(如 javadoc ),能够创建和编译程序。

JRE :即 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 JVM、Java 类库、java 命令和其他的一些基础构件。但是不能用于创建新程序。

1.5 编译与解释并存

高级编程语言按照程序的执行方式分为编译型和解释型两种。

  • 程序要想被执行,必须要将程序的源代码翻译成计算机可以识别的机器码(由0、1构成的二进制代码)

  • 简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;

  • 解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。

  • Java 语言既具有编译型语言的特征,也具有解释型语言的特征,因为 Java 程序要经过先编译,后解释两个步骤。

  • Java 程序需要先经过编译步骤,生成字节码(*.class 文件),然后再由Java 解释器来解释执行。因此Java 语言编译与解释并存。

1.6 Java程序运行

Java 程序从源代码到运行一般有下面 3 步:

 

  • Java源代码文件首先通过JDK中的javac编译程序编译成Java字节码文件

  • Java字节码文件由JVM生成计算机可以执行的机器码文件,在字节码到机器码文件这一步中, JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。

  • 有些方法和代码块是经常需要被调用的(即热点代码),所以后面引进了 JIT 编译器,而 JIT 属于运行时编译。

  • 当 JIT 编译器完成第一次编译后,会将字节码对应的机器码保存下来,下次可以直接使用,而机器码的运行效率肯定是高于 Java 解释器的。

热点代码:HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT 所需要编译的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。

AOT:(Ahead of Time Compilation),JDK 9 引入了一种新的编译模式,它是直接将字节码编译成机器码,这样就避免了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。但是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。

1.7 Java程序主类

Java程序是面向对象编程的,因此一个程序中可能存在多个类,但是只有一个类是整个程序的主类,这个类就是包含“main()”方法的类。应用程序是从主线程启动的,即“main()”方法。

2.JAVA语法

未完待续。。。

posted on 2022-02-11 20:27  lixin05  阅读(42)  评论(0编辑  收藏  举报