08. 特性修饰符——final
2024-04-09 17:00:26  阅读数 379

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。局部变量不被自动初始化,必须手动初始化。