static静态修饰符 使用static修饰符修饰的成员变量,常量和成员方法称为静态变量、常量和方法,它们统称为静态成员,归整个类所有,不依赖类的特定实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就可以根据类名在运行时数据区的方法区找到它们。 类的加载是指把类的.class文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 A静态变量 实际上类的成员变量可以分为两种;静态变量(类变量),指被static修饰的成员变量;实例变量,指没有被static修饰的成员变量 对于静态变量,运行时,Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。再类的内部,可以在任何方法内访问静态变量;在其他类中,可以通过类名访问该类中的静态变量 对于实例变量,每创建一个实例,Java虚拟机就会为实例变量分配一次内存,在类的内部,可以在非静态方法中直接访问实例变量;在本类的静态方法或其他类中则需要通过类的实例对象进行访问 B静态方法 成员方法也可以分两种:静态方法(类方法),指被static修饰的成员方法;实例方法,指没有被static修饰的成员方法 静态方法与实例方法的区别: *静态方法不需要通过它所属的类的任何实例就可以被调用,因此在静态方法中不能使用this关键字和super关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。 *在实例方法中可以直接访问所属类的静态变量,静态方法,实例变量和实例方法。 C.静态代码块 指java类中的static{}代码块,主要用于初始化类,为类的静态变量赋值初始值。 静态代码块类似于一个方法,但它不可以存在于任何方法体中 Java虚拟机在加载类时会执行静态代码块,如果类中包含多个静态代码块,则java虚拟机将它们在类中出现的顺序依次执行它们,每个静态代码块只会被执行一次。 静态代码块与静态方法一样,不能直接访问类的实例变量和实例方法,而需要通过类的实例对象来访问。 static (静态)关键字 ●static的优点 1.对对象的共享数据提供单独空间的存储,节省空间, 没有必要每–个对象都存储一份 2.可以直接被类名调用,不用在堆内存创建对象 ●static的弊端 1.访问出现局限性。 (静态虽好,但只能访问静态)