abstract(抽象)

概念

  1. 具备某个物体的特征,但又不完整
  2. 在程序中,有一些方法父类没有实现,交给子类去实现

    基本使用

  3. 创建一个父类,带抽象方法image.png

  4. 创建一个子类,继承父类必须实现抽象方法image.pngimage.png
  5. 在使用的时候,可以使用父类引用也可以使用子类引用,但是只能new出来子类对象

image.png

abstract的本质

  1. 强制子类重写方法
  2. 使用技巧:作为父类,可以定义一个抽象的方法,提前调用,让子类去实现 ```java //掉落的抽象方法 public abstract void lost();

public void kill(Father target){ //击败了某个对手 System.out.printIn(“击败了”+target.name); target.lost(); } ```

  1. 抽象方法的特别用法(不创建子类)image.png

static(静态方法)

概念

  1. 是Java中一个特殊的关键字,可以用于修饰属性、方法、类
  2. 其作用是使得Java的代码不需要new也可以执行

    修饰方法

  3. static修饰方法

    1. 不需要new(使用new和不使用new对static修饰的方法不影响)

image.png

static的基本原理

  1. Java程序一运行就会自动加载static静态区中所有的内容
  2. 只需要知道静态区的方法或者属性的地址就可以直接调用
  3. 静态区所有的内容都是永远存在的,不容易删除,这样会导致很多的内存被浪费
  4. 为了更加方便,可以直接在静态代码块中编写代码image.png
  5. 由于static是在静态代码区的,那么关于堆里面的一些引用是无法使用的
    1. 所有静态代码块不能调用堆中的变量
    2. 可以使用局部变量
    3. 可以使用静态修饰的变量image.png image.png

面对对象的三个修饰符 - 图10

static修饰变量

  1. 可以修饰成员变量(不可以修饰局部变量)
  2. 被修饰的成员变量是存储在静态区的内存中
  3. 在程序被加载的时候就会存在,不容易被删除
  4. 当前类创建的其他所有的变量,都会共享这个static变量
  5. 被static修饰的成员变量,称为全局变量(全局变量概念:可以通过类名、变量名在任一的类中使用)

static修饰内部类

  1. 在类中定义的类称为内部类
  2. 内部类可以直接使用外部类的成员变量image.png
  3. 问题存在:内部类默认的情况下会保存外部类的一个this指针(引用),使得内部类可以不用传引用就可以调用外部类的成员变量
    1. JVM垃圾回收器:回收内存的其中一个条件就是当前内存没有其他指向
    2. 内部类默认有一个this指针指向外部类,从而导致内存泄漏

面对对象的三个修饰符 - 图12

  1. 解决方案:可以使用static修饰内部类,防止内存泄漏,在使用static之后,这样就不会自动传递外部类默认的引用了,如果一定要使用外部类的成员变量,可以手动传递外部类的引用,通过软引用SoftReference进行保存image.png
  2. 软引用保存的内存,会在这个内存长期不被使用的时候会由JVM垃圾回收器自动释放

    final(最终)

    概念

  3. final修饰的类或者是变量是可以再次继承或者修改的image.png

  4. 可修饰的内容:
    1. 类(最终类)
    2. 方法(最终方法)
    3. 变量(最终变量)

  5. final修饰变量

  6. final修饰变量只能被赋值一次

  7. 作用
    1. 防止变量被修改
  8. 注意:常量幻数问题

错误写法
image.png
正确
定义常量:使用final会被优化所占内存更少,尽量不要去保存对象,作用:防止代码中出现幻数
image.png
运用常量image.png

final修饰方法

  1. 修饰一般方法image.png
  2. 修饰构造方法

image.png

final修饰类

被final修饰的类不可以被继承
image.png
image.png