Java基础复习
一、概述与前置知识
1.0 ASCII码表
1.1 编译型语言和解释型语言
计算机的高级语言分为编译型语言和解释型语言
1.编译型语言:
- 使用编译器一次性将源代码翻译成可执行代码,编译产生的可执行代码可在特定平台上随时运行而无需重新编译.
- 比如C/C++,先编写源代码,再编译源代码,再连接编译产生的目标文件,最后形成可执行文件.
- 源代码中,任何一处有错,就不允许编译.编译过程中,出现任何一处错误,就停止编译.
- 它的优点是直接运行最终产物(而不是源代码),比如C语言的最终产物就是二进制机器码,所以速度很快,效率高.
2.解释型语言:
- 使用解释器进行逐条解释并执行,每次运行都需要解释器逐条解释一遍
- 比如JavaScript/Python,编写代码,一行一行一边解释一边执行,而不是一次性编译全部代码.
- 它的唯一优点是源代码有错误照样可以解释执行,遇到错误再停下.
- 它的缺点是不断对源代码进行解释和执行,所以解释型程序注定要比编译型程序慢上许多.而且每次运行程序,都要对源代码进行重新解释和执行,而不是直接运行最终产物.
3.Java是编译型(一次编译过程)+解释型(JVM跨平台执行过程)
- Java语言结合了编译型语言和解释型语言,主要借助JVM(Java Virtual Machine,Java虚拟机)实现跨平台
- Java源码文件(.java)经 javac编译器编译生成字节码文件(.class),字节码文件交给JVM处理,但是并没有连接这一步.(所以并不能有C语言理解的那种编译型).
- 然后由JVM执行class字节码文件,这个执行过程又是解释型的.字节码文件首先被加载到计算机内存中,然后不断读出一条、翻译(解释)一条、执行一条.交给JVM是为了一次编译,到处运行,实现跨平台.
- 一次编译的产物是.class字节码文件,而它并不是二进制的机器码,而且它本身是不需要去变成机器码的,而是直接由JVM拿到.class文件,把它解释成机器码.
- 对于JVM来说,Windows有它的版本,Linux有它的版本,Mac也有它的版本,只需要把一次编译出来的字节码文件,交给不同平台的JVM,就可以在不同的操作系统上执行了.
- 所以Java的一次编译,是指的是在编译这一步的一次编译成.class,不可能一次编译成二进制机器码来跨平台,因为每个操作系统的二进制格式都不一样. (Windows是PE,Linux是ELF).但是想在不同的平台上执行,肯定需要不同的连接器,这东西就由JVM负责.
1.2 JDK的组成
Hello.java从JDK找到javac进行编译,产生Hello.class;
再从JDK找到java把Hello.class送给JVM运行;
在JVM里运行的时候,可能还需要调用Java自己已经写好的程序,比如sout就是,这些程序都在核心类库里.
1.3 JDK11开始可以直接执行源代码
1.4 Java的跨平台原理
根本原因就是sun公司为不同的操作系统提供了对应的虚拟机
1.5 PTAH环境变量
PATH环境变量的原理:
PATH环境变量的作用:
记住程序的路径,方便在命令行窗口的任意目录执行程序.
也就是说,如果我想让下面的QQ.exe成功执行并打开QQ
要么切换到该exe文件的目录去执行,要么就在环境变量里把QQ.exe的路径加进去
这里执行java程序用到了java.exe和javac.exe两个指令,希望能在任意目录下执行,所以要配置好JDK的bin的环境变量.
配置JAVA_HOME的好处:
你如果想换一个JDK版本 只要在JAVA_HOME里改就行
其余所有用到JDK地方的路径都不需要改
1.6 怎么看.class的内容(反编译)
真正执行的也是.class文件 所以注释不会影响到程序执行
1.7 短除法求二进制
1.8 数据在计算机中存储的最小单位–字节Byte
1.9 字符/图片/声音如何存储在计算机中
- a97 b98
- A65 B66
- 048 149
- ‘a’—>97—>对应的二进制形式
图片存的就是RGB的值
视频 = 图片 + 声音
二、Java基础语法
2.1 字面量
- ''里有且仅有一个字符 空格也行 啥都不写就报错
- ""里可以有任意长度的字符(也可以不写任何内容 也可以是一个字符)
- 随便写的字面量是int或者double 除非加上L或者F
2.2 变量
2.变量定义的时候可以不赋初始值 但是使用必须要 而且要先声明再使用
3.有访问范围
4.变量有几种?
- 局部变量
- 成员变量(又分为实例和静态)
2.3 数据类型
- double其实是能存的数值最大的类型 底层比较特殊 能存的比long还大
- 注意char是2字节 不是1字节
- 字面量默认是int或者double 除非加了L或者F
一个注意事项 字面量int 和 double 是默认值:
浮点型也是如此
2.4 关键字和标识符
2.5 类型转换
1.自动类型转换
2.表达式的自动类型转换
- byte 和 int一起算 会先把byte自动转换成int 再和int运算 最终结果也是int
- int 和 double 会把int自动转化成double 再运算 结果也是double
- 注意:byte short char是直接转换成int类型参与运算的
- 运算最终结果的类型由表达式中的最高类型决定
从代码层面思考 为什么?
单独看a1 a2 都是byte 都没啥问题
但是一加起来 很容易就超过byte的范围了!!(比如120+120)
所以索性当int算 数据还能保真
3.强制类型转换
- 小数强转成正数,直接小数丢弃,而不是四舍五入
2.6 运算符
1.算数运算符
- 3/2=1 运算结果的类型由表达式最高类型int决定 所以结果是1(1.5被强转成1了)
- 3×1.0/2=1.5 在前面×1.0就行(尽量不要改变传参 别人给过来的就是3)
- 3/2×1.0=1.0 3/(2×1.0)=1.5 注意运算顺序
2.+作为连接符
3.++和–
- ++ --只能才做变量,不能操作字面量
- ++ --单独使用 在前在后没区别
- 在表达式中 ++在前先加再用 ++在后先用再加
4.赋值运算符
-
注意自带强制类型转换
-
int a = 10 先看“=”右边,把数据10赋值给左边的变量a