美文网首页
【JAVA】final、static、abstract 区别与联

【JAVA】final、static、abstract 区别与联

作者: 温柔的谢世杰 | 来源:发表于2019-07-29 09:43 被阅读0次

    1、static 修饰符

    • static 作用于代码块

      • 称作静态代码块(可以初始化 static field,不能初始化非 static field);
    • static 作用于 methods:

      • static 方法(类方法)只能访问 static 方法,不能访问非 static 方法
      • static 方法只能访问 static field, 不能访问非 static field
      • static方法不能访问本类中的非static变量
      • 非 static 方法可以访问 static fields 和 static methods
      • static method 的两种访问方式 oject.method 和 class.method,
      • 非 static method 只有 object.method 一种访问方式
      • static method 中不支持 this 和 super
      • static 不可以作为局部变量(局部变量包括:函数级局部变量和块级局部变量)

    2、final 修饰符

    • final 类不能被继承(不能有 abstract final class)(final 类内的 method 自动为 final,但不包括属性)
    • final 方法可以被继承但不能被 override 不能有 abstract final method
    • final 属性不能被重新赋值(可以被继承,但不可以修改)定义时可以初始化,也可以不初始化,而在语句块中初始化或者构造函数中初始化(最晚要在构造函数中初始化,只能初始化一次)
    • final 属性只能人为赋值一次继承与父类的 final 属性不能被修改
    • final 可以修饰局部变量表示局部常量(方法级局部变量(形参及局部变量,方法体级局部变量)或块级局部变量)

    3、abstract 修饰符:

    • abstract 类不能实例化对象
    • abstract 类可以不包含 abstract 方法,但是只要有一个 abstract 方法那么该类必须为 abstract 类
    • abstract 方法没有方法体,需要被 override
    • abstract 类的子类要么实现其父类全部的 abstract method,要么也是一个 abstract 类
    • abstract 不能修饰属性
    • abstract 不能修饰局部变量(方法级局部变量(形参级局部变量,方法体级局部变量)或块级局部变量)

    4、final、static、abstract 之间的关系:

    • final、abstract 不能共存(无论在类、方法、属性、局部变量上都不能共存)
    • static、abstract 不能共存(无论在类、方法、属性、局部变量上都不能共存)
    • 可以出现 final static field(该类成员属性不能被修改)
    • 可以出现 final static method(该类成员方法不能被 override)

    5、final static 修饰的属性

    static和final的意义是不同的,

    • static修饰的时候代表对象是静态的,而final修饰的时候代表对象只能赋值一次,
    • 他们连用的时候是因为定义的那个对象既要它是静态的,也要求它的值不能再被修改。

    举例说明:
    static int a=1;
    static final b=1;

    这里a和b的区别在于,a在程序里可以被重新赋值为2或3或等等的整数,而b在程序里不能被重新赋值,b永远都为1,也就是说b是一个常量。

    final int c=1;
    static final b=1;

    这里c和b的区别在于,b存放在静态空间,不会在程序运行时被释放,它永远占着内存直到程序终止,而c在程序用完它而不会再用到它的时候就会被自动释放,不再占用内存。

    当一个常数或字符串我们需要在程序里反复反复使用的时候,我们就可以把它定义为static final,这样内存就不用重复的申请和释放空间。

    相关文章

      网友评论

          本文标题:【JAVA】final、static、abstract 区别与联

          本文链接:https://www.haomeiwen.com/subject/rijvrctx.html