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修饰的东西都是不能变的