Java SE(一)

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(重写):

  1. 方法名、参数、返回值不同。
  2. 子类方法不能缩小父类方法的访问权限。
  3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
  4. 存在于父类和子类之间。
  5. 方法被定义为final时不能被重写。

Overload(重载):

  1. 参数类型、个数、顺序至少一种不相同。
  2. 不能重载只有返回值不同的方法名。
  3. 存在于父类和子类、同类中。
原文地址:https://www.cnblogs.com/john1015/p/13868288.html