javaで非静的な解を静的な参照にすることができない
今日、コードを書き出すときにこの問題に遭遇しました。一般的な問題は次のように単純化できます。
public class Test1 {
public String get()
{
return "123";
}
public static void main(String[] args)
{
String string = get();
}
}
表示する
Test1型から非静的メソッドget()への静的な参照を作成できません。
さて、私はこれを次のように変更することにしました。
public class Test1 {
public String get()
{
return "123";
}
public static void main(String[] args)
{
static String string = get();
}
}
でも、まだ間違っている。
ということに気づくには、javaの本を少しめくってみる必要がありました。
1. javaの静的メソッドは、非静的メソッドやメンバーを直接呼び出すことはできませんし、thisキーワードも使えません(これが今回の問題の原因です、静的なmainメソッドで非静的なgetメソッドを呼び出したのです)。
説明 クラス内の静的メソッドやプロパティは、本質的にはクラスのメンバーではなく、java仮想マシンがクラスにインストールされたときにすでにオブジェクトを持っており、それは単にクラスの中に"resides"するだけで、クラスのコンストラクタ(構成子)によってインスタンス化する必要がありません;一方 非静的なプロパティまたはメソッドは、クラスの負荷が存在しない、クラスのコンストラクタは、クラスのインスタンスオブジェクトの存在に依存することができます後に実行する必要があります。だから、静的なメソッドで非静的なメソッドを呼び出すとき というエラーが表示されます(Cannot make a static reference to the non-static method func() from the type A)。
- javaでは、メソッド内のローカル変数をstaticとして宣言することはできません。
- main() 関数は静的で、戻り値はなく、正式なパラメータの配列を持っています。
- 非静的メンバは静的メンバを任意に呼び出すことができる
では、スタティックは反人間的なもので、これは何のために必要なのでしょうか?
おそらく、複数のクラスが1つのデータを共有できるようにするためでしょう。
おそらく、関数を静的にし、変数をグローバルに静的に宣言するように修正したのでしょう
方法1
public class Test1 {
static String string;
public static String get()
{
return "123";
}
public static void main(String[] args)
{
string = get();
System.out.print(string);
}
}
方法2
public class Test1 {
public String get() {
return "123";
}
public static void main(String[] args) {
Test1 c = new Test1();
String string = c.get();
System.out.print(string);
}
}
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Spring boot runs with Error creating bean with name 'entityManagerFactory' defined in class path resource
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
自動配線された依存性のインジェクションに失敗しました。
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
HttpClientがGZIP形式でない場合の対処法
-
java.security.InvalidAlgorithmParameterException: TrustAnchors パラメータは空であってはなりません 解決策
-
トークン "{" のシンタックス エラー、このトークンの後に { があるはずです。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
ファインバグタイプ
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
Java静的コード解析 - 仕様チェック - checkstyle
-
コンピュータ教育で足りない授業、手遅れになる前に補うようにアドバイス、仕事の後の半分の努力で2倍の結果が得られる!?
-
Swagger の @ApiModelProperty オブジェクト フィールドが表示されない
-
eclipse start tomcat エラー。Java Exceptionが発生しました