final

变量:一旦赋值不能更改

类:不能被继承

方法:可以重载不能重写

1.变量

(1) 修饰成员变量

类变量(被static修饰的变量):必须声明初始值或者在静态初始化块中指定初始值

成员变量:必须声明初始值或者在非静态代码块,构造器中赋值

复制代码
public class Student {
   final  static int b = 0;//在声明时就需要赋值,或者在静态代码块中赋值
/**  
    静态代码块中赋值
    static{
        b = 0;
    }
 */
    String name;
    //在声明时就需要赋值,或者在代码块中,或者构造器
    final int a = 1;
    /**
    代码块赋值
    final int a;
    {
       a =1;
    };
    构造器赋值
    iterator1(int a){
        this.a =1;
    }
   */
    // 基本数据类型 fianl 保证的是数值恒定不变
   // a =3;
}
复制代码

(2) 修饰基本数据类型和引用类型

基本数据类型:数值一旦初始化之后就不能更改;

引用数据类型:对其初始化之后,其引用恒定不变,不能在指向另一个对象,但引用的值是可以改变的。

复制代码
public class Student {
    final int a  = 1; //声明时必须赋值
    int age ;
    
    // a = 3; 数值恒定不变
     public  int b(final int age){
        //基本数据类型,只读不能修改
       // return  age++;
        return age;
     }
    public static void main(String[] args) {
        final  int [] age = {1,2,3};
        age[1] = 5; // 可以修改引用的值
        //age =null; 引用不可更改
        
        final  Student s = new Student();
        
        //s= null;  引用不可更改
    }
}
复制代码

(3) 修饰局部变量

系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,可以在定义时指定默认值(后面的代码不能对变量在赋值),也可以不指定默认值,而在后面的代码中赋初始值(仅一次)

复制代码
public class Student {
    int a ;//成员变量
    
    public    void setA() {
       final int b ;//局部变量只声明没有初始化,不会报错,与final无关
       b = 11; // 一定要在使用之前赋值
        // b =12; 不允许第二次赋值
    }
}
复制代码

2.方法

复制代码
public class Father {
    public  final  void setA(int a) {}
    // 可以进行重载
     public  void setA(int A,int B){}
}

public class Son extends Father{
    // 不可以重写
    //@Override
    //public  final  void setA(int a) {}
    public  void setA(int A,int B){}
    
    // 不需要继承
    public  void  b(final Father father){
         //无法在方法中更改参数引用指向的对象
         //Father = new Father();
     }
}
复制代码

局部内部类和匿名内部类只能访问局部final?

内部类和外部类是同一个等级,内部类不会因为方法的结束而销毁,但是外部类结束的时候,局部变量也就随之销毁,这就产生了问题,外部类结束时,内部类可能还没有结束(没有人引用时,才会死亡),这样的话,内部类调用的局部变量不存在。为了解决这个问题,我们就将局部变量复制一份给内部类,这样的话,局部变量随着外部类销毁时,内部类依旧可以调用他自己的局部变量。因此我们要保证,这两个局部变量必须保持不变,也就是把他们设置成final

3.类  

不能被继承

posted @   早日月薪五万  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示