final关键字
一、final关键字的概述
学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写.那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的.为了避免这种随意的改写的情况,java提供了final关键字,用于修改不可改变内容.
- final :不可改变.可以修饰类,方法和变量.
二、fianl关键字的用法
2.1fianl用于修饰类
格式如下:
final class 类名 {
}
讯享网
注意事项 :被final修饰的类是不能被继承的,但内容可以修改.
2.2fianl用于修饰成员方法
格式如下:
讯享网权限修饰符 final 返回值类型 方法名 (参数列表) {
}
注意事项 :被final修饰的方法不能被重写,重写时就会编译报错.
2.3fianl用于修饰局部变量
- 局部变量——基本类型
基本类型的局部变量,被
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; // 报错,不可重新赋值 } }- 局部变量——应用类型
引用类型的局部变量,被
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; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/50108.html