java笔记------static关键字
一、static关键字:
①由static修饰的成员变量和方法,从属于类,生命周期和类相同;
②普通变量和方法从属于对象,生命周期和对象相同;
③静态方法里面不能调用非静态方法;
④非静态方法里面可以调用静态方法;
⑤所有的静态变量和静态方法都可以通过对象去访问;
二、静态变量和成员变量:
①静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化;
②而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响;
三、static块(静态初始化块):
①static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
②静态初始化块的执行顺序是:先执行Object类的静态初始化块,再向下执行子类的静态初始化块,知道我们的类的静态初始化块为止;
③静态初始化块在构造方法执行前执行;
四、程序初始化的顺序
类的初始化过程也就是方法执行的过程 :
父类的静态变量-父类的静态代码块 -子类的静态变量-子类的静态代码块-父类的非静态变量-父类的非静态代码块-父类的构造函数 -子类的非静态变量-子类的非静态代码块-子类的构造函数.
规律:
①父类先于子类;
②静态的先于非静态的;
③变量先于代码块;
④成员变量优先于构造函数;
⑤类的静态变量和静态代码块的执行顺序是根据他们定义的顺序来的,优先级是平等的。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
补充java中参数传值机制知识:
方法中所有的参数都是“值传递”,也就是传递的是“值的副本”,所以副本改变不会影响原件。
基本数据类型参数的传值:
传递的是值的副本,副本改变不会影响原件。
应用类型参数的传值:
传递的是值的副本,但是引用类型指的是“对象的地址”,因此副本和原参数指的是同一个地址,改变副本指向的地址对象中的值也就意味着原参数指向的对象的值也发生了改变。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------