服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java的表达式


  我们曾说 java(tm) 编程语言的语法功能强大。as an example of this expressiveness,表达式求值顺序,下面我们将讲述怎样设计一个支持 "串联方法求值(chained method evaluation)" 的类。
  java 虚拟机对表达式的求值按照从左到右的顺序,并遵循标准的运算优先级法则。当然,与其他语言一样,求值顺序还可以用()来控制:
  int x = (4 + 32) / (2 + 1); // x == 12
  前面讲过,new 操作符按从左到右的求值次序,这使得新创建一个对象并用一个 "." 后跟某个方法来完成某个操作十分方便:
   new dog().bark();
  此表达式求值过程如下:
  new dog() 生成一个 dog的无名实例,暂称其为 "dogwithnoname"。该实例捆绑 bark() 方法并执行它。
  "dogwithnoname.bark()"
  此处的一个要点是 java 编程语言按从左到右的原则继续这种 "求值加捆绑" 策略直至完成了整个表达式的操作。因此,只要 "." 左边的值是一个对象,右边是一个方法,java 虚拟机就会将方法捆绑到对象上,并执行相应的操作。
  请看下面的程序:
  public class evaldemo {
   public static void main(string[] args) {
   evaldemo e = new evaldemo();
   e.printit("one, ")
   .printit("two, ")
   .printit("three.");
   }
   public evaldemo printit(string s) {
   system.out.print(s);
   return this;
   }
  }
  该程序中定义了一个含有很有趣的设计的方法 printit(),其返回类型为类名 evaldemo ,方法的最后是一个 return 语句,返回当前实例,即 this。因此,对于该类的一个给定实例,我们可以编写如下代码:
  e.printit("one, ").printit("two, ").printit("three.");
  对 printit() 的每一个调用都完成一个单位工作,此处为输出一条信息,并且 再一次生成 (求取) 当前对象。表达式求值得以继续进行:
   .printit("two, ").printit("three.");
  求值过程直到整个表达式都算完才结束。
  该程序的输出证实了从左到右的计算规则:
  d:/>java evaldemo
  one, two, three.
  任何时候当你有一个带 void 方法的类需要设计时,也就是说,方法不需要返回返回某个特定值时,你可以用该策略来支持方法串联。

扫描关注微信公众号