当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java入门

Java中有返回值的方法与循环执行


  有返回值的方法
  有了前面新定义的gentle和obedienceTrained 变量,我们就可以提供一些更方便的方法了,例如
  
   boolean isGoodWithChildren() {
  if (gentle == true && obedienceTrained == true)
   return true;
  else
   return false;
   }
  此方法引进了新的 Java(TM) 语法。首先,方法isGoodWithChildren()没有用修饰词 void, 而提供了一个返回类型 boolean。如果返回类型不用 void而用系统的原始类或者用户定义数据类型,那么在方法体中的每一个可能的执行分支都必须提供一个 返回(return) 语句-- Java 编译器强制要遵守这种"约定"。
  返回语句的语法是:
  return ;
  此处, 可以是任意表达式,只要表达式的值的类型和返回类型相匹配。
  对于方法 isGoodWithChildren() 来说,如果 if 语句的布尔表达式值为 true,就执行第一条 return 语句,结束方法的执行,返回相应的计算结果,此处结果只是简单值true。如果布尔表达式值为false,就执行 else 子句后的代码块,此处是一条简单的返回 false 的 return 语句。
  在这个例子中,布尔表达式是一个复合表达式--包含两个表达式,每个表达式都有一个比较运算符==,两个比较表达式用逻辑与运算符 && 连接;因此,当且仅当两个子表达式的值为 true 时,整个表达式的值才为 true。
  布尔表达式通常包括一个或多个,下表所示的 Java 逻辑运算符:
  
  在 "短路(short-circuit)" 中,只要一个子表达式的值为 false (用 && 时)或 true (用 || 时),那么接下来的子表达式将不再计算。
  虽然 isGoodWithChildren() 用了一个完整的 if 语句,它包含了可选的 else 子句, 但这个方法可以写得更加简练些。Java 和 C 一样,是一个语法功能强大的语言。首先,我们可以删除 if,因为返回值由布尔表达式的值确定,也就是说如果布尔表达式的值为 true,返回 true,否则,返回 false。该方法更简练的写法如下:
  
   boolean isGoodWithChildren() {
  return (gentle == true && obedienceTrained == true);
   }
  还可以写得更精简一些。注意每一个子表达式都是一个布尔变量和布尔值 true 比较,在此例中,每个子表达式都可以简写为布尔变量本身:
  boolean isGoodWithChildren() {
  return (gentle && obedienceTrained);
   }
  存取方法再论
  Dog 中提供了形式为 setXX 的写方法来改变实例变量的值。然而很多时侯,也需要获得实例变量的值。一般说来,如果一个类具有支持 set 操作的实例变量,那么他们也一定支持 get 操作。对应每一个 set 方法,我们应该为之编写一个相应的 get 方法,例如
   boolean getObedienceTrained() {
  return obedienceTrained;
   }
  注意:如果实例变量是 boolean 类型,如 obedienceTrained,很多程序员都习惯用形式 isXX 命名本该为 getXX 的方法,而有的程序员则会两种方法都提供:
   boolean isObedienceTrained() {
  return obedienceTrained;
   }
  循环执行
  Java(TM) 提供了 while, do-while, 和 for 语言结构来循环多次执行一个语句(或语句组)。while 是一种更常用的循环结构;for 则语法功能更强大。
  循环结构
  while (<布尔表达式>)
  <语句组>... 
  do
  <语句组>...
  while (<布尔表达式>) 
  for (<初始条件>...; <布尔表达式>; <循环过程表达式>...)
  <语句>...
  有了循环,我们就可以让我们的狗叫个不停,令我们的邻居很沮丧:
  
   void bark(int times) {
  while (times > 0) {
   System.out.println(barkSound);
   times = times - 1;
  }
   }
  因此,用另一个 bark() 方法,我们可以支持面向对象的任务:向 Dog 的实例发送一个 bark 消息,该消息用方法定义中的 times 参数来反映消息请求 n 次叫声(bark)。
  
  DogChorus 现在真的名符其实了:
  
  public class DogChorus {
   public static void main(String[] args) {
  Dog fido = new Dog();
  Dog spot = new Dog();
  spot.setBark("Arf. Arf.");
  fido.bark();
  spot.bark();
  fido.bark(4);
  spot.bark(3);
  new Dog().bark(4); // unknown dog
  System.exit(0);
   }
  }
  现在 DogChorus 的输出为:
  
  Woof.
  Arf. Arf.
  Woof.
  Woof.
  Woof.
  Woof.
  Arf. Arf.
  Arf. Arf.
  Arf. Arf.
  Woof.
  Woof.
  Woof.
  Woof.
  请注意程序中带注释"// unknown dog"的那行代码。正如前面讲到的,Java 是一门动态语言,此例又说明了这点。一只"未命名"被初始化了的 Dog 凭空出现(突然从天而降)加入合唱,然后无隐无踪。
  也就是说,在 Java 中,我们可以随意创建类的实例,并直接使用,而不必将之赋值给一个为了将来的使用而设的引用变量(只要我们将来不需用到它)。而且,按 Java 的语法和"new ()" 的求值次序规则,我们不必将 new 操作用"()"括起来就可以实现这点。
  
  
  
  
  
相关内容
赞助商链接