CodeGym /Java блог /Случаен /Грешка в недостъпен код на изявление в Java
John Squirrels
Ниво
San Francisco

Грешка в недостъпен код на изявление в Java

Публикувано в групата
Изявлението за недостъпен code е често срещан проблем сред начинаещите в Java. Много начинаещи разработчици бъркат грешката с „мъртъв code“ - друг феномен, свързан с Java. Въпреки че двете са подобни по проявление, има някои разлики, които ще разгледаме в тази публикация. Освен това ще разберете кои са най-честите причини вашият компилатор да връща недостижим codeов израз и ще откриете някои лесни корекции, за да накарате codeа да работи отново.

Какво е недостижим code?

По дефиниция недостъпен оператор е този, който няма да бъде изпълнен от компилатор, когато изпълнявате готов за внедряване code. Изявление за връщане на недостъпен code обикновено е знак за логическа грешка в програмата. Въпреки че има няколко причини, поради които в крайна сметка имате такова твърдение, във всички случаи недостъпният code е излишен, затрупва вашата програма и трябва да се избягва на всяка цена.

Недостъпен code срещу мъртъв code

В общността на разработчиците понятията „недостъпен“ и „мъртъв“ code са практически синоними. Въпреки това, ако сте придирчиви, когато четете documentацията, може да видите, че указанията за разработка често споменават двете поотделно. Има ли разлика между мъртъв и недостижим code? По принцип разликата между двете грешки е в начина, по който компилаторът реагира на тях. Ако codeът, който въвеждате в компилатора, е недостъпен , ще получите грешка по време на компorране в известието на Java. Ако вашето изявление е „ мъртъв code “, няма да има грешки по време на изпълнение - разработчикът ще получи следното системно предупреждение:

class DeadCode {
    void deadcode_Method(boolean b) {
    System.out.println("Reachable statement");
        if(true) {
        return;
        }
    System.out.println("Unreachable statement"); // dead code
    }
}
Тъй като няма директна грешка на компилатора в случай на мъртъв code, е по-трудно да се открие. Въпреки това, ако следите внимателно връщанията на System.out.printIn , улавянето на мъртъв code не трябва да ви създава проблеми.

Защо получавате недостъпни codeови изявления

Добрата новина е, че е лесно да се проследи причината за проблеми с недостъпен code. Има три основни причини, поради които вашият компилатор продължава да връща грешки:
  • Изявления за прехвърляне. Ако нарушите codeа си с израз за връщане, нищо след „return = true“ няма да бъде изпълнено.
  • Безкраен цикъл - нито един code, който сте написали след безкрайния цикъл, също няма да бъде изпълнен, тъй като системата ще продължи да повтаря действието на цикъла. По този начин, когато преобразувате codeа си в byte code, компилаторът ще изпрати грешка в недостъпен code.
За да ви помогнем да маркирате и коригирате тези проблеми, нека ги увеличим.

Изявления за връщане

Инструкцията за връщане е част от групата ключови думи Transfer, което означава, че прекратява вашия метод. Полезно е за разделяне на функции и помага да поддържате codeа си четим и чист. Въпреки това, тъй като не можете да добавяте нови изрази към функцията след return = true, опитът да продължите функцията след ключовата дума ще ви даде грешка на компилатора „Недостъпен code“. Нека да разгледаме пример за неправилно боequalsе с “return = true” и начина, по който компилаторът реагира на него.

class GFG {
    public static void main(String args[])
    {
  
        System.out.println("My code will run");
  
        return;
  
        // ironically, this code will never run
        // here’s an unreachable code message a developer gets.
        System.out.println("My code will run");
    }
}
Ето How злоупотребата с оператор за връщане ще бъде показана в компилатора:

prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
За да затвърдите наученото, ви предлагаме да гледате видео урок от нашия курс по Java

Изявления за прекъсване

Изявленията за прекъсване са друг тип ключови думи, с които трябва да внимавате, когато пишете Java функции. По дефиниция ключовата дума break се използва за прекратяване на цикъл. В примера по-долу, когато разработчикът излезе от цикъла, той вече няма да може да изпълни оператора на ред 8 - по този начин компилаторът ще покаже грешка в недостижим оператор. Ето примерния code, който ще доведе до изявление за недостижим code:

public class JavaCodeGeeks
     {
    public static void main(String[] args) {
     for(int i=1;i<5;i++)
        {
        System.out.println(i);
        break;
        System.out.println("Code after break");
        }
    }
}
Разглеждайки грешката от гледна точка на компилатора, ще получите следното съобщение за грешка.

JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
                ^
1 error

Продължете изявленията

Continue е ключова дума за контрол на цикъл, използвана за повтаряне на действия. Всеки път, когато искате изпълнението на цикъл да започне от нулата самостоятелно, добавете continue към вашия code. Изявлението е полезно, за да помогне на разработчиците да изберат кои изрази от цикъла искат да повторят и тези, които не биха поставor в повторението. Въпреки че продължаването е проста ключова дума за използване, липсата на пълно разбиране за това How работи води разработчиците до капана на „недостъпния code“. Тъй като, след като се срещне с continue, системата ще повтори цикъла, ключовата дума няма да може да достигне до изразите, които я следват. Кажете, че имате следния code:

public class JavaIsFun
{
    public static void main(String[] args) {
        for(int i=0;i<8;i++)
        {
            System.out.println(i);
            if(i==5)
            {
                continue;
                System.out.println("Coding after continue");
            }
        }
    }
}
Системата няма да изпълни вашето изявление „Кодиране след продължаване“ - компилаторът ще ви уведоми за това веднага.

JavaIsFun.java:10: error: unreachable statement
                                System.out.println("Coding after continue");

Безкрайни цикли

Сценарий, който е подобен на примерите за случаи на използване на ключови думи „прекъсване“ и „продължаване“, е този на безкраен цикъл. Когато проектира безкраен цикъл, разработчикът трябва да помни, че нито едно изявление след него никога няма да се изпълни. По този начин, ако не прекъснете цикъла, целият code, написан след това, ще бъде недостъпен. Ето един интересен пример за неправилно боequalsе с безкраен цикъл, за да проверите:

public class JavaCodeGym
{
    public static void main(String[] args) {
        while(true)
        {
            System.out.println("Hey there");
        }
        System.out.println("Nice to see you");
    }
}
Можете ли да познаете къде се крие грешката? Компилаторът ще го посочи веднага след като стартирате codeа си:

//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
                System.out.println("Nice to see you");
‘
Тъй като има безкраен цикъл преди „Радвам се да те видя“ , операторът никога няма да се изпълни и ще продължи да връща грешка в недостъпен code.

Заключение

За да избегнете недостъпен code, трябва да се уверите, че има поток към всички ваши системни изрази. Повечето проблеми с недостижимия code на Java са свързани с обработката на ключови думи и лошото управление на цикли. В края на деня двойната проверка на вашия code е единственият изпитан и надежден начин да избегнете недостижими грешки в codeа. Не трябва да се обезсърчавате и от тях - навикът да създавате плавен Java code идва с години опит и практика. Така че, нека ударим IDE и да започнем да създаваме страхотни софтуерни продукти.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION