static 属性 可以由类名直接调用。
static 定义之后,可以理解为全局变量。
例如:
class Preson{ static String name = "AAAAA"; public void info() { System.out.println(this.name); } } public class static01 { public static void main(String[] args) { // TODO Auto-generated method stub ////////////修改前////////////////////////////// Preson preson01 = new Preson(); Preson preson02 = new Preson(); Preson preson03 = new Preson(); preson01.info(); preson02.info(); preson03.info(); preson03.name = "BBBBBBB"; /////////////////修改后////////////////////// preson01.info(); preson02.info(); preson03.info(); } }
输出:
AAAAA
AAAAA
AAAAA
BBBBBBB
BBBBBBB
BBBBBBB
多个实例化,只修改其中一个,其余所有的都被修改了,说明此属性是所有对象所共享的。
每个对象都拥有各自的堆栈空间,堆栈控件保存各自对象的属性,但是static 声明之后,是保存在全局数据区之中了,上面的对象都指向了全局数据区的同一个内容,所以一个修改了之后,所有对象的内容都变化。最好用,”类名称.属性“ 的形式调用。不要用 实例化的对象直接修改。
static 也可以用来声明方法,声明之后 可以由 《类名称.方法》 的方式直接调用,但是注意:
注意:
使用static 方法 不能调用非 static 的属性或方法。因为非static 的属性或方法只有实例化之后才会产生,而static 属性或方法,可以不实例化直接调用。
static 相关应用:
1、可以用来统计一个类产生了多少个对象,因为在对象实例化的时候,都会有个构造方法。
class static应用类{ static int number = 0; public static应用类() { number++; } } public class static应用 { public static void main(String[] args) { // TODO Auto-generated method stub new static应用类(); new static应用类(); new static应用类(); System.out.println(static应用类.number);//输出3
} }
JAVA 中有4个内存区域:
栈内存:可以保存对象的名称(保存访问堆内存的地址)
堆内存:保存每个对象的具体属性。
全局数据区:保存static 类型的属性。(共同有用的)
全局代码区:保存所有方法的定义。