有关static关键字的探究
static为编程语言中的一个关键字,是一种修饰符,既可以修饰变量也可以修饰方法
在类中,用static声明的成员变量为静态成员变量,也称之为类变量,类变量的生命周期和类相同,在整个应用程序执行期间都有效。
这里要强调一下:
-
static修饰的成员变量和方法,从属于类
-
普通变量和方法从属于对象
-
静态方法不能调用非静态成员,编译会报错
static关键字的用途
一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。
显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能
java中的static
关键字主要用于内存管理。我们可以应用java static
关键字在变量,方法,块和嵌套类中。 static
关键字属于类,而不是类的实例。
静态(static
)可以是:
- 变量(也称为类变量)
- 方法(也称为类方法)
- 代码块
- 嵌套类
类的静态变量是类的一种属性,与对象无关,因此类的静态变量可以被该类定义的所有对象共享,属于所有对象的公共属性,这也是静态变量的优点:它能使得程序存储器高效,节省内存,对于多个对象都需要使用的数据,我们定义完类的静态变量之后就无需在每个对象都分配一个空间去储存该数据。
静态变量和非静态变量的区别:
-
静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化
-
非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
static的注意事项
1.首先在java语法中与c/c++语言不同的是static关键字是不会改变变量或者方法的作用域,在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字。
2.在java中关键字this和super是不能在静态上下文中使用
3.主方法mian为静态方法,这是因为对象不需要调用静态方法,如果它是非静态方法,jvm首先要创建对象,然后调用main()方法,这将导致额外的内存分配的问题。
4.在java语法中static是不允许用来修饰局部变量,无论是方法中的变量还是形参,局部变量中唯一合法的修饰符为final
5.对于静态方法,在静态方法中定义的变量都是静态变量,静态方法只能访问静态成员
6.静态方法只能访问静态成员和变量无法方位非静态的,而非静态的方法二者都可以访问