Final关键字
1.定义:
1.访问修饰符+final+数据类型+变量名=初始值
2.访问修饰符+final+返回值类型+方法名(形参)
3.final+class+类名
2.作用:
1.final 修饰成员属性或局部变量,则其变为常量,其值只读
2.final 修饰成员方法,该方法不能被子类进行重写,但仍会被继承
3.final 修饰类,该类不允许其他类进行继承,但仍可以实例化对象
4.final 配合static 使用不会导致类信息的加载
3.细节:
1.final修饰的变量为常量,其名称全部大写,且单词间用_间隔
2.final修饰的变量必须进行初始化:
1.普通变量:
1.在定义是初始化
2.在普通代码块中初始化
3.在构造器中初始化
2.静态变量:
1.在定义是初始化
2.在静态代码块中初始化
3.static 和 final 搭配使用,不会导致类信息加载(重点!!!)
4.final可以修饰形参,因为函数调用时参数必须给值
static 和 final 配合使用不会导致类信息加载
public class FinalUse {
public static void main(String[] args) {
System.out.println(Temp01.test);
}
}
class Temp01{
public static String test="静态成员属性";
static {
System.out.println("类信息被加载!!!");
}
}
//执行结果:
//类信息被加载!!!
//静态成员属性
public class FinalUse {
public static void main(String[] args) {
System.out.println(Temp01.test);
}
}
class Temp01{
public static final String test="静态成员属性";
static {
System.out.println("类信息被加载!!!");
}
}
//执行结果:
//静态成员属性
final修饰常量
public class FinalUse02 {
public static void main(String[] args) {
Temp02 temp02 = new Temp02(300);
// temp02.CONST_VAR01=400;
// Cannot assign a value to final variable 'CONST_VAR01'
// 不允许被赋值,为只读
}
}
final class Temp02{
public final int CONST_VAR01=100;
public final int CONST_VAR02;
public final int CONST_VAR03;
//静态成员常量
public static final int CONST_STA01=10; //定义时赋值
public static final int CONST_STA02;
static{
CONST_STA02=20;
//在静态代码块中赋值
}
{
//在代码块中对常量进行初始化
CONST_VAR02=200;
}
public Temp02(int test){
CONST_VAR03=test;
//在构造器中进行初始化
}
}
final修饰方法及类
public class FinalUse02 {
public static void main(String[] args) {
Temp03 temp03 = new Temp03();
temp03.speak();
//方法不能被重写但仍会有继承关系
}
}
//class Temp03 extends Temp02{
// Cannot inherit from final 'review07.Temp02'
// final修饰的类不允许被继承
//}
class Temp03{
public final void speak(){
System.out.println("speak hellow!!!");
}
}
class Temp04 extends Temp03{
// public void speak(){ }
// speak()' cannot override 'speak()' in 'review07.Temp03'; overridden method is final
//final 修饰的方法子类不能进行重写,但仍任会被继承
}