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

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,这样内存就不用重复的申请和释放空间。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 5,454评论 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 5,847评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,650评论 0 11
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 5,542评论 4 12
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 3,459评论 0 2

友情链接更多精彩内容