簡體   English   中英

如何調用同一個包的另一個類中的方法?

[英]How to call a method in another class of the same package?

如何調用Java中同一包的另一個類中的方法? 我所知道的是,使用一個對象,我們可以調用來自不同類的方法。 有沒有其他方法可以調用不同類的方法?

創建 B 類的實例:

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

或者在 B 類中定義一個靜態方法:

class B
{
 static void staticMethod();
}

並這樣稱呼它:

B.staticMethod();

方法是對象方法類方法

對象方法:它適用於一個對象。 你必須使用一個實例:

instance.method(args...);

類方法:它適用於一個類。 它沒有隱式實例。 您必須使用類本身。 它更像是過程式編程。

ClassWithStaticMethod.method(args...);

反射

通過反射,您可以通過 API 以編程方式訪問方法,無論是對象方法還是類方法。

實例方法: methodRef.invoke(instance, args...); 類方法: methodRef.invoke(null, args...);

來自 Fred Swartz (fredosaurus) 的筆記

有兩種類型的方法。

  • 實例方法與一個對象相關聯並使用該對象的實例變量。 這是默認設置。

  • 靜態方法不使用定義它們的類的任何對象的實例變量。如果將方法定義為靜態方法,則在嘗試訪問任何實例變量時編譯器將給出粗魯的消息。 您可以訪問靜態變量,但除了常量,這是不尋常的。 靜態方法通常從參數中獲取所有數據,並從這些參數中計算出一些東西,而不引用變量。 這是進行某種通用計算的典型方法。 一個很好的例子是預定義的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()方法沒有被聲明為靜態的,只要它是從同一個類中調用的,它也能正常工作。 如果從類外部調用並且它沒有被聲明為靜態的,它就必須(無用地)用一個對象進行限定。 即使在類中使用,也有充分的理由將方法定義為靜態方法。

  • 文檔。 任何看到方法是靜態的人都會知道如何調用它(見下文)。 同樣,任何查看代碼的程序員都會知道靜態方法不能與實例變量交互,這使得閱讀和調試更容易。
  • 效率。 編譯器通常會生成更高效的代碼,因為無需將隱式對象參數傳遞給方法。

調用靜態方法

有兩種情況。

從同一個類中調用

只需寫下靜態方法名稱。 例如:

// 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.PIColor.RED 它們用類名限定,所以你知道它們是static 任何方法,無論是否static ,都可以訪問static變量。 實例變量只能通過實例方法訪問。

備用電話

有點奇怪且不推薦的是,可以使用類的對象代替類名來訪問靜態方法。 這很糟糕,因為它給人的印象是使用了對象中的某些實例變量,但事實並非如此。

如果您將方法定義為靜態方法,則無需先實例化類即可使用它,但是您也沒有可用的對象變量。

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

在這種情況下,您可以使用Foo.Bar()調用它。

如果它是靜態方法,則可以使用類名代替對象來調用它。

您可以創建一個靜態方法,也可以將另一個類用作在構造函數中調用該函數的類的成員。

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

      public callOtherClassMethod() {
         oc.otherClassMethod();
       }
    }

以這種格式執行:

classmehodisin.methodname();

例如:

MyClass1.clearscreen();

我希望這會有所幫助。` 注意:該方法必須是靜態的。

通過調用方法

public class a 
{
    void sum(int i,int k)
    {
        System.out.println("THe sum of the number="+(i+k));
    }
}
class b
{
    public static void main(String[] args)
    {
        a vc=new a();
        vc.sum(10 , 20);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM