无法访问的Java代码

时间:2015-09-02 18:59:41

标签: java exception

当我尝试编译此代码时,第41-45行给出了一个“无法访问的代码”语句。当我输入几行来处理异常时,会发生同样的事情。我有什么不对劲吗?这是SAMS在24小时内自学Java一书中的修改示例代码。用它作为复习。

import java.util.*;
import java.util.concurrent.TimeUnit;
public class Clock {

public static void main(String[] arguments) {
    Calendar now = Calendar.getInstance();
    int hour = now.get(Calendar.HOUR_OF_DAY);
    int minute = now.get(Calendar.MINUTE);
    int month = now.get(Calendar.MONTH) + 1;
    int day = now.get(Calendar.DAY_OF_MONTH);
    int year = now.get(Calendar.YEAR);

    //Display greeting
    if (hour < 12){
        System.out.println("Good Morning! \n");
    }else if (hour < 17){
        System.out.println("Good afternoon! \n");
    } else {
        System.out.println("Good evening! \n");
    }
    //Time message start
    while(1 < 2){
         try
            {
                final String os = System.getProperty("os.name");

                if (os.contains("Windows"))
                {
                    Runtime.getRuntime().exec("cls");
                }
                else
                {
                    Runtime.getRuntime().exec("clear");
                }
            }
            catch (final Exception e)
            {
                //  Handle any exceptions.
            }
        }
//Errors occur here
        try { 
            TimeUnit.SECONDS.sleep(100);
        }   catch (InterruptedException e) {
            //Handle exception
            }
//Errors end here
            System.out.println("The time currently is:" + hour + ":" + minute);
            System.out.println("Date: " + month + "/" + day + "/" + year);
        }
    }

5 个答案:

答案 0 :(得分:6)

那里的代码无法访问,因为while循环条件1 < 2始终为true,因此您始终处于while循环中。为避免这种情况,您可以:

  • while循环条件更改为可能为false的内容。
  • 在while循环的某处添加break语句,退出它。

答案 1 :(得分:2)

while循环永远不会中断,因为1 < 2始终为真。因此,永远不会到达while循环之后的部分,因此编译器错误。

答案 2 :(得分:0)

你有一个没有break语句的无限循环。

答案 3 :(得分:0)

由于你的while循环是一个无限循环,所以你的代码永远不会到达你的这个块。

//Errors occur here
    try { 
        TimeUnit.SECONDS.sleep(100);
    }   catch (InterruptedException e) {
        //Handle exception
        }
//Errors end here
        System.out.println("The time currently is:" + hour + ":" + minute);
        System.out.println("Date: " + month + "/" + day + "/" + year);
    }

作为您的代码

while(1 < 2){
     try
        {
            final String os = System.getProperty("os.name");

            if (os.contains("Windows"))
            {
                Runtime.getRuntime().exec("cls");
            }
            else
            {
                Runtime.getRuntime().exec("clear");
            }
        }
        catch (final Exception e)
        {
            //  Handle any exceptions.
        }
    } // from here again start from loop staring point and looping this again and again

所以在编译时编译器会警告你第二次try块和rest语句是不可达的。你的程序永远不会执行这个块。这就是它说不可达的原因。

答案 4 :(得分:0)

你有一个无限循环。 1总是小于2.

建议:

  1. 使用while(true)并设置中断
  2. 不要把你的try / catch放在一个循环中。它只执行一次检查,循环似乎没必要。