final和static

经常看到有人在定义常量时,比如:

// 使用日志框架定义一个logger时
private static final Logger logger = LoggerFactory.getLogger(BalaService.class);

// 定义常量时
public final static String SUCCESS_CODE = "200"; 

看别人这样写,自己也模仿着这样写,有时还记不住final static,其实是自己没有明白其真正的含义。
引用
http://www.cnblogs.com/dolphin0520/p/3736238.html
这篇讲final的博客中的一段代码:

public class Test {
    public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);
 
    }
}
 
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}

运行这段代码j的值是不变的,而i的值是变化的。
Java类中使用static修饰的,如static初始化代码块,static修饰的变量。Java类在初始化时优先初始化静态变量,静态初始化的变量保存在内存的全局区域,被这个类生成的对象所共享,关于内存的高深细节我现在也不是很明白,等后续跟进吧。

由上面的代码,j是类相关的变量,i是对象相关的变量。两次new MyClass() j 只会初始化一次,被MyClass生成的对象共享。i 会在一次new MyClass()时就初始化一次,所以 i 是变化的。

当使用static final去修饰一个变量时:

  • 期望是使用类名去访问这个变量,访问方便;
  • 使用这个变量时,类装载进JVM,只初始化一次,保存在内存的全局区域;
  • 可被多个对象实例共享;
  • final表示这个变量是个常量,不允许被改变。

关于static和final还有更多的细节,我只捡出工作中遇到的、有疑惑的部分,更多实际有趣的使用,还请你多多分享哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,633评论 18 399
  • static 修饰符 作用(静态的只能访问静态的)static表示静态的,可以用来修饰成员变量和方法,也可以形成静...
    正阳Android阅读 1,929评论 0 0
  • final称为常量,static final称为全局常量。 成员变量是随类初始化或对象初始化而初始化的。当类初始化...
    忘净空阅读 1,548评论 0 1
  • 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的...
    WilsonMing阅读 679评论 0 5
  • 一 那一封来自影子恋人的《不二情书》 你有在深夜里独自哭泣吗?你有对着无星的夜空喃喃自语吗?你有在波涛涌动的...
    周爱咨询阅读 722评论 1 6

友情链接更多精彩内容