Javaでのstatic(1)【更新継続】——EclipseのNo enclosing instance of typeについて…
5986 ワード
No enclosing instance of type
どうやって見つけたの??
EclipseでJavaのAWT/Swingプログラムを記述するとき、
つまり、メイン関数がウィンドウを作成した後も、
どうしてこんなことになったの??
まあ、実は結局
大公無私な内容として、
あるオブジェクトに特有のものではありませんか??しかし、クラスに定義されている属性である以上、クラスのすべてのオブジェクトにはこの属性があるのではないでしょうか.
いいえ、ここで言う「特有」はそういう意味ではありません.言葉を変えたほうがいいかもしれません.対象の「個性」の属性です.
個性化......しかしこれは何ですか......
やめて、私はあなたがこのことを聞くことを知っています.だから、私はここで栗を砂糖で炒めます.例えば、類
私たちは金単価
重さ
フリースタイル持ってる?
次に、その方法を定義したいものを見てみましょう(しかし、私は今定義していません):
まずこれらの関数を見てみると、
ねえ、私なら、全部普通に定義すればいいでしょう.
あ、確かに、静的でないメンバーはクラス内の他のすべてのメンバーにアクセスできるので、静的でも非静的でも構いません.もちろんGetPriceにとってはどうでもいいし、結果自体が「個性」です.
このように書くともちろん問題ありません.文法の間違いを犯さず、コンパイルは通過します.そして、金をインスタンス化すれば、これらの関数を正しく呼び出し、正しい結果を得ることができます.このように:
出力結果:
結果は確かに大丈夫でした
...もちろんお金をたくさん作って遊ぶこともできますが...
ただ...
その結果、小さな金の粒が金市場に深刻な金融危機をもたらした.この小さな金の粒の耐性はあまりにも大きいと思いませんか.もちろん、これも
はい、危険です.それでは、私は望んでいません.どうすればいいですか.
一般的な
谁でもできる行为だから、来たいならマイペースでやろう.
もちろん、関数が
このような行為はある個人が単独で実行することはできなくて、全種族の運命を賭けなければならなくて、種族の名義で、行きましょう!!!
したがって、金の価格がある金の塊に干渉されたくない場合は、
これにより、
この2つの関数は「共通性」なので、値上げして値下げしたいと思っています.小さな
このとき
転載先:https://www.cnblogs.com/oberon-zjt0806/p/11632528.html
SomeClass
is accessible. Must qualify the allocation with an enclosing instance of type SomeClass
(e.g. x.new A()
where x
is an instance of SomeClass
). どうやって見つけたの??
EclipseでJavaのAWT/Swingプログラムを記述するとき、
public class MainFrame extends JFrame
を記述し、メイン関数を1つ入れて次のように書きました.public static void main(String args[])
{
MainJFrame frmBase = new MainJFrame("Hello Swing");
frmBase.setBackground(Color.white);
frmBase.setVisible(true);
frmBase.addWindowListener(new MainJWindowListener()); //
つまり、メイン関数がウィンドウを作成した後も、
frmBase
というJFrame
ウィンドウにウィンドウリスナー(class MainJWindowListener implements WindowListener
)を追加し続けたいと思っています.このうちMainJWindowListener
はMainFrame
の内クラスです.そしてエラーが発生しました・・・どうしてこんなことになったの??
まあ、実は結局
main
のstatic
修飾が引き起こした災いだ.static
のメンバーも、クラスも、いわゆる「静的」とは「プログラム全体を共有する」という意味であることを知っています.率直に言って、static
のものは非常に「公正無私」です.もちろん、実は私はC#を書くことが多くて、Javaのルールについてまだよく知らないで、JavaはC#のようにpublic static class SomeClass
を許可していないようで、Javaにとってもっと静的なメンバーについて討論しました.大公無私な内容として、
static
のメンバーの中で自分で臨時のオブジェクトを構築する以外に、直接引用したクラス、関数はあるオブジェクト特有のものではありません.あるオブジェクトに特有のものではありませんか??しかし、クラスに定義されている属性である以上、クラスのすべてのオブジェクトにはこの属性があるのではないでしょうか.
いいえ、ここで言う「特有」はそういう意味ではありません.言葉を変えたほうがいいかもしれません.対象の「個性」の属性です.
個性化......しかしこれは何ですか......
やめて、私はあなたがこのことを聞くことを知っています.だから、私はここで栗を砂糖で炒めます.例えば、類
Gold
は定義されています.public class Gold
{
// Properties
private static float xau = 1504.35f; // , , ……
private float oz; // ( ) ( )
// Constructor
public Gold(float oz)
{
this.oz = oz;
}
// Methods ...
}
私たちは金単価
xau
が静的であることを見た.その金がどんなに重くても、どんなに成長しても、金単価はすべての金に対して同じであり、xau
が変動すると、すべてのGold
の価格もxau
に従って変動するからだ.だからこの属性は“個性”を備えていないで、あなたが私を使ってみんなでいっしょに使うため、つまり、これは全体の“共通性”です.重さ
oz
は違います.金山(Kingsoft)には1 e+xxxのoz
があるかもしれませんが、金粒は1 e-xxxのoz
しかないかもしれません.私はnew Gold(1e+500)
で黄金星を構築したことを示しているかもしれません.私はnew Gold(1e-500)
で金分子を構築したことを示しているかもしれません.しかし、とにかく、彼らはGold
で、彼らはoz
を持っていますが、一人一人のoz
は違います.これは
です.フリースタイル持ってる?
次に、その方法を定義したいものを見てみましょう(しかし、私は今定義していません):
public class Gold
{
// Properties ...
// Constructor ...
// Methods
// GetPrice() , *
// Rise(float price) , price
// Reduce(float price) , price
// ...
}
まずこれらの関数を見てみると、
GetPrice
のような関数の結果は「個性」であり、xau*oz
のうちoz
は「個性」であり、この結果はもちろん互いに異なる可能性があるという法則が明らかになった.Rise
とReduce
の2つの関数は、修正するxau
が共通であり、「共通性」に関連しているだけで、つまり、黄金国全体の金の運命に影響を与える関数である.ねえ、私なら、全部普通に定義すればいいでしょう.
あ、確かに、静的でないメンバーはクラス内の他のすべてのメンバーにアクセスできるので、静的でも非静的でも構いません.もちろんGetPriceにとってはどうでもいいし、結果自体が「個性」です.
public class Gold
{
// Properties ...
// Constructor ...
// Methods
public float GetPrice() // , *
{
return xau*oz;
}
public void Rise(float price) // , price
{
xau += price;
}
public void Reduce(float price) // , price
{
xau -= price;
}
// ...
}
このように書くともちろん問題ありません.文法の間違いを犯さず、コンパイルは通過します.そして、金をインスタンス化すれば、これらの関数を正しく呼び出し、正しい結果を得ることができます.このように:
public void main(String args[]) // ,
{
Gold gNugget = new Gold(0.01f);
System.out.println(String.format("%.2f", gNugget.GetPrice()));
gNugget.Rise(10.0f);
System.out.println(String.format("%.2f", gNugget.GetPrice()));
gNugget.Reduce(20.0f);
System.out.println(String.format("%.2f", gNugget.GetPrice()));
}
出力結果:
15.04
15.14
14.94
結果は確かに大丈夫でした
...もちろんお金をたくさん作って遊ぶこともできますが...
ただ...
gNugget.Rise()
またはgMountain.Reduce()
が呼び出されると、すべての金(もちろんそれら自身を含む)が影響を受ける.想像してみてください.gNugget.Reduce(1000.0f);
その結果、小さな金の粒が金市場に深刻な金融危機をもたらした.この小さな金の粒の耐性はあまりにも大きいと思いませんか.もちろん、これも
Rise()/Reduce()
をpublic
に変更したのと変わらない.はい、危険です.それでは、私は望んでいません.どうすればいいですか.
一般的な
static
の関数ではなく、「個性」の行為であることを意味します.谁でもできる行为だから、来たいならマイペースでやろう.
もちろん、関数が
static
と宣言されると、これは「個性」の行為ではなく、「共通性」の行為であることを意味します.このような行為はある個人が単独で実行することはできなくて、全種族の運命を賭けなければならなくて、種族の名義で、行きましょう!!!
したがって、金の価格がある金の塊に干渉されたくない場合は、
Rise
とReduce
もstatic
でなければなりません. public static void Rise(float price) // , price
{
xau += price;
}
public static void Reduce(float price) // , price
{
xau -= price;
}
これにより、
Rise
およびReduce
は、Goldのインスタンスを呼び出すことなく、Gold.Rise()
およびGold.Reduce()
で呼び出さなければなりません.つまり、このアクションは、次の文のエラーを引き起こします.gNugget.Rise(10.0f);
gNugget.Reduce(20.0f);
この2つの関数は「共通性」なので、値上げして値下げしたいと思っています.小さな
gNugget
は計算しません.Gold
全体の名義で言わなければなりません.Gold.Rise()
もちろん、共性行為にもこのような制約があります.例えば、共性の行為は個性の内容を導入することを許さない(書面では静的方法では非静的属性と方法と内部クラスを呼び出すことは許されない).一つの行為が個性の要素にかかわると、このクラス全体の名義ではできないからです.例えばGetPrice
をstatic
に変更するとエラーが発生します. public static float GetPrice() // !!!!
{
return xau*oz;
}
このとき
Gold.GetPrice()
を呼び出すとき、Gold
全体に属するoz
は存在しないので、1つの金が同じであるからです.転載先:https://www.cnblogs.com/oberon-zjt0806/p/11632528.html