static(静态)关键字

两大作用

  • 为某特定数据类型对象分配单一的存储空间,而与创建对象的个数无关。
  • 实现某个方法或属性与类而不是对象关联在一起,也就是说在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。
    static主要有4种使用情况:成员变量,成员方法,代码块和内部类。

1.修饰成员(成员变量和成员方法)

  • 随着类的加载而加载(随着类的消失而消失),说明它的生命周期最长
  • 优先于对象存在(明确静态是先存在的,对象是后存在的)
  • 被所有对象所共享(节约空间)
  • 除了可以被对象调用外,还可以直接被类名调用
class man{
	String name = "zhangsan";//成员变量,实例变量
	static int age = 20;//静态成员变量,类变量
	/*
	public void show() {
		System.out.println(name);
	}
	*/
}

public class jingtai {

	public static void main(String[] args) {
		//man m = new man();
		//m.show();
		//System.out.println(m.name);//1.被对象调用
		System.out.println(man.age);//2.被类名调用
	}

}

实例变量和类变量的区别

存放位置 生命周期
实例变量 堆内存 实例变量生命周期随着对象的消失而消失
类变量 方法区 类变量的生命周期最长,随着类的消失而消失

2. static代码块(静态块)

3.内部类中的静态内部类


静态方法使用注意事项:

  1. static方法中不能使用thissuper关键字
  2. 不能调用非static方法,只能访问所属类的静态成员,因为当static方法被调用时,这个类的对象可能还没被创建,即使已经被创建了,也无法确定调用哪个对象的方法。同理,static方法也不能访问非static类型的变量。

静态的利与弊

  • 利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。可以直接被类名调用。
  • 弊端:生命周期过长。访问出现局限性(静态虽好,只能访问静态)

什么时候使用静态(两方面)

  • 什么时候定义静态(类)变量?
    当对象中出现共享数据时,该数据被静态所修饰;对象中的特有数据要定义成非静态存在于堆内存中

  • 什么时候定义静态方法?
    当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

你可能感兴趣的:(java基础,成员变量,类变量,实例变量,静态变量)