Java:“final” 修饰词

"final"

目录

        1."final"修饰词的作用是什么?

2.为什么在构造器内我们无法使用”static"修饰词且无法为静态属性赋值?

3.为什么构造器不能被"final"或"static"修饰?

4.为什么我们通常将"static final"共同使用而不是单独使用"static"?

5.为什么抽象方法不能被"final"或"static"或"private"修饰


1."final"修饰词的作用是什么?

  • 修饰类属性或局部变量,使类属性或局部变量无法被修改;
  • 修饰方法,使方法无法被重写;
  • 修饰类,使类无法被继承;     
  • 修饰引用数据类型变量,final 保证这个引用类型变量所引用的地址不会发生改变,但该对象的值是可以改变的。

2.为什么在构造器内我们无法使用”static"修饰词且无法为静态属性赋值?

  • 因为在类的创建过程中,静态属性的初始化优先于构造的调用,即按时间顺序来的话,当该类静态属性加载完毕时,该类的构造器一定还没有被调用,此时在构造器对静态属性进行的操作会被跳过,有点亡羊补牢的意思,所以编译器会直接报错。

3.为什么构造器不能被"final"或"static"修饰?

  • 构造器不时通过继承得到的,所以没有必要把它声明为final的。(没必要让构造器无法被继承)
  • 构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。(构造器的调用往往会产生一个新的对象,而我们用"static"修饰一个方法的原因是想跳过对象的建立而调用对象的方法,把构造器看作方法的话,"static"没有意义。)

     关于构造器的修饰词问题可参考以下链接 

https://www.cnblogs.com/hdu-2010/p/4110106.htmlhttps://www.cnblogs.com/hdu-2010/p/4110106.html

4.为什么我们通常将"static final"共同使用而不是单独使用"static"?

  • 调用被"static final"共同修饰的类属性时(类方法不适用),不会导致类的加载!(底层编译器做了优化处理)
  • public class Main {
        public static void main(String[] args) {
            System.out.println(test.i);
        }
    }
    
    class test{
        static final int i=666;
        static {
            System.out.println("糟糕静态代码块被调用啦");
        }
    
    }

    输出结果为 666

5.为什么抽象方法不能被"final"或"static"或"private"修饰

  • 抽象方法需要子类继承实现所以不能修饰为"final"或"private";
  • 抽象方法未被实现,定义为"static"毫无意义;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YHanJG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值