日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發(fā)布時間:2023/12/10 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C\C++与Java中的static关键字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C\C++里面的static:

面向過程的static:

在c和c++面向過程的設(shè)計(jì)里,在全局變量前加上static關(guān)鍵字則可將該變量定義為一個靜態(tài)全局變量,比如:

static int a;

那么c和c++中的靜態(tài)全局變量有什么特點(diǎn)呢:

1、????? 變量在全局?jǐn)?shù)據(jù)區(qū)分配內(nèi)存(局部變量在棧內(nèi),通過new和malloc動態(tài)分配的變量在堆里);

2、????? 未經(jīng)初始化的全局變量會被程序自動初始化為0;

3、????? 靜態(tài)全局變量或函數(shù)在聲明它的文件內(nèi)是可見的,在文件外是不可見的;(可以起到保護(hù)作用)

講講第三點(diǎn),如果我們只是在某個頭文件中聲明了一個普通的全局變量a,那么在引用這個頭文件的時候,我們也可以通過extern關(guān)鍵字將這個變量引用到當(dāng)前文件中;但是如果你在聲明那個變量的時候就加了static關(guān)鍵字,那么全局變量a對于其他任何文件都是不可見的。

同樣的,如果以static方式定義了一個函數(shù),那么這個函數(shù)只在定義它的文件內(nèi)可見。

面向?qū)ο蟮膕tatic:

在面向?qū)ο笤O(shè)計(jì)里面,使用static有幾點(diǎn)要注意:

1、????? 靜態(tài)成員函數(shù)的聲明在類內(nèi)要加上static關(guān)鍵字,但是在類外實(shí)現(xiàn)的時候不需要;

2、????? 靜態(tài)成員函數(shù)沒有this指針,所以不要嘗試顯示或隱式地在靜態(tài)成員函數(shù)內(nèi)引用這個指針,這種做法會導(dǎo)致編譯期間報錯。因此也就不要嘗試些什么在構(gòu)造函數(shù)中給靜態(tài)成員變量初始化的動作了。

下面寫個小例子感受一下面向?qū)ο蟮膕tatic:

首先定義一個頭文件account.h,在頭文件中定義一個類:

#pragma once class Account { public:static void reiseInterest(double var );static double interest(){return dInterest; } //類內(nèi)給出實(shí)現(xiàn),語句簡單,無遞歸,與類外實(shí)現(xiàn)并聲明為inline函數(shù)都是相同的,均為內(nèi)聯(lián)函數(shù) private:static double dInterest ; }; double Account::dInterest = 5; //靜態(tài)數(shù)據(jù)成員初始化 inline void Account::reiseInterest(double var) {dInterest += var; }

接著在源文件中進(jìn)行測試:

#include <iostream> #include "account.h" using namespace std; int main() {//double Account::dInterest = 5; //錯誤!!static關(guān)鍵字限制了可視域!!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; }

運(yùn)行結(jié)果如下:

?

?

Java部分:

Java中,在一個類里面,一個變量一旦聲明,即使沒有對變量進(jìn)行初始化,它們也會獲得一個默認(rèn)值。不過需要注意的是,只有當(dāng)變量作為一個類的數(shù)據(jù)成員被使用的時候才能確保獲得初值。

所以static對于java是沒有所謂賦予默認(rèn)初值的說法的。

但是如果一個變量不屬于任何類,比如說只是一個局部變量:

int a;

那么這個a得到的可能是任意值,而不會被自動初始化為0。

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

Java中的Static:

每當(dāng)我們聲明一個類,需要用到其中的方法和變量的時候我們都需要通過new來創(chuàng)建對象,再用該對象去調(diào)用具體的方法和變量。

但是有兩種情況是比較特殊的:

情形1我只想為某一特定數(shù)據(jù)分配一份存儲控件,而不用去考慮究竟要創(chuàng)建多少對象,或者是甚至根本不去創(chuàng)建任何對象;

情形2我希望某個方法不與包含它的類的任何對象關(guān)聯(lián)在一起,即是,即使沒有創(chuàng)建對象,我也能夠調(diào)用這個方法。

這個時候我們就需要用到static。

下面進(jìn)行一些小測試:

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

運(yùn)行結(jié)果如下:

轉(zhuǎn)載于:https://www.cnblogs.com/nerohwang/p/3491307.html

總結(jié)

以上是生活随笔為你收集整理的C\C++与Java中的static关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。