2017-12-04 23 views
-2

クラスプロジェクトの場合、別のクラスのメソッドにアクセスしようとしていますが、コードでエラー "static以外のメソッドprintArrayList()を静的コンテキストから参照できません"私はJavaの初心者ですので、どんな助けにも感謝しています。 コードを少し簡略化しました。Java - 別のクラスのメソッドを呼び出す方法

public class classOne 
{ 
    private classTwo[] arrayList; 
    public void printArray() 
     { 
      classTwo.printArrayList();     
     } 
} 

そして第二:

public class classTwo 
{ 
    public void printArrayList() 
    { 
     System.out.println(arrayList);   
    }  
} 
+0

ここでは、そのメソッドを呼び出していますか?クラス名を使用してメソッドにアクセスしているか、オブジェクト経由でアクセスしているか、または静的メソッドを定義しているようです。 –

答えて

1

cassTwoが配列として定義される

ここで最初のクラスです。あなたは以下のようにコードを変更することができclassTwoオブジェクト

からprintArrayList()方法に到達することができます:Javaで

public class classOne 
{ 
    private classTwo arrayList; //You have to initialize this object before you use 
    public void printArray() 
     { 
      arrayList.printArrayList();     
     } 
} 
+1

まだ間違っています。これは 'arrayList.printArrayList()'でなければなりません。 –

+1

Thanx @MikeAllen私はその詳細を逃した – Bilgehan

0

は、非静的メソッドは、唯一のまたは含むクラスのインスタンスを通じて呼び出すことができます。クラスを含むクラスのインスタンスを作成し、それを使ってメソッドを呼び出します。また、他のクラスから配列にアクセスできるようにする必要があります。これを行うには、パラメータとして渡すか、他のクラスをネストまたはサブクラスにする必要があります。ネストされたと

public class classOne 
{ 
    private classTwo[] arrayList = {...}; //Make sure to construct it! 
    public void printArray() 
     { 
      //Create a new instance of classTwo 
      new classTwo().printArrayList(arrayList);     
     } 
} 
    public class classTwo 
    { 
     public void printArrayList(classTwo[] arrayList) //Accept parameters 
     { 
      System.out.println(arrayList);   
     }  
    } 

:パラメータで

:それはnull以外のものを印刷するためのいずれかの方法で、あなたもあなたの配列を作成しなければなりません

public class classOne 
{ 
    private classTwo[] arrayList = {...}; //Make sure to construct it! 
    public void printArray() 
     { 
      //Create a new instance of classTwo 
      new classTwo().printArrayList();     
     } 
    public class classTwo //Nested inside of classOne 
    { 
     public void printArrayList() 
     { 
      System.out.println(arrayList);   
     }  
    } 
} 
1

これはどのようにあなたができることです静的でないクラスのメソッドにアクセスします。

classTwo list= new classTwo(); 
list.printarraylist(); 
+0

あなたはnullpointerを取得しないようにそれを構築したいかもしれません;) –

+0

@ CardinalSystemありがとう、私は答えを編集しました。 – Rahulrr2602

0

基本的に、「静的」とは、異なるクラスからアクセスできるものです。publicの後に置くと、クラス間で転送できるようになります。

public class classOne 
{ 
public static classTwo[] arrayList; 
public static void printArray() 
    { 
     classTwo.printArrayList();     
    } 
} 

public class classTwo 
{ 
public satic void printArrayList() 
{ 
    System.out.println(arrayList);   
}  
} 
+0

ヒント:スタティックは他のクラスからアクセスできないことを意味しません。これは、オブジェクト/メソッドがいつでも*あらゆる状況*でアクセスできることを意味します*。静的修飾子は、クラスの読み込み時にクラス/フィールド/オブジェクト/メソッドを初期化します。 –

0

解決策1:

public class classTwo 
{ 
    // add static 
    public static void printArrayList() 
    { 
     System.out.println(arrayList);   
    }  
} 

非静的メソッドprintArrayList(メイク)静的メソッドへpublic static void printArrayList()

解決策2:

classTwo.printArrayList();

new classTwo().printArrayList(); TO非静的メソッドp rintArrayList()は静的コンテキスト(classTwo)から参照できないため、new classTwo()を使用できます。

0

この行のclassTwo.printArrayList(); printArrayListは静的メソッドではないので、classTwoからアクセスすることはできません。オブジェクトを作成してメソッドにアクセスする必要があります。

public class classOne 
{ 
private classTwo[] arrayList; 
public void printArray() 
    { 
     classTwo obj2 = new classTwo(); 

     obj2.printArrayList();    
    } 

}

またはprintArrayList()メソッド、静的

public class classTwo 
{ 
    public static void printArrayList() 
{ 
    System.out.println(arrayList);   
}  

}

と2番目のクラスのオブジェクトを作成し

 classTwo.printArrayList(); 
0

としてアクセスしますあなたにRファーストクラス

public class classOne 
{ 
    private classTwo[] arrayList; 
    public void printArray() 
    { 
     classTwo obj = new classTwo(); 
     obj.printArrayList();     
    } 
} 

しかし、あなたはまだあなたの最初のクラスのprivate配列を持っている、とあなたはあなたの第二のクラスでそれにアクセスしようとしている、そしてそれは許可されていません。また、それはjavaキーワードであるため、配列 "arraylist"に名前を付けることはできません。

static classTwo [] arr; 

が、それを行うための正しい方法は、あなたのclassTwoに配列リストを入れて、民間のそれを維持するだろう....あなたの最初のクラスには、この補正を作ってみましょう、そのオブジェクトを構築するためのコンストラクタを作成しますそのarrayListを保持し、メソッドを介してアクセスします。これについてもっと知りたい場合はお知らせください。

0

私は私も鉱山を書いてみましょう、ちょうど別のクラスのメソッドを呼び出すために質問への7件の回答を参照してください - 静的にメソッドの修飾子

Method method = classTwo.getDeclaredMethod("printArrayList"); 
method.invoke(classTwo.newInstance()); 
0

変化との助けを借りて別のクラスにそのメソッドにアクセスその親クラス名

eg.classname.staticmethodname();

関連する問題