java,final修饰引用类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java,final修饰引用类型?相关的知识,希望对你有一定的参考价值。

怎么理解:final修饰引用类型,是引用不能改变,而引用指向的内容是可以改变的。
请举个代码的例子。谢谢。

final修饰的引用类型,引用不可以改变,但是它所指向的对象的内容可以改变

看下面的例子,stu1的指向是不可以改变的,但对象的信息我们可以改变

public class FinalEx

public static void main(String args[])

final Student stu1=new Student(22,"Tom");
Student stu2=new Student(25,"Jerry");
//stu1=stu2;//出错,stu1指向的是new Student(22,"Tom")对象,不能改变
System.out.println("stu1的name:"+stu1.sname+" stu1的age:"+stu1.sage);
stu1.setSname("Jerry");
stu1.setSage(25);
System.out.println("stu1的name:"+stu1.sname+" stu1的age:"+stu1.sage);//这是stu1指向的对象发生了改变


class Student

String sname;
int sage;
public Student(int sage,String sname)

this.sage=sage;
this.sname=sname;

public void setSname(String sname)

this.sname=sname;

public void setSage(int sage)

this.sage=sage;

参考技术A final String a="df";
a="dff";//这时a指向另一个对象了 也就是引用改变了 a被final修饰 所以肯定出现错了
要把final 去掉了 就可以通过了
参考技术B 就是说引用变量的地址不变,而它指向的内容可以改变

java的final用法

java的final是一个非常灵活的存在,它可以在三个地方使用:类、变量、方法。

类:

final用在类上面的话相当于C#中的sealed的用法。就是避免其他类的继承。

变量:

当final用在变量上面的时候相当于C#的const修饰符,就是说,当final修饰的是一个值类型的话,这个值类型的值就不能改变了,修饰的是一个引用类型的话,这个变量就不能再引用其他对象了。

方法:

当final修饰方法的时候,如果存在继承的关系,那么被final修饰的方法则不能在子类中被覆盖。这一点和C#的virtual和override很相似,但是C#中的方法默认情况下是不virtual的。java的方法默认是virtual的。

以上是关于java,final修饰引用类型?的主要内容,如果未能解决你的问题,请参考以下文章

Java中final修饰参数的作用

Java中的final关键字

Java中final有啥用

java 中的 final 关键字都有哪些用法

JAVA中final关键字的作用

java的final用法