A. 面向过程:

1. 静态全局变量:在全局变量前,加上关键词static,该变量就被定义成为一个静态全局变量。

1.1. 特点: 

      |该变量在全局数据区分配内存;

      |未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);

      |静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

      |静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:

      代码区 //low address全局数据区堆区栈区 //high address

      |静态全局变量不能被其它文件所用,其它文件中可以定义相同名字的变量,不会发生冲突;

2. 静态局部变量:在局部变量前,加上关键词static,该变量就被定义成为一个静态局部变量。

2.1. 特点:

      |该变量在全局数据区分配内存;

      |静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;

      |静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

      |它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
 

3. 静态函数:在函数的返回类型前加上static关键字,函数即被定义为静态函数。只能在声明它的文件中可见。

3.1 特点: 

      |静态函数不能被其它文件所用;

        |其他文件中可以定义相同名字的函数,不会发生冲突。

B.面向对象(类中的static关键字)

1. 静态数据成员:在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。

1.1 特点:

      |静态数据成员存储在全局数据区,静态数据成员定义时要分配空间,所以不能在类声明中定义;

      |静态数据成员和普通数据成员一样遵从public,protected,private访问规则;

      |如果静态数据成员的访问权限允许的话(即public的成员),可在程序中引用静态数据成员;

      |静态数据成员必须在类定义体的外部定义。不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义的时候进行初始化。

      ps:特殊的整型 const static 成员

        一般而言,类的static成员,像普通数据成员一样,不能再类的定义体种初始化。相反,static数据成员通常在定义体中进行初始化。

        只要初始化式是一个常量表达式,整型congst static 数据成员就可以在类的定义体中进行定义。

2. 静态成员函数:与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是为某一个类的具体对象服务。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。

2.1 特点:

      |static成员函数不能声明为const;

      |出现在类体外的函数定义不能指定关键字static;

      |静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

      |非静态成员函数可以任意地访问静态成员函数和静态数据成员;

      |静态成员函数不能访问非静态成员函数和非静态数据成员;

      |由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

      |调用静态成员函数,可以用成员访问操作符(.)和(->;)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:Myclass::GetSum()

      

关键字 static的更多相关文章

  1. C++ 不能在类体外指定关键字static

    C++ static 函数的问题 近日读 C++ primer 中static 一章 , 有这么一句话, “静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const  ...

  2. Java关键字--static

    在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variable ...

  3. Java之关键字static和final的使用

    static 在Java中声明属性.方法时,可使用关键字static来修饰. 1.static变量       按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或 ...

  4. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  5. JAVA基础知识(2)--关键字static的使用

    在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...

  6. C语言关键字static的绝妙用途

    为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是变量还是关键字, ...

  7. C/C++中关键字static的用法及作用

    本文将主要从static在C和C++共有的作用及C++特有的作用两个方面进行解析. 在C和C++中共有的作用 隐藏(对变量.函数均可) 当同时编译多个文件时,所有未加static前缀的全局变量或全局函 ...

  8. Java开发笔记(五十五)关键字static的用法

    前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...

  9. Java 关键字 static

    关键字static作用如下: 1. 为某个基本数据类型或对象分配单一的存储空间. 2. 实现某个属性或方法与类关联.在类被加载后类名可以直接调用静态成员方法(下面简称静态方法)或者访问静态成员变量(下 ...

随机推荐

  1. 向linux内核加入系统调用新老内核比較

    2.6内核 1>改动linux-source-2.6.31/kernel/sys.c文件,在文件末尾加入系统响应函数.函数实现例如以下: asmlinkage int sys_mycall(in ...

  2. session销毁

    session.invalidate(),session.invalidate的销毁是把这个session所带的用户彻底的销毁,这个session跟用户已经紧密联合在一起,所以就一起销毁了,这样就算换 ...

  3. phonegap platform add ios 出错的问题

    在Mac上新安装的Phonegap,版本3.3-0.18.0. 本来创建项目后按教程: http://docs.phonegap.com/en/edge/guide_platforms_ios_ind ...

  4. 关于Service常驻内存不被清理的解决方法.

    众所周知, Service是跑后台的. 但是有些Rom厂商把一键清理做的真是太好用了, 以至于一键清理变成了一种习惯, Service已经变的不再是Service了. 那为什么像诸如360, 微信, ...

  5. debian7安装oracle11g

    1,安装必须包 apt-get install gcc g++  make binutils libc6 libc6-dev libstdc++6 libstdc++5 rpm gawk alien ...

  6. KMeans聚类 K值以及初始类簇中心点的选取 转

    本文主要基于Anand Rajaraman和Jeffrey David Ullman合著,王斌翻译的<大数据-互联网大规模数据挖掘与分布式处理>一书. KMeans算法是最常用的聚类算法, ...

  7. vi/vim使用进阶: 剑不离手 – quickfix

    转载:http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/ 本节所用命令的帮助入口: :help quickfix :he ...

  8. 小白日记15:kali渗透测试之弱点扫描-漏扫三招、漏洞管理、CVE、CVSS、NVD

    发现漏洞 弱点发现方法: 1.基于端口服务扫描结果版本信息,比对其是否为最新版本,若不是则去其 官网查看其补丁列表,然后去逐个尝试,但是此法弊端很大,因为各种端口应用比较多,造成耗时大. 2.搜索已公 ...

  9. org.apache.hadoop.fs-PositionedReadable

    package org.apache.hadoop.fs; import java.io.*; import org.apache.hadoop.fs.*; /** Stream that permi ...

  10. Miaomiao's Geometry

    HDU 4932  Bestcoder Problem Description There are N point on X-axis . Miaomiao would like to cover t ...