我接受了以下练习:
“鉴于此课程,
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和示例2中,我认为最好的方法是从开销的角度将swap()方法定义为静态(示例2),因为类的静态成员不包含在该类的实例。我的假设是否正确?
从设计和清晰度的角度来看,实例3不是一个好的做法来定义swap()方法,因为首先swap()方法与Test类非常相关,应该定义为它的成员和第二,一般来说,最好在密切相关的类中定义main()之外的所有方法。这个假设也是正确的吗?
我提前感谢您抽出时间帮助我!!!
答案 0 :(得分:2)
由于Java编程语言是一个独立的现代平台,&#34;编写一次,到处运行&#34;,面向对象语言我会使用例1.这是因为你真正使用Java作为面向对象它的设计用语。在我看来,创建一个使用对象和对象引用的程序而不是像main
那样处理所有事情,如旧的过程语言或简单的脚本,需要更多的技巧。
所以在我看来,例1是最优雅和最精致的。另外,您可以随时扩展类并覆盖子类中的swap()方法以获得不同的功能。但是,静态方法无法覆盖。覆盖,封装和多态是面向对象语言的强大功能的一部分。使用实例方法允许其中一些。