static关键字 
 static修饰成员变量的特点
  1.static修饰的成员变量是随着类的加载而在方法区中的静态区开辟内存的;
  2.Static修饰的成员变量可以通过其所属的类的所有对象共享的;
  3.static修饰的成员变量可以通过类直接访问,也可以通过对象访问;

  缺点:占用内存时间过长
  静态的优先于非静态的开辟内存。

  静态成员变量与非静态成员变量
  1.静态成员变量通过类名,对象访问;
      非静态成员变量只能通过对象访问;
  2.存储位置
      静态成员变量随着类的加载在方法区的静态区中开辟内存;
      非静态成员变量随着对象的创建在堆中开辟内存
  3.存储数据
      静态成员变量存储的是其所属类的所有对象共享的数据;
      非静态成员变量存储的是其所属类的每个对象特有的数据;
  4生命周期
   静态成员变量是随着类的加载在方法区中开辟内存,程序退出时才释放内存;
   非静态成员变量是随着对象的创建在堆中开辟内存,当对象被垃圾回收时才释放内存;
  注意:无法从静态上下文中引用非静态。

 什么情况下需要把成员变量修饰为static
    当该成员的值需要被所有对象共享时
 什么情况下需要把成员方法修饰为static?
    当该方法没有直接用到所在类的任何非静态成员,因为静态的只能用静态的,只要方法用到了非静     态的就不能被修饰为static

  对象的初始化过程
  1.因为创建对象需要字节码,所有先加载  .class文件到方法区;
  2.有静态代码块执行静态代码;
  3.列堆中开辟内存;
  4.给成员变量赋值;
  5.如果有初始值,给成员变量赋初始值;
  6.执行构造代码块;
  7.执行构造函数;
  8.把对象在堆中的内存地址赋给栈中变量;