簡體   English   中英

Java:定義與類相關的方法的最佳實踐

[英]Java: Best practice to define a method in relation to a class

我進行了以下練習:

“鑒於這堂課,

class Test { int a; Test(int a) { this.a = a; } }

編寫一個稱為swap()的方法,該方法交換兩個測試對象引用所引用的對象的內容。”

我寫了三個稍有不同的練習示例:

例子1

class Test {
   public int a;

   Test(int a) {
      this.a = a;
   }

   public void swap(Test otherObject) {
   int tempVar;

   tempVar = this.a;
   this.a = otherObject.a;
   otherObject.a = tempVar;
   }
}

class Chapter6_2c {
   public static void main(String[] args) {
      Test obj1 = new Test(1);
      Test obj2 = new Test(2);

      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);

      obj1.swap(obj2);

      System.out.println("\nafter swap()\n");
      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);
   }
}

例子2

class Test {
   public int a;

   Test(int a) {
      this.a = a;
   }

   public static void swap(Test objectOne, Test objectTwo) {
   int tempVar;

   tempVar = objectOne.a;
   objectOne.a = objectTwo.a;
   objectTwo.a = tempVar;
   }
}

class Chapter6_2b {
   public static void main(String[] args) {
      Test obj1 = new Test(1);
      Test obj2 = new Test(2);

      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);

      Test.swap(obj1, obj2);

      System.out.println("\nafter swap()\n");
      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);
   }
}

例子3

class Test {
   int a;

   Test(int a) {
      this.a = a;
   }
}

class Chapter6_2a {
   public static void swap(Test objectOne, Test objectTwo) {
   int tempVar;

   tempVar = objectOne.a;
   objectOne.a = objectTwo.a;
   objectTwo.a = tempVar;
   }

   public static void main(String[] args) {
      Test obj1 = new Test(1);
      Test obj2 = new Test(2);

      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);

      swap(obj1, obj2);

      System.out.println("\nafter swap()\n");
      System.out.println("obj1 has value " + obj1.a);
      System.out.println("obj2 has value " + obj2.a);
   }
}

在示例1和2中,swap()方法被編寫為Test類的成員,不同之處在於示例2中的定義為靜態。 在示例3中,swap()方法在main()方法內部定義。

我的問題是 ,從設計,開銷和清晰度的角度來看,哪種方法是定義swap()方法的最佳實踐或最專業的方法?

我確實有一些想法,但是我真的需要您的意見以確認它們是對還是錯:

  1. 從示例的角度來看,在示例1和2之間,我認為最好的方法是將swap()方法定義為靜態方法(示例2),因為該類的實例中不包括該類的靜態成員。 我的假設正確嗎?

  2. 從設計和清晰度的角度來看,示例3並不是定義swap()方法的好習慣,因為首先,swap()方法與Test類非常相關,應將其定義為其成員,然后通常將其定義為最好在緊密相關的類中定義main()之外的所有方法。 這個假設也正確嗎?

我預先感謝您抽出寶貴的時間來幫助我!!!

由於Java編程語言是一種獨立於現代平台的,面向對象的語言,即“編寫一次,隨處運行”,因此我將使用示例1。這是因為您確實將Java用作了其專門設計的面向對象的語言。 它需要更多的技巧也是在我看來,以創建使用對象和對象的引用來處理所有的事情在程序main像一個舊的程序語言或一個簡單的腳本。

因此,我認為示例1是最優雅,最精致的。 另外,您始終可以擴展該類並在子類中重寫swap()方法以實現不同的功能。 但是,使用靜態方法無法覆蓋。 覆蓋,封裝和多態性是面向對象語言的強大功能的一部分。 使用實例方法可以做到這一點。

暫無
暫無

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

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