Java流程控制语句Q&A
2021-08-26 15:52:42 61 举报
AI智能生成
Java流程控制语句Q&A
作者其他创作
大纲/内容
break语句
Q: break后面加一个label标签是做什么的?像下面这样:
ABC:
while(t++<5){
for(int i=0;i<n;i++){
if(i==1)
break ABC;
}
}
A: break+label标签 是用于从内部退出多层循环(不再进入循环)
ABC:
while(t++<5){
for(int i=0;i<n;i++){
if(i==1)
break ABC;
}
}
A: break+label标签 是用于从内部退出多层循环(不再进入循环)
continue语句
Q: continue后面加一个label标签是做什么的?像下面这样:
ABC:
while(t++<5){
for(int i=0;i<n;i++){
if(i==1)
continue ABC;
}
}
A: 直接contine到ABC的后面,即用于contine到最外层循环(继续进入循环)
ABC:
while(t++<5){
for(int i=0;i<n;i++){
if(i==1)
continue ABC;
}
}
A: 直接contine到ABC的后面,即用于contine到最外层循环(继续进入循环)
switch的default陷阱
Q: switch的default陷阱1,以下输出什么
int i = 0;
switch (i) {
default:
System.out.println("default");
case 0:
System.out.println("0");
case 1:
System.out.println("1");
}
A: 输出"0 1"
int i = 0;
switch (i) {
default:
System.out.println("default");
case 0:
System.out.println("0");
case 1:
System.out.println("1");
}
A: 输出"0 1"
Q: switch的default陷阱2,以下输出什么
int i = 3;
switch (i) {
default:
System.out.println("default");
case 0:
System.out.println("0");
case 1:
System.out.println("1");
}
A: 输出"default 0 1"
int i = 3;
switch (i) {
default:
System.out.println("default");
case 0:
System.out.println("0");
case 1:
System.out.println("1");
}
A: 输出"default 0 1"
- 1. default都是最后再匹配的
- 2. default是没有匹配项时才匹配
- 3.如果case没有break、return, 那么会一直往下执行, 直到遇到break、return
- 4.case后面不能跟变量,只能是常量
- 5.匹配到default之后,如果没有break还是会一直往下走
try-finally陷阱
Q: return-finally陷阱1: finally能通过修改变量,来更新return的变量值吗
int f() {
int a = 1;
try {
return a;
}
finally {
a=2;
}
}
A: 不能, f返回1。
finally里改变参数的值, 但这时的返回值已经在return的内存位中了, 不能被改变
int f() {
int a = 1;
try {
return a;
}
finally {
a=2;
}
}
A: 不能, f返回1。
finally里改变参数的值, 但这时的返回值已经在return的内存位中了, 不能被改变
Q: return-finally陷阱2: finally里也return时,返回哪个?
int f() {
try {
return 1;
}
finally {
return 2;
}
}
A:返回finally里的,返回2。finally里return的话, 可以改变返回值
int f() {
try {
return 1;
}
finally {
return 2;
}
}
A:返回finally里的,返回2。finally里return的话, 可以改变返回值
Q:throw异常的时候,在finally中做return,那么异常还会抛出吗?
static int f() {
try {
int a = 1/0;
return a;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
return -1;
}
}
public static void main(String[] args) {
System.out.println(f());
}
A:不会,返回-1.
即finaly中做return会中断throw,因此永远不要在finally中去做return操作
static int f() {
try {
int a = 1/0;
return a;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
return -1;
}
}
public static void main(String[] args) {
System.out.println(f());
}
A:不会,返回-1.
即finaly中做return会中断throw,因此永远不要在finally中去做return操作
Q: 子类覆写基类方法时 , 能throws基类方法中不存在的异常吗?像下面这样:
class A{
void f() throws IOException{
}
}
class B extends A{
void f() throws IOException, SQLException {
}
}
A: 不行,直接编译报错。 即子类覆写父类方法时, throws关键字后面跟的异常必须是小于等于父类方法异常的。
class A{
void f() throws IOException{
}
}
class B extends A{
void f() throws IOException, SQLException {
}
}
A: 不行,直接编译报错。 即子类覆写父类方法时, throws关键字后面跟的异常必须是小于等于父类方法异常的。
0 条评论
下一页