文章目录
Java语言的特性
简单性,完全面向对象,健壮性,多线程,可移植性。
简单性
在Java语言中,真正操作内存的是:JVM(Java虚拟机),Java语言的底层是c++,所以JVM是用c++语言写好的一个虚拟的电脑,JDK安装完成后,JVM就安装好了。
所有的Java程序都是在Java虚拟机中运行的,而Java虚拟机在执行过程中去操作内存,
c或者c++是可以直接通过指针操控内存的,更灵活,更有驾驭感,Java语言屏蔽了指
针,程序员不能直接操控内存。
优点:内存泄露不会发生,简单
缺点:效率问题,驾驭感比较差
内存是什么?
对于计算机说,最主要的部件:
CPU:中央处理器,相当于人类的大脑,负责发送并执行指令,是整个计算机的指挥官,负责计算
内存:程序运行过程中,临时数据存储空间,断电/关机之后,内存中的数据消失。
硬盘:持久化设备,硬盘上的数据不会因断电/关机而丢失。
主板:相当于人类的躯干,是一个载体:CPU,内存条,硬盘等等都是放在主板上的。
完全面向对象
采用面向对象的方式,可以让复杂问题简单化,Java 中提供了封装、继承、多态等面向对象的机制。
健壮性
主要是因为Java中有一种机制:自动垃圾回收装置(GC机制)
Java相当于c/c++健壮,Java不容易引发内存泄露,JVM负责调度GC机制,程序员不需要管。
缺点:GC机制只有积攒一定的垃圾后才会调度。
Java完美支持多线程并发
可以同时启动
可移植性/跨平台
Java语言只需要编写一次,可以到处运行,凭借JVM机制实现,Java在JVM中运行,不直接与操作系统打交道
例如:Java程序编写完成之后,可以在Windows操作系统上运行,不需要做任何修改,
就可以在linux操作系统上运行,同样也可以在Mac OS上运行。
优点:一次编写,到处运行
缺点:麻烦,运行Java程序必修有一个JVM
**Java语言可以编写病毒吗?**可以,但是很难让用户中毒,中毒的都是含有JVM的Java程序员
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSsOyYFG-1598765561739)(…/%E5%9B%BE%E7%89%87/%E5%8F%AF%E7%A7%BB%E6%A4%8D%E6%80%A7.png)]
JVM屏蔽了操作系统之间的差异,Windows和Mac的JVM不一样,JVM是直接跟操作系统打交道的,所以JVM肯定不一样
JDK JRE JVM三者之间的关系是什么?
JDK(Java Development Kit): Java 语言的软件开发工具包
JRE((Java Runtime Environment):Java 运行环境
JVM(Java Virtual Machine):Java 虚拟机
JDK包括JRE和JVM,JRE包括JVM,有单独的JDK安装包,也有单独的JRE安装包,没有单独的JVM安装包,如果只需要运行Java程序,只用安装JRE,如果要开发Java软件,必须安装JDK。
Java的加载与执行
Java程序经历的两个阶段:编译 运行。
Java程序员直接编写的是“源代码”,无法被JVM识别,即不能直接执行,必须经过编译变为“字节码”,才能被JVM识别,“字节码”不是二进制,JVM可以识别字节码,操作系统识别二进制。
问:编译阶段和运行阶段可以在不同的操作系统上完成吗?
可以,在Windows系统上编译生成“字节码”,在linux系统上运行,完全可以,一次编写,到处运行。
Java源代码生成字节码之后,源代码可以删除,但是最好不要删除,防止出现错误需要改源代码。
源代码文件:xxx.java
字节码文件:xxx.class
Java程序从开发到最终运行经历了什么?
编译期间
①在硬盘的某个位置新建一个xxx.java文件
②打开xxx.java文件
③使用文本编辑器编写符合java语法规则源代码
④保存
⑤使用编译器javac【jdk安装后自带】对xxx.java文件进行编译
⑥如果xxx.java中的源代码符合java语法规则,编译通过,生成xxx.class
字节码文件,如果语法错误,编译器报错,class文件不会生成。
运行期间
⑦若在linux上运行,需要将字节码class文件拷贝过去
⑧使用JDK自带的一个命令:java(负责运行)
⑨JVM对字节码进行解释,解释成二进制文件
⑩JVM将二进制文件发给操作系统,操作系统会执行二进制代码和硬件进行交互。
javac负责编译
java负责运行
如果xxx.Java源文件生成 A.class B.class C.class,那么A B C都是类的名称,(一个源文件可以有多个类)
编写java的第一个程序!
①安装文本编译器
②安装JDK14(内置一个JRE),JDK的bin目录下:
javac.exe 负责编译
java.exe 负责运行
③写代码
④编译
⑤运行