首页 > 代码库 > java第五章:面向对象(oop)之 static关键字

java第五章:面向对象(oop)之 static关键字

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: 
1、首先加载要创建对象的类及其直接与间接父类。
2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。
3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。
4、最后执行构造器,构造器执行完毕,对象生成。
上面四段话意思就是静态变量(全局变量)创建时间要早于new对象(成员变量)的时间。
所以静态的方法,不能访问非静态的属性和方法;反之,非静态的方法可以访问静态的属性和方法;

static 关键字:可以修饰方法(静态方法)或者成员变量(全局变量),不能用来修饰局部变量(只能用final修饰)
全局变量和成员变量的区别:
1.在内存中的保存位置不同:成员变量保存在堆中,全局变量保存在方法区;
2.保存份数不同:成员变量,每new出来一份都要分配空间,保存多份;全局变量只保存一份;
3.创建时间不同:成员变量,new的时候,才创建;全局变量,类加载时就创建;
4.访问方式不用: 成员变量,用对象名.属性,对象名.方法名();,可以使用this关键字;
全局变量,推荐 用类名.属性,类名.方法名();当然也可以
用对象名.属性,对象名.方法名(),可以使用this关键字;

(普通)代码块:单独在{}中写的代码;new的时候,才会被执行,不new不执行,new几次执行几次;
执行顺序在构造器之前

(static)代码块:static{} 类加载的时候就会被执行,不new也执行。只会执行1次。
 执行顺序:静态代码块>普通代码块>构造器>普通方法或静态方法;
静态的方法或者代码块,只能访问静态的成员变量,不能访问非静态的属性和方法;
反之,非静态的方法或者代码块可以访问的静态或非静态属性和方法;
 

java第五章:面向对象(oop)之 static关键字