Windowsエラー
 Computer >> コンピューター >  >> トラブルシューティング >> Windowsエラー

修正:静的でないメソッドを静的なコンテキストから参照できない

多くのプログラマーは、「静的メソッドを静的コンテキストから参照できません」というエラーメッセージに直面します。 ’コーディング中です。このエラーメッセージは特定のものではなく、エラーの条件が真の場合、どのIDEでも発生する可能性があります。

修正:静的でないメソッドを静的なコンテキストから参照できない

これは、プログラマーがクラスのインスタンスを作成せずに「静的に」クラスを使用しようとする初心者にとって非常に一般的な間違いです。静的なクラスを使用する場合に満たす必要のあるいくつかの条件があります。この記事では、いくつかの異なるケースを取り上げ、静的クラスの使用方法について説明します。

静的メソッドとは何ですか?

キーワード「static」を任意のメソッドに追加すると、そのメソッドは静的メソッドと呼ばれます。静的メソッドは、オブジェクト(標準)に属するのではなく、クラスに属します。静的メソッドは、クラスのインスタンスを作成する条件なしで簡単に呼び出すことができます。

静的メソッドにはいくつかの異なる使用法があります。たとえば、静的メソッドを使用すると、静的データメンバーとその値を変更できます。ただし、静的メソッドを使用する場合は、まだいくつかの制限があります。たとえば、クラスの非静的フィールドにアクセスする場合は、非静的メソッドを使用する必要があります。要約すると、静的メソッドは非常に控えめに使用されますが、利点があります。

これは、静的メソッドを作成してすべてのオブジェクトのプロパティを変更する方法の簡単な例です。

class Students{ 

 int roll_no; 

 String name; 

 static String college = "InformationTech"; 

 static void change(){ 

 college = “Management"; } 

 Students (int number, String name_self){ 

 roll_no = number; 

 name = name_self;  } 

 void display (){System.out.println(rollno+" "+name+" "+college);} 

public static void main(String args[]){ 

Students.change(); 

Students stu_1 = new Students (100,"Mexican"); 

Students stu_2 = new Students (202,"American"); 

Students stu_3 = new Students (309,"British"); 

stu_1.display(); 

stu_2.display(); 

stu_3.display(); 

}  }

プログラムの出力は次のようになります:

100 Mexican Management 202 American Management 309 British Management

クラスとクラスのインスタンスの違いは何ですか?

あなたが通りを歩いていて、車が見えると思ってください。これで、モデルやタイプがわからなくても、これが車であることがすぐにわかります。これは、これがすでに知っている「車」のクラスに属していることを知っているためです。ここでのクラスは、テンプレートまたはアイデアと考えてください。

近づくと、車のモデルとメーカーが表示されます。ここでは、クラス「車」の「インスタンス」を認識しています。ここでは、すべてのプロパティが詳細に表示されます。ホイール、馬力、リムなど

プロパティの例として、クラス「car」では、すべての車にホイールが必要であると記載されている場合があります。あなたが見ている車(車のクラスのインスタンス)には合金のリムがあります。

オブジェクト指向プログラミングでは、クラスを自分で定義し、クラス内で「色」タイプのフィールドを定義します。クラスがインスタンス化されるときはいつでも、メモリはバックエンドの色のために自動的に予約され、後でこれに特定の値(たとえば赤)を与えることができます。このような属性は特定のものであるため、静的ではありません。

対照的に、静的メソッドとフィールドはすべてのインスタンスで共有されます。これらは、インスタンス自体ではなく、クラスに固有の値またはアイテム用に作成されています。メソッドの場合、グローバルメソッド(たとえば、stringtoIntコンバーター)があり、フィールドの場合、それらは通常、コードに従って定数です(たとえば、通常の車のみを製造している場合、車のタイプは静的である可能性があります)。

ここで、コーディングがうまくいかない可能性のあるさまざまなケースをすべて見て、それらを修正するための回避策を確認します。

問題1:存在しないものを呼び出しています

ユーザーが静的メソッドと非静的メソッドの両方を相互に使用している場合がありました。これを行うときは、どのメソッドが何を呼び出しているか(静的かどうかの観点から)に注意する必要があります。次のコードを見てください:

private java.util.List<String> someMethod(){

    /* Some Code */

    return someList;           }

public static void main(String[] strArgs){         

     // The following statement causes the error. You know why..

    java.util.List<String> someList = someMethod();        }

ここで、静的メソッドはsomeMethodを呼び出しています。オブジェクト指向プログラミングでは、操作したいデータと一緒にデータをカプセル化します。ここでは、オブジェクトがないとインスタンスデータはなく、インスタンスメソッドはクラス定義の一部として存在しますが、データを提供するオブジェクトインスタンスは常に存在する必要があります。

つまり、存在しないものを呼び出すことはできません。オブジェクトを作成していない可能性があるため、非静的メソッドはまだ存在していません。ただし、その一方で、静的メソッドは常に存在します(定義のため)。

問題2:メソッドが静的にされていない

メソッドのインスタンスを作成せずに静的メインメソッドからメソッドを呼び出すと、エラーメッセージが表示されます。ここでも、同じ原則が適用されます。存在しないものにはアクセスできません。

public class BookStoreApp2 {

    //constants for options

    Scanner input = new Scanner (System.in);

    public static void main(String[] args) {

        BookStoreItem[] item;//declaring array

        item = new BookStoreItem[10];//initializing array

        int itemType = -1;

        printMenu();

        getUserChoice();

        for (int i = 0; i < item.length; i++){

            }//end of switch statement

        }//end of for loop

        for (int i = 0; i < item.length; i++) {

        }//end of for

    }//end of main method

このコードでは、両方のメソッドを変換する必要があります printMenu() およびgetUserChoice() 静的メソッドに。

したがって、このような状況を回避したい場合は、コンストラクターを使用できます。 代わりは。たとえば、main()メソッドの内容を取得して、コンストラクター内に配置できます。

public BookStoreApp2()

{
   // Put contents of main method here}
After doing this, do the following inside your main() method:

public void main( String[] args )

{ 
new BookStoreApp2();           }

これらのヒントが機能しない場合、またはコードが異なる場合は、静的クラスとメソッドの基本原則を念頭に置き、コードを再チェックして、基本原則に違反していないことを確認する必要があります。


  1. サーバーから切断されたFallout 76を修正

    Fallout 76 は、Bethesda Studios が 2018 年にリリースした人気のマルチプレイヤー ロールプレイング アクション ゲームです。このゲームは、Windows PC、Xbox One、および Play Station 4 で利用できます。Fallout シリーズのゲームが好きな場合は、楽しくプレイできます。ただし、多くのプレイヤーが、自分のコンピューターでゲームを起動しようとしたときに、Fallout 76 がサーバーから切断されたというエラーが発生したと報告しています。 Bethesda Studios は、サーバーの過負荷が原因で問題が発生したと主張しました。多数

  2. 修正:Windows 10 でセカンダリ ミラー ドライブから起動できない (解決済み)

    このチュートリアルには、次の問題を修正するための手順が含まれています。Windows ミラー機能 (S/W RAID-1) を使用してブート ドライブがミラーリングされている Windows 10 ベースのコンピューターでは、プライマリ ドライブがセカンダリ ミラー ドライブである場合、システムはセカンダリ ミラー ドライブから起動できません。起動に失敗するか、破損します。 問題の説明: Windows は、BSOD エラー コード 0x000000e でセカンダリ ミラーリング ブート ディスクから起動できません:「お使いの PC/デバイスを修復する必要があります。必要なデバイスが接続