java,final修饰引用类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java,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修饰引用类型?的主要内容,如果未能解决你的问题,请参考以下文章