java 中 static 关键字的使用方法
文章目录
static 概述
在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,只要程序在运行,那么这块内存就会一直存在;
static 定义的类成员 可以直接访问
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是用static修饰的成员可以通过类名加“.”进行直接访问.
static 独立于类的其他成员 任何实例共享
static修饰的成员变量和成员方法独立于该类的任何对象;
它不依赖类特定的实例,被类的所有实例共享;
只要这个类被加载,Java虚拟机就能根据类名和static成员名就能找到他们;
static对象可以在它的任何对象创建之前访问,无需引用任何对象.
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量.
private 修饰 static 变量
static变量前可以有private修饰,这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,也可以在非静态成员方法中使用,
but ,不能在其他类中通过类名来直接引用,这一点很重要;
这和 private是访问权限限定有关.
static 变量
被static修饰的变量,叫静态变量或类变量;
没有被static修饰的变量,叫实例变量,它不属于类,属于类的实例.
静态变量优点
对于静态变量在内存中只有一个拷贝,JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问静态变量,当然也可以通过对象来访问(不推荐这种方法访问静态变量)
static 方法
static定义的静态方法可以直接通过类名调用,任何的实例也可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法;
注意:静态方法不能直接访问不带static的成员变量和不带static的成员方法;
所以: static定义的静态方法中只能访问所属类的静态成员变量和成员方法;
static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次.
静态代码块和静态方法的区别
静态代码块是自动执行的;
静态方法是被调用的时候才执行的.
静态方法:如果我们在程序编写的时候需要一个不实例化对象就可以调用的方法,我们就可以使用静态方法,具体实现是在方法前面加上static .
static和final一起用
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问!
注意:
对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象.