二. Java学习笔记二

  由于之前有了Cpp面向对象的思想,同时也想快速入门Java,所以Java学习笔记就记录一些学习过程中感觉比较重要的东西,以及有参考价值的代码,可能比较零散,主要是帮助自己记忆。

目录

  1. Part1. 对象的内存图
  2. Part2. 方法覆盖
  3. Part3. super与this
  4. Part4. 抽象类
  5. Part5. 接口(Intertface)


Part1. 对象的内存图

  首先是Java创建一个对象对应的内存图,如下所示:

java的笔记 java笔记完整版_Java


我们可以看到左侧代码中有两个类,分别是Demo01PhoneOne、Phone,其中有相应的方法。在右侧代码中,我们能够看到,在JVM(Java虚拟机)内存有三块分别是,栈、堆、方法区,其功能如下所示:

  1. 堆区:
      提供所有类实例和数组对象存储区域,JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
  2. 栈区
      栈由栈帧组成,每个线程run时都会分配自己的栈内存空间,每个方法运行时会在自己的栈内存中分配栈帧内存区,各方法的局部变量存储于各自的栈帧内存区,每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
  3. 方法区
      又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。运行时常量池都分配在 Java 虚拟机的方法区之中.

Part2. 方法覆盖

  第二,方法覆盖。是指在继承关系当中,方法的名称一样,参数列表也一样

要注意覆盖(重写)和重载的区别:

重写(Override):方法的名称一样,参数列表也一样。

重载(Overload):方法的名称一样,参数列表不一样。

  方法覆盖重写特点,创建的子类对象,优先用子类的方法。同时,方法覆盖要注意如下的事项:

java的笔记 java笔记完整版_java_02

Part3. super与this

  父类代码:

java的笔记 java笔记完整版_java_03


  子类代码以及super的使用方法:

java的笔记 java笔记完整版_java_04


  我们能够看到super能用于访问父类的成员变量、方法与构造方法。

  对于this主要是调用本类内容:

java的笔记 java笔记完整版_java的笔记_05


super与this的流程图大体如下图所示:

java的笔记 java笔记完整版_抽象类_06

Part4. 抽象类

java的笔记 java笔记完整版_静态方法_07

Part5. 接口(Intertface)

5.1 接口定义与使用

  接口应该是今天学习到的比较重要的内容。

java的笔记 java笔记完整版_java的笔记_08


java的笔记 java笔记完整版_Java_09


  接口类似一个抽象类,主要是确定继承类的标准,所以不能单独使用,注意有

public class [实现类名称] implements [接口名称]

java的笔记 java笔记完整版_Java_10


在实现类中,要覆盖重写所有的接口方法,否则还是抽象类。

5.2 默认方法

  为什么需要默认方法,我们可以假设一下,对于一个接口A,有两个继承类B,C使用了这个接口,如果我们往A中添加了新的抽象方法,那么B、C就需要重写这一方法,这样会带来不便。我们可以直接在A中添加默认方法,这样B、C即使没有重写该方法,也能够直接使用。

java的笔记 java笔记完整版_java的笔记_11

5.3 静态方法

  静态变量和方法可以在不创建对象的情况下进行访问。

  1. 静态方法:静态方法会随着类的定义而被分配和装载入内存中。静态方法可以调用静态方法以及访问静态数据域,但静态方法不能调用实例方法或者访问实例数据域。
  2. 实例方法:只有在类的对象创建时在对象的内存中才有这个方法的代码段。实例方法可以调用实例方法和静态方法,以及访问实例数据域或者静态数据域。

静态方法定义

java的笔记 java笔记完整版_静态方法_12


静态方法的使用(直接:接口.静态方法()就可以):

java的笔记 java笔记完整版_Java_13

5.4 私有方法

java的笔记 java笔记完整版_java的笔记_14

5.5 接口的成员变量

java的笔记 java笔记完整版_抽象类_15