天天看点

static学习笔记(自用)

static学习日记(自用)

  1. static 静态变量 用于修饰成员变量和成员函数
  2. 当成员那被静态修饰后 就多了一个调用方式 除了可以被对象调用外 还可以直接被类名调用
  3. 类名.静态成员
               
  4. static特点:

    (1)随着类的加载而加载

    也就是说静态会随着类的消失而消失,说明他的生命周期最长,当Human类加载到内存中 country在内存中 而name则不在(因为只有创建对象之后 对象里面才有name)

    (2)优先于对象的存在

    明确:静态是先存在的 对象是后存在的

    (3)被所有对象共享

    (4)可以直接被类名所调用

class Human{
	private String name;//成员变量 实例变量
	static String coutry="CN";  //静态的成员变量 类变量
	//被static修饰之后 已经不再堆内存中了
	
	/*

	 * 为什么country可以用static修饰?
	 * 因为之后创造的每个人都是中国国籍,然而 每创建一个Human h=new Human();以及Human h1=new Human();
	 * 都会同时创建一个name和country,这样的话占用了内存空间
	 * 在使用static修饰之后  可以将country理解为被共享了  所有人共享一个country
	 * 然而每个人姓名都不同 所以不能用一个固定的“名字”  但是country可以
	 */

	public String getName() {
		return name;
	}

	public void setName(String name) {
		
		this.name = name;
		talk();
	}
	public static void talk(){
		System.out.println(name+" "+coutry);
	}
}
public class StaticDemo {
	public static void main(String[] args) {
		Human h=new Human();
		h.setName("wangwu");
		System.out.println("被对象调用 "+h.coutry);
		System.out.println("被类名调用 "+Human.coutry);
	}
}
           
static学习笔记(自用)

实例变量和类变量的区别

实例变量 类变量
实例变量随着对象的建立而存在于堆内存中 类变量随着实例的加载而存在于方法区中
实例变量的生命周期随着对象的消失而消失 类变量生命周期最长,随着类的消失而消失

静态使用注意事项

1.静态方法只能访问静态成员

在此例子中,human类在调用静态方法talk类时,静态方法talk要访问对象的name,但是在本例子中还未创建对象,所以name还没有被创建

非静态方法既可以访问静态也可以访问非静态

static学习笔记(自用)
static学习笔记(自用)

2.静态方法中不可以定义this、super关键字,因为静态优先于对象存在,所以不可以定义

静态优缺点

static学习笔记(自用)