------- 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{},给类进行初始化
类加载的条件:必须使用到类中的成员,才算是执行了类的加载