- 10 заметок о модификаторе Static в Java
- Статические поля
- Статический блок
- Статический метод
- Статический класс в Java
- Что должен знать каждый программист о модификаторе Static в Java
- What Is a Static Method In Java?
- Static method in Java
- How to create/initialize a static method in Java?
- Difference between simple(non-static) and static methods
- Conclusion:
- About the author
- Muhammad Huzaifa
- Create static methods java
10 заметок о модификаторе Static в Java
Модификатор static в Java напрямую связан с классом. Если поле статично, значит оно принадлежит классу, если метод статичный — аналогично: он принадлежит классу. Исходя из этого, можно обращаться к статическому методу или полю, используя имя класса. Например, если поле count статично в классе Counter, значит, вы можете обратиться к переменной запросом вида: Counter.count. Прежде чем приступить к заметкам, давайте вспомним (а может быть, узнаем), что такое static и что может быть статическим в Java. Static — модификатор, применяемый к полю, блоку, методу или внутреннему классу. Данный модификатор указывает на привязку субъекта к текущему классу.
Статические поля
При обозначении переменной уровня класса мы указываем на то, что это значение относится к классу. Если этого не делать, то значение переменной будет привязываться к объекту, созданному по этому классу. Что это значит? А то, что если переменная не статическая, то у каждого нового объекта данного класса будет своё значение этой переменной, меняя которое мы меняем его исключительно в одном объекте: Например, у нас есть класс Car с нестатической переменной:
Car orangeCar = new Car(); orangeCar.km = 100; Car blueCar = new Car(); blueCar.km = 85; System.out.println("Orange car - " + orangeCar.km); System.out.println("Blue car - " + blueCar.km);
Orange car - 100 Blue car - 85
Как видим, у каждого объекта своя переменная, изменение которой происходит только для этого объекта. Ну а если у нас переменная статическая, то это глобальное значение — одно для всех: Теперь мы имеем Car со статической переменной:
Orange car - 85 Blue car - 85
Ведь переменная у нас одна на всех, и каждый раз мы меняем именно ее. К статическим переменным, как правило обращаются не по ссылке на объект — orangeCar.km, а по имени класса — Car.km
Статический блок
Есть два блока инициализации — обычный и статический. Блок предназначен для инициализации внутренних переменных. Если блок обычный, то им инициализируют внутренние переменные объекта, если же статический, соответственно, им задают статические переменные (то есть переменные класса). Пример класса со статическим блоком инициализации:
Статический метод
Статические методы отличаются от обычных тем, что они также привязаны к классу, а не к объекту. Важным свойством статического метода является то, что он может обратиться только к статическим переменным/методам. В качестве примера давайте рассмотрим класс, который у нас будет неким счётчиком, ведущим учет вызовов метода:
Counter.invokeCounter(); Counter.invokeCounter(); Counter.invokeCounter();
Текущее значение счётчика - 1 Текущее значение счётчика - 2 Текущее значение счётчика - 3
Статический класс в Java
Статическим классом может быть только внутренний класс. Опять же, этот класс привязан к внешнему классу, и если внешний наследуется другим классом, то этот не будет наследован. При этом данный класс можно наследовать, как и он может наследоваться от любого другого класса и имплементировать интерфейс. По сути статический вложенный класс ничем не отличается от любого другого внутреннего класса за исключением того, что его объект не содержит ссылку на создавший его объект внешнего класса. Тем не менее, благодаря этому статический класс наиболее похож на обычный не вложенный, ведь единственное различие состоит в том, что он упакован в другой класс. В некоторых случаях для нас это преимущество, так как с него у нас есть доступ к приватным статическим переменным внешнего класса. Пример вложенного статического класса:
Vehicle.Car car = new Vehicle.Car(); car.km = 90;
Для использования статических методов/переменных/класса нам не нужно создавать объект данного класса. Конечно, следует учитывать модификаторы доступа. Например, поля private доступны только внутри класса, в котором они объявлены. Поля protected доступны всем классам внутри пакета (package), а также всем классам-наследникам вне пакета. Для более подробной информации ознакомьтесь со статьей “private vs protected vs public”. Предположим, существует статический метод increment() в классе Counter , задачей которого является инкрементирование счётчика count . Для вызова данного метода можно использовать обращение вида Counter.increment() . Нет необходимости создавать экземпляр класса Counter для доступа к статическому полю или методу. Это фундаментальное отличие между статическими и НЕ статическими объектами (членами класса). Еще раз напомню, что статические члены класса напрямую принадлежат классу, а не его экземпляру. То есть, значение статической переменной count будет одинаковое для всех объектов типа Counter . Далее в этой статье мы рассмотрим основополагающие аспекты применения модификатора static в Java, а также некоторые особенности, которые помогут понять ключевые концепции программирования.
Что должен знать каждый программист о модификаторе Static в Java
- Вы НЕ можете получить доступ к НЕ статическим членам класса, внутри статического контекста, как вариант, метода или блока. Результатом компиляции приведенного ниже кода будет ошибка:
class Vehicle < public static void kmToMiles(int km)< System.out.println("Внутри родительского класса/статического метода"); >> class Car extends Vehicle < public static void kmToMiles(int km)< System.out.println("Внутри дочернего класса/статического метода "); >> public class Demo< public static void main(String args[])< Vehicle v = new Car(); v.kmToMiles(10); >>
What Is a Static Method In Java?
In Java, When we create a class with different methods, we need to create an object for that class in order to access the methods of that class which makes the code a little complex and less understandable. Now, what if we want to access the methods of that class directly(without making an object)? The answer is straightforward, Java allows us to access the class methods directly but in order to do that we need to create a static method.
This write-up, will provide information about
- What is a static method in Java?
- How to create/initialize a static method in Java?
- Difference between simple and static methods
Static method in Java
In Java, a method that does not need an object to be accessed. These methods belong to a class, not an object. We can call or access these methods by the class name directly. In order to create a static method, we just need to use a static keyword with a method name.
Static methods are used for memory management which means these methods do not allocate memory just like objects which eventually makes the program execution faster. Following is a syntax and some rules for creating a static method in Java.
According to the syntax, use a static keyword to create a static method. Then specify the method return-type i.e void, int, boolean, double, long, char, and short. Lastly, specify the method name and write some code in its body.
Rules for static methods
Following are some rules for using and creating static methods.
- Static methods can be created by using a “static” keyword.
- We don’t need to create an object to access a static method
- Static methods can only access static methods or variables.
- We can not use ”this” and “super” keywords with the static method
How to create/initialize a static method in Java?
To create a static method in Java use the static keyword. The following code will help you to learn about creating and initializing static methods in Java.
package methods ;
public class stTest {
static void see ( )
{
System. out . println ( «This is a static method» ) ;
}
public static void main ( String [ ] args )
{
stTest. see ( ) ;
}
}
In this code, we create a class stTest with a static method see(). Then is the main method we directly call the see() method by the class.
The output shows that we call a static method directly without creating its object.
Difference between simple(non-static) and static methods
Now to understand the static methods in a better way. Let’s look at the following example which compares simple and static methods.
public class stTest {
public void sub ( )
{
int g , h , res ;
g = 2 ; h = 3 ;
res = g — h ;
System. out . println ( «Answer = » + res ) ;
}
public static void add ( )
{
int k , m , res ;
k = 2 ; m = 3 ;
res = k + m ;
System. out . println ( «Answer = » + res ) ;
}
public static void main ( String [ ] args )
{
stTest get = new stTest ( ) ;
get . sub ( ) ;
stTest. add ( ) ;
}
}
In this code, we create two methods. The first one is sub() which is a non-static method and the second one is add() which is a static method within the stTest class. Then we create an object for the stTest class to access its non-static method.
The output shows that we need a class object to access a non-static(simple) method whereas to access the static method we just call it directly by the class name which means we do not need any object to access the static method.
Conclusion:
In Java, a static method is a method that does not need any object or instance of a class for accessing. We can call static methods directly by the class name. In this article, we have talked about static methods and some rules to use and create a static method in Java. Additionally, we have also provided differences between static and simple methods in Java.
About the author
Muhammad Huzaifa
I am a computer science graduate with a passion to learn technical knowledge and share it
with the world. I love to work on top state-of-the-art computing languages. My aim is to best
serve the community with my work.
Create static methods java
Короче, выжимка следующая: 1. Статические методы и переменные принадлежат самому классу, а не конкретному экземпляру класса. Они могут быть вызваны или использованы без создания экземпляра класса. Статические методы не могут напрямую обращаться к нестатическим методам и переменным, так как они не имеют доступа к экземпляру класса (this). Примером статического метода в Java является main(), который является точкой входа в приложение.
class MyClass < static void staticMethod() < System.out.println("Static method"); >> // Call static method MyClass.staticMethod(); // prints "Static method"
2. Обычные методы принадлежат экземпляру класса. Они имеют доступ к любым переменным экземпляра и могут вызывать любые другие обычные методы того же экземпляра класса. Они не могут быть вызваны без создания экземпляра класса. Однако, они могут вызывать статические методы и обращаться к статическим переменным.
class MyClass < void instanceMethod() < System.out.println("Instance method"); >> // Create instance and call instance method MyClass obj = new MyClass(); obj.instanceMethod(); // prints "Instance method"
3.Статические переменные также принадлежат классу, а не конкретному экземпляру класса. Они делятся всеми экземплярами этого класса. Примером статической переменной в Java является System.out.
class MyClass < static int staticVar = 10; >// Access static variable System.out.println(MyClass.staticVar); // prints "10"
class MyClass < int instanceVar = 20; >// Create instance and access instance variable MyClass obj = new MyClass(); System.out.println(obj.instanceVar); // prints "20"
Статическая переменная — одна коробка и для класса и для всех его экземпляров. Обычная переменная — у каждого экземпляра класса своя коробка.
В книге Г. Шилдта зашла мне эта тема лучше. Иногда требуется определить такой член класса, который будет использоваться независимо от каких бы то ни было объектов этого класса. Как правило, доступ к члену класса организуется посредством объекта этого класса, но в то же время можно создать член класса для самостоятельного применения без ссылки на конкретный объект. Для того чтобы создать такой член класса, достаточно указать в самом начале его объявления ключевое слово static. Если член класса объявляется как static, он становится доступным до создания каких-либо объектов своего класса и без ссылки на какой-либо объект. С помощью ключевого слова static можно объявлять как переменные, так и методы. Такие члены и методы называются статическими. Наиболее характерным примером члена типа static служит метод main (), который объявляется таковым потому, что он должен вызываться виртуальной машиной Java в самом начале выполняемой программы. Для того чтобы воспользоваться членом типа static за пределами класса, достаточно дополнить имя данного члена именем класса, используя точечную нотацию. Но создавать объект для этого не нужно. В действительности член типа static оказывается доступным не по ссылке на объект, а по имени своего класса. Так, если требуется присвоить значение 10 переменной count типа static, являющейся членом класса Timer, то для этой цели можно воспользоваться следующей строкой кода:
Эта форма записи подобна той, что используется для доступа к обычным переменным экземпляра посредством объекта, но в ней указывается имя класса, а не объекта. Аналогичным образом вызываются методы типа static. Переменные, объявляемые как static, по существу являются глобальными. В силу этого при создании объектов данного класса копии статических переменных в них не создаются. Вместо этого все экземпляры класса совместно пользуются одной и той же статической переменной.