Static word in java

Understanding Class Members

In this section, we discuss the use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class.

Class Variables

When a number of objects are created from the same class blueprint, they each have their own distinct copies of instance variables. In the case of the Bicycle class, the instance variables are cadence , gear , and speed . Each Bicycle object has its own values for these variables, stored in different memory locations.

Sometimes, you want to have variables that are common to all objects. This is accomplished with the static modifier. Fields that have the static modifier in their declaration are called static fields or class variables. They are associated with the class, rather than with any object. Every instance of the class shares a class variable, which is in one fixed location in memory. Any object can change the value of a class variable, but class variables can also be manipulated without creating an instance of the class.

For example, suppose you want to create a number of Bicycle objects and assign each a serial number, beginning with 1 for the first object. This ID number is unique to each object and is therefore an instance variable. At the same time, you need a field to keep track of how many Bicycle objects have been created so that you know what ID to assign to the next one. Such a field is not related to any individual object, but to the class as a whole. For this you need a class variable, numberOfBicycles , as follows:

Читайте также:  Python прерывание цикла while

Class variables are referenced by the class name itself, as in

This makes it clear that they are class variables.

You can use the Bicycle constructor to set the id instance variable and increment the numberOfBicycles class variable:

public class Bicycle < private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear)< gear = startGear; cadence = startCadence; speed = startSpeed; // increment number of Bicycles // and assign ID number id = ++numberOfBicycles; > // new method to return the ID instance variable public int getID() < return id; >. >

Class Methods

The Java programming language supports static methods as well as static variables. Static methods, which have the static modifier in their declarations, should be invoked with the class name, without the need for creating an instance of the class, as in

instanceName.methodName(args)

A common use for static methods is to access static fields. For example, we could add a static method to the Bicycle class to access the numberOfBicycles static field:

public static int getNumberOfBicycles()

Not all combinations of instance and class variables and methods are allowed:

  • Instance methods can access instance variables and instance methods directly.
  • Instance methods can access class variables and class methods directly.
  • Class methods can access class variables and class methods directly.
  • Class methods cannot access instance variables or instance methods directly—they must use an object reference. Also, class methods cannot use the this keyword as there is no instance for this to refer to.

Constants

The static modifier, in combination with the final modifier, is also used to define constants. The final modifier indicates that the value of this field cannot change.

For example, the following variable declaration defines a constant named PI , whose value is an approximation of pi (the ratio of the circumference of a circle to its diameter):

static final double PI = 3.141592653589793;

Constants defined in this way cannot be reassigned, and it is a compile-time error if your program tries to do so. By convention, the names of constant values are spelled in uppercase letters. If the name is composed of more than one word, the words are separated by an underscore (_).

Note: If a primitive type or a string is defined as a constant and the value is known at compile time, the compiler replaces the constant name everywhere in the code with its value. This is called a compile-time constant. If the value of the constant in the outside world changes (for example, if it is legislated that pi actually should be 3.975), you will need to recompile any classes that use this constant to get the current value.

The Bicycle Class

After all the modifications made in this section, the Bicycle class is now:

public class Bicycle < private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear) < gear = startGear; cadence = startCadence; speed = startSpeed; >public int getID() < return id; >public static int getNumberOfBicycles() < return numberOfBicycles; >public int getCadence() < return cadence; >public void setCadence(int newValue) < cadence = newValue; >public int getGear() < return gear; >public void setGear(int newValue) < gear = newValue; >public int getSpeed() < return speed; >public void applyBrake(int decrement) < speed -= decrement; >public void speedUp(int increment) < speed += increment; >>

Источник

Кофе-брейк #142. Какую роль в Java играет ключевое слово static?

Java-университет

Кофе-брейк #142. Какую роль в Java играет ключевое слово static? - 1

Источник: FreeCodeCamp Ключевое слово static можно использовать в разных частях кода Java, таких как переменные, методы и статические блоки. Сегодня мы узнаем, как именно его можно применять на практике. Основная цель использования ключевого слова static в Java — экономия памяти. Когда мы создаем переменную в классе, к которой будут обращаться другие классы, мы должны сначала создать экземпляр класса, а затем присвоить новое значение каждому экземпляру переменной. Это нужно, чтобы значения новых переменных были одинаковы для всех новых классов/объектов. Но когда мы создаем статические переменные, их значение остается постоянным во всех других классах, и нам не нужно создавать экземпляр для использования переменной. Таким образом, мы создаем переменную один раз, поэтому память выделяется только один раз. Вы лучше поймете это на нескольких примерах в этой статье.

