`

黑马程序员——静态要点总结

 
阅读更多

  ------- android培训java培训、期待与您交流! ----------

  • 静态static

 1.主要用于修饰类的成员(成员函数,成员变量)

2.好处:代码上没区别,但当成员定义成static后,就可使其从对内存中独立出来,让其他对象共享,从而减少对内存空间的占用

3.当成员被定义成static后,就多了一种调用方式,除了可以通过对象调用,还可以直接通过类名.静态成员调用

4.经验:对于可变的我们把它定义为非静态,而不变的把它定义成静态的,让其他成员共享

 

静态的特点:

1,随着类的加载而加载(也就是说:随着类的消失而消失,说明他的生命周期最长

2.优先于对象而存在

3.被对象所共享

4.可以直接通过类名调用

 

类变量与成员变量的区别:

 * 1.存放位置

 *    类变量随着类的加载而存在于方法区(共享区)中,

 *    成员变量随着对象的创建而存在于堆内存中

 

 * 2.生命周期

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

 *    成员变量随着对象的消失而消失

 * 

 

静态的使用注意事项:

 *  1.静态方法只能访问静态成员(成员变量和成员方法),不能访问非静态成员

 *     原理:静态方法随着类的加载而加载,他优先于对象而存在,而非静态成员是随着对象的创建而存在,这时候对象还未创建,故不存在非静态成员,调用出错是必然的

 *    非静态方法既可以调用非静态的成员也可以调用静态成员

 *     原理:当我们在调用一个非静态方法必须创建一个类的对象,对象一旦存在,则非静态成员也就存在,故可以直接调用,而静态成员优先于对象而存在,当然可以之间调用!

 *  2.静态方法中不可以定义this,super关键字

 *      原理:因为在调用非静态成员时,对象都未创建,哪来的this,super?

 

 

静态有利有弊:

 *  利处:可以被对象所共享,单独开辟一个内存空间进行存储。

              可以直接通过类名直接调用。

 

 *  弊端:生命周期过长。

 *            访问受到限制(静态方法只能访问静态成员)

 

 

  • 静态什么时候用?

  *  要从两方面下手

  *      因为静态修饰的内容有成员变量(类变量)和成员函数

  *  1,什么时候定义静态变量?

  *      当变量中含有类对象的共享数据时,须把它定义为静态变量,从堆内存中独立出来,独立分配一个存储空间

  *  2.什么时候定义静态函数?

  *      当函数中不含有对象的特有数据(非静态数据)时,需把它定义为静态函数

     3.扩展

         当有多个类都需要调用同一个类的某些函数或变量时 ,可把这个类中的函数和变量都声明为静态的,让其他类进行共享,如:.net中的sqlhelper

 

 问题:虽然可以使用ArryTool工具类来完成对数据的操作,但出现了如下问题

    1,对象是用于封装数据的,但ArryTool并未封装有数据

    2.操作数组的每个方法中都没有用到ArrayTool对象的特有数据

解决办法:

   1. 可将该类中的方法都定义为静态的,通过类名.方法名来访问,但在调用时还是可以创建对象的,只是再次创建对象没意义罢了!

   2.为了使得程序更为严谨,可把其构造函数私有化,强制让该类不能创建对象!只能通过类名.方法名来访问

 

  • 代码块

1,静态代码块

特点:随着类的加载而执行,只执行一次 static{},给进行初始化

类加载的条件:必须使用到类中的成员,才算是执行了类的加载

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics