友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第40章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




  void floatTest(float x; float y) {  

    // Arithmetic operators:  

    x = x * y;  

    x = x / y;  

    x = x % y;  

    x = x + y;  

    x = x y;  

    x++;  

    x……;  

    x = +y;  

    x = …y;  

    // Relational and logical:  

    f(x 》 y);  

    f(x 》= y);  

    f(x 《 y);  

    f(x  1;  

    //! x = x 》》》 1;  



                                                                                         81 


…………………………………………………………Page 83……………………………………………………………

    // pound assignment:  

    x += y;  

    x …= y;  

    x *= y;  

    x /= y;  

    x %= y;  

    //! x = 1;  

    //! x 》》》= 1;  

    //! x &= y;  

    //! x ^= y;  

    //! x |= y;  

    // Casting:  

    //! boolean b = (boolean)x;  

    char c = (char)x;  

    byte B = (byte)x;  

    short s = (short)x;  

    int i = (int)x;  

    long l = (long)x;  

    double d = (double)x;  

  }  

  void doubleTest(double x; double y) {  

    // Arithmetic operators:  

    x = x * y;  

    x = x / y;  

    x = x % y;  

    x = x + y;  

    x = x y;  

    x++;  

    x……;  

    x = +y;  

    x = …y;  

    // Relational and logical:  

    f(x 》 y);  

    f(x 》= y);  

    f(x 《 y);  

    f(x  1;  

    //! x = x 》》》 1;  

    // pound assignment:  

    x += y;  



                                                                                         82 


…………………………………………………………Page 84……………………………………………………………

    x …= y;  

    x *= y;  

    x /= y;  

    x %= y;  

    //! x = 1;  

    //! x 》》》= 1;  

    //! x &= y;  

    //! x ^= y;  

    //! x |= y;  

    // Casting:  

    //! boolean b = (boolean)x;  

    char c = (char)x;  

    byte B = (byte)x;  

    short s = (short)x;  

    int i = (int)x;  

    long l = (long)x;  

    float f = (float)x;  

  }  

} ///:~  

  

注意布尔值(boolean)的能力非常有限。我们只能为其赋予true 和false 值。而且可测试它为真还是为 

假,但不可为它们再添加布尔值,或进行其他其他任何类型运算。  

在 char,byte 和 short 中,我们可看到算术运算符的“转型”效果。对这些类型的任何一个进行算术运算, 

都会获得一个 int 结果。必须将其明确“造型”回原来的类型(缩小转换会造成信息的丢失),以便将值赋 

回那个类型。但对于int值,却不必进行造型处理,因为所有数据都已经属于 int类型。然而,不要放松警 

惕,认为一切事情都是安全的。如果对两个足够大的 int 值执行乘法运算,结果值就会溢出。下面这个例子 

向大家展示了这一点:  

  

//: Overflow。java  

// Surprise! Java lets you overflow。  

  

public class Overflow {  

  public static void main(String'' args) {  

    int big = 0x7fffffff; // max int value  

    prt(〃big = 〃 + big);  

    int bigger = big * 4;  

    prt(〃bigger = 〃 + bigger);  

  }  

  static void prt(String s) {  

    System。out。println(s);  

  }  

} ///:~  

  

输出结果如下:  

big = 2147483647  

bigger = …4  

  

而且不会从编译器那里收到出错提示,运行时也不会出现异常反应。爪哇咖啡(Java )确实是很好的东西, 

但却没有“那么”好!  

对于 char,byte 或者 short,混合赋值并不需要造型。即使它们执行转型操作,也会获得与直接算术运算相 

同的结果。而在另一方面,将造型略去可使代码显得更加简练。  



                                                                                           83 


…………………………………………………………Page 85……………………………………………………………

大家可以看到,除boolean 以外,任何一种主类型都可通过造型变为其他主类型。同样地,当造型成一种较 

小的类型时,必须留意“缩小转换”的后果。否则会在造型过程中不知不觉地丢失信息。  



3。2 执行控制  



Java 使用了 C 的全部控制语句,所以假期您以前用C 或 C++编程,其中大多数都应是非常熟悉的。大多数程 

序化的编程语言都提供了某种形式的控制语句,这在语言间通常是共通的。在Java 里,涉及的关键字包括 

if…else、while、do…while、for 以及一个名为switch 的选择语句。然而,Java 并不支持非常有害的goto 

 (它仍是解决某些特殊问题的权宜之计)。仍然可以进行象goto 那样的跳转,但比典型的 goto 要局限多 

了。  



3。2。1  真和假  



所有条件语句都利用条件表达式的真或假来决定执行流程。条件表达式的一个例子是 A==B 。它用条件运算符 

 “==”来判断A 值是否等于 B 值。该表达式返回 true 或 false。本章早些时候接触到的所有关系运算符都可 

拿来构造一个条件语句。注意 Java 不允许我们将一个数字作为布尔值使用,即使它在 C 和 C++里是允许的 

 (真是非零,而假是零)。若想在一次布尔测试中使用一个非布尔值——比如在if(a)里,那么首先必须用 

一个条件表达式将其转换成一个布尔值,例如 if(a!=0)。  



3。2。2 ifelse  



if…else 语句或许是控制程序流程最基本的形式。其中的 else 是可选的,所以可按下述两种形式来使用 if:  

  

if(布尔表达式)  

语句  

  

或者  

  

if(布尔表达式)  

语句  

else  

语句  

  

条件必须产生一个布尔结果。“语句”要么是用分号结尾的一个简单语句,要么是一个复合语句——封闭在 

括号内的一组简单语句。在本书任何地方,只要提及“语句”这个词,就有可能包括简单或复合语句。  

作为 if…else 的一个例子,下面这个 test()方法可告诉我们猜测的一个数字位于目标数字之上、之下还是相 

等:  

  

static int test(int testval) {  

  int result = 0;  

  if(testval 》 target)  

    result = …1;  

  else if(testval 《 target)  

    result = +1;  

  else  

    result = 0; // match  

  return result;  

}  

  

最好将流程控制语句缩进排列,使读者能方便地看出起点与终点。  

  

1。 return  

return 关键字有两方面的用途:指定一个方法返回什么值(假设它没有 void 返回值),并立即返回那个 

值。可据此改写上面的 test()方法,使其利用这些特点:  



                                                                                  84 


…………………………………………………………Page 86……………………………………………………………

  

static int test2(int testval) {  

  if(testval 》 target)  

    return …1;  

  if(testval 《 target)  

    return +1;  

  return 0; // match  

}  

  

不必加上else,因为方法在遇到 return 后便不再继续。  



3。2。3  反复  



while,do…while 和 for 控制着循环,有时将其划分为“反复语句”。除非用于控制反复的布尔表达式得到 

 “假”的结果,否则语句会重复执行下去。while 循环的格式如下:  

  

while(布尔表达式)  

语句  

  

在循环刚开始时,会计算一次“布尔表达式”的值。而对于后来每一次额外的循环,都会在开始前重新计算 

一次。  

下面这个简单的例子可产生随机数,直到符合特定的条件为止:  

  

//: WhileTest。java  

// Demonstrates the while loop  

  

public class WhileTest {  

  public static void main(String'' args) {  

    double r = 0;  

    while(r 《 0。99d) {  

      r = Math。random();  

      System。out。println(r);  

    }  

  }  

} ///:~  

  

它用到了Math 库里的 static (静态)方法random() 。该方法的作用是产生 0 和 1 之间(包括 0,但不包括 

1)的一个double值。while 的条件表达式意思是说:“一直循环下去,直到数字等于或大于0。99”。由于 

它的随机性,每运行一次这个程序,都会获得大小不同的数字列表。  



3。2。4 dowhile  



do…while 的格式如下:  

  

do  

语句  

while(布尔表达式)  

  

while 和 do…while 唯一的区别就是do…while 肯定会至少执行一次;也就是说,至少会将其中的语句“过一 

遍”——即便表达式第一次便计算为false。而在while 循环结构中,若条件第一次就为false,那么其中的 

语句根本不会执行。在实际应用中,while 比do…while 更常用一些。  



                                                                                           85 


…………………………………………………………Page 87……………………………………………………………

3。2。5 for  



for 循环在第一次反复之前要进行初始化。随后,它会进行条件测试,而且在每一次反复的时候,进行某种 

形式的“步进”(Steppi
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!