static关键字

1.可以修饰成员变量和成员方法


2.static关键字特点

   随着类的加载而加载

   优先于对象存在

   被类的所有对象共享

   这也是我们判断是否使用静态关键字的条件

   可以通过类名一直调用(不需要new)

3.static关键字注意事项

  在静态方法中是没有this关键字的

  静态方法只能访问静态的成员变量和静态的成员方法(优先于对象存在)

  要访问非静态方法需要new 以下。。。方法改进为静态后,就可以直接通过类名调用。



4.静态的内存图

静态的内容存在于方法区的静态区


5.静态变量和成员变量的区别

所属不同
    静态变量属于类,所以也称为为类变量
    成员变量属于对象,所以也称为实例变量(对象变量)
内存中位置不同
     静态变量存储于方法区的静态区
     成员变量存储于堆内存
内存出现时间不同
     静态变量随着类的加载而加载,随着类的消失而消失
     成员变量随着对象的创建而存在,随着对象的消失而消失
调用不同
    静态变量可以通过类名调用,也可以通过对象调用
    成员变量只能通过对象名调用



/*
	static关键字注意事项
		A:在静态方法中是没有this关键字的
			如何理解呢?
				静态是随着类的加载而加载,this是随着对象的创建而存在。
				静态比对象先存在。
		B:静态方法只能访问静态的成员变量和静态的成员方法
				静态方法:
					成员变量:只能访问静态变量
					成员方法:只能访问静态成员方法
				非静态方法:
					成员变量:可以是静态的,也可以是非静态的
					成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
			简单记:
				静态只能访问静态。
*/
class Teacher {
	public int num = 10;
	public static int num2 = 20;
	
	public void show() {
		System.out.println(num); //隐含的告诉你访问的是成员变量
		System.out.println(this.num); //明确的告诉你访问的是成员变量
		System.out.println(num2);
		
		//function();
		//function2();
	}
	
	public static void method() {
		//无法从静态上下文中引用非静态 变量 num
		//System.out.println(num);
		System.out.println(num2);
		
		//无法从静态上下文中引用非静态 方法 function()
		//function();
		function2();
	}
	
	public void function() {
	
	}
	
	public static void function2() {
	
	}
}

class TeacherDemo {
	public static void main(String[] args) {
		//创建对象
		Teacher t = new Teacher();
		t.show();
		System.out.println("------------");
		t.method();
	}
}


你可能感兴趣的:(java)