码迷,mamicode.com
首页 > 其他好文 > 详细

static 和final 的区别

时间:2020-05-31 15:50:19      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:提高   str   基本数据类型   应用   类加载   基本数据   共享   有一个   额外   

static 和final 的区别

  • static
    • 修饰变量: 静态变量随着类加载时被完成初始化,内存中只有一个, 且JVM也只会为它分配一次内存,所有类共享静态变量
    • 修饰方法: 在类加载器的时候就存在,不依赖任何实例; static方法必须实现,不能用 abstract修饰
    • 修饰代码块: 在类加载完之后就会执行代码块中的内容
    • 父类静态代码块 -> 子类静态代码块 -> 父类非静态代码块 -> 父类构造方法 -> 子类非静态代码块 -> 子类构造方法
  • Final
    • 修饰变量:
      • 编译器常量: 类加载的过程完成初始化,编译后带入到任何计算式中,只能是基本类型
      • 运行时常量: 基本数据类型或引用数据类型。引用不可变,但引用的对象内容可变。
    • 修饰方法: 不能被继承,不能被子类修改
    • 修饰类: 不能被继承
    • 修饰形参: final 形参不可变

final 的好处

  • final 关键字提高了性能, JVM 和 Java 应用都会缓存 final 变量
  • final 变量可以安全的在多线程环境下进行共享, 而不需要额外的同步开销
  • 使用 final 关键字, JVM 会对方法、变量及类进行优化

static 的方法是否可以被覆盖?

? static 的方法不能被覆盖, 因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的, static 方法跟类的任何实例都相关,所以概念上不适用。

static 和final 的区别

标签:提高   str   基本数据类型   应用   类加载   基本数据   共享   有一个   额外   

原文地址:https://www.cnblogs.com/ytcxy/p/13018959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!