Статические методы
Статические методы можно вызывать не используя ссылку на объект. В этом их ключевое отличие от обычных методов класса. Для объявления таких методов используется ключевое слово static . На методы, объявленные как static , накладывается следующие ограничения:
- Они могут непосредственно вызывать только другие статические методы.
- Им непосредственно доступны только статические переменные.
- Они не могут делать ссылки типа this или super .
Пример использования статических методов:
public class StaticMethodClass < static int staticVar = 3; int nonStaticVar; public void nonStaticMethod() < System.out.println("Нестатический метод"); >static void staticMethod(int localVar) < System.out.println("localVar = " + localVar); System.out.println("staticVar = " + staticVar); //Нельзя обратиться к нестатической переменной из статического метода //System.out.println("nonStaticVar language-java">public class StaticMethodDemo < public static void main(String[] args) < StaticMethodClass.staticMethod(42); >>
- Статические переменные
- Статический блок
- Java static import
- Задания
Trustpilot
Комментарии
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.
Разница между статическими и нестатистическими методами Java
Статический метод принадлежит классу, а нестатический метод принадлежит объекту класса. Статические методы полезны, если у вас есть только один экземпляр, в котором вы собираетесь использовать этот метод, и вам не нужны несколько копий (объектов). Нестатические методы используются, если вы собираетесь использовать свой метод для создания нескольких копий.
Статический пример
public class TestClass < public static void main(String[] args) < display(); // здесь нет объекта, потому что отображение является статическим методом >public static void display() < System.out.println("Call from static method"); >>
Нестатический пример
public class TestClass < public static void main(String[] args) < TestClass tc = new TestClass(); tc.display(); // объект создается здесь, потому что отображение - это нестатический метод >public void display() < System.out.println("Call from non-static method"); >>
Однако статический метод можно назвать как классом, так и объектом класса. Статический метод может иметь доступ только к статическим членам. Нестатический метод может иметь доступ как к статическим, так и к нестационарным элементам, поскольку в момент вызова статического метода класс не может быть создан.
(4 оценок, среднее: 3,25 из 5)
Статические и нестатические методы в Java
Статические и нестатические методы — это два разных типа методов в Java, которые имеют разные свойства и поведение. В этом посте мы объясним, что это за два типа методов, чем они отличаются друг от друга и когда их использовать в нашем коде.
1. Обзор статических методов
Статический метод — это метод, принадлежащий самому классу, а не какому-либо конкретному объекту или экземпляру этого класса. Мы можем думать о статическом методе как об общем поведении, свойственном всем объектам этого класса, независимо от их индивидуальных характеристик. Например, Math.sqrt() — это статический метод, который вычисляет квадратный корень числа, и его можно вызвать без создания Math объект.
Чтобы объявить статический метод в Java, нам нужно использовать ключевое слово static перед типом возвращаемого значения метода. Чтобы вызвать статический метод в Java, нам нужно использовать имя класса, за которым следует точка. (.) а затем имя метода. Нам не нужно создать объект класса для вызова статического метода. Например:
class MathUtils < // Статический метод, возвращающий сумму двух чисел public static int sum ( int x , int y ) < return x + y ; class Main < public static void main ( String [ ] args ) < // Вызов статического метода sum() из класса MathUtils int result = MathUtils . sum ( 5 , 10 ) ; System . out . println ( result ) ; // Печатает 15
Статический метод имеет следующие характеристики:
- Он может получить доступ только к статическим переменным и другим статическим методам внутри того же класса. Он не может напрямую обращаться к нестатическим переменным или методам.
- Его можно переопределить другим статическим методом в подклассе, но это не считается полиморфизмом.
- Он не может использовать ключевые слова this или super, поскольку они относятся к текущему объекту или родительскому объекту, которые не существуют для статического метода.
2. Обзор нестатических методов
Нестатический метод — это метод, принадлежащий каждому объекту или экземпляру класса, а не самому классу. Мы можем думать о нестатическом методе как о поведении, специфичном для экземпляра, которое зависит от состояния или атрибутов объекта, который его вызывает.
Нестатический метод можно вызвать только путем создания объекта класса, используя ссылку на объект, за которой следует имя метода. Например, String.toUpperCase() — это нестатический метод, преобразующий строку в верхний регистр, и его можно вызвать только путем создания String объект.
Чтобы объявить нестатический метод в Java, нам не нужно использовать какое-либо ключевое слово перед типом возвращаемого значения метода. По умолчанию каждый метод в Java нестатический, если не указано иное. Чтобы вызвать нестатический метод в Java, нам нужно создать объект класса, используя новое ключевое слово, а затем использовать ссылку на объект, за которой следует точка. (.) а затем имя метода. Например:
class Person < // Переменные экземпляра private String name ; private int age ; // Конструктор public Person ( String name , int age ) < this . name = name ; this . age = age ; // Нестатический метод, который печатает приветственное сообщение public void greet ( ) < System . out . println ( "Hello, my name is " + name + " and I am " + age + " years old." ) ; class Main < public static void main ( String [ ] args ) < // Создание двух объектов класса Person Person alice = new Person ( "Aaron" , 20 ) ; Person bob = new Person ( "Bella" , 25 ) ; // Вызов нестатического метода Greeting из каждого объекта alice . greet ( ) ; // Печатает «Здравствуйте, меня зовут Аарон, мне 20 лет». bob . greet ( ) ; // Печатает «Здравствуйте, меня зовут Белла, мне 25 лет».
Нестатический метод имеет следующие характеристики:
- Он может получить доступ к обоим статические и нестатические переменные и методы внутри одного класса. Он также может получить доступ к нестатическим переменным и методам родительского класса посредством наследования.
- Его можно переопределить другим нестатическим методом в подклассе, и это считается полиморфизмом.
- Он может использовать ключевое слово this для ссылки на текущий объект и super для ссылки на родительский объект.
3. Различия между статическими и нестатическими методами
Теперь, когда мы увидели, что такое статические и нестатические методы в Java, давайте суммируем некоторые их ключевые различия:
- Статический метод принадлежит самому классу, а нестатический метод принадлежит каждому экземпляру класса. Следовательно, статический метод можно вызвать напрямую, не создавая экземпляр класса, а для вызова нестатического метода необходим объект.
- Статические методы не могут получить доступ к нестатическим переменным-членам (также известным как переменные-члены экземпляра) без создания экземпляра своего класса. Статические методы могут получать доступ только к статическим переменным, тогда как нестатические методы могут обращаться как к статическим, так и к нестатическим переменным.
- Как и нестатические переменные-члены, мы не можем получить доступ к какому-либо нестатическому методу из статического метода без создания экземпляра его класса. С другой стороны, мы можем получить доступ к статическому методу как из статических, так и из нестатических методов Java.
- Статический метод использует раннее связывание (или связывание во время компиляции), тогда как нестатический метод требует связывания во время выполнения. Именно по этой причине мы можем вызвать статический метод, не создавая экземпляра.
- Мы не можем переопределить статический метод в Java при переопределении нестатического метода. Это связано с тем, что для переопределения требуется привязка во время выполнения (полиморфизм), а статические методы связываются компилятором.
- Мы не можем использовать это и супер-ключевые слова внутри статического метода, поскольку они связаны с конкретным экземпляром.
- Статические методы уменьшают объем памяти приложения. Это связано с тем, что память выделяется для статического метода только один раз во время загрузки класса. Напротив, для нестатического метода память выделяется каждый раз при вызове метода.
- Статические методы объявляются с использованием ключевого слова static, а нестатические методы объявляются без ключевого слова.
- Статические методы вызываются с использованием имени класса, за которым следует точка. (.) а затем имя метода, тогда как нестатические методы вызываются с использованием ссылки на объект, за которой следует точка (.) а затем имя метода.
- Статические методы имеют глобальную область видимости и доступны из любого места программы, тогда как нестатические методы имеют локальную область видимости и доступны только через объект класса.
- Статические методы обычно используются для служебных методов, констант или переменных, которые не являются специфичными для отдельных экземпляров, тогда как нестатические методы используются для поведения, специфичного для экземпляра, поскольку они содержат данные, специфичные для каждого объекта.
4. Когда их использовать в нашем коде?
Как статические, так и нестатические методы имеют свои преимущества и недостатки, и мы должны использовать их в соответствии с нашими потребностями и предпочтениями. Вот несколько общих рекомендаций о том, когда их использовать в нашем коде:
- Используйте статические методы, когда нам нужно выполнять операции, которые зависят не от состояния или поведения отдельных объектов, а от некоторой общей логики или постоянных значений. Например, служебные методы, математические функции или константы.
- Используйте нестатические методы, когда нам нужно выполнять операции, которые зависят от состояния или поведения отдельных объектов, поскольку они содержат данные, специфичные для каждого объекта. Например, переменные экземпляра, геттеры и сеттеры или бизнес-логика.
- Используйте статические методы, когда нам нужно получить доступ или изменить статические переменные или другие статические методы внутри одного класса, поскольку они используются всеми объектами класса.
- Используйте нестатические методы, когда нам нужно получить доступ или изменить нестатические переменные или другие нестатические методы внутри того же класса или посредством наследования, поскольку они уникальны для каждого объекта класса.
Вот и все о статических и нестатических методах Java.
Также см:
Как вызвать нестатический метод в статическом в Java?
Здравствуйте! Создал нестатический метод logger . Он считывает стэк ошибки , вызываемый при каком-либо Exception 'е , и выводит в графический интерфейс. Так как этот метод нестатический , вызвать его из статического метода нельзя. Объявить его статичным нельзя, так как я использую методы setContentPane и setSize , которые также не статичны. Что посоветуете сделать?
Отслеживать
470 5 5 серебряных знаков 11 11 бронзовых знаков
задан 27 июл 2014 в 16:41
TheCoolKuid TheCoolKuid
75 1 1 золотой знак 1 1 серебряный знак 13 13 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В статическом методе создать класс и вызвать из созданного класса нестатический метод. Примерно так:
class ClassName < public ClassName()< >public static sMethod() < new ClassName().nsMethod(); >public nsMethod() < println('Не статический метод') >>
Отслеживать
ответ дан 27 июл 2014 в 16:44
3,676 2 2 золотых знака 36 36 серебряных знаков 78 78 бронзовых знаков
Если создать экземпляр класса, можно пользоваться его нестатическими методами из статического метода:
public class Main < public static void main(String[] args) < int[] numbers = ; // создаем экземпляр, чтоб вызывать нестатический метод Main main = new Main(); System.out.println(main.minFromArray(numbers)); > // наш нестатический метод: public Integer minFromArray(int[] numbers) < var min = Arrays.stream(numbers).min().getAsInt(); return min; >>
Отслеживать
ответ дан 28 янв в 8:27
1 2 2 бронзовых знака
- java
- ооп
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
