栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

final的作用?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

final的作用?

1.修饰类:表示类不可被继承

这篇文章写了这个知识点的具体应用:怎么声明一个不可被继承的类?这个类的应用场景?

2.修饰方法:表示方法不可被子类重写,但可以重载

3.修饰变量:表示一旦被赋值就无法更改它的值

(1)修饰成员变量

如果final修饰的时类变量(静态变量),只能在静态代码块或声明时赋初始值。

//静态代码块赋值
public class Test3 {
    public static final int a;
    static {
        a=10;
    }
}
//声明时赋值
class Test4{
    public static final int a=10;
}

如果修饰的是成员变量,可以在非静态代码块,构造器或者声明的时候赋初值。

//声明时赋值
public class Test5 {
    public final int b=10;
}
//非静态代码块赋值
class Test6{
    public final  int b;
    {
        b=10;
    }
}
//构造器赋值
class Test7{
    public final int b;
    public Test7(){
        b=10;
    }
}
(2)修饰局部变量,可以在声明时赋值,也可以后面再使用之前赋值(但只能赋值一次)
public class Test9 {
    public void func(){
        final int a=10;
        //a=20; 会报错
        final int b;
        b=20;
//        b=30; 会报错
    }
}
(3)修饰基本类型和引用类型的区别

修饰基本类型时,基本类型的值不能变;修饰引用类型时,引用的对象不能发送改变,但对象的值可以发生改变

public class Test10 {
    public static void main(String[] args) {
        final int a=10;
//        a=20; 会报错,基本类型的值不能改变
        
        
        final int[] arr={1,2,3};
//        arr={2,3,4}; 会报错,引用的对象不能改变
        arr[0]=2; //对象的值可以改变
    }
}
4.局部内部类为什么只能访问被final修饰的局部变量?
public class OutClass {

 public int k=10;
 public void func1( final int a) {
     final int b=10;
     //局部内部类
     class InClass {
         public void func() {
             System.out.println(a);
             System.out.println(b);
             System.out.println(k);
         }
     }
 }
}

如上述代码,两个类(外部类和内部类)其实是同一级别的,都会生成一个.class文件。当外部类被销毁时,外部类的局部变量也会被销毁,但是局部内部类是不一定被销毁的,它还在使用这外部类的变量(如a)。为了解决这个问题,就将外部类的局部变量,复制成为内部类的成员变量,哪怕外部类被销毁了,内部类也可以正常使用这些变量。但又有了一个新的问题,当内部类中的成员变量被改变时,外部类的局部变量是感知不到的,但又要让它们俩相等,怎么办?那就是强制局部变量被final修饰,复制到内部类以后值也不能被修改。(注意:其实上面代码把final去掉也不会报错,因为在java1.8以后会隐式的将被局部内部类访问的变量用final修饰,不信的话你可以在局部内部类中给该变量重新赋值,会报关于final的错误的)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026802.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号