二. Java学习笔记二
由于之前有了Cpp面向对象的思想,同时也想快速入门Java,所以Java学习笔记就记录一些学习过程中感觉比较重要的东西,以及有参考价值的代码,可能比较零散,主要是帮助自己记忆。
目录
- Part1. 对象的内存图
- Part2. 方法覆盖
- Part3. super与this
- Part4. 抽象类
- Part5. 接口(Intertface)
Part1. 对象的内存图
首先是Java创建一个对象对应的内存图,如下所示:
我们可以看到左侧代码中有两个类,分别是Demo01PhoneOne、Phone,其中有相应的方法。在右侧代码中,我们能够看到,在JVM(Java虚拟机)内存有三块分别是,栈、堆、方法区,其功能如下所示:
- 堆区:
提供所有类实例和数组对象存储区域,JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 - 栈区
栈由栈帧组成,每个线程run时都会分配自己的栈内存空间,每个方法运行时会在自己的栈内存中分配栈帧内存区,各方法的局部变量存储于各自的栈帧内存区,每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 - 方法区
又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。运行时常量池都分配在 Java 虚拟机的方法区之中.
Part2. 方法覆盖
第二,方法覆盖。是指在继承关系当中,方法的名称一样,参数列表也一样
要注意覆盖(重写)和重载的区别:
重写(Override):方法的名称一样,参数列表也一样。
重载(Overload):方法的名称一样,参数列表不一样。
方法覆盖重写特点,创建的子类对象,优先用子类的方法。同时,方法覆盖要注意如下的事项:
Part3. super与this
父类代码:
子类代码以及super的使用方法:
我们能够看到super能用于访问父类的成员变量、方法与构造方法。
对于this主要是调用本类内容:
super与this的流程图大体如下图所示:
Part4. 抽象类
Part5. 接口(Intertface)
5.1 接口定义与使用
接口应该是今天学习到的比较重要的内容。
接口类似一个抽象类,主要是确定继承类的标准,所以不能单独使用,注意有
public class [实现类名称] implements [接口名称]
在实现类中,要覆盖重写所有的接口方法,否则还是抽象类。
5.2 默认方法
为什么需要默认方法,我们可以假设一下,对于一个接口A,有两个继承类B,C使用了这个接口,如果我们往A中添加了新的抽象方法,那么B、C就需要重写这一方法,这样会带来不便。我们可以直接在A中添加默认方法,这样B、C即使没有重写该方法,也能够直接使用。
5.3 静态方法
静态变量和方法可以在不创建对象的情况下进行访问。
- 静态方法:静态方法会随着类的定义而被分配和装载入内存中。静态方法可以调用静态方法以及访问静态数据域,但静态方法不能调用实例方法或者访问实例数据域。
- 实例方法:只有在类的对象创建时在对象的内存中才有这个方法的代码段。实例方法可以调用实例方法和静态方法,以及访问实例数据域或者静态数据域。
静态方法定义
静态方法的使用(直接:接口.静态方法()就可以):