java中 static 表示静态 final表示常量?怎么使用的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中 static 表示静态 final表示常量?怎么使用的相关的知识,希望对你有一定的参考价值。

1.static 静态的。
a) 使用此修饰符修饰的属性,其生命周期与类的生命周期相同。相对的没有使用此修饰符修饰的属性,生命周期与此类的某个实例的生命周期相同。也就意味着当,此类被卸载时,static变量才会被销毁。
b) 使用此修饰符修饰的方法,可以直接使用类名.方法名的方式调用,相对的,没有使用此修饰符修饰的方法,只能通过实例名.方法名的方式调用。(对于实例方法和静态方法在微观上的区别,还不是很理解,希望会的同学予以补全)
2.final 不可变的,使用此修饰符修饰的变量,值不可以重复赋值。也就意味着这时一个值不可变的变量,也就是常亮。
参考技术A

final表示不可以改变的常量,

具体的如下:

Static与Final

1. Static关键字

在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。

1.1 static变量

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

1.2 静态方法

静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联。
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

1.3 static代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经”准备好了”,也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。

2. Final关键字

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

2.1 修饰类

当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

2.2 修饰方法

下面这段话摘自《Java编程思想》第四版第143页:

“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

因此,只有在想明确禁止该方法在子类中被覆盖的情况下,才将方法设置为final的。

注:类的private方法会隐式地被指定为final方法。

2.3 修饰变量(成员变量和局部变量)

修饰变量是final用得最多的地方。

final变量的基本语法:

  • 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改
  • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象

2.4 final对程序执行效率的影响

这个在jvm机制中可见到一些影响,但提升程序执行效率首先应该更多的从算法复杂度、业务流程合理性、软件架构合理性以及后期运行时环境调优上着手,而仅从某种语法内部运行机制上打主意意义不大。但static对程序性能有显著影响。

以上是关于java中 static 表示静态 final表示常量?怎么使用的的主要内容,如果未能解决你的问题,请参考以下文章

Java中Static关键字和Final关键字

Static与Final

java中静态类和动态类的区别的啥?

final与static关键字的区别?(skycto JEEditor)

java中static与final关键字归纳总结

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量