我正在尝试编写一个静态方法,该方法返回计算机MAC地址的字符串(函数本身在此处找到:http://www.mkyong.com/java/how-to-get-mac-address-in-java/)。我遇到了静态函数的return
方面的问题。我得到的错误是missing return statement
。我该如何解决这个问题?
static String returnMacAddress(){
InetAddress ip;
try{
ip = InetAddress.getLocalHost();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current MAC address: ");
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < mac.length; i++){
stringBuilder.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
return stringBuilder.toString();
}catch(UnknownHostException e){
e.printStackTrace();
} catch(SocketException e){
e.printStackTrace();
}
}
答案 0 :(得分:5)
所有分支都必须返回一些内容,只需在末尾添加return null;
:
static String returnMacAddress(){ // 1.
InetAddress ip;
try{ // 2.
ip = InetAddress.getLocalHost(); // 3. (until return stmt)
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
System.out.print("Current MAC address: ");
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < mac.length; i++){
stringBuilder.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
return stringBuilder.toString(); // 4.
}catch(UnknownHostException e){ // 5.
e.printStackTrace(); // 6.
} catch(SocketException e){
e.printStackTrace();
}
return null; // 7.
}
语法正确 - 但你必须考虑这意味着什么语义,如果这是所需的操作:
修改强>
在这种情况下控制如何流动 - 因为OP在成功执行时询问最后的return null
是否会否定先前的值:
finally
块,那么现在就会执行,甚至可以覆盖返回的值...)在不成功的情况下,(例如UnknownHostException):
finally
块,那么现在就会执行,甚至可以覆盖返回的值...)null
值返回到前一个堆栈帧(代码中为7.)如您所见,在成功的情况下,return null;
语句即使在“实际返回”之后也不会影响返回的值。每当达到返回时,停止当前块的执行。 (如果实际上下文中有一个,则相应的finally块将获得控件)。
虽然finally
块很棘手:请仔细阅读,这将是有用的知识。