- Ключевое слово Static в Java — статические переменные, методы, классы и блоки.
- 1. Статические переменные
- 10 заметок о модификаторе Static в Java
- Статические поля
- Статический блок
- Статический метод
- Статический класс в Java
- Что должен знать каждый программист о модификаторе Static в Java
- What does static mean?
- Static Variables
- Static Methods
- Static Blocks
- Static Nested Classes
- What are static objects in java
- Program of the counter without static variable
- Program of counter by static variable
- 2) Java static method
- Example of static method
- Another example of a static method that performs a normal calculation
- Restrictions for the static method
- Q) Why is the Java main method static?
- 3) Java static block
- Example of static block
- Q) Can we execute a program without main() method?
- Feedback
- Help Others, Please Share
- Learn Latest Tutorials
- Preparation
- Trending Technologies
- B.Tech / MCA
- Javatpoint Services
- Training For College Campus
Ключевое слово Static в Java — статические переменные, методы, классы и блоки.
Static — это ключевое слово в Java, которое можно применять к переменным, методам, классам и блокам. В этом посте представлен обзор поведения переменных, методов, классов и блоков кода в Java, когда к ним применяется ключевое слово static. Давайте подробно обсудим каждый из них:
1. Статические переменные
- Статические переменные также известны как переменные класса.
- Когда статический ключевое слово применяется к переменной, это означает, что переменная принадлежит классу, а не экземпляру класса.
- В памяти есть только одна копия статической переменной, которая используется всеми экземплярами класса.
- Статические переменные инициализируются перед любой из переменных экземпляра.
- Статические переменные можно использовать, когда какое-то значение необходимо разделить между всеми объектами класса. Чтобы гарантировать, что значение никогда не изменится после его инициализации, объявите статическую переменную как final.
- Доступ к статической переменной можно получить напрямую, используя имя класса, без создания экземпляра класса, в котором они определены. Используйте обозначение >.> для доступа к статической переменной. В пределах одного класса к ним можно получить прямой доступ.
- Стандартный выходной поток System.out отличный пример статической переменной в Java. Здесь out объявляется статическим в System учебный класс.
Рассмотрим следующий код со статической переменной i определено в классе A . К нему можно получить прямой доступ по имени i внутри класса A и с A.i вне класса A .
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 does static mean?
When you declare a variable or a method as static, it belongs to the class, rather than a specific instance. This means that only one instance of a static member exists, even if you create multiple objects of the class, or if you don’t create any. It will be shared by all objects.
The static keyword can be used with variables, methods, code blocks and nested classes.
Static Variables
Example:
The COUNT variable will be shared by all objects of that class. When we create objects of our Counter class in main, and access the static variable.
public class MyClass < public static void main(String[] args) < Counter c1 = new Counter(); Counter c2 = new Counter(); System.out.println(Counter.COUNT); >> // Outputs "2"
The outout is 2, because the COUNT variable is static and gets incremented by one each time a new object of the Counter class is created. You can also access the static variable using any object of that class, such as c1.COUNT .
Static Methods
A static method belongs to the class rather than instances. Thus, it can be called without creating instance of class. It is used for altering static contents of the class. There are some restrictions of static methods :
- Static method can not use non-static members (variables or functions) of the class.
- Static method can not use this or super keywords.
Example:
public class Counter < public static int COUNT = 0; Counter() < COUNT++; >public static void increment() < COUNT++; >>
Static methods can also be called from instance of the class.
public class MyClass < public static void main(String[] args) < Counter.increment(); Counter.increment(); System.out.println(Counter.COUNT); >> // Outputs "2"
The output is 2 because it gets incremented by static method increament() . Similar to static variables, static methods can also be accessed using instance variables.
Static Blocks
Static code blocks are used to initialise static variables. These blocks are executed immediately after declaration of static variables.
Example:
public class Main < public static void main(String[] args) < System.out.println(Saturn.MOON_COUNT); >> // Outputs "62"
The output is 62, because variable MOON_COUNT is assigned that value in the static block.
Static Nested Classes
A class can have static nested class which can be accessed by using outer class name.
Example:
public class Outer < public Outer() < >public static class Inner < public Inner() < >> >
In above example, class Inner can be directly accessed as a static member of class Outer .
One of the use case of static nested classes in Builder Pattern popularly used in java.
What are static objects in java
Program of the counter without static variable
In this example, we have created an instance variable named count which is incremented in the constructor. Since instance variable gets the memory at the time of object creation, each object will have the copy of the instance variable. If it is incremented, it won’t reflect other objects. So each object will have the value 1 in the count variable.
Program of counter by static variable
As we have mentioned above, static variable will get the memory only once, if any object changes the value of the static variable, it will retain its value.
2) Java static method
If you apply static keyword with any method, it is known as static method.
- A static method belongs to the class rather than the object of a class.
- A static method can be invoked without the need for creating an instance of a class.
- A static method can access static data member and can change the value of it.
Example of static method
Output:111 Karan BBDIT 222 Aryan BBDIT 333 Sonoo BBDIT
Another example of a static method that performs a normal calculation
Restrictions for the static method
There are two main restrictions for the static method. They are:
- The static method can not use non static data member or call non-static method directly.
- this and super cannot be used in static context.
Q) Why is the Java main method static?
Ans) It is because the object is not required to call a static method. If it were a non-static method, JVM creates an object first then call main() method that will lead the problem of extra memory allocation.
3) Java static block
- Is used to initialize the static data member.
- It is executed before the main method at the time of classloading.
Example of static block
Output:static block is invoked Hello main
Q) Can we execute a program without main() method?
Ans) No, one of the ways was the static block, but it was possible till JDK 1.6. Since JDK 1.7, it is not possible to execute a Java class without the main method.
Since JDK 1.7 and above, output would be:
Error: Main method not found in class A3, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
For Videos Join Our Youtube Channel: Join Now
Feedback
Help Others, Please Share
Learn Latest Tutorials
Preparation
Trending Technologies
B.Tech / MCA
Javatpoint Services
JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.
- Website Designing
- Website Development
- Java Development
- PHP Development
- WordPress
- Graphic Designing
- Logo
- Digital Marketing
- On Page and Off Page SEO
- PPC
- Content Development
- Corporate Training
- Classroom and Online Training
- Data Entry
Training For College Campus
JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week
Like/Subscribe us for latest updates or newsletter