首页 > 其他分享 >final

final

时间:2023-01-13 01:11:07浏览次数:37  
标签:int void 局部变量 public 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

标签:int,void,局部变量,public,final,赋值
From: https://www.cnblogs.com/zhuyilong/p/17048383.html

相关文章

  • idea var 总是有final
    转自:https://blog.csdn.net/Grantr/article/details/119184963解决idea中快捷键ctrl+alt+v多生成的finalctrl+alt+v快捷键的作用是自动提取并补充对应类型的变量名,如 ......
  • 【转】FinalShell Linux版安装及教程
      转自:http://www.hostbuf.com/t/1059.htmlFinalShellLinux版安装及教程wntr 2017-06-1917:20  65月前  590984 阅读 0 回复 FinalShell ......
  • final的作用
    final即最终的修饰类:表示该类不可被继承修饰方法:表示该方法不可以被子类重写,但可重载修饰变量:则该变量只能一次性赋值,即一旦赋值就不可以更改它的值修饰类变量:只能在......
  • Java final关键字修饰对象
    结论:final修饰对象,对象的内容可变,引用不可变。final应用于类、方法和变量、对象时意义是不同的,但本质是一样的,都表示不可改变。但是修饰对象时要注意:因为对象是引用类......
  • Java String为什么被设计为final的
    文章目录String被设计为不可变是因为String对象是缓存在字符串池中的,因此这些缓存的字符串是可以被多个客户端访问的,如果一个客户端的访问影响了别的客户端的行为,这样就存在......
  • abstract; final; 属性赋值的先后顺序; 静态变量与实例变量的区别; instanceof关键字的使
    abstract注意事项。abstract不能修饰:private,static,final这些方法。abstract抽象要重写----》用来子类继承实现方法的1、abstract不能用来修饰属性、构造器等构造器不能......
  • final
    finalfinal修饰属性--常量,初始化后不可修改final修饰方法--不能被子类重写final修饰类--不能被继承final不能修饰构造方法--构造方法本身就本能被重写,加了只会......
  • C++用finally函数实现当前函数运行结束自动执行一段代码
    我们的需求可能有这样的需求,fun(){    xx;    xx;    xx;    //希望在这里能自动执行一段设定好的代码,实现一些自动清除啥啥啥的操作}核心......
  • day09-JAVAOOP匿名类和方法传参final包static关键字
    day09-JAVAOOP课程目标1.【理解】什么是内部类2.【掌握】匿名内部类3.【掌握】引用数据类型作为方法的参数4.【理解】final关键字的使用5.【理解】包的定义及使......
  • buuoj-pwn-ciscn_2019_final_10
    buuoj-pwn-ciscn_2019_final_10总结题目分析glibcubuntu18.04,对应GLIBC2.27,对于这题,我们知道doublefree没检查就行逆向分析关键函数一第一个箭头所指没法绕过,随便......