在一个类中定义的变量叫做实例变量,定义多个类就有多个变量。现在有一种情况,每个类都具有一个相同的实例变量,例如,一个游戏角色类,都有生命值这个变量,现在需要100个角色,呢么就需要new100个角色,每个对象里面都保存一份实例属性,显然浪费内存,这时候就需要使用静态变量。

静态变量在类加载的时候初始化,不需要创建对象,内存就开辟了,它存储在方法区内存当中,而不是想实例变量那样存储在每个对象里面!

public class Role {
	// 静态变量
	static int live = 100;
	
	String name;
	
	// 构造方法
	public Role() {
		
	}
	
	public Role(String name) {
		this.name = name;
	}
	
}
public class StaticTest {
	public static void main(String[] args){
		Role r = new Role("鳄鱼君");
		
		System.out.println("角色生命值:" + Role.live + "角色名称:" + r.name);
		
	}

}

static关键字

什么时候成员变量声明为实例变量? 所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化(不同对象的这个属性具体的值不同) 什么时候实例变量声明为静态变量? 所有对象都有这个属性,但是所有对象的这个属性的值是一样的,可以定义为静态变量,节省内存开销 java语言中的static关键字
  1. static翻译为静态
  2. static修饰的方法是静态方法
  3. static修饰的变量是静态变量
  4. 所有static修饰的元素都成为静态的,都可以使用“类名.”方式范围跟,当然也可以用“引用.”方式访问,但是这种方式就属于脱裤子放屁,多此一举!

静态代码块

可以使用static关键字来定义“静态代码块”,语法格式:
static {
    java语句;
}
静态代码块在类加载的时候执行,并且只执行一次,在一个类中可以编写多个:
public class StaticTest {
	static {
		System.out.println("1------》");
	}
	static {
		System.out.println("2------》");
	}
	static {
		System.out.println("3------》");
	}
	public static void main(String[] args){
		System.out.println("main begin");
		
	}

}

实例语句块

实例语句块/代码快,可以编写多个,遵循自上而下的顺序依次执行,在构造方法之前执行,构造方法依次执行。
public class StaticTest {
	// 构造方法
	public StaticTest(){
		System.out.println("缺省构造器");
	}
	
	// 实例代码块
	{
		System.out.println("1------》");
	}
	{
		System.out.println("2------》");
	}
	{
		System.out.println("3------》");
	}
	
	public static void main(String[] args){
		new StaticTest();
		System.out.println("main begin");
		new StaticTest();
	}

}

发表评论