В этой статье на примерах анализируется разница между переменными-членами и локальными переменными в Java. Поделитесь этим со всеми для справки. Конкретный анализ заключается в следующем:
Переменные-члены: частные переменные, определенные в этом классе, принадлежат этому классу.
Создайте и используйте переменные-члены для копирования кода. Код выглядит следующим образом: public class Person {.
Строковое имя;
Струнный секс;
средний возраст;
двойная высота;
public static void main(String arges[])
{
Человек p=новый Человек();
p.name="Сяо Хуан";
p.Sex="Мужской";
стр.возраст=20;
п.Высота=1,7;
System.out.println("Name:"+p.name+",Gender"+p.Sex+",Age:"+p.age+",Age:"+p.Height);
}
}
Процесс инициализации переменной-члена
1. Инициализация класса
Для инициализации класса: Инициализация класса обычно инициализируется только один раз, а инициализация класса в основном инициализирует статические переменные-члены.
Компиляция класса определяет процесс инициализации класса.
Файл классов, созданный компилятором, в основном вносит следующие изменения в классы, определенные в исходном файле:
1) Сначала объявите переменные-члены внутри класса в том порядке, в котором определены статические переменные-члены.
2) Инициализируйте в соответствии с последовательностью инициализации переменных-членов исходного класса Java.
Соответствующее преобразование между классом Java и скомпилированным классом выглядит следующим образом:
Исходный файл:
Скопируйте код следующим образом: public class Person{
public static String name="Чжан Сан";
public static int age;
статический {
возраст=20;
System.out.println("Возраст инициализации");
}
общедоступный статический строковый адрес;
статический {
адрес="Пекин";
возраст=34;
}
public static void main(String[] args) {
System.out.println(имя);
System.out.println(возраст);
System.out.println(адрес);
}
}
Когда исходный код Java преобразуется в файл класса, он преобразуется в код, аналогичный следующему:
Скопируйте код следующим образом: public class Person{
общедоступное статическое имя строки;
public static int age;
общедоступный статический строковый адрес;
статический {
name="Чжан Сан";
возраст=20;
System.out.println("Возраст инициализации");
адрес="Пекин";
возраст=34;
}
public static void main(String[] args) {
System.out.println(имя);
System.out.println(возраст);
System.out.println(адрес);
}
}
Последовательность инициализации выполняется последовательно в соответствии с последовательностью инициализации соответствующих переменных-членов класса после преобразования, поэтому все статические переменные-члены сначала объявляются, а затем присваиваются, а порядок назначения также основан на порядке, в котором статические переменные-члены инициализируется в исходном коде. Примечание. Определение переменной-члена и ее непосредственная инициализация эквивалентны ее инициализации в статическом блоке кода, в том порядке, в котором они определены в исходном коде.
локальные переменные
Локальная переменная: созданная в теле метода, к этой переменной нельзя получить доступ за пределами тела метода.
Создание и использование локальных переменных (локальным переменным должно быть присвоено значение, переменным-членам не может быть присвоено значение)
Скопируйте код следующим образом: public class Person {
public static void main(String arges[])
{
String name="Сяо Хуан";
Строковый секс="Мужской";
интервал возраста = 20;
двойная высота = 1,70;
System.out.println("Имя:"+имя+",пол"+Пол+",возраст:"+возраст+",возраст:"+Рост);
}
}
Посмотрите пример и скопируйте код. Код выглядит следующим образом: public class PassTest {.
public static void main(String args[]) {
StringBuffer a = новый StringBuffer («а»);
StringBuffer b = новый StringBuffer("b");
а(а, б);
System.out.println(а);
System.out.println(б);
PassTest p = новый PassTest();
ПК();
}
static void a(StringBuffer a, StringBuffer b) {
а = а.добавление (б);
б = а;
}
}
В соответствии с областью использования локальных переменных результат должен быть ab, но на самом деле результат действительно ab b. Почему?
Это вопрос передачи ссылок на параметры. Если это ссылка, то передаваемая информация должна быть копией той же ссылки.
b=a в методе a изменяет ссылку копии b на =a, но не влияет на b в основном.
a = a.append(b); В основном a.append(b); Это предложение изменяет значение, указанное в ссылке, поскольку a в main также указывает на тот же объект, поэтому вывод равен ab b
Если a = a.append(b); будет выведено a = new StringBuffer("ab");
Посмотрите на следующие две программы:
Процедура первая:
Скопируйте код следующим образом: Переменная общедоступного класса.
{
интервал я;
недействительный тест()
{
интервал j=8;
если (j == я)
System.out.println("Равно");
еще
System.out.println("Не равно");
}
public static void main(String[] args)
{
Переменная v=новая переменная();
v.тест();
}
}
Процедура вторая:
Скопируйте код следующим образом: Переменная общедоступного класса.
{
недействительный тест()
{
интервал я;
интервал j=8;
если (j == я)
System.out.println("Равно");
еще
System.out.println("Не равно");
}
public static void main(String[] args)
{
Переменная v=новая переменная();
v.тест();
}
}
Первая программа работает нормально и компилируется без ошибок. При компиляции второй программы будет выдана следующая ошибка:
D:Programjavatest>javac Variable.java
Variable.java:9: Возможно, переменная i еще не инициализирована.
если (j == я)
^
ошибка
Причина возникновения такой ошибки заключается в том, что: переменные-члены имеют значения по умолчанию (те, которые изменены Final, а не статические, должны быть назначены явно), а локальные переменные не будут назначены автоматически.
Тело класса разделено на две части. Переменные, определенные в части определения переменных, называются переменными-членами класса, а переменные, определенные в теле метода и параметрах метода, называются локальными переменными.
Разница между локальными переменными и переменными-членами
Локальные переменные описывают атрибуты в теле метода, а переменные-члены описывают атрибуты в объекте.
Переменные-члены можно изменять с помощью модификаторов public, protected, default, Private, static и Final, тогда как локальные переменные можно изменять только с помощью модификатора Final.
Переменные-члены создаются в куче, а локальные переменные создаются в стеке.
Локальные переменные имеют системные значения по умолчанию. Локальные переменные не имеют системных значений по умолчанию и должны назначаться вручную.
Я надеюсь, что эта статья будет полезна каждому, кто занимается программированием на Java.