Java:定义与类相关的方法的最佳实践

时间:2014-05-02 00:13:17

标签: java class methods member

我接受了以下练习:

“鉴于此课程,

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

编写一个名为 swap()的方法,用于交换两个Test对象引用引用的对象的内容。“

我写了三个稍微不同的练习例子:

示例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中的定义为static。在示例3中,swap()方法在main()方法中定义。

我的问题是 ,从设计,开销和清晰度的角度来看,哪一个是定义swap()方法的最佳实践或最专业的方法?< / p>

我确实有一些想法,但我真的需要你的意见来确认它们是对还是错:

  1. 在示例1和示例2中,我认为最好的方法是从开销的角度将swap()方法定义为静态(示例2),因为类的静态成员不包含在该类的实例。我的假设是否正确?

  2. 从设计和清晰度的角度来看,实例3不是一个好的做法来定义swap()方法,因为首先swap()方法与Test类非常相关,应该定义为它的成员和第二,一般来说,最好在密切相关的类中定义main()之外的所有方法。这个假设也是正确的吗?

  3. 我提前感谢您抽出时间帮助我!!!

1 个答案:

答案 0 :(得分:2)

由于Java编程语言是一个独立的现代平台,&#34;编写一次,到处运行&#34;,面向对象语言我会使用例1.这是因为你真正使用Java作为面向对象它的设计用语。在我看来,创建一个使用对象和对象引用的程序而不是像main那样处理所有事情,如旧的过程语言或简单的脚本,需要更多的技巧。

所以在我看来,例1是最优雅和最精致的。另外,您可以随时扩展类并覆盖子类中的swap()方法以获得不同的功能。但是,静态方法无法覆盖。覆盖,封装和多态是面向对象语言的强大功能的一部分。使用实例方法允许其中一些。