Java中final的关键字,主要的作用就是告知编译器我这边有一块数据是恒定不变的;比如:
编写一个永不改变的编译时常量
或者在运行时被初始化的值,而你不希望这个值被改变
final关键字的作用:
修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。
java允许在参数列表中以声明的方式将参数指明为final,这就意味着无法在方法中更改参数引用所指向的对象。可以读参数,但却无法修改参数,这一特性主要用来想匿名内部类传递数据。
final int MAX_SPEED = 120;
修饰方法:该方法不可被子类重写。但是可以被重载!
把方法锁定,以防任何继承类修改它的含义,不会被覆盖。
final void study(){}
修饰类: 修饰的类不能被继承。比如:Math、String、System等。
final类禁止继承,所以final类中的所有方法都隐式的指定为final的,因为无法覆盖他们,在final类中可以给方法添加final修饰词,但这不会增加任何意义。
final class A {}
代码示例:
final修饰的类(无法被继承)
final class A{
//A 光杆司令
}
class B extends A{
//错误的, 无法从最终类A进行继承
//B类继承A类 相当于对A类功能进行扩展
//如果不希望别人对A类进行扩展,可以给A类加final关键字,如String类
}
final修饰的方法(无法被覆盖,重写)
class C{
public final void doSome(){
System.out.println("C's doSome...")
}
}
class D extends C{
//错误,无法覆盖
/* public void doSome(){
System.out.println("D's doSome...")
} */
}
final修饰的局部变量(只能赋一次值)
public class FinalTest01{
public static void main(String[]args){
//局部变量
int i=100;
//重新赋值, 没问题
i=200;
// 再定义一个局部变量
final int k=100;
//重新赋值
//错误: 无法为最终变量k分配值
// k=300;
}
}
final修饰的实例变量(必须手动赋值)
/*
一般情况下
实例变量如果还没有赋值的话,系统会赋默认值
final 修饰实例变量:
系统不负责赋默认值,要求程序员必须手动赋值,只能赋一次,
这个手动赋值,在变量后面赋值可以,在构造方法中赋值也可以
*/
public class FinalTest02(){
public static void main(String[]args){
}
}
class User{
//实例变量
//错误: 变量age未在默认构造器中初始化
//final int age;
final int age=10;
//在构造方法中赋值 weight只赋一次值
final double weight;
//构造方法
public User(){
this.weight=80;
//系统赋默认值在这个时候,final修饰后,系统不会赋值
//this.weight=0;
}
}
final关键字修饰引用变量
public class Dog {
String name;
public Dog(String name){
this.name = name;
}
}
public class Test2 {
public static void main(String[] args) {
//final int NUM = 5;
final int NUM;
NUM = 5;
// NUM = 6;
System.out.println(NUM);
//final Dog dog = new Dog();
final Dog dog;
dog = new Dog("丫丫");
dog.name = "欧欧";
//dog = new Dog("菲菲");
}
}
学习教程推荐:
- 1.北京高淇Java300集(Java强烈推荐)
Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通 - 2.JavaSE基础全套-从零开始进阶之大神(推荐)
系统教学JavaSE基础全套课程-从0开始进阶至大神_线下录制Java系列课程Java从入门到精通_/JAVA基础/数组/OOP/集合/IO流_ - 3.Java常用类基础实战
【基础夯实】Java常用类实战基础教程_Java八大常用类核心基础_Java常用类基础入门/Java包装类/String类 - 4.Java基础入门必备数学知识【数据结构与算法】(推荐)
Java基础入门必学知识数据结构与算法_Java数据结构与算法基础到进阶/Java基础入门进阶/Java数据结构分析/Java数据结构常见问题_哔哩哔哩_bilibili - 5.Java面向对象编程_OOP基础深入讲解
Java面向对象编程重基础深入讲解_OOP面向对象Java基础干货分享/JavaSE/面向对象编程/OOP程序设计 - 6.GOF23种设计模式-23中设计模式详解课程
GOF23种设计模式讲解_Java gof23种设计模式详解课程_从单例到备忘录模式 23种模式详解