java 参数用final_final参数 - java中的final关键字所起的作用解析

3、final参数

Java允许在函数参数列表中以声明的方式将参数指明为final,这使得在函数体当中修改参数引用所指向的对象变得不合法。比如说:

class Args

{

public void f(String s){System.out.println(s);}

}

public class ArgsFinal

{

void has(final Args arg)

{

//arg=new Args();不能修改final参数

arg.f(“with final”);

}

void dnthas(Args arg)

{

arg=new Args();//能修改final参数

arg.f(“without final”);

}

public static void main(String[] args)

{

ArgsFinal af=new ArgsFinal();

Args ar=new Args();

af.has(ar);//with final

af.dnthas(ar);//without final

}

}

4、final类

如果不想继承某个类,则可以考虑将此类设置成final的形式。即是说,程序员对该类不能做任何改动,同时也意味着它不会有子类。比如:

Class Base{ …}

Final Class SubClass{…}

//! Class Derived extends SubClass{…}不能由final类SubClass导出新类

需要注意的是,所有final类中的方法都隐式的final,他们是无法被覆盖或修改的,因此在其中的方法显示指明为final就显得有些多此一举了。

二、Java中的final关键字所起的作用

1、final修饰类中的属性或者变量

无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。

这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。

而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。

例如:类中有一个属性是final Person p=new Person(“name”); 那么你不能对p进行重新赋值,但是可以改变p里面属性的值,p.setName(‘newName’);

final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。

2、final修饰类中的方法

作用:可以被继承,但继承后不能被重写。

3、final修饰类

作用:类不可以被继承。

思考一个有趣的现象:

byte b1=1;

byte b2=3;

byte b3=b1+b2;//当程序执行到这一行的时候会出错,因为b1、b2可以自动转换成int类型的变量,运算时java虚拟机对它进行了转换,结果导致把一个int赋值给byte-----出错

如果对b1 b2加上final就不会出错

final byte b1=1;

final byte b2=3;

byte b3=b1+b2;//不会出错,相信你看了上面的解释就知道原因了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值