各種プログラミング言語におけるstaticキーワードの使い方

2596 ワード

最近いろいろな言語の間でプログラミングを行ったり来たりして、混乱しやすいので、ここではわざわざ整理しておきます.
一.c言語(プロセス向け)
c言語ではstaticが変数と関数を修飾し、修飾後は本ファイルでのみ表示され、他のファイルでは同名の変数または関数を使用できます.したがってstaticを追加すると、チームコラボレーションで同じコンパイル識別の名前を付けることができます.
1.修飾変数
修飾変数の役割を紹介する前に、読者はcプログラムの記憶構造に対して一定の認知を持って、記憶構造の説明をしなければならない.(1)記憶方式:
カテゴリ
ローカル変数格納場所
グローバル変数格納場所
に飾りを付ける
静的ストレージ(.dataセグメント)
静的ストレージ(.dataセグメント)
飾らない
スタック
静的ストレージ(.dataセグメント)
(2)作用と可視性:
カテゴリ
ローカル変数
グローバル変数
に飾りを付ける
関数が終了してもデータは消去されません
同じファイルの下でのみグローバルに表示
飾らない
関数が終了すると自動的にデータが消去されます
プログラム内グローバル表示
2.修飾関数
(1)
カテゴリ
staticの有無
可視性
せいてきかんすう
staticあり
静的関数は、宣言されたファイルにのみ表示され、他のファイルでは使用できません.
一般関数
staticなし
プログラム内に表示され、デフォルトではexternが付属しています.
二.オブジェクト向け言語
言語修飾作用を紹介する前に、言語発展関係:c(プロセス向け)—>c+、c#、java、go、php、python(オブジェクト向け)について説明します.そこから、他のオブジェクト向け言語はcから発展し、記憶と役割に一定の類似性があることがわかります.オブジェクト向けにクラスを追加するのが共通の特徴であるため,クラスへのstaicの影響を主に紹介する.
クラスメンバーの使用では、通常、オブジェクトを介してクラスメンバーにアクセスするオブジェクトを作成する必要があります.static修飾を使用するとアクセス方法が変わります.thisは本オブジェクトであり、メンバー関数はstaticで修飾された後、thisは使用できません.
複数のプログラミング言語を使用すると、static付きクラス関数が見つかり、newを使用してオブジェクトを作成する必要がなく、直接呼び出されやすくなります.ただし、クラス静的関数は非静的関数にアクセスできないため、エラーが発生しやすい場合があります.
1. C++
(1)C++はc言語のプロセス指向を継承するため,cの特性を備える.
(2)修飾クラスメンバー
言語
さぎょう
可視性
呼び出しフォーマット
変数#ヘンスウ#
静的メンバー変数はクラスごとに1部あり、通常のメンバー変数はインスタンスごとに1部あります.
変更
::
関数#カンスウ#
静的メンバー関数.クラス名::関数名でアクセスできますが、thisは使用できません.クラスの静的データと静的メンバー関数のみにアクセスできます.
変更
:または.
補足点:
  • 静的メンバー関数は、非静的(メンバー関数およびデータメンバーを含む)にアクセスできませんが、非静的は静的にアクセスできます.
  • 静的メンバー関数を虚関数として定義することはできません.
  • 静的メンバー変数アドレスは、そのデータ型を指すポインタであり、静的メンバー関数アドレスタイプは「nonmember関数ポインタ」である.
  • 親の影響を防ぐために、親と同じ静的変数を子に定義して、親の影響を遮断できます.

  • 2. JAVA
    (1)概要
    Java言語でクラス内の関数をメソッドと呼びます.『Javaプログラミング思想』には、「staticメソッドはthisがないメソッドです.staticメソッドの内部では非静的メソッドを呼び出すことはできませんが、逆に可能です.また、オブジェクトを作成することなく、クラス自体だけでstaticメソッドを呼び出すことができます.これは実際にstaticメソッドの主な用途です「.この文はstaticメソッドの特殊な点を説明しているだけですが、staticキーワードの基本的な役割がわかります.簡単に言えば、オブジェクトを作成せずに呼び出すのに便利です(メソッド/変数).
    (2)その他の作用
  • staticキーワードには、プログラムのパフォーマンスを最適化するために静的コードブロックを形成するための重要な役割があります.staticブロックは、クラス内の任意の場所に配置でき、クラスに複数のstaticブロックが存在することができます.クラスが最初にロードされると、staticブロックの順序で各staticブロックが実行され、1回のみ実行されます.
  • class   {
        private String test;  
        static{
            test = "test";   
        }     
    }
    
  • staticは、ローカル変数を修飾するために使用できません.
  • staticキーワードは変数やメソッドの役割ドメインには影響しません.Javaでアクセス権に影響を及ぼすのはprivate、public、protected(パッケージアクセスを含む)
  • のみです.
    3.その他の言語
  • 基本的に大同小異