Статический - еще одно важное ключевое слово в Java. Это может улучшить выполнение производительности программы и оптимизировать структуру программы. Его основные приложения следующие:
1. переменные элемента, измененные с помощью статических, называемых классовыми переменными/статическими переменными, чтобы реализовать общее использование всех объектов для этого члена.
2. Метод элемента, измененный Static, называемый метод класса/статический метод, может быть вызван непосредственно через имя класса без создания объекта.
3. Форма статического кода блокируется для оптимизации производительности программы.
4. Статические ведущие пакеты, как правило, импортируют методы класса непосредственно в текущий класс, так что методы класса можно было бы вызвать непосредственно с использованием имени метода, что является более удобным.
5. Измените внутренний класс и вызовите внутренний класс, не создавая экземпляры внешнего класса.
Прилагается следующее описание кода:
открытый класс студент {string name; статический возраст; public String toString () {return "name:" + name + ", age:" + age; } public static void main (string [] args) {студент S1 = новый студент (); s1.name = "Zhang San"; S1.age = 20; Студент S2 = новый студент (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** Имя результата выхода: Zhang San, возраст: 10Name: Li Si, возраст: 10*/Как упоминалось выше, два объекта S1 и S2 хранятся в разных адресах в области кучи в памяти, поэтому они не будут мешать друг другу. Тем не менее, статическое ключевое слово изменяет возраст переменной элемента, делая его классом принадлежит, а не объект принадлежит ему, и любой объект в экземпляре этого класса может быть использован и используется. Следовательно, выходные возрасты все окончательно присваиваются 10. Если вы удалите статические, очевидно, что объекты не будут влиять друг на друга, а вывод выглядит следующим образом:
Имя: Zhang San, возраст: 20 -name: li Si, возраст: 10
Как упомянуто выше, ошибка произошла, когда OUT1 вызывает 2. Из этого кода видно, что статические методы не могут вызывать нестатические переменные члена и методы членов. Нестатические методы могут вызывать статические переменные члена и методы членов. Обратите внимание, что Static не влияет на права доступа членов. Ключевыми словами, которые могут повлиять на права доступа в Java, являются частные, публичные, защищенные и дефолтные.
Общедоступный тест класса расширяет base {static {System.out.println ("Статический статический блок 1"); } public test () {System.out.println ("Тестный конструктор"); } public static void main (string [] args) {new Test (); }} класс Base {static {System.out.println ("Статический статический блок 2"); } public base () {System.out.println ("Base Constructor"); }}Как упомянуто выше, помните два предложения, статический кодовый блок загружается с загрузкой класса. Метод переменной, модифицированный Static, загружается первым и только один раз, чем другие методы переменной. Когда подкласс загружен, родительский класс будет загружен первым. Из этого мы можем проанализировать: в начале выполнения мы должны сначала найти основной метод, потому что основным методом является вход в программу, но перед выполнением основного метода мы должны сначала загрузить тестовый класс. При загрузке тестового класса мы обнаруживаем, что тестовый класс наследует от базового класса, поэтому мы сначала повернем базового класса. При загрузке базового класса мы находим, что существует статический блок, а затем выполняем статический блок. После того, как базовый класс загружен, тестовый класс продолжает загружаться, а затем обнаруживает, что в тестовом классе есть статические блоки, поэтому выполняется статический блок. После загрузки требуемого класса основной метод начинает выполняться. При выполнении нового теста () в основном методе конструктор родительского класса будет называться сначала, а затем собственный конструктор. Следовательно, результаты работы следующие:
Статический статический блок 2static Static Block 1BASE Constructor Constructor Constructor
/* A.java file*/package com.dogo.test; public class a {public static void outword (object o) {System.out.println (o); }}/*B.java file*/import static com.dogo.test.a.*; Public class b {public static void main (string [] args) {outword ("hello world!"); } /** Вывод*Привет, мир! */}Как упомянуто выше, A.Java содержит простой статический метод. В B.Java мы используем статическое ключевое слово для импорта класса A. Поэтому нет необходимости использовать «имя класса. Имя метода» для вызова метода класса. Вы можете напрямую использовать «имя метода», чтобы вызвать метод класса, как и собственный метод класса.
/* outer.java*/public class Over {static {System.out.println ("Внешний статический блок"); } public over () {System.out.println ("Внешний конструктор"); } static class inner {static {System.out.println ("Inner Static Block"); } public inner () {System.out.println ("Inner Constructor"); }}}/*Test.java*/public class test {public static void main (string [] args) {new over.inner (); }}Как упомянуто выше, не забудьте изменить внутренний класс со статиком, внешний класс может напрямую вызвать внутренний класс, потому что внутренний класс, модифицированный Static, загружается при загрузке внешнего класса, так что вы можете напрямую вызвать статический внутренний класс, не создавая инстанции внешнего класса. В примере, прежде чем вводить основной метод тестирования, загрузите тестовый класс, а затем выполните новый Overt.inner (); ПРИМЕЧАНИЕ ЗДЕСЬ: Поскольку Inner является статичным, нет необходимости загружать внешние классы и создавать здесь внешние классы. Внутренний может быть загружен и создан напрямую. Результаты работы следующие:
Внутренний статический блок внутренний конструктор
Da Qiao Примечание: еще одно очень важное применение Static - реализовать шаблон проектирования Singleton. Характеристика однородного шаблона заключается в том, что класс может иметь только один экземпляр. Чтобы реализовать эту функцию, конструктор класса должен быть скрыт, то есть конструктор объявляется частным и предоставляет метод создания объекта. Поскольку конструктор объявляется частным, внешний мир не может напрямую создавать объект этого типа и может получить объект класса только с помощью методов, предоставленных классом. Следовательно, метод создания объекта может быть объявлен только статичным. Пример программы заключается в следующем:
Class Singleledemo {Private Static Singleledemo ins = null; private singleledemo () {} public static singleledemo getins () {if (ins == null) {ins = new singleledemo (); } return ins; }}