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;点击进…

PID算法实现温控

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

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

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

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、执行指令拓展总结很多刚刚入坑的小白可能对此完全没有…

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;点击进…

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

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

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

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

1. 观察者模式总结(C++)

1. 介绍 观察者模式&#xff1a;定义了一种“一对多”的依赖关系&#xff0c;让多个观察者对象同时监听一个对象的改变&#xff0c;即当该对象的状态发现改变时&#xff0c;会通知所有它依赖的观察者对象。观察者模式属于行为模式。 意图&#xff1a;定义对象间的一种一对多的依…

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

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

学计算机要不要护发,脱发平时应该注意什么 四个妙招教你如何防止脱发

头发一掉&#xff0c;失去的不仅仅是发丝&#xff0c;还有美丽与颜值&#xff0c;一把把辛酸泪只能往肚子里吞。秃头星人们&#xff0c;如果已经脱发了&#xff0c;日常一定要加倍注意哦&#xff0c;一些错误的护发方法不要踩坑&#xff0c;护理、食疗、良好的生活作息&#xf…

面经——嵌入式软件工程师ARM体系与架构相关

参考&#xff1a;嵌入式软件工程师笔试面试指南-ARM体系与架构 作者&#xff1a;嵌入式与Linux那些事 发布时间&#xff1a; 2021-04-28 15:22:06 网址&#xff1a;https://blog.csdn.net/qq_16933601/article/details/116234673 目录 ARM体系与架构硬件基础NAND FLASH 和NOR F…

下列属于计算机人工智能应用领域的是多选题,每天五道选择题(10)

原标题&#xff1a;每天五道选择题(10)1.在Windows7操作系统中&#xff0c;磁盘维护包括硬盘检查、磁盘清理和碎片整理等功能&#xff0c;磁盘清理的目的是( )。A.提高磁盘存取速度B.获得更多磁盘可用空间C.优化磁盘文件存储D.改善磁盘的清洁度▼答案&#xff1a;B【解析】磁盘…

2019年3月未来教育计算机二级题库,2019年3月计算机二Access考试操作模拟试题001...

2019年3月计算机二Access考试操作模拟试题001浏览次数&#xff1a; 时间&#xff1a;2019/03/28一、基本操作题在考生文件夹中有一个“Acc1.mdb”数据库。(1)在“订单”表的“订单ID”和“客户”字段之间添加“产品ID”和“数量”字段。其中&#xff0c;“产品ID”字段的类…

面经——C/C++常见面试知识点总结附面试真题

参考&#xff1a;C/C 面试题 作者&#xff1a;zhaouc 发布时间&#xff1a; 2015-02-15 15:51:00 网址&#xff1a;https://blog.csdn.net/zhaouc/article/details/43835667 参考&#xff1a;C/C常见面试知识点总结附面试真题----20210529更新 作者&#xff1a;kuweicai 发布时…

计算机控制课程设计体会,计算机控制技术课程设计报告

1课程设计目的…………………………………………………1页码2课程设计题目描述和要求……………………………………1页码3.课程设计报告内容……………………………………………1页码4.心得体会………………………………………………………7页码5.参考数目……………………………

tomcat源码 Connector

Connector容器主要负责解析socket请求&#xff0c;在tomcat中的源码位于org.apache.catalina.connector和org.apache.coyote包路径下&#xff1b;通过上两节的分析&#xff0c;我们知道了Connector是Service的子容器&#xff0c;而Service又是Server的子容器。在server.xml文件…

快速对比UART、SPI、I2C通信的区别与应用

参考&#xff1a;带你快速对比SPI、UART、I2C通信的区别与应用&#xff01; 作者&#xff1a;一口Linux 网址&#xff1a;https://mp.weixin.qq.com/s/4_RSM2jk2W6nTboO1W8HCw 电子设备之间的通信就像人类之间的交流&#xff0c;双方都需要说相同的语言。在电子产品中&#xff…

U-Boot 移植

目录NXP官方开发板uboot编译测试查找NXP官方的开发板默认配置文件_defconfig配置编译NXP官方开发板对应的uboot烧写验证与驱动测试(定位缺少的驱动)在NXP官方U-Boot 中添加自己的开发板添加开发板默认配置文件添加开发板对应的头文件(mx6ull_alientek_emmc.h)添加开发板对应的板…