繁体   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