[解決済み] JAVAは非静的なフィールドを静的に参照することはできません。
2022-02-15 09:51:23
質問
JAVAで初めてのプログラムなのですが、このエラーを理解するのに苦労しています。
Cannot make a static reference to the non-static field *
そして
非静的メソッドへの静的参照はできません *。
public class Cerchio{
float r;
float area;
float cfr;
final double pi = 3.14;
public static void main(String[] args){
System.out.println("CIRCLE PROGRAM\n");
r = 5;
c_cfr();
c_area();
System.out.ptintln("The cir is: " + cfr);
System.out.println("The area is: " + area);
}
float c_cfr(){
cfr =(float)(2 * pi * r); //casting
return cfr;
}
float c_area(){
area = (float)(pi * (r*r));
return area;
}
}
<イグ 何かご指摘はありますか? 私はAndroidのSandIDEでコーディングしています。
どのように解決するのですか?
インスタンスのフィールドやメソッドはオブジェクトがなければ存在しないため、静的メソッドの中からインスタンスのメソッドやフィールドを呼び出していることになりますし、mainメソッドの中には
this
オブジェクトを作成します。代わりにクラスのインスタンスを作成し、そのインスタンス上でメソッドを呼び出す必要があります。
public class Cerchio{
float r;
float area;
float cfr;
final double pi = 3.14;
public static void main(String[] args){
System.out.println("CIRCLE PROGRAM\n");
Cerchio cerchio = new Cerchio();
cerchio.r = 5;
cerchio.c_cfr();
cerchio.c_area();
System.out.ptintln("The cir is: " + cerchio.cfr);
System.out.println("The area is: " + cerchio.area);
}
float c_cfr(){
cfr =(float)(2 * pi * r); //casting
return cfr;
}
float c_area(){
area = (float)(pi * (r*r));
return area;
}
}
他にも問題山積み、、、。
- クラスのフィールドに直接アクセスしていますが、これはやってはいけないことです。代わりに、フィールドはプライベートであるべきで、フィールドの取得、設定、セットにはゲッター/セッター/コンストラクタパラメータを使用すべきです。
- あなたのコードはインデントされていないため、非常に読みにくく、理解しにくいです。
同じ質問が何度もされており、私よりずっと良い答えがある可能性が高いので、このサイトを検索してください。もし見つかったら、この質問は重複として閉じられるはずです。
編集
と述べていますね。
私は "代わりに、フィールドはプライベートであるべきで、フィールドの取得、設定、セットにはゲッター/セッター/コントラクターパラメーターを使用すべきです。 " 私は private float c_cfr() と書くべきでしょうか。
あなたのフィールドは
float r;
float area;
float cfr;
これは本当にフィールドではなく、定数です。 最終的に2倍のπ=3.14となる。
であり、Math.PIを使うだけで置き換え/改良が可能です。
あなたのフィールドを変更する必要があります。
private float r;
private float area;
private float cfr;
そして、絶対に必要な場合のみ、パブリックなゲッターとセッターのメソッドを介してアクセスする必要があります。
関連
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み】予期しない型エラー
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] Javaにおける静的クラス
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】Javaの未処理例外について
-
[解決済み】Javaの".class expected "について
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み】CreateProcess error=2, The system cannot find file specified.
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)