final + static + final state

final:

final可以修饰:属性,方法,类,局部变量(方法中的变量)

     final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。

     final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。

     final修饰的属性表明是一个常数(创建后不能被修改)。

     final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承。


 static:

static可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类)

     static修饰的属性的初始化在编译期(类加载的时候),初始化后能改变。

     static修饰的属性所有对象都只有一个值。

     static修饰的属性强调它们只有一个。

     static修饰的属性、方法、代码段跟该类的具体对象无关,不创建对象也能调用static修饰的属性、方法等

     static和“this、super”势不两立,static跟具体对象无关,而this、super正好跟具体对象有关。

     static不可以修饰局部变量。

 

final static:

static final和final static没什么区别,一般static写在前面。

static修饰的属性强调它们只有一个,final修饰的属性表明是一个常数(创建后不能被修改)。static final修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问。

static final也可以修饰方法,表示该方法不能重写,可以在不new对象的情况下调用。

1).只用final修饰情况:

       例如:  final long CURRENT_TIME=System.currentTimeMillis();

       默认情况下,定义的常量是在对象建立的时候被初始化。如果在建立常量时,直接赋一个固定的值,而不是通过其他对象或者函数来赋值,那么这个常量的值就是恒定不变的,即在多个对象中值也是相同的。但是如果在给常量赋值的时候,采用的是一些函数或者对象  (如生成随机数的Random对象),那么每次建立对象时其给常量的初始化值就有可能不同。可见,使用final的Java常量定义并不是恒定不变的。

    2).使用static+final修饰情况:

       例如:static final long CURRENT_TIME=System.currentTimeMillis();

       这个是一个静态的概念。即当利用这个关键字来修饰一个变量的时候,在创建对象之前就会为这个变量在内存中创建一个存储空间。以后创建对对象如果需要用到这个静态变量,那么就会共享这一个变量的存储空间。也就是说,在创建对象的时候,如果用到这个变量,那么系统不会为其再分配一个存储空间,而只是将这个内存存储空间的地址赋值给他。如此做的好处就是可以让多个对象采用相同的初始变量。当需要改变多个对象中变量值的时候,只需要改变一次即可。从这个特性上来说,其跟常量的作用比较类似。不过其并不能够取代常量的作用


一般在Java中定义常量的时候,都还是会用static final,例如

     public static final float PI = 3.14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值