迅闻网
让更多人看到你

c语言static(static的作用和用法)

  c语言static

接上文:C言语的32个关键字
C言语static关键字的常见用法有三种:
用于部分变量的润饰符;
用于全局变量的润饰符;
用于函数的润饰符。
1、用于部分变量的润饰符
当static用于润饰部分变量时,通常是在某个函数体内,只能在该函数内被调用。
这样界说的变量通常被称为部分静态变量,它的值不会由于函数调用的完毕而被清除,当函数再次被调用时,它的值是上一次调用完毕后的值。
如下面这段代码所示,变量x是部分变量,变量y是静态部分变量。在调用函数后,变量x的值会被清除,而变量y的值则会被保留。多次调用该函数,变量x每次都会重新初始化,而变量y的值则不会。
静态部分变量的特性:
存储位置:处于静态存储区,当用static润饰部分变量的时分,它就改变了部分变量的存储位置,从本来的栈中存放改为静态存储区;
初始化操作:未经初始化的部分静态变量会被程序主动初始化为0(主动对象的值是恣意的,除非他被显现初始化);
效果域:为部分效果域,即当界说它的函数完毕的时分,效果域随之完毕(不能被拜访)。但是静态部分变量在脱离效果域之后,并没有被毁掉,而是依然保存在内存当中,直到程序完毕。
变量在内存的不同区域介绍
2、用于全局变量的润饰符
关键字static还可用于润饰全局变量,该变量在某一个文件中变量,但不归于任何一个函数内,这样的变量通常称为静态全局变量。
静态全局变量的存储位置、初始化操作同静态部分变量的特性,但其效果域有所不同:静态全局变量能够被该文件内的一切函数拜访,但不能被其它文件内的函数拜访。
3、用于函数的润饰符
关键字static还能够用于润饰一个函数,这样的函数称之为静态函数。
界说一个静态函数就是在函数的返回类型前加上static关键字。
静态函数的效果域仅限于本文件,不能被其它文件调用。

c

static的作用和用法

static表明“大局”或许“静态”的意思,用来润饰成员变量和成员办法,也可以构成静态static代码块,可是Java语言中没有大局变量的概念。被static润饰的成员变量和成员办法独立于该类的任何目标,也就是说,它不依赖类特定的实例,当声明它类的目标时,不生成static变量的副本,被类的一切实例同享。只要这个类被加载,Java虚拟机就能依据类名在运行时数据区的办法区内定找到他们。因而,static目标可以在它的任何目标创立之前拜访,无需引证任何目标。
有时你希望定义一个类成员,使它的运用完全独立于该类的任何目标。通常情况下,类成员有必要经过它的类的目标拜访,可是可以创立这样一个成员,它可以被它自己运用,而不用引证特定的实例。在成员的声明前面加上关键字static(静态的)就能创立这样的成员。假如一个成员被声明为static,它就可以在它的类的任何目标创立之前被拜访,而不用引证任何目标。你可以将办法和变量都声明为static。static成员的最常见的比如是main()。因为在程序开始履行时有必要调用main(),所以它被声明为static。
static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static润饰的变量,叫静态变量或类变量;另一种是没有被static润饰的变量,叫实例变量。两者的差异是:
关于静态变量在内存中只要一个复制(节省内存),JVM只为静态分配一次内存,在加载类的过程中完结静态变量的内存分配,可用类名直接拜访(便利),当然也可以经过目标来拜访(可是这是不推荐的)。
关于实例变量,每创立一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个复制,互不影响(灵活)。
所以一般在需求完成以下两个功用时运用静态变量:
在目标之间同享值时
便利拜访变量时
static成员是不能被其地点class创立的实例拜访的,对静态成员变量的拜访可经过类名来拜访,拜访语法为:类名.静态变量名
static办法
静态办法可以直接经过类名调用,任何的实例也都可以调用,因而静态办法中不能用this和super关键字,不能直接拜访所属类的实例变量和实例办法(就是不带static的成员变量和成员成员办法),只能拜访所属类的静态成员变量和成员办法,因为实例成员与特定的目标相关。static办法独立于任何实例,因而static办法有必要被完成,而不能是笼统的abstract。一般类内部的static办法是为了便利其它类对该办法的调用,它们仅能调用其他的static办法。静态办法是类内部的一类特别办法,只要在需求时才将对应的办法声明成静态的,一个类内部的办法一般都对错静态的。
留意:在一个static办法中引证任何实例变量都对错法的。对静态成员办法的调用语法为:类名.静态办法(参数列表…)。
staticfinal用来润饰成员变量和成员办法,可简略理解为“大局常量”。关于变量,表明表明一旦给值就不行修正,并且经过类名可以拜访。关于办法,表明不行掩盖,并且可以经过类名直接拜访。
static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,方位可以随便放,它不在任何的办法体内,JVM加载类时会履行这些静态的代码块,假如static代码块有多个,JVM将按照它们在类中呈现的先后顺序顺次履行它们,每个代码块只会被履行一次。
staticclass
Java中的类一般情况是不行以用static润饰类的,假如一定要用static润饰类的话,通常static润饰的是嵌套内部类。不过因为种种的原因,如运用上的限制等等因素,在实际工作顶用的并不是许多。可是并不是说其没有价值。在某些特别的情况下static内部类会很有价值,如在进行代码程序测试的时分,假如在每一个Java源文件中都设置一个主办法,那么会呈现许多额外的代码,而且最主要的是这段主程序的代码关于Java文件来说,只是一个方式,其自身并不需求这种主办法,但少了这个主办法又万万不行。在这种情况下,就可以将主办法写入到静态内部类中,从而不用为每个Java源文件都设置一个相似的主办法。这关于代码测试对错常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。
静态内部类的限制以及与一般内部类的差异:
静态内部类不能拜访外部类的非静态成员,它只能拜访外部类的静态成员,非静态内部类可以拜访外部类的静态和非静态成员。一般情况下,在非静态内部类中定义静态成员需同时有final关键词润饰,又鉴于静态办法无法用final润饰,故在非静态内部类中不定义静态成员变量与静态成员办法。可是在静态内部类中就可以定义静态的成员变量与成员办法。
静态内部类没有一个指向外部类的引证,而非静态内部类目标隐式地在外部类中保存了一个引证,指向创立它的外部类目标。一般的非静态内部类,可以随意的拜访外部类中的成员变量与成员办法,即便这些成员变量或办法被润饰为private。可是静态内部类不行以从静态内部类的目标中拜访外部类的非静态成员变量与成员办法。例如,在外部类中定义了两个变量,一个对错静态的变量,一个是静态的变量,那么在静态内部类中,无论在成员办法内部仍是在其他当地,都只可以引证外部类中的静态的变量,而不行以拜访非静态的变量。
静态内部类创立时不需求将静态内部类的实例绑定在外部类的实例上。通常情况下,在一个类中创立成员内部类的时分,有一个强制性的规则,即非静态内部类的实例一定要绑定在外部类的实例中。也就是说,在创立非静态内部类之前要先在外部类中要使用new关键字来创立这个内部类的目标。但在创立静态内部类的时分,不需求绑定在外部类的实例上,也就是说,要在一个外部类中定义一个静态的内部类,不需求使用关键字new来创立内部类的实例。

未经允许不得转载:迅闻网 » c语言static(static的作用和用法)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页