static关键字 static修饰成员变量的特点 1.static修饰的成员变量是随着类的加载而在方法区中的静态区开辟内存的; 2.Static修饰的成员变量可以通过其所属的类的所有对象共享的; 3.static修饰的成员变量可以通过类直接访问,也可以通过对象访问; 缺点:占用内存时间过长 静态的优先于非静态的开辟内存。 静态成员变量与非静态成员变量 1.静态成员变量通过类名,对象访问; 非静态成员变量只能通过对象访问; 2.存储位置 静态成员变量随着类的加载在方法区的静态区中开辟内存; 非静态成员变量随着对象的创建在堆中开辟内存 3.存储数据 静态成员变量存储的是其所属类的所有对象共享的数据; 非静态成员变量存储的是其所属类的每个对象特有的数据; 4生命周期 静态成员变量是随着类的加载在方法区中开辟内存,程序退出时才释放内存; 非静态成员变量是随着对象的创建在堆中开辟内存,当对象被垃圾回收时才释放内存; 注意:无法从静态上下文中引用非静态。 什么情况下需要把成员变量修饰为static 当该成员的值需要被所有对象共享时 什么情况下需要把成员方法修饰为static? 当该方法没有直接用到所在类的任何非静态成员,因为静态的只能用静态的,只要方法用到了非静 态的就不能被修饰为static 对象的初始化过程 1.因为创建对象需要字节码,所有先加载 .class文件到方法区; 2.有静态代码块执行静态代码; 3.列堆中开辟内存; 4.给成员变量赋值; 5.如果有初始值,给成员变量赋初始值; 6.执行构造代码块; 7.执行构造函数; 8.把对象在堆中的内存地址赋给栈中变量;