C\C++里面的static:

面向过程的static:

在c和c++面向过程的设计里,在全局变量前加上static关键字则可将该变量定义为一个静态全局变量,比如:

static int a;

那么c和c++中的静态全局变量有什么特点呢:

1、      变量在全局数据区分配内存(局部变量在栈内,通过new和malloc动态分配的变量在堆里);

2、      未经初始化的全局变量会被程序自动初始化为0;

3、      静态全局变量或函数在声明它的文件内是可见的,在文件外是不可见的;(可以起到保护作用)

讲讲第三点,如果我们只是在某个头文件中声明了一个普通的全局变量a,那么在引用这个头文件的时候,我们也可以通过extern关键字将这个变量引用到当前文件中;但是如果你在声明那个变量的时候就加了static关键字,那么全局变量a对于其他任何文件都是不可见的。

同样的,如果以static方式定义了一个函数,那么这个函数只在定义它的文件内可见。

面向对象的static:

在面向对象设计里面,使用static有几点要注意:

1、      静态成员函数的声明在类内要加上static关键字,但是在类外实现的时候不需要;

2、      静态成员函数没有this指针,所以不要尝试显示或隐式地在静态成员函数内引用这个指针,这种做法会导致编译期间报错。因此也就不要尝试些什么在构造函数中给静态成员变量初始化的动作了。

下面写个小例子感受一下面向对象的static:

首先定义一个头文件account.h,在头文件中定义一个类:

#pragma once
class Account
{
public:static void reiseInterest(double var );static double interest(){return dInterest; }   //类内给出实现,语句简单,无递归,与类外实现并声明为inline函数都是相同的,均为内联函数
private:static double dInterest ;
};
double Account::dInterest = 5;                  //静态数据成员初始化
inline void Account::reiseInterest(double var)
{dInterest += var;
}

接着在源文件中进行测试:

#include <iostream>
#include "account.h"
using namespace std;
int main()
{//double Account::dInterest = 5;        //错误!!static关键字限制了可视域!!cout<<"The initial interest is "<<Account::interest()<<endl;Account ac1;Account ac2;ac1.reiseInterest(18);ac2.reiseInterest(17);cout<<"The current interest is "<<Account::interest()<<endl;return 0;
}

运行结果如下:

Java部分:

Java中,在一个类里面,一个变量一旦声明,即使没有对变量进行初始化,它们也会获得一个默认值。不过需要注意的是,只有当变量作为一个类的数据成员被使用的时候才能确保获得初值。

所以static对于java是没有所谓赋予默认初值的说法的。

但是如果一个变量不属于任何类,比如说只是一个局部变量:

int a;

那么这个a得到的可能是任意值,而不会被自动初始化为0。

那么Java中static的作用到底是什么?

Java中的Static:

每当我们声明一个类,需要用到其中的方法和变量的时候我们都需要通过new来创建对象,再用该对象去调用具体的方法和变量。

但是有两种情况是比较特殊的:

情形1我只想为某一特定数据分配一份存储控件,而不用去考虑究竟要创建多少对象,或者是甚至根本不去创建任何对象;

情形2我希望某个方法不与包含它的类的任何对象关联在一起,即是,即使没有创建对象,我也能够调用这个方法。

这个时候我们就需要用到static。

下面进行一些小测试:

class StaticTest
{static int a = 47;public StaticTest(){}
}class StaticFun
{static void Fun(){StaticTest.a++;}
}public class StaticT {public static void main(String[] args) {// TODO Auto-generated method stubStaticTest st1 = new StaticTest();StaticTest st2 = new StaticTest();StaticTest.a++;System.out.println("st1's a is "+st1.a);System.out.println("st2's a is "+st2.a);StaticFun.Fun();System.out.println("current a is "+StaticTest.a);System.out.println("st1's a is "+st1.a);System.out.println("st2's a is "+st2.a);}
}

View Code

运行结果如下:

转载于:https://www.cnblogs.com/nerohwang/p/3491307.html

C\C++与Java中的static关键字相关推荐

  1. 面试季,Java中的static关键字解析

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面 ...

  2. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  3. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  4. [转] Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  5. 【Java学习笔记之十五】Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  6. java中的static类_再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  7. [5] Java中的static关键字

    Java中的static关键字 文章目录 Java中的static关键字 static的基本概念 static修饰类中的成员 static修饰主类中的方法 static修饰类中的方法 static修饰 ...

  8. 关于java中的static关键字

    关于java中的static关键字;         1.static 英文译名为静态的:         2.static修饰的方法为静态方法:         3.static修饰的变量为静态变量 ...

  9. Java中的static关键字

    Java中的static关键字 static修饰变量,则该变量为类变量(静态变量),可以并且推荐通过类名.变量名进行调用.也能够通过对象进行调用 PS.常用于多线程 static修饰方法,则该方法为类 ...

  10. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

最新文章

  1. DCMTK:创建,编写和读取细分对象
  2. 【SpringBoot】 启动时,修改默认配置文件名称
  3. 卡西欧82es计算机怎么玩游戏,卡西欧计算器fx82es-如何使用卡西欧fx-82es计算器计算矩阵 – 手机爱问...
  4. Android ble连接过程,Android开发之ble蓝牙
  5. 女子15000元网购兰基博尼跑车,上路就被查了,这操作真没见过!
  6. envi矢量图层外面有蓝色边框_蓝白渐层英短猫多少钱一只,美短银渐层大概多少钱...
  7. Python-20-异常处理
  8. WWDC2019: SwiftUI实现你的第一个App
  9. oracle锁表语句执行提示无法终止当前对话_ORACLE LOCK TABLE 无法锁定表?
  10. java if经典程序_java经典程序题15道(另附自己做的答案)
  11. 截图工具因为计算机无法使用,Win7系统自带的截图工具不能用了的解决方法
  12. [windows]修改本机host配置
  13. 天融信学习笔记---DOS命令
  14. android elevation 白色,Android Elevation设置_安卓动态设置elevation_android elevation设置透明度...
  15. 动手学计算机视觉--第二章,关于单通道卷积,多通道卷积的讨论
  16. opc-ua协议机器数据采集-python
  17. Windows滑动关机
  18. LSTM 模型实践一
  19. 手把手教你可转债打新
  20. cncf,ddd,kong,zookeeper,k8s,ectd,docker,hbase,kafka,rocketmq,lua

热门文章

  1. boost::timer demo
  2. Xlua文件在热更新中调用方法
  3. iOS中NSString转换成HEX(十六进制)-NSData转换成int
  4. JavaScript----BOM(浏览器对象模型)
  5. [Vijos 1143]三取方格数
  6. 并行编程2——多核体系架构
  7. windows bat 批处理 !vm 合并快播文件
  8. 这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下...
  9. 我的第一份工作 (2007.2.28--2008.2.28) 上海三高计算机中心有限公司
  10. Locust学习总结分享