C\C++与Java中的static关键字

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

步进电机、伺服电机、舵机、无刷电机、有刷电机区别

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

56、servlet3.0-与SpringMVC整合分析

56、servlet3.0-与SpringMVC整合分析 web容器在启动的时候&#xff0c;会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer加载这个文件指定的类SpringServletContainerInitializerspring的应用一启动会加载感兴趣的WebApplicationInitializer接…

html提交form预处理,HTML5 之图片上传预处理

在开发 H5 应用的时候碰到一个问题&#xff0c;应用只需要一张小的缩略图&#xff0c;而用户用手机上传的确是一张大图&#xff0c;手机摄像机拍的图片好几 M&#xff0c;这可要浪费很多流量。获取图片通过 File API 获取图片。var input document.createElement(input);input…

PID算法实现温控

参考&#xff1a;PID算法 作者&#xff1a;hillchina 发布时间&#xff1a; 2016-09-28 21:48:04 网址&#xff1a;https://www.bilibili.com/video/BV1Ds411t7Hr 以上完整的视频教程在腾讯课堂里有&#xff0c;在腾讯课堂里搜索PID&#xff0c;找到灵育科技&#xff0c;课程对…

React.js

类似于Jquery&#xff0c;主要是操作Dom 特点&#xff1a;1、基于组件开发 2、基于虚拟dom&#xff0c;速度快 用React的所需要引入的三个包&#xff1a; 1、react.min.js &#xff08;引入React语法&#xff09; 2、react-dom.min.js &#xff08;用react操作Dom&#xff09;…

[Unity3d]多个摄像机叠加效果

今天学习到一个多个摄像机看到的场景在同一个层显示&#xff0c;比如我们做一个类似反光镜的效果&#xff0c;当然反光镜可以直接用Shader来实现&#xff0c;但我就是了实现一个类比这样的一个效果&#xff0c;一个摄像机将看到的图像显示到一个Texture上&#xff0c;然后将Tex…

单片机程序跑飞原因

参考&#xff1a;单片机程序又跑飞&#xff1f; 作者&#xff1a;嵌入式ARM 网址&#xff1a;https://mp.weixin.qq.com/s/a22zVdSfCqWjSmlBxK2R1Q 目录数组越界/溢出中断服务程序缺失看门狗复位单片机中有看门狗&#xff0c;长时间不喂狗&#xff0c;程序就会复位。为什么长时…

html5大赛是什么,IE9开发大赛为HTML5打了一针兴奋剂

尽管HTML5是一种新的网页浏览标准&#xff0c;目前仅有苹果和微软的IE9支持该标准。客观地说&#xff0c;HTML5还是小众用户的标准。对于IE9来说&#xff0c;如果HTML5标准无法普及&#xff0c;IE9的硬件加速和性能优势就无从体现。加之Adobe一直力挺Flash&#xff0c;这对HTML…

apicloud手机查看效果

1.wifi全量同步 2.本地编译 需要在同一个WiFi中&#xff0c;WiFi全量同步&#xff0c;手机才会接受文件当代码改动时&#xff0c;需要本地编译后进行下载 如果是在海马模拟器上看效果&#xff0c;直接选择云编译自定义apploader-编译-下载apk文件-直接把apk文件拖进海马模拟器 …

Java关键字final使用详解

2019独角兽企业重金招聘Python工程师标准>>> http://docs.oracle.com/javase/tutorial/java/IandI/final.htmlWriting Final Classes and MethodsYou can declare some or all of a classs methods final. You use the final keyword in a method declaration to in…

一行代码揭开CPU执行原理

参考&#xff1a;一行代码&#xff0c;揭开CPU执行原理&#xff01; 作者&#xff1a;嵌入式ARM 网址&#xff1a;https://mp.weixin.qq.com/s/qFnKhWqBGRCFAnp_KC1dmw 目录1、高级语言2、编译链接3、机器指令4、指令格式5、执行指令拓展总结很多刚刚入坑的小白可能对此完全没有…

html链接txt文件,怎么在TXT文件中建立超链接

参考方法如下&#xff1a;1、在桌面鼠标依次右键——新建——文本文档&#xff1b;2、在记事本中输入命令&#xff1a;echo off echo 正在清除系统垃圾文件&#xff0c;请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemd…

spark 2.4安装

1、spark 官网选择对应Hadoop的版本&#xff0c;之前安装的Hadoop版本为hadoop-3.0.2&#xff0c;获取下载包&#xff1a;wget http://mirrors.hust.edu.cn/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz2、解压缩安装包&#xff0c;创建软连接&#xff1a;tar -zxv…

redhat 挂载 iso文件 提示 mount :not a directory

redhat 挂载 iso文件 提示 mount :not a directory posted on 2013-12-28 22:26 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/errors.html

C语言常见编译错误及分析

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

计算机组成原理实验 组装实验报告,计算机组成原理实验一实验报告..doc

计算机组成原理实验一实验报告.实验一 运算器实验算术逻辑运算器实验目的&#xff1a;掌握算术逻辑运算器单元ALU(74LS181)的工作原理掌握简单运算器的数据传送通道验算由74LS181等组合逻辑电路组成的运算功能发生器运算功能按给定数据&#xff0c;完成实验指定的算术/逻辑运算…

FIS.js前端开发的使用说明文档

文档结构什么是FIS部署FISFIS基本使用模块定义加载方式调用Tangram 2.0一.什么是FIS FIS提供了一套贯穿开发流程的开发体系和集成开发环境&#xff0c;为产品线提供前端开发底层架构&#xff0c;这能帮助工程师提高开发效率&#xff0c;沟通协作效率&#xff0c;快速实现需求并…

典型用户和用户场景描述

场 景 / 故 事 / Story 版权信息 &#xff1a;大浪淘沙 版本信息 &#xff1a;Beta Version&#xff08;测试版&#xff09; 维护人信息&#xff1a;热心市民隔壁老王 版本记录&#xff1a;目前版本为第一期测试版 1&#xff0e;背景&#xff1a; &#xff08;一&#xff09;典…

面经——嵌入式常见面试题总结100题(上)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

计算机专业运动会口号,运动会口号押韵有气势 计算机系霸气口号

淡泊明志&#xff0c;宁静致远&#xff0c;团结友爱&#xff0c;顽强拼搏。下面是文艺范收集的运动会口号押韵有气势&#xff0c;计算机系霸气口号&#xff0c;欢迎阅读收藏。1、球进了球&#xff0c;分了就会&#xff0c;不怕**&#xff0c;战无不胜。2、阳光运动&#xff0c;…