JAVA中的final关键字

final关键字可以用在3个地方:

1,定义变量时

public final double radius;


表示声明了一个常量。常量一旦被初始化则不能再改变。对于基本类型来说其值不可变,对于对象来说,其引用不可变。

但是这里需要注意的是,虽然引用的对象不可变,但是引用的对象的内容是可变的。我们在下面会看到例子。

这里顺便8一句题外话:

String s = "abc";

s="123";

这是没有问题的,因为内存中的“abc”不可被修改,但是s可以指向另外一个字符串“123”。也就是说,所谓的String不可变,是指String指向的内容本身不能改变。

final String s = "abc";

s="123";

这样编译是不能通过的,因为final关键字限制了s的指向不能改变。

2,定义方法中的参数时这是我们常见的一种使用方法

public void testMethod(final int i, final String[] j){

}


这样做对于基本类型的变量没有什么实际意义。因为基本类型的变量在调用方法时是传值的,也就是说,你可以在方法中更改这个参数变量而不会影响到调用语句。

但对于对象变量,在传递时是传递其引用。看下面这个例子:

public class App {

public static void main(String[] args) {

int i = 5;

String[] j = {"Testing!"};

System.out.println(j);

App.testMethod(i, j);

System.out.println(j[0]);

}

public static void testMethod(int i, String[] j){

j[0]="111";

System.out.println(j);

}

}

输出:

[Ljava.lang.String;@de6ced
[Ljava.lang.String;@de6ced
111

可以发现,main方法中的jtestMethod中的j指向的是同一个对象。因此在testMethod中对j的修改会影响main中打印的结果。

此时如果改为下面的代码:

public static void testMethod(int i, final String[] j){

j[0]="111";

System.out.println(j);

}


会发现结果没有变化。因此final不能阻止在testMethod方法中修改对象的内容。

但如果代码变为一下则无法通过编译。

public static void testMethod(int i, final String[] j){

j = new String[100];

System.out.println(j);

}

相当于testMethod中新定义了一个对象j,且声明为final的,同时将传递进来的引用作为j的初值。因此之后就不能再修改j的引用了。

但不管怎么说,testMethod的参数int iString[] j都是重新定义的变量,和main里的变量没有关系。

3,将方法声明为final

意味着这个方法可以被继承,但是不能被子类覆盖。

4,将类声明为final

一个final类是无法被任何人继承的,这就意味着该类的设计被认为已经很完美,不需要任何的修改或扩展。对于final类中的成员,可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值