关键字final,static使用方式总结
标签:Java基础

final

final关键字有这是无法改变的或者终态的含义,可以修饰非抽象类,非抽象类成员方法和变量

  1. final类不能继承,没有子类,final类中的方法默认是final的
  2. final方法不能被子类方法覆盖,但可以被继承
  3. final成员变量表示常量,只能被赋值一次,赋值后值不再改变,如果是数字类型的变量一旦被赋值将不能被修改,如果是引用类型的变量,一旦初始化,就不能指向其他对象
  4. final不能用于修饰构造方法

注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final的

1. final类

在设计时,如果该类不需要子类,类的实现细节不允许改变,确信这个类不会再被扩展

2. final方法

该类不允许子类覆盖该方法,设计为final方法的原因主要有:

  1. 把方法锁定,防止任何子类修改它的意义和实现
  2. 高效,编译器在遇到调用final方法时,会转入内嵌机制,大大提高效率

3. final常量

final修饰变量有三种,静态变量,实例变量和局部变量

另外,final变量在定义的时候,可以先声明而不给定值,这种变量就是final空白,编译器确保final变量在使用之前被初始化,否则报错。

public void testFinal(){
    final int a;    //final 空白
    final int b=4;  //局部变量
    a=5;
}

4. final参数

当参数为final时,你可以使用该参数,但是无法修改该参数的值

public void testFinal2(final int i){
   // i++; i是final的,不允许修改
    System.out.println(i);
}

static

static表示全局的或者静态的意思,用来修饰成员变量和成员方法,也可以形成静态代码块。

被static修饰的成员变量或者方法,独立于该类的任何对象,不依赖于特定实例,被所有实例共享,只要这个类被加载,JVM就可以根据类名在运行时数据区的方法区找到它们,因此static对象可以在任何对象创建之前访问。

static被private修饰,可以在本类中被访问,无法在其他类中使用,private表示访问限定,static表示可以不实例化就访问,以此类推。

1. static变量

按照是否静态,可以将类成员变量分为:

  1. 被static修饰,静态变量,类变量,它们只分配一次内存
  2. 没有被static修饰的叫实例变量

2. static方法

被类名或者实例调用,因此static方法中不能有this或者super关键字,不能访问非static方法或者变量,static方法必须被实现,独立于任何实例,不能是abstract的。

3. static代码块

在JVM加载类时,就会执行该代码,可以有多个,且位置任意,JVM将按顺序依次执行这些代码块,每个代码块就执行一次。

static和final一起

static和final一起修饰成员变量或者成员方法,可以理解为“全局变量”

**对于变量:**表示一旦给值就不可修改(final属性),并且通过类名可以访问(static属性)

**对于方法:**表示不可覆盖(final属性),并且通过类名直接访问(static属性)

对于变量被final修饰不可修改,但对于一些容器类型(比如ArrayList,HashMap)的实例变量,不可以修改容器本身,但容器中存放的对象可以被修改的

  • 4 min read

CONTRIBUTORS


  • 4 min read