最も恐ろしいことは、間違いを犯すことではなく、それらを見つけることではありません。これまで、私はクラス変数の理解に何か問題があることを知っています。
おそらく、それはクラス変数の頻繁な使用がないためかもしれませんが、この問題は発見されていません。最近C ++を見ていたときにクラス変数が何であるかを学びましたか?
以前は、クラス変数とメンバー変数の唯一の違いは、クラス変数にクラス名を介して直接アクセスし、静的であることです。メンバー変数は、インスタンスを介してインスタンス化してアクセスする必要があります。
1つのクラスに1つのクラス変数しか存在しないことを無視し、各インスタンスが同じであるとは思っていませんでした。ある場合の変更は、他のインスタンスでクラス変数に影響を与えます...(通常、これに起因するバグはありませんが、認知的脆弱性を補う必要があります)。
JavaとPythonで書かれた2つの例を次に示します。
パブリッククラスOO {public static string s;パブリック文字列M; static {s = "ever"; } public static void main(string [] args){oo o1 = new oo(); oo o2 = new oo(); o1.m = "ons"; //異なるインスタンスのクラス変数の値/アドレスは、同じsystem.out.println(o1.s)です。 System.out.println(o2.s); system.out.println(o1.s.hashcode()); system.out.println(o2.s.hashcode()); o1.s = "123"; System.out.println(o2.s); //クラス変数を変更して、他のインスタンスSystem.out.println(o1.m.hashcode())に影響します。 System.out.println(o2.m.hashcode()); // nullpointerexception //メンバー変数には異なるアドレスがあります}}}#!/bin/pythonclass b:def whoami(self):print( "__ class __:%s、self .__ class __:%s"%(__ class __、self .__ class __))クラスC(b):0 def __init __(self):super(c、c、self).__ init:__ self.num += 1 def print(self):print( "count_id:%s、num_id:%s"%(id(__ class __。count)、id(self.num))))))))))))) I2メンバー変数は1回増加し、クラス変数は合計i1.add()i2.add()i2.add()i1.print()i2.print()で3回増加します。
上記はこの記事に関するすべてです。休日は明日終わります。誰もが自分の仕事に積極的に専念し、編集者が共有する記事に注意を払い続けることを願っています。