zoukankan      html  css  js  c++  java
  • Java 关键字:final

    一、final 关键字

      1、概述

        子类继承父类后,可以改写父类内容,如方法重写。但是我们却不能随意的去继承 API 中提供的类,然后改写其内容。

        这是因为 Java  提供了 final 关键字,用于修饰不可改变内容。

      2、作用范围

        在Java中声明类、 变量方法时, 可使用关键字 final 来修饰,表示“最终的” 。

        (1)final 标记的类不能被继承。

          被 final 修饰的类,不能被继承。提高安全性, 提高程序的可读性。

          可以用来修饰 外部类 和 内部类

        (2)final 标记的方法不能被子类重写。

           final 可以用来修饰静态方法 和 非静态方法,不能被重写,可以被继承。

        (3)final 标记的变量(成员变量或局部变量)即称为常量。

          final 可以用来修饰变量(成员变量(类变量、实例变量)、局部变量)

    二、修饰类

      1、使用方式

        定义格式:

    final class 类名 {
       //  方法体
    }
    

        像 Java 中的 String,Math,System,Scanner 这些类都是声明为 final 类,目的就是供使用,而不让随意改变其内容。

      2、注意点

        final 修饰的类一定不能被继承。

    三、修饰方法

      1、使用方式

        定义格式:

    其他修饰符 final 返回值类型 方法名(参数列表){
        //方法体
    }

      2、注意点

        (1)如果重写 final 修饰的方法,编译会报错;

        (2)对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。

    四、修饰变量

      1、修饰成员变量

        final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化

        ① 显示初始化

    1 public class User {
    2     final String USERNAME = "张三";
    3     private int age;
    4 }

        ② 代码块中初始化

    1 public class User {
    2     final String USERNAME;
    3        {
    4           USERNAME = "张三";
    5        }
    6     private int age;
    7 }

        ③ 构造器中初始化

    1 public class User {
    2     final String USERNAME ;
    3     private int age;
    4     public User(String username, int age) {
    5         this.USERNAME = username;
    6         this.age = age;
    7     }
    8 }

            注意:

        (1)对于final的成员变量,要么使用直接赋值,要么通过代码块或者构造方法赋值。三者选其一。

        (2)必须保证类当中所有重载的构造方法,都最终会对 final 的成员变量进行赋值。

        (3)static final 用来修饰属性:全局常量

      2、修饰局部变量

        (1)修饰局部变量——基本数据类型

            基本类型的局部变量,被 final 修饰后,只能赋值一次,不能再更改。

            Demo:

     1 public class FinalDemo1 {
     2     public static void main(String[] args) {
     3         // 声明变量,使用final修饰
     4         final int a;
     5         // 第一次赋值
     6         a = 10;
     7         // 第二次赋值
     8         a = 20; // 报错,不可重新赋值
     9         // 声明变量,直接赋值,使用final修饰
    10         final int b = 10;
    11         // 第二次赋值
    12         b = 20; // 报错,不可重新赋值
    13     }
    14 }

        (2)修饰局部变量——引用类型

          引用类型的局部变量,被 final 修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改

          Demo:

     1 public class FinalDemo2 {
     2     public static void main(String[] args) {
     3         // 创建 User 对象
     4         final User u = new User();
     5         // 创建 另一个 User对象
     6         u = new User(); // 报错,指向了新的对象,地址值改变。
     7         // 调用setName方法
     8         u.setName("张三"); // 可以修改
     9      }
    10 }

          注意:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

        Demo:

     1 public class Something {
     2     public static void main(String[] args) {
     3         Other o = new Other();
     4         new Something().addOne(o);
     5     }
     6     public void addOne(final Other o) {
     7         // o = new Other();   错误的 形参只能指向原来的对象,不能指向新的对象
     8         o.i++;
     9     }
    10 }
    11 class Other {
    12     public int i;
    13 }

      3、注意

       (1)被 final 修饰的常量名称,一般都有书写规范,所有字母都大写。

       (2)final 用来修饰变量:此时的"变量"就称为是一个常量。

        

    五、

  • 相关阅读:
    拥有最多糖果的孩子
    求1+2+…+n
    网络-中间代理
    Header中的Referer属性表示
    ios13.4post请求出现网错错误 network err
    10.8&10.10
    9.23&9.27
    9.16&9.19
    校内模拟赛划水报告(9.9,9.11)
    男人八题 划水题解
  • 原文地址:https://www.cnblogs.com/niujifei/p/13974238.html
Copyright © 2011-2022 走看看