Статические ключевые слова Java и статические переменные Java и статические методы
Статический модификатор может использоваться с переменными и методами, чтобы указать, что он «статический».
Статические переменные и статические методы могут быть доступны через имена классов, и нет необходимости создавать объект класса для доступа к статическим членам класса, поэтому члены, измененные статическими, также называются переменными класса и методами класса. Статические переменные отличаются от переменных экземпляра, и переменные экземпляра всегда доступны через объекты, поскольку их значения различаются между объектами.
Пожалуйста, смотрите следующий пример:
Общедоступный класс {статический int i = 10; i);
Результаты работы:
Переменная класса I = 10 переменная экземпляра j = 20
Статическое распределение памяти
Статические переменные принадлежат классам и не принадлежат к каким -либо независимым объектам, поэтому вы можете получить доступ к статическим переменным без создания экземпляров класса. Этот результат заключается в том, что компилятор создает только копию статических переменных для всего класса, то есть только одно пространство памяти. Переменные экземпляра различаются.
Пожалуйста, смотрите следующий код:
Общественный класс {Статический интюдж; ; obj2 .j = " + obj2.j);}}
Результаты работы:
obj1.i = 10, obj1.j = 20obj2.i = 10, obj2.j = 0
Примечание. Хотя статические переменные также можно получить через объекты, они не рекомендуются, и компилятор также будет генерировать предупреждения.
В приведенном выше коде я является статической переменной. Это связано с тем, что OBJ1.i и OBJ2.i указывают на одно и то же пространство памяти, в то время как OBJ1.J и OBJ2.J указывают на разные пространства памяти.
Примечание. Статическая переменная будет инициализирована при загрузке класса. То есть до тех пор, пока класс загружен, он будет инициализирован независимо от того, используете ли вы эту статическую переменную или нет.
Сводка: переменные класса изменяются с помощью статического ключевого слова. Изменения в переменных будут влиять на другие объекты. Существует два способа доступа внешними: доступ через объекты или доступ через имена классов.
Статический метод
Статический метод - это метод, который не может выполнять операции на объекте. Например, метод POW () класса математики является статическим методом с синтаксисом математики. Pow (x, A), который используется для расчета силы a of x, и нет необходимости создавать любую математику объекты при использовании.
Поскольку статические методы не могут управлять объектами, переменные экземпляра не могут быть доступны в статических методах и могут получить только статические переменные их собственного класса.
Статический метод может использоваться в следующих ситуациях:
Метод не должен получить доступ к состоянию объекта, и его необходимые параметры предоставляются явными параметрами (например, math.pow ()).
Метод должен только получить доступ к статическим переменным класса.
Читатели должны заметить, что Main () также является статическим методом, который не работает на каких -либо объектах. Фактически, во время запуска программы нет объектов, метод Main () является записью в программу и будет выполнен, и будут созданы объекты, требуемые программой.
Сводка статических переменных и статических методов:
Статический метод класса может получить только статические переменные;
Статический метод класса не может напрямую вызывать нестатические методы;
Если позволяет разрешение на контроль доступа, статические переменные и статические методы также можно получить через объекты, но не рекомендуются;
Текущий объект не существует в статическом методе, поэтому его нельзя использовать, и, конечно, супер не может быть использован;
Статические методы не могут быть перезаписаны нестатическими методами;
Конструктор не разрешает объявление статической;
Локальные переменные не могут быть изменены со статикой.
Примеры статических методов:
открытый класс демо {static int sum (int x, int y) {return x + y; "10 + 10 =" + sum);
Результаты работы:
10+10 = 20
Статический метод не требует какого -либо экземпляра класса, которому он принадлежит, будет вызван, поэтому нет значения этого, и переменная экземпляра не может быть доступна, в противном случае он вызовет ошибку компиляции.
ПРИМЕЧАНИЕ. Переменные экземпляра могут быть доступны только через объекты и не могут быть доступны через классы.
Статический инициализатор (статический блок)
Блок - это кусок кода, окруженный брекетами. Статический инициализатор - это статический блок, который существует в классе и вне метода. Статические инициализаторы выполняются только один раз при загрузке класса (когда класс сначала используется), и часто используются для инициализации статических переменных.
Пример кода:
Общественный класс Демонстрация {Public Static INT I; " + i);} public static void main (string [] args) {system.out.println (" demo.i = " + demo.i); new demo (). test ();}}
Результатом операции является:
Теперь в статическом блоке.demo.i = 10test Метод: i = 10
Статический импорт
Статический импорт является новой функцией Java 5, используемой для импорта статических переменных и статических методов классов.
Как правило, мы пишем это в классах импорта:
Import PackageName.className;
или
Импорт PackageName.*;
И статический импорт может быть написан так:
Импорт static packageName.classname.methonname;
или
Импорт static packageName.classname.*;
После импорта вы можете напрямую вызвать статический метод с именем метода в текущем классе, и вам больше не нужно использовать classname.methodName для доступа к нему.
Для часто используемых статических переменных и статических методов их можно импортировать статически. Преимущество статического импорта состоит в том, что он может упростить некоторые операции, такие как System System.out.println (); и прямо в следующий раз.
Пожалуйста, смотрите следующий код:
Импорт статический java.lang.system.*; import static java.lang.math.random; демо открытого класса {public static void main (string [] args) {out.println («создается случайным числом:» + random () );
Результаты работы:
Сгенерированное случайное число: 0,05800891549018705
Окончательное ключевое слово Java: Блок наследование и полиморфизм <br /> в Java, когда объявление классов, переменных и методов ключевое слово можно использовать для его изменения. Данные, модифицированные финалом, имеют характеристики «окончательного состояния» и означает «окончательный». Конкретные правила следующие:
Класс, модифицированный финалом, не может быть унаследован.
Последний метод модификации не может быть переписан с помощью подклассов.
Переменная, измененная с помощью окончательной (элементной переменной или локальной переменной), становится постоянной и может быть назначена только один раз.
Переменная члена, измененная окончательной, должна быть назначена одновременно с объявлением. использовал.
Локальная переменная, измененная окончательной, может только заявить, что она не назначает, а затем будет назначена за один раз.
Окончательный обычно используется для изменения данных, которые не могут быть изменены по желанию, чтобы избежать неправильного использования, таких как методы для реализации методов математического треугольника, операций по эксплуатации и других функций, а также математическая постоянная π = 3.141593, E = 2,71828 и соавт.
Фактически, для обеспечения окончательного состояния, класс java.lang.math, который предоставляет вышеуказанные методы и константы, также был определен как окончательный.
Следует отметить, что если переменная, которая ссылается на тип (тип любого класса), помечена как окончательная, то переменная не может указывать на любой другой объект. Но содержание объекта может быть изменено, потому что только сама ссылка является окончательной.
Если переменная отмечена окончательной, результатом является то, чтобы сделать ее постоянной. Желание изменить значение окончательной переменной вызовет ошибку компиляции. Вот пример правильного определения окончательных переменных:
public final int max_array_size = 25;
Константы не могут быть унаследованы, потому что они имеют окончательную модификацию.
Пожалуйста, смотрите следующий код:
Общественный окончательный класс Демо {Public Static Final int total_number = 5; = ++ total_number; Выполнить вторичное назначение}}
Финал также может использоваться для изменения классов (до ключевого слова класса), чтобы предотвратить получение класса. Это делается по соображениям безопасности, потому что необходимо убедиться, что после ссылки на строку она должна быть строкой строки класса, а не строкой какого -либо другого класса (класс строки может быть злонамеренно унаследован и подделан).
Методы также могут быть изменены окончательными, а методы, измененные в конечном итоге, не могут быть перезаписаны; Как только класс будет объявлен окончательным, методы, содержащиеся в этом классе, также будут объявлены неявно как окончательный, но переменная нет.
Метод, модифицированный Final, является статическим связыванием и не будет производить полиморфизм (динамическое связывание). В Java методы, которые изменяются статическими или частными, будут неявно объявлены как окончательные, поскольку динамическое связывание не имеет значения.
Поскольку динамическое связывание потребляет ресурсы и часто не является необходимым, некоторые программисты считают, что, если нет достаточной причины для использования полиморфизма, все методы должны быть изменены с помощью окончательного.
Это понимание немного экстремально, потому что мгновенный компилятор в JVM может отслеживать информацию о операции программы в режиме реального времени и может точно знать отношения наследования между классами. Если метод не перезаписан и является коротким, компилятор может оптимизировать его, что называется Inlining. Например, встроенный вызов e.getName () будет заменен доступа к переменной E.Name. Это значимое улучшение, потому что передача ветви, используемая ЦП при обработке инструкций, которые методы вызова будут нарушать политику инструкции предварительного вычинения, так что это считается непопулярным. Однако, если getName () перезаписан в другом классе, компилятор не может знать, что будет делать перезаписанный код, поэтому он не может быть подставлен.