黑马程序员技术交流社区
标题: 静态分析笔记 [打印本页]
作者: songyu 时间: 2015-5-20 21:11
标题: 静态分析笔记
静态:
1、Static是一个修饰符,用于修饰成员(成员变量、成员方法)
2、当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用
格式:类名.静态成员
3、Static特点:
<1>、随着类的加载而加载。也就是说:静态会随着类的消失而消失,说明它生命周期最长。
<2>、优先于对象存在。明确一点:静态先存在对象后存在。
<3>被所有对象共享,
<4>可以被类名所调用
4、实例变量和类变量的区别:
<1>存在位置:
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
<2>生命周期:
类变量的生命周期最长,随着类的消失而消失。
实例变量的生命周期随着对象的消失而消失。
5、静态使用注意事项:
<1>静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态
<2>静态方法中不可以定义this,super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
<3>主函数是静态的。
6、静态的利弊端:
利处:<1>对对象的共享数据尽享单独空间的存储,节省空间,没有必要每一个对象都存储一份。
<2>可以直接被类名调用。
弊端:<1>生命周期过长。
<2>访问出现局限性。(静态虽好,但只能访问静态)
主函数:
1、定义:是一个特殊的函数,作为程序入口,可以被jvm调用。
2、涵义:
public:代表着该函数的访问权限是最大的。
static:代表主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
(String[]args):函数的参数,参数类型是一个数组,该数组的元素是字符串。字符串类型数组。
3、主函数是固定格式的,被jvm识别。
什么时候使用静态:
1、什么时候定义静态变量(类变量)呢?
<1>当对象中出现共享数据时,该数据被静态所修饰。
<2>对象中特有的数据要定义成非静态存在于堆内存中。
2、什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象特有数据),则可定义成静态函数。
静态的应用:
<1>每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。
<2>将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象。
为了更严谨,强制让该类不能建立对象,可以通过将构造函数私有化完成(private)
(默认构造函数的权限是随着类的变化而变化的)
静态代码块:
格式:
static
{
静态代码块中的执行语句
}
特点:随着类的加载而执行,只执行一次并优先于主函数。用于给类进行初始化。
Persong p=new Person("XX",XX);
这句话执行了:
<1>因为new用到了Person.class,所以会先找到Persong.class文件并加载到内存中
<2>执行该类中的static代码块,如果有的话,给Person.class类进行初始化
<3>在堆内存中开辟空间,分配内存地址
<4>在堆内存中建立对象特有属性,并进行默认初始化
<5>对属性进行初始化
<6>对对象进行构造代码块初始化
<7>对对象进行对应的构造函数初始化
<8>将内存地址赋给栈内存中的p变量
作者: L番茄X 时间: 2015-5-20 21:27
我今天也学了这个,我就记得一个句话,静态只可以访问静态,而非静态就可以访问静态和非静态.
作者: songyu 时间: 2015-5-20 21:35
嗯,还记住静态方法的应用及调用方式.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |