莱莱 发表于 2023-12-18 17:40:29

final关键字的作用

目录

[*]1.修饰类时
[*]2.修饰方法时
[*]3.修饰属性和局部变量时

[*]3.1修饰局部变量时
[*]3.2修饰成员变量时
[*]3.3修饰类变量时

[*]4.final与普通变量的区别
[*]5.final用于引用

1.修饰类时

1.只能是公共的(public)就算不写也是public
2.被final修饰的类不可以被继承
//前面默认有个public 写不写都行
final class A{
   
}2.修饰方法时

1.方法不能不能覆盖
2.被final修饰的方法,JVM会尝试将其内联,以提高运行效率
3.修饰属性和局部变量时

3.1修饰局部变量时

1.要赋值
2.不能被改变
public class Test01 {
    public static void main(String[] args) {
      go();
    }
    public static void go(){
//      方式一:初始化的时候赋值
//      final int age = 10;
      
//      方式二:先初始化后赋值
      final int age;
      age = 10;
      System.out.println(age);
    }

}3.2修饰成员变量时

1.必须在系统赋默认值之前赋值
2.不可更改
public class Test01 {
//    1.写法一报错未在创建时声明对象
//    final int a;
//    a =10;

//    2.写法二正确
//    final int a = 10;

//    3.写法三正确
    final int a;
//    赶在系统赋默认值之前赋值就行,系统赋默认值在构造方法执行的时候
    public Test01() {
      this.a =0;
    }
}final String name = "qy";
//报错
name = "ym";

final Object obj = new Object();
//报错
obj = new Object();3.3修饰类变量时

1.与static结合使用修饰的变量是常量
2.常量要符合命名规范,全部大写,可以用下划线连接
3.被final修饰的常量,在编译阶段会存入常量池中
public class Main {
//    final 放前放后都一样
//    final static double PI = 3.1415926;
    static final double PI = 3.1415926;
}4.final与普通变量的区别

public class Test1 {
    public static void main(String[] args){
      String a = "hello2";
      final String b = "hello";
      String d = "hello";
      String c = b + 2;
      String e = d + 2;
      System.out.println((a == c));
      System.out.println((a == e));
    }
}

//结果
//true
//falsepublic class Test2 {
    public static void main(String[] args){
      String a = "hello2";
      final String b = getHello();
      String c = b + 2;
      System.out.println((a == c));

    }
   
    public static String getHello() {
      return "hello";
    }
}
//结果
//false通过上面两个例子,我们可以发现在Test1中被final修饰的变量在进行字符串串接的时候,地址没变,但是在Test2中通过方法调用后就变了,也就是说间接的赋值会改变地址。
5.final用于引用

如果修饰引用,那么表示引用不可变,引用指向的内容可变。
public class Test02 {
    public static void main(String[] args) {
      final Student stu = new Student("小芊",18);
      //可以修改里面的值
      stu.setName("芊嵛");

//      不能再new
//      stu = new Student("ff",5);
    }
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: final关键字的作用