Naucz się identyfikować martwy kod i nieosiągalny kod w Javie. Może to być zadane w twoim wywiadzie Java problemy kodowania jako puzzle.
Błędy martwego kodu i nieosiągalnego kodu
Aby zrobić pojęcie martwego kodu, w tej układance, dałem kawałek kodu poniżej. Spróbuj zidentyfikować problemy w kodzie, jeśli jest on skompilowany w Eclipse IDE.
Podaję odpowiedź na powyższą zagadkę w następnej sekcji, ale zalecałbym, abyś spróbował najpierw sam. Its for fun only.
Solution – It has dead code
We all must have been faced compilation errors related to „Unreachable code” and some may have noticed „dead code warning”. Powyższa zagadka jest związana tylko z nimi.
W pierwszej metodzie howToDoInJava_method1()
, druga instrukcja print jest nieosiągalna, więc kompilator będzie narzekał z niewiadomych powodów.
W drugiej metodzie howToDoInJava_method2()
, druga instrukcja print jest również nieosiągalna, ale dziwnym trafem kompilator tylko ostrzega.
W trzeciej metodzie howToDoInJava_method3()
również, druga instrukcja print jest nieosiągalna, więc kompilator znowu będzie narzekał.
Dlaczego !!!
Co to jest martwy kod
Nieosiągalny kod w metodzie 2 jest nazywany „Martwym kodem”. Jest to wyłącznie błąd zgłaszany przez kompilator Eclipse, a jeśli skompilujesz powyższą klasę za pomocą „javac”, wbudowany kompilator Javy będzie narzekał tylko na dwie pozostałe metody. .
Cytat ze specyfikacji języka Java –
„Chodzi o to, że musi istnieć jakaś możliwa ścieżka wykonania od początku konstruktora, metody, inicjalizatora instancji lub statycznego inicjalizatora, który zawiera oświadczenie do samego oświadczenia. Analiza bierze pod uwagę strukturę oświadczeń.
Z wyjątkiem specjalnego traktowania instrukcji
while
,do
ifor
, których wyrażenie warunkowe ma stałą wartość true, wartości innych wyrażeń nie są brane pod uwagę w analizie przepływu”.
Co to oznacza, to że blok 'if'
nie jest brany pod uwagę podczas określania kodu nieosiągalnego. Ponieważ jeśli przejdziesz przez jedną ze ścieżek instrukcji 'if'
, możesz dotrzeć do drugiej instrukcji print. Wszystko zależy od kompilatora, który określa to w czasie kompilacji.
W pozostałych dwóch instrukcjach kompilator określił nieosiągalność, więc zgłasza błąd.
Jeśli ponownie napiszemy drugą metodę w ten sposób.
public void howToDoInJava_method2() {System.out.println("how to do");if (true) {return;}else{return;}System.out.println("in java");}
Teraz kompilator określa, że w żaden sposób nie może dotrzeć do ostatniej instrukcji print, więc 'javac'
ponownie zgłasza nieosiągalny kod również dla tej drugiej metody.