Java final关键字

2024-01-09 00:40:05

Java final关键字

1.什么是“最终的”?

概念:最后的,不可更改的。

final可修饰的成员

  • 修饰类(最终类)- 不可被继承
  • 修饰方法(最终方法)- 不可被重写
  • 修饰变量(最终变量—常量)- 不可被改变

2.final类

final类:此类不能被继承。

String、Math、System均为final修饰的类,不能被继承。

eg:

public final class Animal {...}
//报错
public class Dog extends Animal {...}

报错: Cannot inherit from final ‘StageOne.day13.Animal’

3.final方法

final方法:此方法不能被重写,可以被继承

意为最终方法,不支持子类以重写的形式修改。

eg:

public class Animal {
    public final void eat() {}
}

public class Dog extends Animal{
    //报错
    @Override
    public void eat() {}
}

报错: ‘eat()’ cannot override ‘eat()’ in ‘StageOne.day13.Animal’; overridden method is final

4.final常量

常量: 不可改变的变量或固定的数据。

  • 字面常量: (100,200,“hello”,false,‘a’)

    int num = 100;   // num为变量, '100'这个数据为常量
    
  • final常量:final修饰不可改变的变量。

final常量:final修饰不可改变的变量。要求:必须赋值,一旦赋值,数据不能被改变。

常量命名习惯: 所有字母大写(Ctrl+Shift+U),如果有多个单词使用下划线隔开。

变量有两类: 局部变量, 成员变量; 因此常量也有两类: 局部常量, 成员常量;

4.1 实例常量

声明在方法外, 并被 final 修饰的变量, 称为实例常量;

实例常量不再提供默认值,必须手动赋予初始值。

eg:

class A {
	final int COUNT = 20;
	public void A() {...}
}

赋值时机:声明同时赋值、动态代码块或构造方法。

//声明同时赋值
final int COUNT = 20;//动态代码块
final int COUNT;
{
	COUNT = 22;
}//构造方法
final int COUNT;
public A() {
	COUNT = 24;
}

注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。

4.2 静态常量

声明在方法外, 并同时被 static 和 final 修饰的变量, 称为静态常量;

静态常量不再提供默认值,必须手动赋予初始值。

eg:

class A {
	static final int COUNT = 20;
	public void A() {...}
}

赋值时机:声明同时赋值、静态代码块。

//声明同时赋值
static final int COUNT = 20;//静态代码块
static final int COUNT;
static {
	COUNT = 22;
}

补充:

final修饰基本类型:值不可变;

final修饰引用类型:地址不可变, 元素可改变;

数组常量

eg:

final int[] NUMS = new int[] {10,15,20,25,30}; //地址不可改变
NUMS[0] = 100; // 元素可以改变

对象常量

eg:

final Dog dog = new Dog(); // 地址不可改变
dog.breed = "哈士奇"; //属性可以改变
...

5.总结

final修饰类:此类不能被继承。

final修饰方法:此方法不能被重写,可以被继承。

final修饰变量(常量):必须赋值,一旦赋值,数据不能改变。

  • 局部常量:声明同时赋值或者先声明再赋值。
  • 实例常量:声明同时赋值、动态代码块或构造方法。
  • 静态常量:声明同时赋值、静态代码块。
  • 基本类型常量:值不可变。
  • 引用类型常量:地址不可变。

abstract不能和final同时使用。

abstract不能和static同时使用。

文章来源:https://blog.csdn.net/weixin_50858647/article/details/135404182
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。