Java中final的关键字-快速理解掌握

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("菲菲");
    }
}

学习教程推荐:

相关文章:

Java入门姿势【面向对象编程10】抽象类和接口

 Java入门姿势【面向对象9】三大特性之一多态性

 javase2021最强学习线路没有之一

猜你喜欢

转载自blog.csdn.net/LSFZ88888/article/details/120333522