吴一尘 2017-06-20 04:11 采纳率: 80%
浏览 992
已采纳

final关键字的一些问题。

class Mydate{
}
public class FinalTest {
final int i;
final Mydate md;
FinalTest(){
i=4;
md=new Mydate();
}
public static void main(String args[]){
FinalTest ft=new FinalTest();
// ft.md=new Mydate(); --------这里我的引用并没有改变啊为什么出错?
我引用不还是Mydate的对象吗?引用改变到底是什么意思?
我在finaltest类中将md改为private mydate md;编译就能通过。private
不是默认的设置为final吗?
或者我将ft.md改为mydate.md编译也能通过。 = =
理解不到位请各位大神指点迷津!!谢过!!
}
}

  • 写回答

6条回答 默认 最新

  • 杨jun坚 2017-06-20 07:22
    关注

    首先,只有private方法都隐式指定为final,而变量没有这个说法,别混淆了。
    final修饰基本类型时,final使数值不改变。
    final修饰对象引用时,final使引用恒定不变,一旦被初始化指向一个对象,就无法再把引用指向另一个对象,就像你已经在构造函数中为引用指定一个对象了,所以再次修改时报错。
    但是对象的属性可以修改,看代码

     class Mydate{
        private int i=1;
    
        public int getI() {
            return i;
        }
    
        public void setI(int i) {
            this.i = i;
        }
    
    }
    public class FinalTest {
        final int i;
        final Mydate md;
        FinalTest(){
            i=4;
            md=new Mydate();//引用已经被初始化指向一个对象
            }
        public static void main(String args[]){
            FinalTest ft=new FinalTest();
            System.out.println(ft.md.getI());//i=1
            ft.md.setI(2);
            System.out.println(ft.md.getI());//i=2
            //ft.md=new Mydate();//无法修改引用指向另一个对象。
            }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题