目录
return
用于方法的返回退出:
- 有类型返回值:必须显示 return 语句返回。
- void 无类型返回值:可以显示的 return 返回退出方法,默认有隐式的 return 语句,所以可以不写。
在 C 语言中,函数里就要用 ( return 0; ) 进行返回退出的作用。
在 Java 中也是如此,如下方法中末尾并没有显示的 return 语句,但是有隐式的 return 语句:
public static void main(String[] args) {
System.out.println("Hello World");
// 隐式 return 语句
}
这是 Java 编译器在编译 .Java 文件时,就会加进去的。
break & continue & 标签 & goto
break 和 continue 都是用于程序的流程控制的:
- break:默认退出当前所在循环(一层循环)。
- continue:默认从当前所在循环继续执行,只能用在循环语句中。
- 标签:在 Java 中标签及用于定位,也可以理解为为语句起名字,如(myFor : for ( ; ; ) {})标签命名方式 = name + : 号,标签的定义一般用于嵌套循环中。因为 break 和 continue 关键字不指定 “谁” 只能控制当前代码块,标签提供给 break 和 continue 指定作用在哪个标签上。
- goto:在编程界中饱受争议的关键字,在高级程序设计语言中现在是被保留的关键字,在汇编语言中还是被使用的,编程语言一开始就有 goto 了,因为 goto 在程序代码中可以随意跳转,如果大量使用,会导致程序难以阅读和维护(goto 在汇编中乃还是解决问题的关键)。所以在高级程序设计语言中 goto 关键字被保留,从而使用 break 和 continue 进行替代,并加以限制。
break 使用标签
如下代码中,寻找数组中前两个相同的数并进行运算后返回。
System.out.println(findDuplicate(new int[] {3, 1, 3, 2, 4, 2}));
public static int findDuplicate(int[] nums) {
int result = -1;
int length = nums.length;
for (int x = 0; x < length; x++) {
int num = nums[x];
for (int y = x + 1; y < length; y++) {
if (nums[y] == num) {
result = num;
break;
}
}
}
return result * result;
}
输出:
上述代码中,双层for循环,查找到重复数字后【3】,break 只能退出一层for循环,之后便继续执行循环,导致把整个 for 都遍历完,找到重复数字【2】
4
更改代码:为第一层循环加上标签名
标签命名方式 = name + : 号 ,标签名可随意起,但是要遵循 Java 命名规范
public static int findDuplicate(int[] nums) {
int result = -1;
int length = nums.length;
to:for (int x = 0; x < length; x++) {
int num = nums[x];
for (int y = x + 1; y < length; y++) {
if (nums[y] == num) {
result = num;
break to;
}
}
}
return result;
}
输出:
9
其它代码块命名标签演示:
code:{
break code;
}
if1:if (true) {
break if1;
}
for1:for (;;) {
break for1;
}
while1:while (true) {
break while1;
}
do1:do {
break do1;
} while(true);
switch1:switch (0) {
default:
break switch1;
}
//还能起多个标签名,当然这样并没有什么意义
code0:code1:code2:code3:{
break code0;
//break code1;
//break code2;
//break code3;
}
break & continue 使用标签范围
TAG_MY: break TAG_MY;
OUTER_TAG:
{
INNER_TAG:
{
START_TAG:
for (;;) {
CT_TAG:
for (int i = 0; i < 10; i++) {
continue START_TAG;
// continue OUTER_TAG; // 编译失败
}
}
}
}
- break:能对块级标签和 ; 分号结束语句作用域上的标签起作用。
- continue:只能对迭代作用域上的标签起作用。