Главная / Веб-программирование / Ключевое слово static в Java

Ключевое слово static в Java

В Java static ключевое слово используется для управления памятью. Его можно применять с переменными, методами, блоками и внутренними классами. В объявлении static относится к классу, а не экземпляру класса.

Статическим может быть:

  • переменная (переменная класса);
  • метод (метод класса);
  • блок;
  • внутренний класс.

1) Статическая переменная Java

  • Статическая переменная может использоваться для обозначения общего свойства всех объектов (которое не является уникальным для каждого объекта), например название компании, колледжа и т. д.
  • Статическая переменная задействует память только один раз во время загрузки класса.

Преимущества статической переменной

Java static переменная не загружает память.

Пример, в котором не используется статическая переменная

class Student{
int rollno;
String name;
String college="ITS";
}

Предположим, что в колледже 500 студентов. Класс Student будут задействовать память каждый раз при создании объекта. У всех студентов есть уникальное rollno и name. А college — это общее свойство для всех объектов. Если сделать его статическим, то поле будет задействовать память только один раз.

Статическое свойство Java является общим для всех объектов.

Пример статической переменной

//Программа со статической переменной

class Student8{
int rollno;
String name;
static String college ="ITS";

Student8(int r,String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);}

public static void main(String args[]){
Student8 s1 = new Student8(111,"Karan");
Student8 s2 = new Student8(222,"Aryan");

s1.display();
s2.display();
}
}

Проверить сейчас

Вывод:111 Karan ITS
222 Aryan ITSКлючевое слово static в Java

Программа подсчета без статической переменной

В этом примере мы создаем Java static переменную count, которая увеличивается в конструкторе. Поскольку переменная экземпляра задействует память только во время создания объекта, то каждый объект ее копию. Поэтому при увеличении переменной он не будет влиять на другие объекты. Каждый объект получит значение 1 в переменной count.

class Counter{
int count=0;//использует память при создании экземпляра

Counter(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();

}
}

Проверить сейчас

Вывод: 1
1
1

Программа подсчета со статической переменной

Java static переменная задействует память только один раз. Если какой-либо объект изменяет значение статической переменной, она сохраняет свое значение.

class Counter2{
static int count=0;//использует память только один раз и сохраняет значение переменной

Counter2(){
count++;
System.out.println(count);
}

public static void main(String args[]){

Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();

}
}

Проверить сейчас

Вывод: 1
2
3

2) Статический метод Java

Если ключевое слово static применяется в объявлении метода, то это static method Java.

  • Статический метод относится к классу, а не к объекту класса;
  • Статический метод можно вызывать без создания экземпляра класса;
  • Статический метод может получать доступ к статическому члену и изменять его значение.

Пример статического метода

//Программа изменяет общее свойство всех объектов (статическое поле).

class Student9{
int rollno;
String name;
static String college = "ITS";

static void change(){
college = "BBDIT";
}

Student9(int r, String n){
rollno = r;
name = n;
}

void display (){System.out.println(rollno+" "+name+" "+college);}

public static void main(String args[]){
Student9.change();

Student9 s1 = new Student9 (111,"Karan");
Student9 s2 = new Student9 (222,"Aryan");
Student9 s3 = new Student9 (333,"Sonoo");

s1.display();
s2.display();
s3.display();
}
}

Проверить сейчас

Вывод: 111 Karan BBDIT
222 Aryan BBDIT
333 Sonoo BBDIT

Другой пример Java static метода, выполняющего обычный расчет

//Программа для получения куба заданного числа статическим методом

class Calculate{
static int cube(int x){
return x*x*x;
}

public static void main(String args[]){
int result=Calculate.cube(5);
System.out.println(result);
}
}

Проверить сейчас

Вывод: 125

Ограничения для статического метода

Существует два основных ограничения для статического метода:

  • Статический метод не может использовать нестатические члены или напрямую вызывать нестатические методы;
  • this и super нельзя использовать в статическом контексте.
  • class A{
    int a=40;//нестатический

    public static void main(String args[]){
    System.out.println(a);
    }
    }

    Проверить сейчас

    Вывод: Compile Time Error (ошибка времени компиляции)

    Вопрос: почему основной main метод Java является статическим?

    Ответ: поскольку объект не является обязательным для вызова статического метода, если он был нестатическим. Виртуальная машина сначала вызывает Java public static void main(), что приводит к выделению дополнительной памяти.

    3) Статический блок Java

    • Применяется для инициализации статического члена;
    • Выполняется перед методом main во время загрузки класса.

    Пример статического блока

    class A2{
    static{System.out.println("static block is invoked");}
    public static void main(String args[]){
    System.out.println("Hello main");
    }
    }

    Проверить сейчас

    Вывод: static block is invoked
    Hello main

    Вопрос: можно ли выполнить программу без метода main()?

    Ответ: да, один из способов — применение модификатора static в Java, но в предыдущей версии JDK, а не в JDK 1.7.

    class A3{
    static{
    System.out.println("static block is invoked");
    System.exit(0);
    }
    }

    Проверить сейчас

    Вывод: static block is invoked (если не JDK7)

    В JDK7 и выше вывод будет следующим:

    Output:Error: Main method not found in class A3, please define the main method as (метод main не найден в классе А3, определите метод main как):

    public static void main(String[] args)

    Перевод статьи “Java static keyword” был подготовлен дружной командой проекта Сайтостроение от А до Я.

    О нас seoexpert

    продвижение сайта,seo оптимизация,поисковое продвижение,раскрутка сайтов,поисковая оптимизация,продвижение сайта в гугл,seo раскрутка,продвижение сайтов в яндексе,продвижение сайта в google,продвижение сайтов в топ 10,Оптимизация и продвижение сайтов,услуги продвижения сайта,заказать продвижение,продвижение сайтов в топ,сео раскрутка сайта

    Смотрите также

    Определение типа данных double в C, C++ и C#

    Double – 64-разрядная переменная с плавающей запятой Тип double — это основной тип данных, который ...