第七十四课.static关键字-3

总结

实例变量和类变量的区别:

1,存放位置。

  类变量随着类的加载而存在于方法区中。

  实例变量随着对象的建立而存在于堆内存中。

2,生命周期:

  类变量生命周期最长,随着类的消失而消失。

  实例变量生命周期随着对象的消失而消失。

 

静态使用注意事项:

1,静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法,非静态方法既可以访问静态也可以访问非静态。(Java虚拟机(JVM)加载类时,就会执行该static,静态优先于其他产生对象产生)。

2,静态方法中不可定义this,super等关键字:(this:this代表当前对象,static于类加载的时候存在优先于实例对象的产生,static调用非静态时并未产生对象,所以this不代表任何对象为null,未进行初始化操作。)

3,主函数是静态方法。

 

静态有利有弊:

利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一格对象中都存储一份。可以直接被类名调用。

弊:生命周期过长,访问出现局限性(静态虽好,只能访问静态)

 

static和final一块用表示什么

1,static final用来修饰成员变量和成员方法,可简单理解为"全局常量"

2,对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

3,对于方法,表示不可覆盖,并且可以通过类名直接访问。

 

类成员变量:

static修饰:静态变量或类变量

无static修饰:实例变量

  静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存(方法区,共享区,数据区),在加载类的过程中完成静态变量的内存分配,可用类名.成员,当然也可以通过对象来访问(但是这是不推荐的,对象产生新的开辟内存空间,static优先于对象的产生,节省内存)。

  不能直接访问所属类的实例变量和实例方法

  static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

 

什么时候使用静态:

  因为静态修饰的内容有成员变量和函数。

  使用静态变量(类变量):当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。

使用静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

 

静态代码块:

  格式:

    static{

        静态代码块中的执行语句。

      }

特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化的。

注意:普通代码块如果写到方法之中,它就叫做构造代码块,每次实例化对象都会执行代码块中的代码(在构造方法之前执行),如果前面有static修饰,它就变成了静态代码块,不管用这个类去创造多少个实例,它只在第一次执行。

 

静态代码块在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法,构造代码块既可以访问静态也可以访问非静态。

 

猜你喜欢

转载自blog.csdn.net/qq_41917908/article/details/88209065