Как создать статическую переменную в Java

Чтобы понять, как использовать ключевое слово static при создании переменных, давайте рассмотрим обычный способ создания переменных, общих для каждого экземпляра класса.

Объясняю, что произошло в приведенном выше коде шаг за шагом. Мы создали класс Student с тремя переменными — studentName , course и school . Затем мы создали два экземпляра класса Student :

 Student Student1 = new Student(); Student Student2 = new Student(); 

Первый экземпляр — Student1 , который имеет доступ к переменным, созданным в его классе, обладает следующими значениями:

 Student1.studentName = "Ihechikara"; Student1.course = "Data Visualization"; Student1.school = "freeCodeCamp"; 
 Student2.studentName = "John"; Student2.course = "Data Analysis with Python"; Student2.school = "freeCodeCamp"; 

Если присмотреться, то можно обнаружить, что у обоих учеников одно и то же название школы — “freeCodeCamp”. Но что, если бы нам пришлось создать 100 учеников для одной и той же школы? Это означает, что мы будем инициализировать переменную с одним и тем же значением 100 раз, каждый раз выделяя новую память. Может для кого-то это и не проблема, но в крупной кодовой базе это может значительно замедлить работу программы. Чтобы решить этот вопрос, мы будем использовать ключевое слово static для создания переменной school . После этого все экземпляры класса могут использовать эту переменную. Примерно вот так:

В этом коде мы создали статическую переменную с именем school . Заметьте, что ключевое слово static предшествовало типу данных и имени переменной: static String school = «freeCodeCamp»; . Теперь, когда мы создаем новый экземпляр нашего класса, нам не нужно инициализировать переменную school для каждого экземпляра. В нашем коде мы присвоили значение переменной только в первом экземпляре, а затем оно было унаследовано следующим экземпляром. Обратите внимание, что изменение значения статической переменной в любом месте кода переопределяет значение в других частях кода, где оно было объявлено ранее. Таким образом, вы должны использовать ключевое слово static только для переменных, которые должны оставаться постоянными в программе. Вы также можете присвоить значение переменной при ее создании, чтобы вам не нужно было объявлять ее снова при создании экземпляра класса: static String school = «freeCodeCamp»; . Вот что вы получите, если будете этот использовать метод:

Как создать статический метод в Java

  • Статические методы могут получать доступ и изменять только статические переменные.
  • Статические методы можно вызывать/использовать без создания экземпляра класса.
 class EvenNumber < static int evenNumber; static void incrementBy2()< evenNumber = evenNumber + 2; System.out.println(evenNumber); >public static void main(String[] args) < incrementBy2(); // 2 incrementBy2(); // 4 incrementBy2(); // 6 incrementBy2(); // 8 >> 

В приведенном выше коде мы создали целое число ( evenNumber ) в классе с именем EvenNumber . Наш статический метод называется incrementBy2() . Этот метод увеличивает значение целого числа evenNumber и печатает его значение. Без создания экземпляра класса мы смогли вызвать метод incrementBy2() в методе программы main . Каждый раз, когда мы вызывали метод, значение evenNumber увеличивалось на 2 и выводилось на печать. Также можно присоединить имя класса к методу, используя запись через точку при вызове метода: EvenNumber.incrementBy2(); . Каждый статический метод принадлежит классу, а не экземплярам класса.

Как создать статический блок в Java

Статические блоки в Java похожи на конструкторы. Мы можем использовать их для инициализации статических переменных, они выполняются компилятором перед методом main .

 class Block < static int year; static < year = 2022; System.out.println("This code block got executed first"); >public static void main(String[] args) < System.out.println("Hello World"); System.out.println(year); >> 

В коде выше мы создали статическую целочисленную переменную year . Затем мы инициализировали ее в статическом блоке:

Как вы видите, статический блок можно создать, используя ключевое слово static, за которым следуют фигурные скобки. В статическом блоке нашего кода мы инициализировали переменную year со значением 2022. Мы также распечатали некоторый текст — “This code block got executed first”. В методе main мы напечатали “Hello World” и статическую переменную year . В консоли код будет выполняться в таком порядке:

Заключение

В этой статье мы говорили о ключевом слове static в Java. Это ключевое слово, которое в основном помогает нам оптимизировать память в программах, написанных на Java. Мы также увидели, как создавать статические переменные и методы на примерах. Наконец, мы поговорили о статических блоках, которые можно использовать для инициализации статических переменных. Статические блоки выполняются перед основным методом. Удачного кодирования!

Источник

Оцените статью