Статическое ключевое слово - это ключевое слово, с которым сталкиваются многие друзья при написании и чтении кода. Это также один из моментов знаний, которые интервьюеры из крупных компаний любят спрашивать во время интервью. Давайте впервые поговорим об использовании статических ключевых слов и общих недоразумений. Наконец, мы перечислим некоторые общие вопросы о статике в письменном интервью. Вот контур каталогов этой статьи:
1. Цель статических ключевых слов
2. Несчастные представления о статических ключевых словах
3. Общие письменные вопросы интервью
Если есть какая -то неверная, я надеюсь понять и приветствовать критику и исправление.
Пожалуйста, уважайте трудовые достижения автора. Пожалуйста, укажите исходную ссылку при перепечатку:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. Цель статических ключевых слов
«Статический метод-это метод без этого. Нестатические методы не могут быть вызваны внутри статического метода, который, в свою очередь, возможен. И статический метод можно назвать только через сам класс без создания какого-либо объекта. Это на самом деле основная цель статического метода».
Хотя этот отрывок иллюстрирует только особые особенности статического метода, можно видеть, что основная функция статического ключевого слова. Короче говоря, это описано в одном предложении:
Это удобно для вызова (метод/переменная) без создания объекта.
Очевидно, что методы или переменные, измененные статическими ключевыми словами, не должны полагаться на объекты для доступа. Пока класс загружен, к ним можно получить доступ через имя класса.
Статический может использоваться для изменения методов члена класса и переменных членов класса. Кроме того, статические кодовые блоки могут быть записаны для оптимизации производительности программы.
1) Статический метод
Статический метод обычно называется статическим методом. Поскольку статические методы можно получить, не полагаясь на какой -либо объект, это нет для статических методов, поскольку они не зависят от какого -либо объекта. Поскольку нет объектов, нет такой вещи, как эта. И из-за этой функции нестатические переменные-члены и нестатические методы члена класса не могут быть доступны в статических методах, поскольку нестатические методы/переменные-члены должны полагаться на конкретные объекты, которые должны быть вызваны.
Но следует отметить, что, хотя нестатические методы членов и нестатические переменные-члены не могут быть доступны в статических методах, методы/переменные статического члена могут быть доступны в нестатических методах. Давайте приведем простой пример:
В приведенном выше коде, поскольку метод Print2 существует независимо от объекта, его можно назвать непосредственно по имени класса. Если к нестатическим методам/переменным можно получить доступ в статических методах, то если в основном методе есть следующее операцию:
Myobject.print2 ();
В настоящее время объекта нет, и STR2 вообще не существует, поэтому будет противоречие. То же самое относится и к методам. Поскольку вы не можете предсказать, доступны ли немностатические переменные члена в методе Print1, доступ к методам нестатических членов в методах статических элементов также запрещено.
И для нестатических методов членов, очевидно, нельзя получить доступ к методам/переменным статическим членам.
Поэтому, если вы хотите вызвать метод без создания объекта, вы можете установить этот метод на статический. Наш самый распространенный статический метод является основным методом. Что касается того, почему основной метод должен быть статичным, теперь это очень ясно. Поскольку программа не создает ни одного объекта при выполнении основного метода, к ней можно получить доступ только через имя класса.
Также помните, что даже если он не отображается как статический, конструктор класса на самом деле является статическим методом.
2) Статические переменные
Статические переменные также называются статическими переменными. Разница между статическими переменными и нестатическими переменными состоит в том, что статические переменные разделяются всеми объектами, с одной копией в памяти, которая будет инициализирована в то время как и только тогда, когда класс загружается в первый раз. Нестатические переменные принадлежат объектам и инициализируются при создании объектов. Есть несколько копий, и копии, принадлежащие каждым объекту, не влияют друг на друга.
Порядок инициализации статических переменных элементов инициализируется в определенном порядке.
3) Статический кодовый блок
Другая ключевая функция статического ключевого слова - сформировать статические блоки кода для оптимизации производительности программы. Статический блок может быть размещен в любом месте класса, и в классе может быть несколько статических блоков. Когда класс будет сначала загружен, каждый статический блок будет выполнен в порядке статических блоков и будет выполнен только один раз.
Причина, по которой статические блоки можно использовать для оптимизации производительности программы, заключается в ее характеристике: они будут выполнены только один раз при загрузке класса. Вот пример:
класс человека {частная дата дата рождения; публичное лицо (дата дата рождения) {this.birthdate = dignate;} boolean isbornboomer () {date startdate = date.valueof ("1946"); дата enddate = date.valueof ("1964"); returndate.compareto (startdate) = 0 &-- rotetate.comparet.comparet (startDate)> = 0 & 0;}} Истрнбумер привык к тому, родился ли этот человек в 1946-1964 годах. Каждый раз, когда называется Isbornboomer, будут созданы два объекта, которые приведут к отпуске пространства. Если изменить на это, это будет лучше:
Класс Человек {частная дата дата рождения; частная статическая дата StartDate, EndDate; static {startDate = date.valueof ("1946"); enddate = date.valueof ("1964");} public Person (дата рождения) {this.birthdate = birthdate;} boolean isborbomer () {returntate = startDate.comparte / strestrate.compartote / strestrate. день рождения.compareto (enddate) <0;}} Следовательно, много раз, некоторые операции инициализации, которые необходимо выполнить только один раз, будут размещены в статическом блоке кода.
2. Несчастные представления о статических ключевых словах
1. Изменит ли статическое ключевое слово права доступа членов в классе?
Некоторые новички будут запутать статичную в Java со статическими функциями ключевых слов в C/C ++. Просто помните одну вещь здесь: в отличие от Static в C/C ++, статическое ключевое слово в Java не повлияет на объем переменных или методов. В Java единственные ключевые слова, которые могут повлиять на разрешения на доступ, являются частные, публичные и защищенные (включая разрешения на доступ к пакетам). Посмотрите на следующие примеры, чтобы понять:
Ошибка приглашения «человек.
2. Можно ли получить доступ к статическим переменным членам через это?
Хотя этого нет для статических методов, можно ли доступ к статическим переменным членам с помощью этого нестатическими методами? Давайте сначала посмотрим на следующий пример. Каков результат этого вывода кода?
открытый класс main {static int value = 33; public static void main (string [] args) выбрасывает exection {new main (). 33
В основном это главная команда наблюдения, которая понимает это и статично. Что это означает? Это представляет текущий объект. Если PrintValue вызывается через новый Main (), текущий объект - это объект, генерируемый New Main (). Статическая переменная пользуется объектом, поэтому значение этого. Value in PrintValue, несомненно, 33. Значение внутри метода PrintValue является локальной переменной и не может быть связана с этим вообще, поэтому выход 33. Всегда помните одну вещь здесь: хотя статические переменные элементов не зависят от объектов, они не означают, что их не могут быть доступа к объектам. Все статические методы и статические переменные могут быть доступны через объекты (до тех пор, пока достаточные разрешения доступа достаточны).
3. Может ли статический акт на локальные переменные?
В C/C ++ статический может охватывать локальные переменные, но помните в Java: статическое не разрешается использовать для изменения локальных переменных. Не спрашивайте, почему, это обеспечение синтаксиса Java.
3. Общие письменные вопросы интервью
В следующем перечислены некоторые вопросы о статических ключевых словах, которые часто встречаются в письменном интервью. Они только для справки. Если у вас есть добавки, пожалуйста, не стесняйтесь оставить сообщение ниже.
1. Каков результат вывода следующего кода?
Общедоступный тест класса расширяет base {static {system.out.println ("test static");} public test () {System.out.println ("Test Constructor");} public static void main (string [] args) {new Test ();}} класс база {static {System.out.println ("base static"); Base () {System.out.println ("Base Constructor");}} базовая статика
Тест Статический
базовый конструктор
тестовый конструктор
Что касается того, почему это результат, давайте не будем обсуждать его в первую очередь. Давайте подумаем о конкретном процессе выполнения этого кода. В начале выполнения мы должны сначала найти основной метод, потому что основным методом является вход в программу, но перед выполнением основного метода, тестовый класс должен быть сначала загружен. При загрузке тестового класса обнаружено, что тестовый класс наследует от базового класса, поэтому он сначала обратится к загрузке базового класса. При загрузке базового класса он обнаруживает, что есть статический блок, а затем выполняет статический блок. После того, как базовый класс загружен, тестовый класс продолжает загружаться, а затем обнаруживает, что в тестовом классе есть статические блоки, поэтому выполняется статический блок. После загрузки требуемого класса основной метод начинает выполняться. При выполнении нового теста () в основном методе конструктор родительского класса будет называться сначала, а затем собственный конструктор. Следовательно, появляется вышеупомянутый результат вывода.
2. Каков результат вывода этого кода?
Общедоступный тест класса {Person Person = new Person ("test"); static {System.out.println ("test static");} public Test () {System.out.println ("Тестный конструктор");} public void main (string [] args) {new MyClass ();} class Person {static {System.out.out.print (") Person (String Str) {System.out.println ("Person"+str);}} класс MyClass Extends Test {Person Person = new Person ("myClass"); Static {System.out.println ("myclass static");} public myclass () {System.out.println ("MyClass Constructor"); Тест Статический 1
Тест Статический 2
Хотя в основном методе нет заявлений, они все равно будут выводиться, потому что причина была объяснена выше. Кроме того, статический блок может появляться в любом месте класса (до тех пор, пока он не находится внутри метода, помните, ни один метод не может этого сделать), а выполнение выполняется в порядке статических блоков.
Выше приведено всесторонний анализ статических ключевых слов в Java, представленных вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!