static关键字和final关键字

Posted crabdumplings

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static关键字和final关键字相关的知识,希望对你有一定的参考价值。

static关键字和final关键字

static(静态)

作用

用来修饰属性、方法、代码块、内部类

static修饰属性

表示静态变量(类变量)

按是否使用static修饰,属性的分类

  • 静态属性
    1. 当创建了类的多个对象、每个对象都共享一个静态变量
    2. 当通过某一个对象修改静态变量时,会导致其他对象此静态变量时是修改过的
  • 非静态属性(实例变量)
    1. 当创建了类的多个对象、每个对象都独立的拥有一套类中的非静态属性
    2. 当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值的修改

说明

  1. 静态变量随着类的加载而加载,可以通过“类.静态变量”的方式进行调用(实例变量随着对象的创建而加载)

  2. 静态变量的加载要早于对象的创建

  3. 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中

    技术图片

内存结构解析

技术图片

static修饰方法

表示静态方法
技术图片

说明

  1. 随着类的加载而加载,可以通过“类.静态方法”的方式进行调用
  2. 静态方法中,只能调用静态的方法和属性;非静态方法中,即可以调用非静态的方法或属性,也可以调用静态的方法或属性
  3. 在静态的方法内,不能使用this关键字、super关键字
    技术图片

判断是否使用static

属性需要声明static的情况

  1. 属性可以被多个对象所共享的,不会随着对象的不同而不同
  2. 类中的常量也常常声明为static

方法需要声明static的情况

  1. 操作静态属性的方法,通常设置为静态的
  2. 工具类中的方法,习惯上声明为静态的(Math、Arrays)

final(最终)

作用

用来修饰类、方法、变量

final修饰类

此类不能被其他类所继承(String类、System类、StringBuffer类都是final类)

final修饰变量

此时被修饰的“变量”就是一个常量

final修饰属性

  • 可以考虑赋值的位置
    1. 显式初始化
    2. 代码块中初始化
    3. 构造器中初始化
      • 因为不知道对象调用哪个构造器,所以写的构造器中必须每个都要给final变量(其他情况的变量也如此)赋值

final修饰局部变量

  • 用final修饰形参
    • 表明此形参是个常量。
    • 当调用此方法时,给形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参。但不能进行重新赋值

static final

  • 用来修饰属性、方法
  • 修饰属性:全局常量


以上是关于static关键字和final关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java的static和final关键字的用法

static final 关键字

static关键字和final关键字

Java基础_final和static区别

Java基础 -- 关键字Static和Final

java中static与final关键字归纳总结