final关键字

final关键字

一、final关键字的概述

​ 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写.那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的.为了避免这种随意的改写的情况,java提供了final关键字,用于修改不可改变内容.

  • final :不可改变.可以修饰类,方法和变量.
二、fianl关键字的用法
2.1fianl用于修饰类

格式如下:

final class 类名 {
  
}
注意事项 :被final修饰的类是不能被继承的,但内容可以修改.
2.2fianl用于修饰成员方法

格式如下:

权限修饰符 final 返回值类型 方法名 (参数列表) {
    
}
注意事项 :被final修饰的方法不能被重写,重写时就会编译报错.
2.3fianl用于修饰局部变量
  1. 局部变量——基本类型

    基本类型的局部变量,被final修饰后,只能赋值一次,不能更改.代码如下:

    public class FinalDemo1 {
        public static void main(String[] args) {
            // 声明变量,使用final修饰
            final int a;
            // 第一次赋值 
            a = 10;
            // 第二次赋值
            a = 20; // 报错,不可重新赋值
    
    
            // 声明变量,直接赋值,使用final修饰
            final int b = 10;
            // 第二次赋值
            b = 20; // 报错,不可重新赋值
        }
    }
    
    1. 局部变量——应用类型

      引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能在更改.但不影响内部的成员变量值的修改,代码如下:

      public class FinalDemo2 {
          public static void main(String[] args) {
              // 创建 User 对象
              final   User u = new User();
              // 创建 另一个 User对象
              u = new User(); // 报错,指向了新的对象,地址值改变。
      
              // 调用setName方法
              u.setName("张三"); // 可以修改
          }
      }
      
2.4fianl用于修饰成员变量

成员变量涉及到初始化的问题初始化方式有两种,只能二选一:

  • 显示初始化:

    public class User {
        final String USERNAME = "张三";
        private int age;
    }
    
  • 构造方法初始化:

    public class User {
        final String USERNAME ;
        private int age;
        public User(String username, int age) {
            this.USERNAME = username;
            this.age = age;
        }
    }
    
总结 :
  • final修饰的常量名称,一般都有书写规范,所有字母都大写.

    final:
          概述:关键字,用于修饰不可改变内容
          使用:final关键字可以修饰类,方法,变量
    final关键字修饰类:final修饰的类是不能被继承的
           格式:
                public final class 类名{
                    
                 }
    
    final关键字修饰方法:final修饰的方法是不能被重写的
           格式:
           权限修饰符 final 返回值类型 方法名(参数列表){
               
           }
    final关键字修饰变量:final修饰的变量,只能赋值一次,不能重复赋值
           格式:
             final 数据类型 变量名 =;   推荐
    
             final 数据类型 变量名;
                  变量名 =;
    ===========================================================
    
      // final关键字修饰局部变量: 基本数据类型,引用数据类型
      // final关键字修饰局部变量: 基本数据类型
            final int NUM = 10;
            // num = 20; 错误的,因为num被final修饰,变成了常量,常量只能赋值一次
            System.out.println(NUM);// 10
    
            final int NUM2;
            NUM2 = 100;
            // num2 = 1000; 错误的,因为num2被final修饰,变成了常量,常量只能赋值一次
            System.out.println(NUM2);//100
    
    ===========================================================
        
            // final关键字修饰局部变量: 引用数据类型
            final Animal anl = new Animal();
            anl.name = "jack";
            System.out.println(anl.name);// jack
            // anl = new Animal();错误的,因为anl被final修饰,变成了常量,常量只能赋值一次
            anl.name = "rose";
            System.out.println(anl.name);// rose
    
            // final关键字修饰成员变量:只能赋值一次
        	final int AGE = 18;// 直接赋值
        	final int WEIGHT;
        	String name;
    
            // 通过构造方式赋值: 一定要保证所有构造方法都可以给该常量赋值
        	public Dog(){
        	    this.WEIGHT = 30;
        	}
    	
        	public Dog(String name){
        	    this.WEIGHT = 30;
        	    this.name = name;
        	}
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值