1 java的特点
1.1 简单性 相对于c++简单,去掉了指针。 真正操作内存的是jvm(java虚拟机) 用c++语言实现的虚拟的计算机,java并不直接接触操作系统。
不容易内存泄漏。但是驾驭感差。假设 c语言是飞机驾驶员,java则是飞机上的乘客。java只是
java底层是c++,所以jvm是用c++语言写好的虚拟电脑。 安装JDK后,JVM就安装好了。
内存是什么?
对于计算机来说:最重要的部件
CPU:中央处理器;相当于人类的大脑,负责发送并执行指令,CPU是负责计算的负责运算的。
10+20=30 cpu负责计算出30,但是计算后10 20 30需要临时空间存储。
内存:程序运行过程中的临时数据存储空间。 断电或者关机内存数据则消失。
硬盘:持久化设备,硬盘上的数据不会因为断电而消失。
主板:相当于人类的躯干,是一个载体。 cpu;内存条;硬盘等都在主板上。
主板上有很多线,将这些部件连接起来。
1.2 健壮性 java机制 自动垃圾回收机制(GC机制) 不容易导致内存泄漏,c++和c语言使用不当会导致内存泄漏。
JVM负责调度GC机制,程序员不需要干涉。
几个术语:
JVM:(c++语言写的一个虚拟的计算机)
GC(垃圾回收机制)
1.3 java完全/完美支持多线程并发。
1.4 可移植性/跨平台
java只需要编写一次,可以做到到处运行 不需要任何操作,即可在windows OS和mac OS和 linux中运行。 三个都有JVM。
java程序可以一样,但是windows和mac和linux的JVM版本不一样。 中间硬件搭建。
JDK也分为windows和linux和mac版本。 安装JDK就会自带JVM。
优点:一次编写到处运行。 缺点:麻烦。 运行java程序必须要有一个JVM。 就像网页看视频必须要安装flash
java语言可以编写病毒,但是很难让用户中毒,一般中毒都是java程序师。
2. JDK、JRE、JVM
jdk:java开发工具箱 jre:java运行环境 jvm:java虚拟机
JDK包括JRE,JRE包括JVM。 JVM不能独立安装,jdk和jre可独立安装。
安装JDK时,JRE就自动安装了,JRE安装了,JVM就自动安装了。
JRE体积很小,安装便捷快速,可用于只测试项目。但是不能用于开发。
为什么JDK自带JRE? 因为程序开发后需要测试程序,为了让程序运行起来,所以自带。
3 java程序从开发到最终运行经历了什么?
编译期:(可以在windows上)
第一步:在硬盘的某个位置(随意),新建一个xxx.java文件
第二步:使用记事本或者其他文本编辑器例如Editplus打开xxx.java文件。
第三步:在xxx.java中编写符合“java语法规则”的“字节码”
第四步:保存(一定要将xxx.java文件保存)
第五步:使用编译器(javac 【jdk安装自带】)对xxx.java进行编译。
第六步:如果xxx.java源代码符合语法规则,编译通过生成class文件
报错之后class不会生成,只有编译通过才有。
一个源代码文件可以生成几个class文件。(编译实质是在检查语法)
运行期:(JRE在起作用):(可以在windows上,也可以在其他的os上)
第七步:如果在linux上运行,需要将windows上生成的class文件拷贝过去
不需要拷贝源代码,真正运行的是字节码。(不要删除源代码)
第八步:使用JDK自带的一个命令工具:java(负责运行的命令工具)执行字节码。
第九步:剩下的步骤就交给JVM了,不需要程序员干涉了。
JVM会将字节码文件装载进去,然后JVM对字节码进行解释(解释器负责将字节码解释为1010101等二进制。)
第十步:JVM会将生成的二进制交给os操作系统,操作系统会执行二进制和硬件进行交互。
注意:javac命令:负责编译 java命令:负责运行
小插曲:xxx.java经过编译生成A.classs、B.class、C.class等字节码文件。
我们称A是一个类,B是一个类,C是一个类,其中A\B\C是类的名字。
4 对java的加载与执行的理解(理论比较重要)
java非常重要的两个阶段: 编译阶段 运行阶段
注意:java程序员直接编写的java代码(普通文本)是无法直接被JVM识别的。
java程序员编写的java代码这种普通文本必须经过一个编译,将这个“普通文本代码”变成“字节码”,JVM能够识别“字节码”
java代码这种普通文本变成字节码的过程称为编译。
java代码的这种普通文称为源代码。(编写的代码) 不能直接执行 需要先编译,生成源代码相应的“字节码”,jvm可以识别字节码。
编译和运行阶段可以在不同的操作系统完成吗 ?
在windows上编译
编译后生成字节码
把字节码放到linux上运行
完全可以,因为java是跨平台的,可以一次编写到处运行。
java源代码一旦编译以后,源代码可以删除吗?只留下字节可以执行吗?
完全可以执行,因为源代码不参与程序的执行行程。
参与程序执行过程的是字节码。
但是最后不要删除源代码。因为有可能执行结果不是自己想要的。
当执行结果不是自己需要的时候,可以重新打开源代码进行修改。
然后重新编译生成新的字节码,在重新执行。
放源代码的文件扩展名必须是xxx.java
并且需要注意的是:编译生成的字节码文件扩展名是:xxx.class
java文件就是源文件,这个文件中编写源代码。
class文件就是文字码文件,这个文件是编译源代码而得到的。
另外需要注意的是:
一个java源文件是可以生成多个class文件的。
最终运行的是class文件。
字节码文件不是二进制。(不然就不需要JVM了)
操作系统可以直接执行二进制。
推荐:在哔哩哔哩上的动力节点,杜老师有一个非常细节的java基础教学视频。讲述非常细节,建议刚开始先去看一看。