文章目录
- 面向对象的static关键字
面向对象的static关键字
之前提到局部变量主要存储在占内存区、成员变量(实例变量)存在于对内存区的对象之中,而今天学到的是存在于方法区内存中的静态变量。
- static
静态的
- static 可以用来修饰属性、方法
- static 修饰的属性属于这个类的所有。即有这个类创建的所有对象共用同一个 static 属性。既可以创建对象后通过 “对象名.static属性名” 的方式来访问。也可以在创建对象之前通过 “类名.static属性名” 的方式来访问。
- static 方法也可以通过 “
类名.static方法名
” 和 “对象名.static方法名
” 的方式来调用。 - static 代码块的用法比较特殊:
当类被载入的时候(类第一次被使用到的时候载入,例如:创建对象或直接访问 static 属性与方法)执行静态代码块,且只被执行一次,主要作用是实现 static 属性的初始化。
例:
public class static关键字 {
//静态属性
static String name = "defname";
//静态代码块
static{
name = "staticname";
System.out.println("excute static code block");
}
//方法
public static关键字(){
System.out.println("excute constructor");
}
/**
* @param args
*/
public static void main(String[]) {
// TODO Auto-generated method stub
System.out.println("excute main()");
new static关键字();
new static关键字();
new static关键字();
//调用属性
System.out.println(static关键字.name);
static关键字 s = new static关键字();
System.out.println(s.name);
}
}
结果:
excute static code block
excute main()
excute constructor
excute constructor
excute constructor
staticname
excute constructor//这句会显示是因为在创建对象的时候系统默认地调用了
//无参构造方法,并且这里编也写了无参构造方法,同上面三句
关于static修饰使用说明:
在方法内部定义的叫 “局部变量”,而不是静态变量,局部变量不能加static,包括 protected, private, public 这些也不能加。静态变量是定义在类中,方法体外面的。
如果你清楚JVM,应该知道局部变量是保存在栈中的,而静态变量保存于方法区,局部变量出了方法就被栈回收了,而静态变量不会,所以在局部变量前不能加static关键字。
返回顶部