Java final关键字
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同时使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!