web-dev-qa-db-ja.com

Javaでメソッドを呼び出す方法は?

Javaの同じパッケージの別のクラスにあるメソッドを呼び出す方法は?私が知っていることは、オブジェクトを使用して、異なるクラスからメソッドを呼び出すことができるということです。異なるクラスのメソッドを呼び出す他の方法はありますか?

10
user405398

クラスBのインスタンスを作成します。

B b=new B();
b.method();

または、クラスBで静的メソッドを定義します。

class B
{
 static void staticMethod();
}

次のように呼び出します:

B.staticMethod();
11
Gustavo Puma

メソッドは、オブジェクトメソッドまたはクラスメソッドです。

オブジェクトメソッド:オブジェクトに適用されます。インスタンスを使用する必要があります。

_instance.method(args...);
_

クラスメソッド:クラスに適用されます。暗黙的なインスタンスはありません。クラス自体を使用する必要があります。手続き型プログラミングに似ています。

_ClassWithStaticMethod.method(args...);
_

反射

リフレクションを使用すると、オブジェクトメソッドまたはクラスメソッドであるメソッドにプログラムでアクセスするためのAPIを使用できます。

インスタンスメソッド:methodRef.invoke(instance, args...);クラスメソッド:methodRef.invoke(null, args...);

4
helios

メソッドを静的として定義した場合、最初にクラスをインスタンス化せずに使用できますが、使用可能なオブジェクト変数もありません。

_public class Foo {
   public static String Bar() {
      return "bla";
   }
}
_

その場合、Foo.Bar()で呼び出すことができます。

3
halfdan

フレッド・スワルツのノート(フレドサウルス)から

メソッドには2つのタイプがあります。

  • インスタンスメソッドはオブジェクトに関連付けられ、そのオブジェクトのインスタンス変数を使用します。これがデフォルトです。

  • 静的メソッド定義されているクラスのオブジェクトのインスタンス変数を使用しません。メソッドを静的に定義すると、インスタンスにアクセスしようとするとコンパイラから失礼なメッセージが表示されます変数。静的変数にアクセスできますが、定数を除き、これは異常です。静的メソッドは通常、パラメータからすべてのデータを取得し、変数への参照なしでそれらのパラメータから何かを計算します。これは、ある種の一般的な計算を行う典型的な方法です。これの良い例は、事前定義されたMathクラスの多くのユーティリティメソッドです。

静的呼び出しの修飾

定義クラスの外部から、オブジェクトをプレフィックスとしてインスタンスメソッドを呼び出すことで、インスタンスメソッドに暗黙的なパラメータとして渡されます。たとえば、inputTF.setText("");

静的メソッドは、Math.max(i,j);などのクラス名を接頭辞として呼び出すことで呼び出されます。不思議なことに、オブジェクトで修飾することもできますが、オブジェクトは無視されますが、オブジェクトのクラスが使用されます。

典型的な静的メソッドは次のとおりです。

_class MyUtils {
    . . .
    //================================================= mean
    public static double mean(int[] p) {
        int sum = 0;  // sum of all the elements
        for (int i=0; i<p.length; i++) {
            sum += p[i];
        }
        return ((double)sum) / p.length;
    }//endmethod mean
    . . .
}
_

このメソッドが使用または変更するデータは、パラメータ(またはもちろんローカル変数)からのみです。

メソッドを宣言する理由static

上記のmean()メソッドは、同じクラス内から呼び出される限り、静的に宣言されていなくても機能します。クラスの外部から呼び出され、静的宣言されていなかった場合、オブジェクトで(無用に)修飾する必要があります。クラス内で使用する場合でも、メソッドを可能な場合は静的として定義するのには十分な理由があります。

  • Documentation。メソッドが静的であることを知っている人は誰でもメソッドを呼び出す方法を知っています(以下を参照)。同様に、コードを見ているプログラマーは、静的メソッドがインスタンス変数と対話できないことを知っているため、読み取りとデバッグが容易になります。
  • 効率。コンパイラは、暗黙的なオブジェクトパラメータをメソッドに渡す必要がないため、通常はわずかに効率的なコードを生成します。

静的メソッドの呼び出し

2つのケースがあります。

同じクラス内から呼び出されます

静的メソッド名を書くだけです。例えば:

_// Called from inside the MyUtils class
double avgAtt = mean(attendance);
_

クラスの外部から呼び出される

メソッド(静的またはインスタンス)が別のクラスから呼び出される場合、メソッドが定義されているクラスを指定するには、メソッド名の前に何かを指定する必要があります。インスタンスメソッドの場合、これはメソッドがアクセスするオブジェクトです。静的メソッドの場合、クラス名を指定する必要があります。例えば:

_// Called from outside the MyUtils class.
double avgAtt = MyUtils.mean(attendance); 
_

オブジェクトがその前に指定されている場合、オブジェクト値は無視され、オブジェクトのクラスが使用されます。

静的変数へのアクセス

また、staticメソッドはインスタンス変数にアクセスできません。static変数にアクセスできます。静的変数の一般的な使用法は、「定数」を定義することです。 Javaライブラリからの例は_Math.PI_または_Color.RED_です。これらはクラス名で修飾されているため、staticであることがわかります。 staticであるかどうかに関係なく、static変数にアクセスできます。インスタンス変数には、インスタンスメソッドによってのみアクセスできます。

代替通話

少しおかしくて、お勧めしませんが、静的メソッドにアクセスするために、クラス名の代わりにクラスのオブジェクトを使用できることがあります。これは、オブジェクト内のいくつかのインスタンス変数が使用されているという印象を与えるため、悪いですが、そうではありません。

3
Jaken Herman

静的メソッドの場合は、オブジェクトの代わりにクラス名を使用して呼び出すことができます。

1
AaronM

静的メソッドを作成するか、コンストラクターで関数を呼び出すクラスのメンバーとして他のクラスを使用できます。

public class aClass {
      private SomeOtherClass oc;
      public class aClass( SomeOtherClass otherClass) {
         oc = otherClass;
      }

      public callOtherClassMethod() {
         oc.otherClassMethod();
       }
    }
1
It Grunt

次の形式で実行します。

classmehodisin.methodname();

例えば:

MyClass1.clearscreen();

注:メソッドは静的である必要があります。

0
Epic