последний модификатор:
Окончательно измененные переменные-члены должны иметь начальное значение, явно указанное программистом.
Поле класса: начальное значение должно быть указано в статическом блоке инициализации или при объявлении поля.
Поле экземпляра: Поле должно быть объявлено в нестатическом блоке инициализации или начальное значение должно быть указано в конструкторе.
конечные локальные переменные: должны быть явно инициализированы программистом.
В чем разница между окончательно измененными базовыми переменными и переменными ссылочного типа?
Базовые переменные, измененные финалом: базовые переменные не могут быть переназначены.
Окончательная модифицированная ссылочная переменная: гарантируется только то, что адрес, на который ссылается этот ссылочный тип, не изменится, то есть он всегда ссылается на один и тот же объект, но этот объект может полностью измениться.
Скопируйте код кода следующим образом:
/**
*/
импортировать java.util.*;
публичный класс Demo5
{
public static void main(String[] args)
{
окончательный B b = новый B (22);
б.тест();
// Законно изменяем значение, но все равно указываем на ту же ссылку
б.setAge(20);
System.out.println(b.getAge());
// незаконно
// б = ноль;
б.тест2();
}
}
/**
fianl изменяет переменные-члены
*/
класс А
{
//законный
окончательный интервал а = 10;
//Указываем начальное значение в конструкторе или блоке инициализации
последняя строка ул;
окончательный int c;
финальный статический двойной d;
{
стр = "Привет";
//незаконно
// а = 100;
}
статический
{
д = 100;
}
// Конструктор может указать начальные значения для Полей, не указанных в блоке инициализации
publicA()
{
// незаконно
// стр = "ддд";
в = 1000;
}
публичное двойное изменение()
{
// Вы не можете указать начальное значение для Final в обычном методе
// возвращаем d = 1000,90;
вернуть 0;
}
}
/**
fianl изменяет объекты массива
*/
класс Б
{
частный возраст;
publicB()
{
}
публичный B(int age)
{
this.age = возраст;
}
общественная пустота setAge (int age)
{
this.age = возраст;
}
публичный int getAge()
{
вернуть this.age;
}
публичный тест на недействительность()
{
окончательный int[] arr={23,434,56,898};
System.out.println(Arrays.toString(arr));
Массивы.сортировать(обр);
System.out.println(Arrays.toString(arr));
обр[2] = 200;
System.out.println(Arrays.toString(arr));
//Следующее переназначение Arr незаконно
// Арр = ноль;
}
/**
Углубите свое понимание финала
*/
публичный недействительный тест2()
{
String str1 = «Лучшее будущее»;
//Прямая ссылка на «Лучшее будущее» в пуле констант
String str2 = "Красиво"+"Будущее";
//истинный
System.out.println(str1 == str2);
Строка s1 = «Красиво»;
Строка s2 = «Будущее»;
Строка s3 = s1+s2;
//false s1 s2 — это просто переменная, которую невозможно определить во время компиляции
//Если вы хотите определить это во время компиляции, используйте Final для изменения s1 s2
System.out.println(str1 == s3);
}
}
Ребята, вы что-нибудь знаете о модификаторе Final в Java? Думаю, это было ясно объяснено в комментариях, поэтому я не буду здесь вдаваться в подробности.