Java面向对象编程高阶(三)

在这里插入图片描述


一、final关键字的使用

final可以修饰的结果:类、方法、变量

final修饰的类:表示此类不能被继承。
比如:String、StringBuffer

在这里插入图片描述

final修饰的方法:表示此方法不能被重写

在这里插入图片描述
final修饰变量:既可以修饰成员变量,也可以修饰局部变量。此时的“变量”其实就是“常量”,一旦赋值就不可更改。

final修饰成员变量:哪些位置可以给成员变量赋值?
显示赋值
代码块中赋值
构造器中赋值

public class FinalTest {
    
    
    public static void main(String[] args) {
    
    
        E e = new E(4);
        System.out.println(e.MIN_SCORE);
    }
}

class E {
    
    
    //成员变量
    final int MIN_SCORE = 0;

    final int MAX_SCORE = 100;

    final int LEFT;

    final int RIGHT;
    {
    
    
        LEFT=2;
    }
    public E(int right){
    
    
        RIGHT=right;
    }
}

final修饰局部变量:
方法内声明的局部变量:在调用局部变量之前,一定需要赋值。二千一旦赋值,就不可更改。
在这里插入图片描述

方法的形参:在调用此方法时,给形参进行赋值。二千一旦赋值,就不可更改。
在这里插入图片描述

final与static搭配,修饰成员变量时:此成员变量称为:全局常量。

1、修饰变量

final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写。
final修饰引用数据类型,那么地址值就不可以改变

package com.msb_final;

public class Test {
    
    
    public static void main(String[] args) {
    
    
        //第一种情况
        //todo final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写
        final int A =10;
        // a =20;报错,不可以修改

        //第二种情况
        final Dog d = new Dog();//todo final修饰引用数据类型,那么地址值就不可以改变
        //d = new Dog()  地址值不可以改变
        //d对象的属性依然可以改变


    }

    public static void a(Dog d){
    
    
        d=new Dog();

    }
}

2、修饰方法

final修饰方法,那么这个方法不可以被该类的子类重写;

在这里插入图片描述

3、修饰类

代表没有子类,该类不可以被继承,一旦一个类被final修饰,那么里面的方法没有必要被final修饰了。
在这里插入图片描述

4、案例

JDK提供的Math类,看源码发现:
a、使用Math类的时候无序导包,直接使用即可。

package java.lang;

b、Math类没有子类,不能被其他的类继承。

c、里面的属性全部被final修,方法也是被final修饰,只是省略不写,因为子类没有必要重写。

d、外界不可以实例化对象

e、发现Math类中所有的属性和方法都被static修饰,那么不能创建对象去调用,只能通过类名.属性名、类名.方法名去调用。

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/143301294