Java中final的用法

final的用法

JAVA中经常会见到final关键字,每次见到final感觉对它是既熟悉又陌生,因此觉得有必要总结一下final的用法。
final故名思意即最终、不可变。
final作为JAVA中的一个关键字,可以用来修饰类、方法和变量(局部变量和成员变量)。

一、修饰类
final修饰类时,表明这个类不能被继承,比如java中的String类及Integer等包装类。需要注意的是类中所有的方法都会被隐式的定义为final类型。

二、修饰方法

  1. final修饰的方法不可被重写,如果不希望子类重写父类的某种方法,就可以用final来修饰该方法。
  2. 类的private方法会被隐式的指定为final方法。
    因为父类的private方法在子类中是无法访问的,所以在子类中是无法重写这个方法的。如果在子类中定义一个与父类 private 方法有相同方法名、相同形参列表、相同返回值类型的方法,也不是方法重写,只是重新定义了一个新方法。而final修饰的方法不能被重写,所以父类的private方法就相当于final修饰的方法。
    因此上给父类的private方法加或不加final都是一样的,没有意义。

三、修饰变量
1.final修饰的变量可以分为基本数据类型和引用数据类型类型两种。
1)修饰基本数据类型变量的话,变量值在被初始化之后不能再被更改。

public class Test {
    public static void main(String[] args) {
        final int a = 10;
        a = 20; //更改final修饰的变量,会报错
    }
}

修饰形参,形参也不能被更改

public class Test{
    private static void method(final int a){
        a = 10;  //更改final修饰的形参,会报错
    }
}

2)修饰引用数据类型变量的话,引用不能再指向其他对象,不过对象的内容是可以更改的。

public class Test {
    int a = 10;

    public static void main(String[] args) {
        final Test t = new Test();
        Test t2 = new Test();
        t = t2;  //更改final修饰的对象,会报错
        t.a = 20; //可以修改对象的内容
    }
}

2.final修饰局部变量和成员变量时又有不同
1)修饰局部变量时必须在使用前就对这个变量进行一次赋值,可以直接在定义时赋值,也可以在后续代码中赋值。

public class FinalDemo{
	void Methond(){
		//定义的同时赋值
		final int a = 10;
		//没有在定义的同时赋值
		final int b;
		b = 20;
	}
}

3)修饰成员变量在定义的时候没有赋值的话这个变量被称为“空白final变量”,空白final变量必须在构造方法或者静态代码块中赋值。

public class FinalDemo{
	//定义时初始化
    final int a = 10;
    final int b;
    final static int c;
    //构造方法中赋值
    FinalDemo(){
        b = 20;
    }
    //静态代码块中赋值
    static {
        c = 30;
    }
}
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值