Java基础_Final关键字
Final
final关键字
-
final 是java语言中的一个关键字。
-
final表示最终的,不可变的。
-
final可以修饰变量以及方法,还有类等。
-
final修饰的局部变量,一旦赋值不能重新赋值。
-
final修饰的方法无法被覆盖,被重写
-
final修饰的类无法继承。
《提示》final控制不了能不能调用的问题。final管的是啥?
final修饰的表示最后的,不能变的,不能改的。重点【精辟: final修饰的变量,只能赋一次值。】
package com.mike.test; public class Test { public static void main(String[] args) { Person p1 = new Person(20); System.out.println(p1.age); //======================================================== //代码不管怎么变化,p也是一一个变量。( 只不过这里它有一个特殊的名字:引用) final Person p= new Person(30) ; //p = new Person (30) ;//会报错,无法重新赋新的地址 } } class Person{ int age; public Person() { } public Person (int age) { this.age = age; } }
final修饰引用
-
final修饰的变量,如果这个变量是一个"引用"会怎样? ? ? ?
- 《重点》final修饰的变量只能赋一次值
- "引用"是不是一个变量呢???是。
-
final修饰的引用:
该引用只能指向1个对象,并且它只能永远指向该对象并且在该方法执行过程中,该引用指向该对象之后,该对象不会被垃圾回收器回收。
直到当方法结束,才会释放空间。
虽然final的引用指向对象A后,不能再重新指向对象B。
但是对象A内部的数据可以被修改。 -
你是否还记得:实例变量如果没有手动赋值的话,系统会赋默认值。
- 结论:final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值。
-
实例变量在什么时候赋值(初始化) ?
- 构造方法执行的过程中赋值。(new的时候赋值)
-
final修饰的实例变量一般添加static修饰。(节省内存)
实例变量既然使用final修饰了,说明该实例变量值不会随着对象的变化而变化。
该实例变量前面应该添加: static关键字,变为静态的,存储在方法区。 -
终极结论:
- static final联合修饰的变量称为''常量”。
- 常量名建议全部大写,每个单词之间采用下划线衔接。
-
常量:实际上常量和静态变量一样,区别在于:常量的值不能变。
-
常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。
package com.mike.test; public class Test { public static void main(String[] args) { } } class User{ //实例变量 //编译器报错 //final int age ; //实例变量 //可以,因为程序员手动赋初始值了。 final double height = 1.8; //实例变量 final double weight; //构造方法 public User() { //这个weight = 80;是赶在构造器赋默认值之前赋值的,编译器就会认为你已经赋初始值了 this.weight = 80; //系统赋默认值是在这个时候,weight = 0; } }
总之:final修饰的东西都是不能变的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通