我爱电脑技术论坛's Archiver

麦迪 发表于 2008-4-16 06:43

关于Java编程语言中的return语句实例介绍

众所周知,return 只能用在有返回类型的函数中,但是有返回值的函数一定要有return吗?return都可以用在函数的哪些地方呢?这是本文需要讨论的问题。 %w#hF n{$u;M
(O;S A3j F/PNEA
i5? zI%wA z
例一: Io!B-j|7?c;dZ

0a g2c xgx!_ $n$M'r-f^?
class test {
5]] d7kx ?(N*@2R
Y~:} Fe9zs:HV public String test() { ,qd)H ^m f'm
"t$o.IDs8KF
if(true){ ,K`p&Z8F

4c6UNL'i4{is return "";
d+HUgI0h9O%]
)J` Ap:\)[7] }
/[9@x~u)J
;^b)WT?;wAA else{
X-oqUuy1Kj
)[Os$K'_b7vK return ""; 9X c.oJ@3Wa*?u5P

f6o,BE|3e G } p2EQeiE6T5i/w M
_"z_0iP/vy*L%j oU.i
} H2hwwxSN ?.U

pp3y:^f0m-\*h g } "@E9V*Y#??GG)w
8reo+`#b'D
s~b3O(PqL
上面这样即可通过编译,但是下面这两个例子却不能通过编译: 4f7Z tJu0JYJ8D
3@8b3SBd7V.F:~;MV
4Y r!h5X/G2fF g[
(一)
?*Ty9v A;H L-kVP d}Et"c@
class test {
,Z#C.|}j? 1Q(B%KMB.G0g!R
public String test() { x_#|6]/M{V

R ]8MM8hv:V,Vp[ if(true){ &WpH|vZ&f'X2F"m
+}}~5u*^
return "";
W F"^1wa7I9r3m G+k6j.k4OA-Cy
} u3T ^m3Z
%nBTs*s]0xy `
}
oZr T:lL qXtY}U4i
} 3TH]+m#j!F*{
3[h0y"z$M4mP M
TE%jH,||tAY
(u \/i,s;Dsq
(二)
@.imOmJ TAb A#H'a;Pf7qm
class test { \?DB{y;I:c8{

4c(^R4H$e Pu public String test() { -lXF;f`%X&h1g

w~%r-y[i%] if(isTrue()){
'g*T%[8vI3fju
M5\0JC7F \CC6x return "";
LYa3h!uW6H&{ Ip
P:W.UI u{_ }
Zn6x&h? jm8gC
4eV/pd^ else if(!isTrue()){//两个if里的判断包括了所有的可能性,但是还是编译期error F6J l1i O;u
7BTq pHqKPX/i$u,n
return "";
+y*hk{5H:t;[aO"_ 3R+iUd`;S\0\`+e
}
6FT!C?4b+t7V%J"Hl
u.h$`9c(XAq]4j~ }
#m x)h2p1p)ht]7S "\7sEm_8@ Iy
boolean isTrue(){ l$[c3Px,?6WQ
0I\`(m5d#W t
return true; ,Z0o g.Df7t

qvCLQ+i{ ~d } ^fQ O$hw(D"| Z~
}z5Uc.w%] C)_
} *gL#UiUd e5g1W
.vPg/Qp4R^
#W%N2W?$?P+ci{J%||
结论1:
`;C ZQQ u'x
!X,b%qU~9w8m5T s/m 对于(一),这是因为java编译器认定单独的if语句只在当一定条件满足情况下才执行,它认为if不会有任何情况下都能执行的能力。 2e;\3p ?6p

:{K.M+d/gnxJq 对于(二),这是因为java编译器对if else 语句能够全面囊括所有情况的能力只限定在的if...else(或if...else if...else)时,而不包括if...else if。 ~9^k4R.R H

Q.]9s sN&|7T
(` dxU%V\@ 再看例二: (T| B+K:v,B4y5W$V
,tx y_sy

8tBY#O9V0KhkJZt class test {
\(f[;}JE6B1y *l?}#BF{%L
public String test() {
2N.jD6C,{qi }"M1r:}3a #F K _L8vn5G{?
while(true){
1N6To W2@G o6z)qT"m
@(p'T)W/\ xr6~5V.Fey return "";
f}e.]V$S1T _K x @
`F dJ \;ssNf }
U*V`i1G[%e}
(Mgg6`%M(V } 'n)} B(U5e(je|t

\v4]G9\"[B&]5[$_A } 3b/B`Y%QpL

#]0nhlR9a!B 上面这样即可通过编译,但是下面这样不行: "ng*h?8_d
i"CJ,@*oj N2u?p

:kCjDosv class test {
[8T~F:L+xu,HMW
4m*p qw`'Kq:D^ public String test() {
#^X9y L!EN
r c:j6V D-[ X1Z Mn while(isTrue()){ d\o }7vh

V2F$Mw4lh;CG G3Y3y return "";
2}7Q1a sP we ,qF+^P1Q P
} w'_/r t"VS/D

g:sdM~"V\ }
.Y&dJ8roBG
1@ {3r;j-{hP boolean isTrue(){ q^O(A(IE s _%D

9Vp6M t&w.je return true; "aE0m R'Uk%n

*~'{'{/gz.a } 9D{rH `%m ]
E)HuGO k!QC3c
} 'V.K;Pu_"u4P*X)g

2Z3b!d)@D^ dO1X LB L*e
结论2: rr pix I s*Lr
\6g8v,?8|9KS
这是因为编译器认为while语句有在任何情况下都能执行的能力,但是只在入参为true的情况下有该能力。 q A(t,E9_g9b4o'Q|!Y
j4W8cg6G#j"{Va

1e3L6Ij V.|H%f 再看例三:
~ S?o%_4qH 7S4LvlQ$D@

(E4T LQ#L!n public class test {
W q N'rL(P Fq:~${~s1\S ?-a
String test() throws Exception{ )Z t Mk7RT'\/mo

f.k7T/W2r(} I"J8w5Yj){U.F
throw new Exception();//抛出异常后,跳出程序,程序中止
%v%@x|!ZN9hU -H*s.T0ry3\qRc ]
} zd]8B$m(}

3p.A9r#i2N }
)Q2q*t:h'_iL wn'Vd~
结论3: 8Q5R9l]_m U+k

W3h:d t#kxAw)i5h'} 如果函数中创建了异常,并抛出,则该函数可以不返回值。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.