Java 基本概念
1. Java 与 C++ 相比的优点
- Java 中没有指针、结构和类型定义等概念。
- 不再有全局变量
- 没有 #include 和 #define 等预处理器;
- 没有多重继承的机制。
2. Java 的分布式与安全性
- Java 强调网络特性,内置 TCP/IP、HTTP、FTP 协议类库,便于开发网上应用系统。
- Java 程序在语言定义阶段、字节码检查阶段及程序执行阶段进行的三级代码安全检查机制(防止二义性),对参数类型匹配、对象访问权限、内存回收、Java 小应用程序的正确使用等都进行了严格的检查和控制,可以有效地防止非法代码的侵入,阻止对内存的越权访问,能够避免病毒的侵害。
三级代码安全检查机制:第一级验证时在类下载完成时的,检查从哪里下载文件,是否有权限进到本机系统;然后进行第二级检查,即字节码校验,此时要分析下载的字节码是否合乎规则,否则不予执行。执行的时候,安全管理器始终检测所执行的每部操作,检查其合法性。
3. Java 的跨平台性
Java 编译器将 Java 程序编译成二进制代码,即字节码(bytecode)。不同的操作系统有不同的虚拟机,它类似于一个小巧而高效的 CPU。字节码就是虚拟机的机器指令,与平台无关。
4. Java 虚拟机
JVM 是编译后的 Java 程序 和 硬件系统 之间的接口,程序员可以把 JVM 看作是一个虚拟的处理器,它不仅可以解释执行编译后的 Java 指令,而且还进行安全检查。
JVM 的具体实现包括 指令集(等价于 CPU 的指令集)、寄存器组、类文件格式、栈、垃圾收集堆、内存区。
JVM内存模型见本人的另一篇博客:https://www.cnblogs.com/john1015/p/13935824.html
5. Java 垃圾收集机制
Java 提供了后台系统级线程,记录每次内存分配的情况,并统计每个内存指针的引用次数。在 Java 虚拟机运行时环境闲置时,垃圾收集线程将检查是否存在引用次数为 0 的内存指针,引用次数为 0 意味着没有程序在使用这块内存;如果有这样的内存,则垃圾收集线程把该内存 “标记” 为 “清除”(释放),就是要归还给系统,留给下次再分配给其他的内存申请。
具体内容详见本人另一篇博客:https://www.cnblogs.com/john1015/p/14140973.html
6. 代码安全
Java 语言是解释执行的,但从某种意义来讲,Java 文件是 “编译”的,因为它也声称了中间语言形式的文件。经过“编译”的 Java 目标代码,称为字节码,存储在.class文件中。字节码是不依赖于机器硬件平台的二进制代码。
Java 源程序(.java文件)=> Java 编译器 => Java bytecode(.class文件)=> bytecode 下载器 -->(bytecode检查)=> bytecode 解释器 => 系统执行平台
Java 解释器工作:1.下载代码:由类下载器完成;2. 校验代码:由字节码校验器完成;3. 运行代码:由运行时解释器完成。
字节码校验器:检测代码段的格式,并使用规则来检查非代码段。字节码校验器要对程序中的代码进行 4 趟扫描。主要检查:1.类遵从JVM的类文件格式;2.不出现访问违例的情况;3.代码不会引起运算栈溢出;4.所有运算代码的参数类型总是正确的;5.不会发生非法数据转换,如把整数转换为指针;6.对象访问是合法的。
7. Java 的基本数据类型
(1)布尔类型————boolean
两种类型:true 和 false ,且内部用 8 个二进制位来表示。
(2)字符类型————char
一个 char 表示一个 Unicode 字符,其值用 16 位无符号整数表示,范围为 0~65535.
(3)整型量
整型类型 | 整数长度 | 字节数 | 表示范围 |
---|---|---|---|
byte | 8位 | 1 | -27~27-1 |
short | 16位 | 2 | -215~215-1 |
int | 32位 | 4 | -231~231-1 |
long | 64位 | 8 | -263~263-1 |
(4)整型常量的最大和最小值
类型 | 最大值 | 最小值 |
---|---|---|
int | Integer.MAX_VALUE | Integer.MIN_VALUE |
long | Long.MAX_VALUE | Long.MIN_VALUE |
(5)浮点型————float 和 double
浮点类型 | 浮点数长度 | 字节数 |
---|---|---|
float | 32位 | 4 |
double | 64位 | 8 |
包装类详解见本人另一篇博客:https://www.cnblogs.com/john1015/p/13870276.html
8. OOP 的介绍
OOP 采用了三大技术:封装、继承和多态。
- 封装:将数据及对数据的操作捆绑在一起为类,这就是封装技术;
- 继承:将一个已有类中的数据和方法保留,并加上自己特殊的数据和方法,从而构成一个新类;
- 多态:在一个类或多个类中,可以让多个方法使用同一个名字,从而具有多态性。
9. Override和Overload的区别
Override(重写):
- 方法名、参数、返回值不同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 存在于父类和子类之间。
- 方法被定义为final时不能被重写。
Overload(重载):
- 参数类型、个数、顺序至少一种不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中。