Для того, чтобы говорить о роли последнего поворота конечной роли

Эта статья воспроизводится с мая CJ: разговор о роли финале

предисловие

Всегда хотел написать об этой теме. Представители компании также опросили ряд кандидатов, каждый из интервью я буду задавать один из двух вопросов «вы говорите о понимании конечного ключевого слова.» Это просто маленький вопрос, но не стоит недооценивать его, ответ на этот вопрос, а также некоторые простое расширение ищущих работу смогут ли прочный фундамент и будет ли пытливость ума. Хорошо, спускайтесь.

 

Роль конечного ключевого слова

Я считаю, что окончательное использование, большинство людей может случайно сказать три фразы:

1, модифицированный конечный класс не может наследоваться

2, конечные модифицированные методы не могут быть переписаны

3, модифицированные конечные переменные не могут быть изменены

Ключ третье предложение. Модифицированные конечные переменные не могут быть изменены, и то, что нельзя изменить его, является ссылкой на переменную? Внутри содержания или переменной? Или оба не могут быть изменены? Написать пример посмотреть, чтобы узнать:

общественный  класс FinalString
{
    частная ул Строка;
    
    общественного FinalString (String ул)
    {
        это .str = ул;
    }

    общественности Строка getStr ()
    {
        вернуться ул;
    }

    общественного  недействительными SetSTR (String ул)
    {
        это .str = ул;
    }
}
общественный  класс Test
{
    общественности  статической  недействительным основной (String [] арг)
    {
        Окончательное FinalString фс = новый FinalString ( "1" );
        fs.setStr ( "2" );
        System.out.println (fs.getStr ());
    }
}

Выполнить это, вообще никаких проблем. Немного изменил его:

общественности  статической  недействительным основной (String [] арг)
{
     Окончательное FinalString фс = новый FinalString ( "1" );
     Окончательный FinalString FSS = новый FinalString ( "333" );
     фс = FSS;
}

Строка 5 неправильный отчет, «Конечные фс локальные переменные могут не быть назначены». Видимый, последняя модификация является ссылка неизменны переменная вместо цитаты указывают на пункт опорного содержания может быть изменен . Хорошо, что окончательная модификация массива это?

общественности  статической  недействительным основной (String [] арг)
{
    Окончательный String [] strs0 = { "123", "234" };
    Окончательный String [] = {strs1 "345", "456" };
    strs1 = strs0;
    strs1 [ 1] = "333" ;
}

Аналогичным образом , строка 5 отдается «Конечная локальная переменная strs1 не может быть назначена», строка 6 вообще никаких проблем. Переменные и массивы, как и ссылки на неизменное, указывая на ссылочную переменную содержимого . В самом деле, если б FindBugs плагин должен знать , что если код внутри окончательной модификации массива, то код будет переадресован как ошибка FindBugs, чтобы выяснить, потому что «с окончательным модифицирована массив не имеет смысла.»

Далее, давайте посмотрим на окончательные модификациях параметров методы сцены:

общественный  класс Test
{
    общественности  статической  недействительным основной (String [] арг)
    {
        FinalString фс = новый FinalString ( "" );
        A(fs);
    }
    
    частный  статический  вакуум А ( окончательный FinalString фс)
    {
        fs.setStr ( "123" );
        FinalString FSS = новый FinalString ( "22" );
        фс = FSS;
    }
}

Мол, та же линия ошибки 13, строка 11 это не проблема, я считаю, что мы уже знаем почему.

 

резюме

«Справочник» является очень важным понятием в Яве, ссылка для понимания не глубоко, это легко сделать некоторые из их собственных не знают об ошибке. не Модифицированные конечные величины, независимо от того , какие переменные являются переменными, помните неизменны является ссылкой на переменную , а не ссылки на содержание объекта перечисляются . Кроме того, роль этой статьи есть две вещи , которые не упоминаются в финале:

1, модифицированный последний метод, JVM будет пытаться искать кого рядный, что для повышения эффективности Java очень важно. Таким образом, если метод определения не может наследоваться, а затем попытаться определить его как окончательное.

2, модифицированные конечные константы во время компиляции постоянного пула будут зачислены в класс вызова.

рекомендация

отwww.cnblogs.com/alimayun/p/12046462.html