08. 特性修饰符——final
1、final定义:
·final用于声明属性,方法,形参和类
(1)属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。
public class Demo {
//final修饰属性必须要赋初值
public final int a = 1;
public final int b ;
public Demo() {
//如果被final修饰的属性,没有被初始化,那么就必须在构造器中初始化
b = 0;
//初始化后的final属性不能再被修改
//a = 100;
}
}
(2)方法:定义必须有实现代码,并且子类里不可被覆盖。
//类:动物
public abstract class Animal {
//抽象方法,不允许final修饰
// public abstract void eat();
//具体方法,最终方法
public final void run() {
}
public void fun() {
}
}
public class Dog extends Animal{
//父类中的final方法不能被子类重写
// public final void run() {
//
// }
//父类的非final方法可以被子类重写
public void fun() {
super.fun();
}
}
(3)类:不能定义为抽象类或者是接口,不可被继承。
//抽象类上不允许使用final修饰
public abstract class Demo {
}
//接口不允许final修饰
public interface FlyAble {
}
//类:树叶,叶类,不能再被继承
public final class Leaf {
}
//class A extends Leaf{
//
//}
(4)形参:方法体内不允许被修改。
public class Demo {
public void fun(final int a , final int b ) {
//形参用final修饰,那么在该方法内不允许被修改
// a=1;
// b=2;
System.out.println( a );
System.out.println( b );
//局部变量,final修饰的只能赋值一次
final int c ;
c=1;
//c=2;
}
}
(5)常量(用static 和 final 同时修饰的属性)
public class MyMath {
//常量,属性,变量
public static final double PI = 3.14;
public static final double LIGHT_SPEED = 30.0;
}
2、对变量和常量的总结
(1)按作用域区分
·在类中声明的变量或常量叫属性,或者叫成员变量。
·在方法中声明的变量叫局部变量,或者临时变量。
·属性可以使用四种权限修饰符,局部变量不可以
·属性可以使用static修饰,局部变量不可以。
·属性可以使用final修饰,局部变量也可以
·属性的生命周期很长,随着类的加载或者创建对象被初始化,直到没有对象引用才回收。
·局部变量生命周期很短,执行某个方法时临时被初始化,方法解时被回收。
·如果局部变量与属性重名,则遵守就近原则,可以使用this区分。
·属性可以在整个类中被使用,局部变量只在当前方法中使用。
·属性都有默认的初始化值,如引用类型都是null,整型是0。局部变量不被自动初始化,必须手动初始化。