JAVA 从0开始 四

早上来,没什么事情,继续我的JAVA之旅;

越来越清晰了;


今天看电子书上的第三章,是控制程序流;

part1:基本概念;

一:赋值:

基本等同于C的赋值,但是有一点,在为对象“赋值”的时候,情况却发生了变化。

对一个对象进行操作时,我们真正操作的是对对象的引用。

所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方。

这意味着假若对对象使用“c=d”,那么 c 和 d 都指向原本只有 d指向的那个对象。

下面这个例子将向大家阐示这一点。

import com.bruceeckel.simpletest.*;

class Number {
int i;
}
public class Assignment {
static Test monitor = new Test();
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1 = n2;
System.out.println("2: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = 27;
System.out.println("3: n1.i: " + n1.i +
", n2.i: " + n2.i);
monitor.expect(new String[] {
"1: n1.i: 9, n2.i: 47",
"2: n1.i: 47, n2.i: 47",
"3: n1.i: 27, n2.i: 27"
});
}
} ///:~
可以看到3,的输出是27,27,;

这种特殊的现象通常称作“别名现象(aliasing)”,是 Java 操作对象的一种基本方式。在这个例子中,如果你想避免别名应该怎么办呢?

你可以这样写:

n1.i = n2.i;

这样便可以保持两个对象彼此独立,而不是将 n1 和 n2 绑定到相同的对象。

二:算术操作符

1. 整数除法会直接去掉结果的小数位,而不是四舍五入的进位。

这章与C的算术操作符大体相同;


2.流程控制

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

While:

while,do-while 和 for 用来控制循环,有时将它们划分为“迭代语句”。 语句会重复执行,除非用于控制的布尔表达式得到“假”的结果。while 循环的格式如下:
while(Boolean-expression)
statement
在循环刚开始时,会计算一次“布尔表达式”的值。而在语句的下一次迭代开始前也要重新计算一次。


do-While:

do-while 的格式如下:
do
statement
while(Boolean-expression);


while 和 do-while 唯一的区别就是 do-while 中的语句至少会执行一次,即便表达式第一次就被计算为 false。

而在 while 循环结构中,如果条件第一次就为 false,那么其中的语句根本不会执行。


for:


for 循环在第一次迭代之前要进行初始化。随后,它会进行条件测试,而且在每一次迭代结束时,

进行某种形式的“步进(Stepping)”。

for 循环的形式如下:

for(initialization; Boolean-expression; step)

statement
初始表达式,布尔表达式,或者步进运算,都可以为空。每次迭代前会测试布尔表达式。若获得的结果是 false,就会执行在 for 语句后面的代码。
每次迭代的末尾,会做一次步进运算。

对于象 C 那样的传统的过程型语言,要求所有变量都在一个块的开头定义。以便编译器在创建这个块的时候,可以为那些变量分配空间。

而在 Java 和 C++中,则可在整个块的范围内分散变量声明,在真正需要的地方才加以定义。

这样便可形成更自然的编码风格,也更易理解。


可以在一个 for 语句中定义多个变量,但它们必须具有同样的类型:

for(int i = 0, j = 1; i < 10 && j != 11; i++, j++)


Java 里唯一用到逗号操作符的地方就是 for 循环的控制表达式。


break 和 continue

在任何循环语句的主体部分,都可用 break 和 continue 控制循环的流程。其中,break
用于强行退出循环,不执行循环中剩余的语句。而 continue 则停止执行当前的迭代,然
后退回循环起始处,开始下一次迭代。


label:

“标签”是后面跟一个冒号的标识符,就象下面这样:

label1:

在 Java 中,标签起作用的唯一的地方是在迭代语句之前。

我们希望在其中嵌套另一个循环或者一个开关。这是由于 break 和 continue 关键字通常只中断当前循环,但若随同标签使用,它
们就会中断所有进行中的循环,转到标签所在的地方:

label1:
outer-iteration {
	inner-iteration {
	//...
	break; // 1
	//...
	continue; // 2
	//...
	continue label1; // 3
	//...
	break label1; // 4
}
}

在状况 1 处,break 中断内部循环,回到外部循环。

在状况 2 处,continue 移回内部循环的起始处。

状况 3 处,continue label1 同时中断内部循环以及外部循环,直接转到label1 处。

随后,它实际是继续循环,但却从外部循环重新开始。

在状况 4 处,breakl abel1 也会中断所有循环,并回到 label1 处,但并不重新进入循环。

也就是说,它实际是完全中止了两个循环。

如果想在中断循环的同时退出方法,简单地用一个 return 即可。



(1)  一般的 continue 会退回最内层循环的开头(顶部),并继续执行。
(2)  带标签的 continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。
(3)  一般的 break 会中断并跳出当前循环。
(4)  带标签的 break 会中断并跳出标签所指的循环。

在 Java 里需要使用标签的唯一理由就是有循环嵌套,而且你想从不止一个嵌套中 break 或 continue。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值