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