我是靠谱客的博主 坚强大米,最近开发中收集的这篇文章主要介绍final + static + final statefinal:  static: final static: ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是坚强大米为你收集整理的final + static + final statefinal:  static: final static: 的全部内容,希望文章能够帮你解决final + static + final statefinal:  static: final static: 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部