1.final是java语言中的一个关键字,关键字都是小写的。
2.final表示最终的,不可变的。
3.final可以修饰变量以及方法,还有类等。
4.final修饰的局部变量?
final修饰的变量,只能赋值一次。(万变不离其宗)
局部变量是没有初始值的,必须手动赋值。
> int a = 0;
> a = 1;
> /*final修饰的变量,只能赋值一次
> final int a = 0;
> a = 1;(×)
> */
5.final修饰实例变量?
实例变量如果没有手动赋值,系统会默认赋值。
但是final修饰实例变量,必须手动赋初值。
在创建对象时,调用构造方法,实现实例变量的初始化。
构造方法执行的过程中赋值,也可在构造方法里提前赋值。(new的时候赋值)
int a;//实例变量默认赋值,a = 0;
final int a = 0;//final修饰的实例变量必须手动赋值
public class FinalTest01 {
public static void main(String[] args) {
Final f = new Final();
System.out.println(f.a);
}
}
class Final{
public Final() {
a = 47; //在构造方法中手动赋值也行
}
final int a;
}
6.final修饰的方法?
final修饰的方法,子类无法对父类的方法进行重写(override)
7.final修饰的类?
final修饰的类无法继承(inherit)(没有子孙,例如String类)
8.final控制不了能不能调用的问题,final管的是什么?
final修饰的表示最后的,不能变的,不能改的。
fina修饰的方法还是可以被调用,只是不能被重写。
9.final修饰的变量,如果这个变量是一个“引用”会怎样????
引用也是一个变量(引用数据类型),它是不过是个特殊的名字,引用里面存放的是一个地址。
这个地址指向堆内存中对象的地址,里面的地址不能改变。但是对象里面的数据可以被修改(实例变量)
该引用只能指向 1 个对象,并且它只能永远指向该对象,无法指向其他对象。
10.常量
static final 联合修饰的变量称为“常量 ”,建议常量全大写,用下划线连接单词。
解释:实例变量存储在堆内存中,一个对象一份,100个对象100份。既然都一样,这样就显得很浪费空间。说明final修饰的实例变量的值,不会随着对象的变化而变化,所以就没必要浪费空间,加上static关键字,变为静态的,存储在方法区里面。
实际上常量和静态变量一样,区别在于:
常量的值不能变。
常量(final static)和静态变量(static),都是存储在方法区,并且都是类加载时初始化。
java中static、final、static final的区别(转)