您的位置:首页 > 其它

第三章控制程序流程

2011-10-31 22:45 302 查看
第三章 控制程序流

1:使用Java操作符


操作符接受一个或多个参数,并生成一个新值。

操作符可能会改变操作数自身的值,这被称为side effect。

注意:使用此类操作符生成的值,与使用没有副作用的操作符生成的值,没有什么区别。

(1)优先级

(1)赋值

= 他的意思是“取得右边的值,把它复制给左边”。

注意左值必须是一个明确的,已命名的变量。即:将一个常数赋给一个变量。不能是左值是常量:4=a;

一般情况下(基本类型存储的值):

a = b;意味着b的内容就复制给a。若接着又修改a,那么b不受影响,因为它实际上是直接将一个地方的内容复制到另一个地方。并不是对同一个空间的进行操作。

但特殊情况(对对象进行赋值时):对一个对象进行操作时,我们真正操作的是对对象的引用(reference)。所以倘若“将一个对象赋值给另一个对象”,实际是将引用从一个地方复制到另一个地方。这意味着假若对对象使用“c=d”,那么c和d都指向原本只有d指向的那个对象。

这种特殊的现象通常称为:aliasing(别名现象)

(a)方法调用中的别名问题。

(2)算术操作符(mathematical operator)

+ - * / %

注意:整数除法会直接去掉结果的小数位,而不是四舍五入。

(3) 正则表达式

java.util.regex.pattern.

grneral terms(通用术语) :

-?

一个数位用'/d'表示,但在java中“/”要两个才能显示(转义)"//d"

-?\\d+可能有负号数字有一个或多个。

(a)一元加减操作符:(一元加减号用于改变数据的符号)

x = -a;

x = a * -b; equals x = a * (-b);

(4) 自增自减increment decrement

i++ ++i

i-- --i

(5) 关系运算符relational operator

关系操作符号生成一个"Boolean"结果,他们计算的是操作对象之间的关系。

> >= < <= == !=

(a):测试对象的等价性。

对象是一个引用。只有基本类型可以用==,!=,否则equals()。

(6) 逻辑运算符logical operator

&& || !

(a)short-circuiting:短路

获得潜在的性能提升。

(7) 位操作符bitwise operator.

位操作符允许我们操作一个基本数据类型中的整数型的单个“bit”,即二进制位。位操作符会对两个参数对应的位操作执行布尔代数运算,并最终生成一个结果。

原理:

如果两个输入位都是1,则按位“于“操作符(&)生成一个输出位1;否则生成一个输出位0;

如果两个输入位里只要有一个是1,则按位"或",操作符(|)生成一个输出位1;只有在两个输入位都是0的情况下,他才会生成一个输出位0。

如果两个输入位的某一个是1,但不全是1,那么”异或“操作符(^)生成一个输出位1。(以上都是二元操作符)

按位"非"属于一元操作符;他只对一个操作数进行操作。

**

位操作符和逻辑操作符都使用了同样的符号。

位操作符可与等号联合使用,以便合并运算操作和赋值操作:

&= |= ^= 一元位运算符~不能被联用。

(8) 移位操作符(shift operator)

god of field

<< <<= >> >>=

>>> >>>= <<< <<<=

(9) 三元操作符(if else)

boolean -exp? value0 : value1

-exp 是true,最终结果为value0,否则是value1

(10) 逗号操作符(comma operator)

用法:函数分隔,作为后续计算的一个操作符。在java中,需要用到逗号的唯一场合就是for循环。

(11) 字符串操作符+

特殊用途:连接不同的字符串。

一个特殊点:

int i = 0,j = 1, k = 2;

String s = "X,Y,Z";

System.out.println(s+i+j+k);//xyz012

System.out.println(i+j+k+s);//3

System.out.println(i+j+s+k);//1xyz2

(12) 使用操作符时常犯的错误

(a)优先级不确定,没有用括号来确定。

(b)=赋值运算使用错误。或与==混淆。

(13) 类型转换操作符(casting operator)

(a)直接常量(Literal)

如果在一个程序里使用了literal,编译器可以准确的直到要生成什么样的类型,但有时却模棱两可,如可发生这种情况,必须对编译器加以适当的"指导",用于直接搭配某些字符来增加一些信息。

**********

Base 16 :使用于所有整数数据类型,以一个前缀0x或0X来表示,后面跟随0~9或大小写的a~f。

如果试图将一个变量初始化超出自身表示范围的值(无论这个值的数值形式如何)。

如果超出范围,编译器会将其值自动转换成一个int。(小范围到大范围是会报越界错误)

**********

Base 8:是有前缀0以及后续的0~7的数字组成的。

*

直接常量后面的后缀字符标志了它的类型。

若为大写或小写的L,代表long;

若为大写或小写的F,代表float;

若为大写或小写的D,代表double;

*

指数总是采用一种很不直观的记号方法:1.39e-47f.

与C和C++不同,在java中1.37*10^(-47)。

**********

提升(Promotion)

类型转换自动向大跃迁。

(14) java没有'sizeof'

sizeof();获取为数据存储分配的字节数。在c和c++中。

(15) 再论优先级(precedence)

**********有点弄不清楚。

(16) 操作符总结。

2:流程控制

true和false

if-else

迭代(iteration)

break和continue

开关(switch)


关键字:if else ,while , do while , for ,switch case.

(1)true和false

for example: if(a!=0)

(2)if-else

好用法:return.

(3)迭代(iteration)

关键字:while,do-while,for。

********

while(Boolean-expression){

statement}

********

do

statement

while(Boolean-expression);

注意:while和do-while 的区别是do-while 的语句至少执行一次。

********

for(initialization ; Boolean-expression;step)

statement

(4)break和continue

break:用于强行退出循环,不执行循环中剩余的语句。

continue:则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。

(5)开关(switch)

根据一个整数表达式的值,swith语句可以从一系列代码中选出一段去执行。

switch(integral-selector){

case

integral-value1 :statement ; break;

case integral-value2 :statement; break;

case integral-value3 :statement; break;

default : statement;

}

integral-selector: 是一个能够产生整数数值的表达式。

swith 能将integral-selector的结果与每个整数值(integral-value)相比较。若发现相符,就执行对应语句。若没有发现相符的,就可执行default语句。

*省列break;将会继续执行后面的case,直到default。

switch语句是实现多路选择的一种干净利落的方法。

计算细节:

Math.random()输出值范围:[0,1).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: