static修饰符
被static修饰的变量称为 静态 变量(类变量);
被static修饰的方法称为 静态 方法;
被static修饰的代码块被称为静态代码块;当java虚拟机加载类时,就先行该代码块;
特点:
a可通过类名直接访问
b被static修饰的的变量会在栈和堆之外创建一个静态空间,不手动销毁它是一直存在的;
c在实例方法内不允许创建 静态变量,只能在类中创建;
//定义中都说了,只有全局变量才能被static修饰
类的成员变量可分为:
实例变量: 没有被static修饰的
备注:什么叫实例;例如我们定义一个 int a ;其中 a就叫做这个类的实例;
静态变量: 被static修饰的变量;
特点(实例变量):
(1)在内存中有 多个拷贝,互不影响;
(2) 不能被静态方法访问
特点(静态变量):
(1)在内存中 只有一个拷贝,不论作何修改都会改变它这唯一的变量;
(2) 可以在实例方法和静态方法中直接被访问;在其它类中可以通过类名来访问;
注:如果类的实例都包含有一个 相同的常量属性,
我们就可以将这个属性定义为 静态常量属性,
从而 节省空间使用;
所以,除了final这些不变的常量,
最好不要用过多的static,不然容易出bug;
特点(静态方法):
(1)静态方法中不能使用this和spuer
解释:this代表本类对象,super代表父类对象,但是static方法调用static变量的,是不需要对象的;
(2) 不可以直接访问所属类的实例变量和实例方法(3) 可以直接访问类中的静态变量和静态方法
(4)必须被实现
特点(实例方法):
(1)可直接访问所属类的 实例变量和 实例方法、 静态变量、 静态方法
解释:
被static修饰的变量在内存中就只有一个备份,所以不论任何操作都会改变这个变量的值;
static变量
类成员变量包括
类变量(静态变量)
a被static修饰的变量
b在内存中只有一个拷贝
c类内部,可以在任何方法内直接访问静态变量
d在其它类中可以通过类名直接访问,不需要创建对象
实例变量
a没有被static修饰的变量
b每创建 一次变量就会为实例变量分配一次内存;实例变量可以在内存中有多个拷贝,互不影响
被static修饰的变量和方法在其他类中调用时不用创建对象直接可以用类名.方法和变量就可以实现
static final;实例常量
静态方法:可以直接通过类名访问
a静态方法中不可以使用this和super
b不能直接访问所属类的实例变量和实例方法
c可以直接访问静态变量和静态方法
实例方法:通过实例访问
a可以直接访问所属类的静态变量,静态方法,实例变量和实例方法
静态方法必须被实现
main就是最常用的实例方法