Основы статического метода Java, класса, переменной и блока
Опубликовано: 2019-12-13
Что такое статика в Java?
- Ключевое слово Static может использоваться с классом, переменной, методом и блоком.
- Статические члены не принадлежат ни одному конкретному экземпляру.
- Статические члены принадлежат только классу.
- Как только вы сделаете член статическим, вы сможете получить к нему доступ без какого-либо объекта.
У вас есть какие-либо из приведенных ниже вопросов?
- Не могли бы вы записать лучшие практики использования статических методов Java?
- Что такое статические методы Java в интерфейсе?
- У вас есть вопрос о статических методах Java и синглтонах?
- Статические методы Java и производительность методов экземпляра
- Статические методы и переменные Java
- Статические методы Java против нестатических
- Статические методы Java в абстрактном классе
Ключевое слово static можно использовать в 3 сценариях:
- Статические переменные
- Статические методы
- Статические блоки кода.
статическая переменная («статическое» ключевое слово = переменные класса)

В Java переменные могут быть объявлены с помощью ключевого слова « static
».
Пример: static int y = 0;
Когда переменная объявлена с ключевым словом static
, она называется class variable
. Все экземпляры используют одну и ту же копию переменной. Доступ к переменной класса можно получить непосредственно из класса без необходимости создания экземпляра.
Нет «статического» ключевого слова = переменные экземпляра
Без static keyword
он называется instance variable
, и каждый экземпляр класса имеет свою собственную копию переменной.
Пример: static int crunchify_variable_name
;
- Статические переменные являются общими для всех экземпляров класса.
- Одна из основных причин, по которой вам это нужно, когда вы хотите много управлять памятью.
- Для всех статических переменных вам будет доступна только одна единственная копия.
- Вам абсолютно не нужен объект класса для доступа к статической переменной.
- Просто используйте его напрямую. Вам не нужен
object.StaticVariable
- Просто используйте его напрямую. Вам не нужен
Что такое статический блок?
Статический блок — это блок операторов внутри Java class
, который будет выполняться при первой загрузке класса в JVM.
Можете ли вы переопределить частный метод в Java?
- Ну нет. Закрытые методы нельзя переопределить, так как они недоступны для использования вне класса.
Почему мы не можем переопределить статические методы в Java?
- Статические методы также нельзя переопределить, поскольку они являются частью класса, а не объекта.
Можем ли мы получить доступ к нестатической переменной в статическом контексте?
- Чтобы иметь доступ к нестатическим переменным из ваших статических методов, они должны быть статическими переменными-членами.
Подробности о статическом методе
- Как идентифицировать? Просто сначала проверьте это. Вам нужен объект класса для доступа к статическому методу? Если вам не нужен объект, то это статический метод.
- Вам нужно использовать статическое ключевое слово, чтобы указать статический метод
- Лучше использовать ключевое слово static, если этот метод не будет меняться во время выполнения вашего проекта.
- Вы не можете переопределить статический метод.
Давайте посмотрим на приведенные ниже примеры:
Пример-1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package crunchify . com . tutorials ; /** * @author Crunchify.com * */ public class CrunchifyStaticMethodMain { public static void main ( String args [ ] ) { String [ ] crunchifyObject = new String [ 3 ] ; crunchifyObject = new String [ ] { "Google" , "Facebook" , "Crunchify" } ; // creating instnace CrunchifyStaticMethodMain object = new CrunchifyStaticMethodMain ( ) ; object . crunchifyTestMethod ( crunchifyObject ) ; } /* * Check this out: Let's understand little more... * * Here method crunchifyTestMethod is defined as * public void crunchifyTestMethod(String[]) * so it is "non-static". It can't be called unless it is called on an instance of CrunchifyStaticMethodMain. * * If you declared your method as * public static void crunchifyTestMethod(int[]) * then you could call: CrunchifyStaticMethodMain.crunchifyTestMethod(arr); within main without having created an instance for it. */ public void crunchifyTestMethod ( String [ ] crunchifyObject ) { for ( int i = 0 ; i < crunchifyObject . length ; i ++ ) System . out . println ( crunchifyObject [ i ] ) ; } } |
Проверьте это объяснение в above code block
. Мы должны создать экземпляр класса для доступа к нестатическому методу.
Пример-2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyStaticDeclaration { // 1st static block static { System . out . println ( "\nI'm static block 1.." ) ; setTestString ( "This is static block's String" ) ; setTestValue ( 2 ) ; } // 2nd static blocks in same class static { System . out . println ( "\nI'm static block 2.." ) ; } // static variable example private static int testValue ; // kept private to control it's value through setter public int getTestValue ( ) { return testValue ; } // static method example public static void setTestValue ( int testValue ) { if ( testValue > 0 ) CrunchifyStaticDeclaration . testValue = testValue ; System . out . println ( "setTestValue method: " + testValue ) ; } public static String testString ; /** * @return the testString */ public static String getTestString ( ) { return testString ; } /** * @param testString the testString to set */ public static void setTestString ( String testString ) { CrunchifyStaticDeclaration . testString = testString ; System . out . println ( "setTestString method: " + testString ) ; } // static util method public static int subValue ( int i , int . . . js ) { int sum = i ; for ( int x : js ) sum -= x ; return sum ; } } |
Теперь проведем тест:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyStaticExample { public static void main ( String [ ] args ) { CrunchifyStaticDeclaration . setTestValue ( 5 ) ; // non-private static variables can be accessed with class name CrunchifyStaticDeclaration . testString = "\nAssigning testString a value" ; CrunchifyStaticDeclaration csd = new CrunchifyStaticDeclaration ( ) ; System . out . println ( csd . getTestString ( ) ) ; // class and instance static variables are same System . out . print ( "\nCheck if Class and Instance Static Variables are same: " ) ; System . out . println ( CrunchifyStaticDeclaration . testString == csd . testString ) ; System . out . println ( "Why? Because: CrunchifyStaticDeclaration.testString == csd.testString" ) ; } } |
Выход:
1 2 3 4 5 6 7 8 9 10 11 |
I 'm static block 1.. setTestString method: This is static block' s String setTestValue method : 2 I ' m static block 2.. setTestValue method : 5 Assigning testString a value Check if Class and Instance Static Variables are same : true Why ? Because : CrunchifyStaticDeclaration . testString == csd . testString |
Я надеюсь, что вы действительно получили полезную информацию о статическом методе, переменной и блоках.

Дайте нам знать, если у вас возникнут проблемы с запуском вышеуказанной программы или проблемы с пониманием ключевого слова Static в Java.